spyke 1.3.0 → 1.4.0
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.
- checksums.yaml +4 -4
- data/lib/spyke/associations/has_many.rb +9 -0
- data/lib/spyke/version.rb +1 -1
- data/test/associations_test.rb +17 -8
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 18786d5a16e1af110485c81e9c7174507bad9ffc
         | 
| 4 | 
            +
              data.tar.gz: a12316a477c6c9baf8dc95985ac0c378279cc88f
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: caa7363096f246e4a8547499545b288262c6cae186f6130071284619d7f7ccd1f3ddddaa48f840134d7748e88b2c670a532759dcc161e6d21658809bd538529d
         | 
| 7 | 
            +
              data.tar.gz: 02a3ece5fbcba5c35723b40459cb85593c5e72be3a3ada1d1840a1b628ec08c9aca6a2bfeb20086aa6c55526cfa673dec54adfa88c375b9765cdcd398d7fae96
         | 
| @@ -13,6 +13,7 @@ module Spyke | |
| 13 13 |  | 
| 14 14 | 
             
                  def assign_nested_attributes(collection)
         | 
| 15 15 | 
             
                    collection = collection.values if collection.is_a?(Hash)
         | 
| 16 | 
            +
                    replace_existing! unless primary_keys_present?
         | 
| 16 17 |  | 
| 17 18 | 
             
                    collection.each do |attributes|
         | 
| 18 19 | 
             
                      if existing = find_existing_attributes(attributes.with_indifferent_access[:id])
         | 
| @@ -29,6 +30,14 @@ module Spyke | |
| 29 30 | 
             
                      embedded_attributes.to_a.find { |attr| attr[:id] && attr[:id].to_s == id.to_s }
         | 
| 30 31 | 
             
                    end
         | 
| 31 32 |  | 
| 33 | 
            +
                    def primary_keys_present?
         | 
| 34 | 
            +
                      embedded_attributes && embedded_attributes.any? { |attr| attr.has_key?(:id) }
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    def replace_existing!
         | 
| 38 | 
            +
                      parent.attributes[name] = []
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
             | 
| 32 41 | 
             
                    def add_to_parent(record)
         | 
| 33 42 | 
             
                      parent.attributes[name] ||= []
         | 
| 34 43 | 
             
                      parent.attributes[name] << record.attributes
         | 
    
        data/lib/spyke/version.rb
    CHANGED
    
    
    
        data/test/associations_test.rb
    CHANGED
    
    | @@ -242,21 +242,30 @@ module Spyke | |
| 242 242 | 
             
                  assert_equal %w{ starter sauce }, recipe.groups.map(&:title)
         | 
| 243 243 | 
             
                end
         | 
| 244 244 |  | 
| 245 | 
            -
                def  | 
| 245 | 
            +
                def test_nested_attributes_replacing_existing_when_no_ids_present
         | 
| 246 246 | 
             
                  recipe = Recipe.new(groups_attributes: [{ title: 'starter' }, { title: 'sauce' }])
         | 
| 247 247 | 
             
                  recipe.attributes = { groups_attributes: [{ title: 'flavor' }] }
         | 
| 248 | 
            -
                  assert_equal %w{  | 
| 248 | 
            +
                  assert_equal %w{ flavor }, recipe.groups.map(&:title)
         | 
| 249 249 | 
             
                end
         | 
| 250 250 |  | 
| 251 | 
            -
                def  | 
| 251 | 
            +
                def test_nested_attributes_merging_with_existing_when_ids_present?
         | 
| 252 252 | 
             
                  recipe = Recipe.new(groups_attributes: [{ id: 1, title: 'starter', description: 'nice' }, { id: 2, title: 'sauce', description: 'spicy' }])
         | 
| 253 253 | 
             
                  recipe.attributes = { groups_attributes: [{ 'id' => '2', 'title' => 'flavor' }] }
         | 
| 254 254 | 
             
                  assert_equal %w{ starter flavor }, recipe.groups.map(&:title)
         | 
| 255 255 | 
             
                  assert_equal %w{ nice spicy }, recipe.groups.map(&:description)
         | 
| 256 256 | 
             
                end
         | 
| 257 257 |  | 
| 258 | 
            -
                def  | 
| 259 | 
            -
                  params = { groups_attributes: [{ id: 1, ingredient_attributes: [{  | 
| 258 | 
            +
                def test_deeply_nested_attributes_using_array_style
         | 
| 259 | 
            +
                  params = { groups_attributes: [{ id: 1, ingredient_attributes: [{ title: 'fish' }, { title: 'sauce' } ]}] }
         | 
| 260 | 
            +
                  recipe = Recipe.new(params)
         | 
| 261 | 
            +
                  recipe.attributes = params
         | 
| 262 | 
            +
                  assert_equal 1, recipe.groups.size
         | 
| 263 | 
            +
                  skip "ingredients don't get built properly it seems?"
         | 
| 264 | 
            +
                  assert_equal 'fish', recipe.groups.first.ingredients.first.title
         | 
| 265 | 
            +
                end
         | 
| 266 | 
            +
             | 
| 267 | 
            +
                def test_deeply_nested_attributes_with_no_ids
         | 
| 268 | 
            +
                  params = { groups_attributes: [{ ingredient_attributes: [{ title: 'fish' }, { title: 'sauce' }]}] }
         | 
| 260 269 | 
             
                  recipe = Recipe.new(params)
         | 
| 261 270 | 
             
                  recipe.attributes = params
         | 
| 262 271 | 
             
                  assert_equal 1, recipe.groups.size
         | 
| @@ -267,9 +276,9 @@ module Spyke | |
| 267 276 | 
             
                  assert_equal %w{ starter sauce }, recipe.groups.map(&:title)
         | 
| 268 277 | 
             
                end
         | 
| 269 278 |  | 
| 270 | 
            -
                def  | 
| 271 | 
            -
                  recipe = Recipe.new(groups_attributes: { '0' => { ingredients_attributes: { '0' => { name: 'Salt' } } } })
         | 
| 272 | 
            -
                  assert_equal %w{ Salt }, recipe.ingredients.map(&:name)
         | 
| 279 | 
            +
                def test_deeply_nested_attributes_with_blank_ids
         | 
| 280 | 
            +
                  recipe = Recipe.new(groups_attributes: { '0' => { ingredients_attributes: { '0' => { id: '', name: 'Salt' }, '1' => { id: '', name: 'Pepper' } } } })
         | 
| 281 | 
            +
                  assert_equal %w{ Salt Pepper }, recipe.ingredients.map(&:name)
         | 
| 273 282 | 
             
                end
         | 
| 274 283 |  | 
| 275 284 | 
             
                def test_reflect_on_association
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: spyke
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.4.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Jens Balvig
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015-01- | 
| 11 | 
            +
            date: 2015-01-06 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         |