Commit bc65fac558505ac0b854d2374c129f7e21b119ba
Committed by
Carlos Morais
1 parent
e03ad5db
Exists in
master
and in
28 other branches
[mezuro] Put attribute xsi:type on xml when needed
Showing
4 changed files
with
47 additions
and
19 deletions
Show diff stats
plugins/mezuro/lib/kalibro/entities/entity.rb
| @@ -2,7 +2,7 @@ class Kalibro::Entities::Entity | @@ -2,7 +2,7 @@ class Kalibro::Entities::Entity | ||
| 2 | 2 | ||
| 3 | def self.from_hash(hash) | 3 | def self.from_hash(hash) |
| 4 | entity = self.new | 4 | entity = self.new |
| 5 | - hash.each { |field, value| entity.set(field, value) } | 5 | + hash.each { |field, value| entity.set(field, value) if field != :attributes!} |
| 6 | entity | 6 | entity |
| 7 | end | 7 | end |
| 8 | 8 | ||
| @@ -24,22 +24,16 @@ class Kalibro::Entities::Entity | @@ -24,22 +24,16 @@ class Kalibro::Entities::Entity | ||
| 24 | fields.each do |field| | 24 | fields.each do |field| |
| 25 | field_value = self.get(field) | 25 | field_value = self.get(field) |
| 26 | hash[field] = convert_to_hash(field_value) if ! field_value.nil? | 26 | hash[field] = convert_to_hash(field_value) if ! field_value.nil? |
| 27 | -# TODO | ||
| 28 | -# if field_value is object | ||
| 29 | -# hash[:attributes!] += {field.to_sym => | ||
| 30 | -# {'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | ||
| 31 | -# 'xsi:type' => 'kalibro:' + field_value_type + 'Xml' } } | ||
| 32 | -# end | 27 | + if need_xml_type?(field_value) |
| 28 | + hash = {:attributes! => {}}.merge(hash) | ||
| 29 | + hash[:attributes!][field.to_sym] = { | ||
| 30 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | ||
| 31 | + 'xsi:type' => 'kalibro:' + xml_class_name(field_value) } | ||
| 32 | + end | ||
| 33 | end | 33 | end |
| 34 | hash | 34 | hash |
| 35 | end | 35 | end |
| 36 | 36 | ||
| 37 | - def convert_to_hash(value) | ||
| 38 | - return value.collect { |element| convert_to_hash(element) } if value.kind_of?(Array) | ||
| 39 | - return value.to_hash if value.kind_of?(Kalibro::Entities::Entity) | ||
| 40 | - value | ||
| 41 | - end | ||
| 42 | - | ||
| 43 | def ==(other) | 37 | def ==(other) |
| 44 | begin | 38 | begin |
| 45 | fields.each.inject(true) { |equal, field| equal && (self.get(field) == other.get(field)) } | 39 | fields.each.inject(true) { |equal, field| equal && (self.get(field) == other.get(field)) } |
| @@ -48,6 +42,8 @@ class Kalibro::Entities::Entity | @@ -48,6 +42,8 @@ class Kalibro::Entities::Entity | ||
| 48 | end | 42 | end |
| 49 | end | 43 | end |
| 50 | 44 | ||
| 45 | + protected | ||
| 46 | + | ||
| 51 | def fields | 47 | def fields |
| 52 | instance_variable_names.each.collect { |variable| variable.to_s.sub(/@/, '').to_sym } | 48 | instance_variable_names.each.collect { |variable| variable.to_s.sub(/@/, '').to_sym } |
| 53 | end | 49 | end |
| @@ -56,4 +52,21 @@ class Kalibro::Entities::Entity | @@ -56,4 +52,21 @@ class Kalibro::Entities::Entity | ||
| 56 | send("#{field}") | 52 | send("#{field}") |
| 57 | end | 53 | end |
| 58 | 54 | ||
| 55 | + def convert_to_hash(value) | ||
| 56 | + return value.collect { |element| convert_to_hash(element) } if value.kind_of?(Array) | ||
| 57 | + return value.to_hash if value.kind_of?(Kalibro::Entities::Entity) | ||
| 58 | + value | ||
| 59 | + end | ||
| 60 | + | ||
| 61 | + def need_xml_type?(value) | ||
| 62 | + value.is_a?(Kalibro::Entities::Entity) and value.class.superclass != Kalibro::Entities::Entity | ||
| 63 | + end | ||
| 64 | + | ||
| 65 | + def xml_class_name(entity) | ||
| 66 | + xml_name = entity.class.name | ||
| 67 | + xml_name["Kalibro::Entities::"] = "" | ||
| 68 | + xml_name[0..0] = xml_name[0..0].downcase | ||
| 69 | + xml_name + "Xml" | ||
| 70 | + end | ||
| 71 | + | ||
| 59 | end | 72 | end |
plugins/mezuro/test/fixtures/compound_metric_with_error_fixtures.rb
| @@ -10,7 +10,10 @@ class CompoundMetricWithErrorFixtures | @@ -10,7 +10,10 @@ class CompoundMetricWithErrorFixtures | ||
| 10 | end | 10 | end |
| 11 | 11 | ||
| 12 | def self.create_hash | 12 | def self.create_hash |
| 13 | - {:metric => CompoundMetricFixtures.sc_hash, :error => ErrorFixtures.create_hash} | 13 | + {:metric => CompoundMetricFixtures.sc_hash, :error => ErrorFixtures.create_hash, |
| 14 | + :attributes! => {:metric => { | ||
| 15 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | ||
| 16 | + 'xsi:type' => 'kalibro:compoundMetricXml' }}} | ||
| 14 | end | 17 | end |
| 15 | 18 | ||
| 16 | end | 19 | end |
plugins/mezuro/test/fixtures/metric_configuration_fixtures.rb
| @@ -25,12 +25,18 @@ class MetricConfigurationFixtures | @@ -25,12 +25,18 @@ class MetricConfigurationFixtures | ||
| 25 | 25 | ||
| 26 | def self.amloc_configuration_hash | 26 | def self.amloc_configuration_hash |
| 27 | {:metric => NativeMetricFixtures.amloc_hash, :code => 'amloc', :weight => 1.0, | 27 | {:metric => NativeMetricFixtures.amloc_hash, :code => 'amloc', :weight => 1.0, |
| 28 | - :aggregation_form => 'AVERAGE', :range => | ||
| 29 | - [RangeFixtures.amloc_excellent_hash, RangeFixtures.amloc_bad_hash]} | 28 | + :aggregation_form => 'AVERAGE', |
| 29 | + :range => [RangeFixtures.amloc_excellent_hash, RangeFixtures.amloc_bad_hash], | ||
| 30 | + :attributes! => {:metric => { | ||
| 31 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | ||
| 32 | + 'xsi:type' => 'kalibro:nativeMetricXml' }}} | ||
| 30 | end | 33 | end |
| 31 | 34 | ||
| 32 | def self.sc_configuration_hash | 35 | def self.sc_configuration_hash |
| 33 | - {:metric => CompoundMetricFixtures.sc_hash, :code => 'sc', :weight => 1.0, :aggregation_form => 'AVERAGE'} | 36 | + {:metric => CompoundMetricFixtures.sc_hash, :code => 'sc', :weight => 1.0, :aggregation_form => 'AVERAGE', |
| 37 | + :attributes! => {:metric => { | ||
| 38 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | ||
| 39 | + 'xsi:type' => 'kalibro:compoundMetricXml' }}} | ||
| 34 | end | 40 | end |
| 35 | 41 | ||
| 36 | end | 42 | end |
plugins/mezuro/test/fixtures/metric_result_fixtures.rb
| @@ -23,11 +23,17 @@ class MetricResultFixtures | @@ -23,11 +23,17 @@ class MetricResultFixtures | ||
| 23 | 23 | ||
| 24 | def self.amloc_result_hash | 24 | def self.amloc_result_hash |
| 25 | {:metric => NativeMetricFixtures.amloc_hash, :value => 0.0, :descendent_result => [40.0, 42.0], | 25 | {:metric => NativeMetricFixtures.amloc_hash, :value => 0.0, :descendent_result => [40.0, 42.0], |
| 26 | - :range => RangeFixtures.amloc_excellent_hash} | 26 | + :range => RangeFixtures.amloc_excellent_hash, |
| 27 | + :attributes! => {:metric => { | ||
| 28 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | ||
| 29 | + 'xsi:type' => 'kalibro:nativeMetricXml' }}} | ||
| 27 | end | 30 | end |
| 28 | 31 | ||
| 29 | def self.sc_result_hash | 32 | def self.sc_result_hash |
| 30 | - {:metric => CompoundMetricFixtures.sc_hash, :value => 1.0, :descendent_result => [2.0, 42.0]} | 33 | + {:metric => CompoundMetricFixtures.sc_hash, :value => 1.0, :descendent_result => [2.0, 42.0], |
| 34 | + :attributes! => {:metric => { | ||
| 35 | + 'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance', | ||
| 36 | + 'xsi:type' => 'kalibro:compoundMetricXml' }}} | ||
| 31 | end | 37 | end |
| 32 | 38 | ||
| 33 | end | 39 | end |