navigable_hash 1.0.1 → 1.1.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.
- data/lib/navigable_hash.rb +12 -4
- data/navigable_hash.gemspec +1 -1
- data/spec/lib/navigable_hash_spec.rb +47 -0
- metadata +2 -2
    
        data/lib/navigable_hash.rb
    CHANGED
    
    | @@ -1,7 +1,9 @@ | |
| 1 1 | 
             
            class NavigableHash < Hash
         | 
| 2 2 |  | 
| 3 | 
            -
              def initialize(constructor = {})
         | 
| 4 | 
            -
                if  | 
| 3 | 
            +
              def initialize(constructor = {}, &block)
         | 
| 4 | 
            +
                if block_given?
         | 
| 5 | 
            +
                  yield self
         | 
| 6 | 
            +
                elsif constructor.is_a?(Hash)
         | 
| 5 7 | 
             
                  super()
         | 
| 6 8 | 
             
                  update(constructor)
         | 
| 7 9 | 
             
                else
         | 
| @@ -168,14 +170,20 @@ class NavigableHash < Hash | |
| 168 170 | 
             
                value
         | 
| 169 171 | 
             
              end
         | 
| 170 172 |  | 
| 173 | 
            +
              def navigate_hash_from_block(key, &block)
         | 
| 174 | 
            +
                self[key] = self.class.new &block
         | 
| 175 | 
            +
              end
         | 
| 176 | 
            +
             | 
| 171 177 | 
             
              private
         | 
| 172 178 |  | 
| 173 179 | 
             
              def method_missing(m, *args, &block)
         | 
| 174 180 | 
             
                m = m.to_s
         | 
| 175 181 | 
             
                if args.size == 1 && m.gsub!(/(.+)=$/, '\1')
         | 
| 176 | 
            -
                  self | 
| 182 | 
            +
                  self[m] = args.first
         | 
| 183 | 
            +
                elsif args.size == 0 && block_given?
         | 
| 184 | 
            +
                  self.navigate_hash_from_block m, &block
         | 
| 177 185 | 
             
                elsif args.size == 0
         | 
| 178 | 
            -
                  self | 
| 186 | 
            +
                  self[m]
         | 
| 179 187 | 
             
                else
         | 
| 180 188 | 
             
                  raise ArgumentError, "wrong number of arguments(#{args.size} for 0)"
         | 
| 181 189 | 
             
                end
         | 
    
        data/navigable_hash.gemspec
    CHANGED
    
    | @@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) | |
| 4 4 |  | 
| 5 5 | 
             
            Gem::Specification.new do |spec|
         | 
| 6 6 | 
             
              spec.name          = "navigable_hash"
         | 
| 7 | 
            -
              spec.version       = "1.0 | 
| 7 | 
            +
              spec.version       = "1.1.0"
         | 
| 8 8 | 
             
              spec.authors       = ["Jason Waldrip", "Kevin Wanek"]
         | 
| 9 9 | 
             
              spec.email         = ["jason@waldrip.net", "k@dmcy.us"]
         | 
| 10 10 | 
             
              spec.description   = %q{Allows a hash to be navigated with dot notation or indifferent access.}
         | 
| @@ -22,6 +22,29 @@ describe NavigableHash do | |
| 22 22 | 
             
                    expect { NavigableHash.new({:a => 1}) }.to_not raise_error
         | 
| 23 23 | 
             
                  end
         | 
| 24 24 | 
             
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                context "given a block" do
         | 
| 27 | 
            +
                  it "should not raise an error" do
         | 
| 28 | 
            +
                    expect do
         | 
| 29 | 
            +
                      NavigableHash.new do |v|
         | 
| 30 | 
            +
                        v.foo = :bar
         | 
| 31 | 
            +
                      end
         | 
| 32 | 
            +
                    end.to_not raise_error
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  it "should create a new navigable hash" do
         | 
| 36 | 
            +
                    navigable = NavigableHash.new do |v|
         | 
| 37 | 
            +
                    end
         | 
| 38 | 
            +
                    navigable.should be_a NavigableHash
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  it "should assign values in the block to the hash" do
         | 
| 42 | 
            +
                    navigable = NavigableHash.new do |v|
         | 
| 43 | 
            +
                      v.foo = :bar
         | 
| 44 | 
            +
                    end
         | 
| 45 | 
            +
                    navigable.foo.should == :bar
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                end
         | 
| 25 48 | 
             
              end
         | 
| 26 49 |  | 
| 27 50 | 
             
              describe ".new(TEST_HASH)" do
         | 
| @@ -71,6 +94,30 @@ describe NavigableHash do | |
| 71 94 | 
             
                it "should raise an error with arguments" do
         | 
| 72 95 | 
             
                  expect { navigable.__any_method__ :foo }.to raise_error
         | 
| 73 96 | 
             
                end
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                context "given a block" do
         | 
| 99 | 
            +
                  it "should not raise an error" do
         | 
| 100 | 
            +
                    expect do
         | 
| 101 | 
            +
                      navigable.__any_method__ do |v|
         | 
| 102 | 
            +
                        v.foo = :bar
         | 
| 103 | 
            +
                      end
         | 
| 104 | 
            +
                    end.to_not raise_error
         | 
| 105 | 
            +
                  end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                  it "should create a new navigable hash" do
         | 
| 108 | 
            +
                    navigable.__any_method__ do |v|
         | 
| 109 | 
            +
                    end
         | 
| 110 | 
            +
                    navigable.__any_method__.should be_a NavigableHash
         | 
| 111 | 
            +
                  end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                  it "should assign values in the block to the hash" do
         | 
| 114 | 
            +
                    navigable.__any_method__ do |v|
         | 
| 115 | 
            +
                      v.foo = :bar
         | 
| 116 | 
            +
                    end
         | 
| 117 | 
            +
                    navigable.__any_method__.foo.should == :bar
         | 
| 118 | 
            +
                  end
         | 
| 119 | 
            +
                end
         | 
| 120 | 
            +
             | 
| 74 121 | 
             
              end
         | 
| 75 122 |  | 
| 76 123 | 
             
              describe "#__any_method__=" do
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: navigable_hash
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0 | 
| 4 | 
            +
              version: 1.1.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -10,7 +10,7 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2013-04- | 
| 13 | 
            +
            date: 2013-04-26 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: bundler
         |