configuration_content.rb
3.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
class MezuroPlugin::ConfigurationContent < Article
validate_on_create :validate_configuration_name
settings_items :configuration_id
before_save :send_configuration_to_service
after_destroy :remove_configuration_from_service
def self.short_description
'Mezuro configuration'
end
def self.description
'Set of metric configurations to interpret a Kalibro project'
end
include ActionView::Helpers::TagHelper
def to_html(options = {})
lambda do
render :file => 'content_viewer/show_configuration.rhtml'
end
end
def kalibro_configuration #Can't be just "configuration", method name exists somewhere in noosfero
begin
@configuration ||= Kalibro::Configuration.find(self.configuration_id)
rescue Exception => exception
errors.add_to_base(exception.message)
@configuration = nil
end
@configuration
end
def configuration_names_and_ids
begin
all_configurations = Kalibro::Configuration.all
all_names_and_ids = all_configurations.map { |configuration| [configuration.name, configuration.id] }
[["None", -1]] + (all_names_and_ids.sort { |x,y| x.first.downcase <=> y.first.downcase })
rescue Exception => exception
errors.add_to_base(exception.message)
[["None", -1]]
end
end
def description=(value)
@description=value
end
def description
begin
@description ||= kalibro_configuration.description
rescue
@description = ""
end
@description
end
def configuration_to_clone_id
begin
@configuration_to_clone_id
rescue Exception => exception
nil
end
end
def configuration_to_clone_id=(value)
@configuration_to_clone_id = (value == -1) ? nil : value
end
def metric_configurations
begin
@metric_configurations ||= Kalibro::MetricConfiguration.metric_configurations_of(configuration_id)
rescue Exception => error
errors.add_to_base(error.message)
@metric_configurations = []
end
@metric_configurations
end
def metric_configurations=(value)
@metric_configurations = value.kind_of?(Array) ? value : [value]
@metric_configurations = @metric_configurations.map { |element| to_metric_configuration(element) }
end
private
def self.to_metric_configuration value
value.kind_of?(Hash) ? Kalibro::MetricConfiguration.new(value) : value
end
def validate_configuration_name
existing = configuration_names_and_ids.map { |a| a.first.downcase}
if existing.include?(name.downcase)
errors.add_to_base("Configuration name already exists in Kalibro")
end
end
def remove_configuration_from_service
kalibro_configuration.destroy unless kalibro_configuration.nil?
end
def send_configuration_to_service
attributes = {:id => configuration_id, :name => name, :description => description}
created_configuration = Kalibro::Configuration.create attributes
self.configuration_id = created_configuration.id
clone_configuration if cloning_configuration?
end
def cloning_configuration?
!configuration_to_clone_id.nil?
end
def clone_configuration
metric_configurations_to_clone ||= Kalibro::MetricConfiguration.metric_configurations_of(configuration_to_clone_id)
clone_metric_configurations metric_configurations_to_clone
end
def clone_metric_configurations metric_configurations_to_clone
metric_configurations_to_clone.each do |metric_configuration|
clonned_metric_configuration_id = metric_configuration.id
metric_configuration.id = nil
metric_configuration.configuration_id = self.configuration_id
metric_configuration.save
clone_ranges clonned_metric_configuration_id, metric_configuration.id
end
end
def clone_ranges clonned_metric_configuration_id, new_metric_configuration_id
Kalibro::Range.ranges_of(clonned_metric_configuration_id).each do |range|
range.id = nil
range.save new_metric_configuration_id
end
end
end