lightningdb-happymapper 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/happymapper.gemspec +3 -3
 - data/lib/happymapper/item.rb +31 -18
 - data/spec/fixtures/family_tree.xml +15 -1
 - data/spec/happymapper_spec.rb +21 -5
 - metadata +3 -2
 
    
        data/happymapper.gemspec
    CHANGED
    
    | 
         @@ -2,11 +2,11 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       4 
4 
     | 
    
         
             
              s.name = %q{happymapper}
         
     | 
| 
       5 
     | 
    
         
            -
              s.version = "0.3. 
     | 
| 
      
 5 
     | 
    
         
            +
              s.version = "0.3.2"
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
              s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       8 
     | 
    
         
            -
              s.authors = ["John Nunemaker"]
         
     | 
| 
       9 
     | 
    
         
            -
              s.date = %q{2009- 
     | 
| 
      
 8 
     | 
    
         
            +
              s.authors = ["John Nunemaker", "Dave Bolton"]
         
     | 
| 
      
 9 
     | 
    
         
            +
              s.date = %q{2009-03-17}
         
     | 
| 
       10 
10 
     | 
    
         
             
              s.description = %q{object to xml mapping library}
         
     | 
| 
       11 
11 
     | 
    
         
             
              s.email = %q{nunemaker@gmail.com}
         
     | 
| 
       12 
12 
     | 
    
         
             
              s.extra_rdoc_files = ["lib/happymapper/attribute.rb", "lib/happymapper/element.rb", "lib/happymapper/item.rb", "lib/happymapper/version.rb", "lib/happymapper.rb", "README", "TODO"]
         
     | 
    
        data/lib/happymapper/item.rb
    CHANGED
    
    | 
         @@ -18,7 +18,7 @@ module HappyMapper 
     | 
|
| 
       18 
18 
     | 
    
         
             
                  self.type = type
         
     | 
| 
       19 
19 
     | 
    
         
             
                  #self.tag = o.delete(:tag) || name.to_s
         
     | 
| 
       20 
20 
     | 
    
         
             
                  self.tag = o[:tag] || name.to_s
         
     | 
| 
       21 
     | 
    
         
            -
                  self.options = o.merge(:name => self.name)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  self.options = { :single => true }.merge(o.merge(:name => self.name))
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
                  @xml_type = self.class.to_s.split('::').last.downcase
         
     | 
| 
       24 
24 
     | 
    
         
             
                end
         
     | 
| 
         @@ -120,29 +120,42 @@ module HappyMapper 
     | 
|
| 
       120 
120 
     | 
    
         
             
                    end
         
     | 
| 
       121 
121 
     | 
    
         | 
| 
       122 
122 
     | 
    
         
             
                    if element?
         
     | 
| 
       123 
     | 
    
         
            -
                       
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
                           
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
                              result.instance_eval <<-EOV
         
     | 
| 
       132 
     | 
    
         
            -
                                def value.#{xml_attribute.name}
         
     | 
| 
       133 
     | 
    
         
            -
                                  #{attribute_value.inspect}
         
     | 
| 
       134 
     | 
    
         
            -
                                end
         
     | 
| 
       135 
     | 
    
         
            -
                              EOV
         
     | 
| 
       136 
     | 
    
         
            -
                            end
         
     | 
| 
       137 
     | 
    
         
            -
                          end
         
     | 
| 
      
 123 
     | 
    
         
            +
                      if options[:single]
         
     | 
| 
      
 124 
     | 
    
         
            +
                        result = node.find_first(xpath(namespace))
         
     | 
| 
      
 125 
     | 
    
         
            +
                        if result
         
     | 
| 
      
 126 
     | 
    
         
            +
                          value = yield(result)
         
     | 
| 
      
 127 
     | 
    
         
            +
                          handle_attributes_option(result,value)
         
     | 
| 
      
 128 
     | 
    
         
            +
                          value
         
     | 
| 
      
 129 
     | 
    
         
            +
                        else
         
     | 
| 
      
 130 
     | 
    
         
            +
                          nil
         
     | 
| 
       138 
131 
     | 
    
         
             
                        end
         
     | 
| 
       139 
     | 
    
         
            -
                        value
         
     | 
| 
       140 
132 
     | 
    
         
             
                      else
         
     | 
| 
       141 
     | 
    
         
            -
                         
     | 
| 
      
 133 
     | 
    
         
            +
                        results = node.find(xpath(namespace)).collect do |result|
         
     | 
| 
      
 134 
     | 
    
         
            +
                          value = yield(result)
         
     | 
| 
      
 135 
     | 
    
         
            +
                          handle_attributes_option(result,value)
         
     | 
| 
      
 136 
     | 
    
         
            +
                          value
         
     | 
| 
      
 137 
     | 
    
         
            +
                        end
         
     | 
| 
      
 138 
     | 
    
         
            +
                        results
         
     | 
| 
       142 
139 
     | 
    
         
             
                      end
         
     | 
| 
       143 
140 
     | 
    
         
             
                    else
         
     | 
| 
       144 
141 
     | 
    
         
             
                      yield(node[tag])
         
     | 
| 
       145 
142 
     | 
    
         
             
                    end
         
     | 
| 
       146 
143 
     | 
    
         
             
                  end
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
                  def handle_attributes_option(result, value)
         
     | 
| 
      
 146 
     | 
    
         
            +
                    if options[:attributes].is_a?(Hash)
         
     | 
| 
      
 147 
     | 
    
         
            +
                      result.attributes.each do |xml_attribute|
         
     | 
| 
      
 148 
     | 
    
         
            +
                        if attribute_options = options[:attributes][xml_attribute.name.to_sym]
         
     | 
| 
      
 149 
     | 
    
         
            +
                          attribute_value = Attribute.new(xml_attribute.name.to_sym, *attribute_options).from_xml_node(result, namespace)
         
     | 
| 
      
 150 
     | 
    
         
            +
                          result.instance_eval <<-EOV
         
     | 
| 
      
 151 
     | 
    
         
            +
                            def value.#{xml_attribute.name}
         
     | 
| 
      
 152 
     | 
    
         
            +
                              #{attribute_value.inspect}
         
     | 
| 
      
 153 
     | 
    
         
            +
                            end
         
     | 
| 
      
 154 
     | 
    
         
            +
                          EOV
         
     | 
| 
      
 155 
     | 
    
         
            +
                        end
         
     | 
| 
      
 156 
     | 
    
         
            +
                      end
         
     | 
| 
      
 157 
     | 
    
         
            +
                    end
         
     | 
| 
      
 158 
     | 
    
         
            +
                  end
         
     | 
| 
       147 
159 
     | 
    
         
             
              end
         
     | 
| 
       148 
160 
     | 
    
         
             
            end
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
         @@ -2,6 +2,20 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            <familytree xmlns="http://api.familysearch.org/familytree/v1" xmlns:fsapi-v1="http://api.familysearch.org/v1" version="1.0.20071213.942" statusMessage="OK" statusCode="200">
         
     | 
| 
       3 
3 
     | 
    
         
             
            	<persons>
         
     | 
| 
       4 
4 
     | 
    
         
             
            		<person version="1199378491000" modified="2008-01-03T09:41:31-07:00" id="KWQS-BBQ">
         
     | 
| 
      
 5 
     | 
    
         
            +
                  <information>
         
     | 
| 
      
 6 
     | 
    
         
            +
                    <alternateIds>
         
     | 
| 
      
 7 
     | 
    
         
            +
                      <id>gedcom.1B5E3087E36D814FA9CBE0BE5B3721EA</id>
         
     | 
| 
      
 8 
     | 
    
         
            +
                      <id>KWQS-BB3</id>
         
     | 
| 
      
 9 
     | 
    
         
            +
                      <id>KWQS-W23</id>
         
     | 
| 
      
 10 
     | 
    
         
            +
                      <id>KWQS-W2S</id>
         
     | 
| 
      
 11 
     | 
    
         
            +
                      <id>KWQS-W29</id>
         
     | 
| 
      
 12 
     | 
    
         
            +
                      <id>KWQM-MMM</id>
         
     | 
| 
      
 13 
     | 
    
         
            +
                      <id>KWQS-W2Q</id>
         
     | 
| 
      
 14 
     | 
    
         
            +
                      <id>KWQS-BBQ</id>
         
     | 
| 
      
 15 
     | 
    
         
            +
                    </alternateIds>
         
     | 
| 
      
 16 
     | 
    
         
            +
                    <gender>Male</gender>
         
     | 
| 
      
 17 
     | 
    
         
            +
                    <living>false</living>
         
     | 
| 
      
 18 
     | 
    
         
            +
                  </information>
         
     | 
| 
       5 
19 
     | 
    
         
             
            		</person>
         
     | 
| 
       6 
20 
     | 
    
         
             
            	</persons>
         
     | 
| 
       7 
     | 
    
         
            -
            </familytree>
         
     | 
| 
      
 21 
     | 
    
         
            +
            </familytree>
         
     | 
    
        data/spec/happymapper_spec.rb
    CHANGED
    
    | 
         @@ -35,12 +35,26 @@ class Product 
     | 
|
| 
       35 
35 
     | 
    
         
             
            end
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
       37 
37 
     | 
    
         
             
            module FamilySearch
         
     | 
| 
      
 38 
     | 
    
         
            +
              class AlternateIds
         
     | 
| 
      
 39 
     | 
    
         
            +
                include HappyMapper
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                tag 'alternateIds'
         
     | 
| 
      
 42 
     | 
    
         
            +
                has_many :ids, String, :tag => 'id'
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              class Information
         
     | 
| 
      
 46 
     | 
    
         
            +
                include HappyMapper
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                has_one :alternateIds, AlternateIds
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
       38 
51 
     | 
    
         
             
              class Person
         
     | 
| 
       39 
52 
     | 
    
         
             
                include HappyMapper
         
     | 
| 
       40 
53 
     | 
    
         | 
| 
       41 
54 
     | 
    
         
             
                attribute :version, String
         
     | 
| 
       42 
55 
     | 
    
         
             
                attribute :modified, Time
         
     | 
| 
       43 
56 
     | 
    
         
             
                attribute :id, String
         
     | 
| 
      
 57 
     | 
    
         
            +
                has_one :information, Information
         
     | 
| 
       44 
58 
     | 
    
         
             
              end
         
     | 
| 
       45 
59 
     | 
    
         | 
| 
       46 
60 
     | 
    
         
             
              class Persons
         
     | 
| 
         @@ -542,14 +556,16 @@ describe HappyMapper do 
     | 
|
| 
       542 
556 
     | 
    
         
             
                track.tran_detail.cust_tran_id.should == '20090102-111321'
         
     | 
| 
       543 
557 
     | 
    
         
             
              end
         
     | 
| 
       544 
558 
     | 
    
         | 
| 
       545 
     | 
    
         
            -
               
     | 
| 
      
 559 
     | 
    
         
            +
              it "should parse family search xml" do
         
     | 
| 
       546 
560 
     | 
    
         
             
                tree = FamilySearch::FamilyTree.parse(fixture_file('family_tree.xml'))
         
     | 
| 
       547 
561 
     | 
    
         
             
                tree.version.should == '1.0.20071213.942'
         
     | 
| 
       548 
562 
     | 
    
         
             
                tree.status_message.should == 'OK'
         
     | 
| 
       549 
563 
     | 
    
         
             
                tree.status_code.should == '200'
         
     | 
| 
       550 
     | 
    
         
            -
                 
     | 
| 
       551 
     | 
    
         
            -
                 
     | 
| 
       552 
     | 
    
         
            -
                 
     | 
| 
       553 
     | 
    
         
            -
                 
     | 
| 
      
 564 
     | 
    
         
            +
                tree.persons.person.size.should == 1
         
     | 
| 
      
 565 
     | 
    
         
            +
                tree.persons.person.first.version.should == '1199378491000'
         
     | 
| 
      
 566 
     | 
    
         
            +
                tree.persons.person.first.modified.should == Time.utc(2008, 1, 3, 16, 41, 31) # 2008-01-03T09:41:31-07:00
         
     | 
| 
      
 567 
     | 
    
         
            +
                tree.persons.person.first.id.should == 'KWQS-BBQ'
         
     | 
| 
      
 568 
     | 
    
         
            +
                tree.persons.person.first.information.alternateIds.ids.should_not be_kind_of(String)
         
     | 
| 
      
 569 
     | 
    
         
            +
                tree.persons.person.first.information.alternateIds.ids.size.should == 8
         
     | 
| 
       554 
570 
     | 
    
         
             
              end
         
     | 
| 
       555 
571 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,15 +1,16 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: lightningdb-happymapper
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.3. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.3.2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors: 
         
     | 
| 
       7 
7 
     | 
    
         
             
            - John Nunemaker
         
     | 
| 
      
 8 
     | 
    
         
            +
            - Dave Bolton
         
     | 
| 
       8 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
            date: 2009- 
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2009-03-17 00:00:00 -07:00
         
     | 
| 
       13 
14 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       14 
15 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       15 
16 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     |