attribute_struct 0.1.6 → 0.1.8
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/CHANGELOG.md +4 -0
- data/Gemfile.lock +1 -1
- data/lib/attribute_struct/attribute_struct.rb +25 -7
- data/lib/attribute_struct/version.rb +1 -1
- data/test/specs/camel.rb +37 -0
- metadata +2 -3
- data/attribute_struct-0.1.4.gem +0 -0
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/Gemfile.lock
    CHANGED
    
    
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            class AttributeStruct < BasicObject
         | 
| 2 | 
            -
             | 
| 2 | 
            +
             | 
| 3 3 | 
             
              class << self
         | 
| 4 4 |  | 
| 5 5 | 
             
                # Global flag for camel cased keys
         | 
| @@ -28,18 +28,24 @@ class AttributeStruct < BasicObject | |
| 28 28 | 
             
                    if(defined?(Chef) || force_chef)
         | 
| 29 29 | 
             
                      require 'chef/mash'
         | 
| 30 30 | 
             
                      require 'chef/mixin/deep_merge'
         | 
| 31 | 
            +
                      @hash_loaded = :chef
         | 
| 31 32 | 
             
                    else
         | 
| 32 33 | 
             
                      require 'attribute_struct/attribute_hash'
         | 
| 34 | 
            +
                      @hash_loaded = :attribute_hash
         | 
| 33 35 | 
             
                    end
         | 
| 34 | 
            -
                    @hash_loaded = true
         | 
| 35 36 | 
             
                  end
         | 
| 36 37 | 
             
                end
         | 
| 37 38 |  | 
| 39 | 
            +
                def hashish
         | 
| 40 | 
            +
                  load_the_hash
         | 
| 41 | 
            +
                  @hash_loaded == :chef ? ::Mash : ::AttributeStruct::AttributeHash
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 38 44 | 
             
              end
         | 
| 39 45 |  | 
| 40 46 | 
             
              # Flag for camel cased keys
         | 
| 41 47 | 
             
              attr_reader :_camel_keys
         | 
| 42 | 
            -
             | 
| 48 | 
            +
             | 
| 43 49 | 
             
              def initialize(*args, &block)
         | 
| 44 50 | 
             
                _klass.load_the_hash
         | 
| 45 51 | 
             
                @_camel_keys = _klass.camel_keys
         | 
| @@ -182,7 +188,16 @@ class AttributeStruct < BasicObject | |
| 182 188 | 
             
              # Clears current instance data and replaces with provided hash
         | 
| 183 189 | 
             
              def _load(hashish)
         | 
| 184 190 | 
             
                @table.clear
         | 
| 191 | 
            +
                if(_root._camel_keys_action == :auto_discovery)
         | 
| 192 | 
            +
                  starts = hashish.keys.map{|k|k[0,1]}
         | 
| 193 | 
            +
                  unless(starts.detect{|k| k =~ /[A-Z]/})
         | 
| 194 | 
            +
                    _camel_keys_set(:auto_disable)
         | 
| 195 | 
            +
                  else
         | 
| 196 | 
            +
                    _camel_keys_set(:auto_enable) unless _parent.nil?
         | 
| 197 | 
            +
                  end
         | 
| 198 | 
            +
                end
         | 
| 185 199 | 
             
                hashish.each do |key, value|
         | 
| 200 | 
            +
                  key = key.dup
         | 
| 186 201 | 
             
                  if(value.is_a?(::Enumerable))
         | 
| 187 202 | 
             
                    flat = value.map do |v|
         | 
| 188 203 | 
             
                      v.is_a?(::Hash) ? _klass.new(v) : v
         | 
| @@ -203,7 +218,7 @@ class AttributeStruct < BasicObject | |
| 203 218 | 
             
              def _merge(target)
         | 
| 204 219 | 
             
                source = _deep_copy
         | 
| 205 220 | 
             
                dest = target._deep_copy
         | 
| 206 | 
            -
                if(defined?(:: | 
| 221 | 
            +
                if(defined?(::Chef))
         | 
| 207 222 | 
             
                  result = ::Chef::Mixin::DeepMerge.merge(source, dest)
         | 
| 208 223 | 
             
                else
         | 
| 209 224 | 
             
                  result = source.deep_merge(dest)
         | 
| @@ -222,7 +237,7 @@ class AttributeStruct < BasicObject | |
| 222 237 |  | 
| 223 238 | 
             
              # Returns a new Hash type instance based on what is available
         | 
| 224 239 | 
             
              def __hashish
         | 
| 225 | 
            -
                defined?(:: | 
| 240 | 
            +
                defined?(::Chef) ? ::Mash : ::AttributeStruct::AttributeHash
         | 
| 226 241 | 
             
              end
         | 
| 227 242 |  | 
| 228 243 | 
             
              # Returns dup of value. Converts Symbol objects to strings
         | 
| @@ -283,7 +298,10 @@ class AttributeStruct < BasicObject | |
| 283 298 | 
             
              # Helper to return new instance of current instance type
         | 
| 284 299 | 
             
              def _klass_new
         | 
| 285 300 | 
             
                n = _klass.new
         | 
| 286 | 
            -
                 | 
| 301 | 
            +
                unless(_camel_keys_action == :auto_discovery)
         | 
| 302 | 
            +
                  n._camel_keys_set(_camel_keys_action)
         | 
| 303 | 
            +
                end
         | 
| 304 | 
            +
                n._camel_keys = _camel_keys
         | 
| 287 305 | 
             
                n._parent(self)
         | 
| 288 306 | 
             
                n
         | 
| 289 307 | 
             
              end
         | 
| @@ -331,5 +349,5 @@ class AttributeStruct < BasicObject | |
| 331 349 | 
             
                  end
         | 
| 332 350 | 
             
                end
         | 
| 333 351 | 
             
              end
         | 
| 334 | 
            -
             | 
| 352 | 
            +
             | 
| 335 353 | 
             
            end
         | 
    
        data/test/specs/camel.rb
    CHANGED
    
    | @@ -40,4 +40,41 @@ describe AttributeStruct do | |
| 40 40 | 
             
                  dump['ValueTwo']['Nesting'].must_equal true
         | 
| 41 41 | 
             
                end
         | 
| 42 42 | 
             
              end
         | 
| 43 | 
            +
              describe 'Camel enabled imports' do
         | 
| 44 | 
            +
                before do
         | 
| 45 | 
            +
                  @struct = AttributeStruct.new
         | 
| 46 | 
            +
                  @struct._camel_keys = true
         | 
| 47 | 
            +
                  @struct._camel_keys_set(:auto_discovery)
         | 
| 48 | 
            +
                  @struct._load(
         | 
| 49 | 
            +
                    {
         | 
| 50 | 
            +
                      'Fubar' => {
         | 
| 51 | 
            +
                        'FooBar' => true,
         | 
| 52 | 
            +
                        'FeeBar' => {
         | 
| 53 | 
            +
                          'FauxBar' => 'done'
         | 
| 54 | 
            +
                        },
         | 
| 55 | 
            +
                        'FooDar' => {
         | 
| 56 | 
            +
                          'snake_case' => {
         | 
| 57 | 
            +
                            'still_snake' => {
         | 
| 58 | 
            +
                              'NowCamel' => {
         | 
| 59 | 
            +
                                'CamelCamel' => 'yep, a camel'
         | 
| 60 | 
            +
                              }
         | 
| 61 | 
            +
                            }
         | 
| 62 | 
            +
                          }
         | 
| 63 | 
            +
                        }
         | 
| 64 | 
            +
                      }
         | 
| 65 | 
            +
                    }
         | 
| 66 | 
            +
                  )
         | 
| 67 | 
            +
                  @struct._camel_keys_set(nil)
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                it 'should properly export keys after discovery' do
         | 
| 71 | 
            +
                  @struct.fubar.new_bar.halt 'new_value'
         | 
| 72 | 
            +
                  @struct.fubar.foo_dar.snake_case.new_snake 'snake!'
         | 
| 73 | 
            +
                  @struct.fubar.foo_dar.snake_case.still_snake.now_camel.new_camel 'a camel!'
         | 
| 74 | 
            +
                  hash = @struct._dump
         | 
| 75 | 
            +
                  hash['Fubar']['NewBar']['Halt'].must_equal 'new_value'
         | 
| 76 | 
            +
                  hash['Fubar']['FooDar']['snake_case']['new_snake'].must_equal 'snake!'
         | 
| 77 | 
            +
                  hash['Fubar']['FooDar']['snake_case']['still_snake']['NowCamel']['NewCamel'].must_equal 'a camel!'
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
              end
         | 
| 43 80 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: attribute_struct
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.8
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2013- | 
| 12 | 
            +
            date: 2013-10-31 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: hashie
         | 
| @@ -44,7 +44,6 @@ files: | |
| 44 44 | 
             
            - test/specs/basic.rb
         | 
| 45 45 | 
             
            - Gemfile
         | 
| 46 46 | 
             
            - README.md
         | 
| 47 | 
            -
            - attribute_struct-0.1.4.gem
         | 
| 48 47 | 
             
            - attribute_struct.gemspec
         | 
| 49 48 | 
             
            - CHANGELOG.md
         | 
| 50 49 | 
             
            - Gemfile.lock
         | 
    
        data/attribute_struct-0.1.4.gem
    DELETED
    
    | Binary file |