ambry 0.2.0 → 0.2.1
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 +7 -0
- data/README.md +8 -0
- data/extras/bench.rb +0 -2
- data/lib/ambry/active_model.rb +2 -2
- data/lib/ambry/hash_proxy.rb +13 -2
- data/lib/ambry/model.rb +5 -4
- data/lib/ambry/version.rb +1 -1
- data/spec/model_spec.rb +6 -0
- metadata +15 -15
    
        data/Changelog.md
    CHANGED
    
    | @@ -1,5 +1,12 @@ | |
| 1 1 | 
             
            # Ambry Changelog
         | 
| 2 2 |  | 
| 3 | 
            +
            ## [0.2.1](https://github.com/norman/ambry/tree/0.2.1) - 2001-09-20 ([diff](https://github.com/norman/ambry/compare/0.2.0...0.2.1))
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ### [Norman Clarke](https://github.com/norman)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            * Fix handling of attributes with falsy values
         | 
| 8 | 
            +
             | 
| 9 | 
            +
             | 
| 3 10 | 
             
            ## [0.2.0](https://github.com/norman/ambry/tree/0.2.0) - 2001-09-05 ([diff](https://github.com/norman/ambry/compare/0.1.2...0.2.0))
         | 
| 4 11 |  | 
| 5 12 | 
             
            ### [Norman Clarke](https://github.com/norman)
         | 
    
        data/README.md
    CHANGED
    
    | @@ -59,6 +59,14 @@ quick samples. | |
| 59 59 | 
             
                first_alphabetical          = Country.alphabetical.first
         | 
| 60 60 | 
             
                last_alphabetical           = Country.alphabetical.last
         | 
| 61 61 |  | 
| 62 | 
            +
            ## When should I use Ambry?
         | 
| 63 | 
            +
             | 
| 64 | 
            +
            Ambry can be useful for refactoring code with large hash constants and long case
         | 
| 65 | 
            +
            statements. Sometimes it's hard to figure out where code ends and data begins,
         | 
| 66 | 
            +
            but if your code looks like it could be simplified significantly by putting some
         | 
| 67 | 
            +
            things in a data store, yet it's not enough data to justify something like
         | 
| 68 | 
            +
            SQLite, then Ambry could be a good fit.
         | 
| 69 | 
            +
             | 
| 62 70 |  | 
| 63 71 | 
             
            ## Installation
         | 
| 64 72 |  | 
    
        data/extras/bench.rb
    CHANGED
    
    
    
        data/lib/ambry/active_model.rb
    CHANGED
    
    
    
        data/lib/ambry/hash_proxy.rb
    CHANGED
    
    | @@ -6,14 +6,25 @@ module Ambry | |
| 6 6 | 
             
              class HashProxy
         | 
| 7 7 | 
             
                attr :hash
         | 
| 8 8 |  | 
| 9 | 
            +
                def self.with(hash, &block)
         | 
| 10 | 
            +
                  new.with(hash, &block)
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 9 13 | 
             
                # Allows accessing a hash attribute as a method.
         | 
| 10 14 | 
             
                def method_missing(symbol)
         | 
| 11 15 | 
             
                  hash[symbol] or hash[symbol.to_s] or raise NoMethodError
         | 
| 12 16 | 
             
                end
         | 
| 13 17 |  | 
| 14 18 | 
             
                # Allows accessing a hash attribute as hash key, either a string or symbol.
         | 
| 15 | 
            -
                def []( | 
| 16 | 
            -
                  hash | 
| 19 | 
            +
                def [](key)
         | 
| 20 | 
            +
                  if hash.key?(key)           then hash[key]
         | 
| 21 | 
            +
                  elsif hash.key?(key.to_sym) then hash[key.to_sym]
         | 
| 22 | 
            +
                  elsif hash.key?(key.to_s)   then hash[key.to_s]
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                def key?(key)
         | 
| 27 | 
            +
                  hash.key?(key) or hash.key?(key.to_sym) or hash.key?(key.to_s)
         | 
| 17 28 | 
             
                end
         | 
| 18 29 |  | 
| 19 30 | 
             
                # Remove the hash.
         | 
    
        data/lib/ambry/model.rb
    CHANGED
    
    | @@ -27,7 +27,7 @@ module Ambry | |
| 27 27 | 
             
                      attribute_names << name.to_sym
         | 
| 28 28 | 
             
                      class_eval(<<-EOM, __FILE__, __LINE__ + 1)
         | 
| 29 29 | 
             
                        def #{name}
         | 
| 30 | 
            -
                          @#{name}  | 
| 30 | 
            +
                          defined?(@#{name}) ? @#{name} : @attributes[:#{name}]
         | 
| 31 31 | 
             
                        end
         | 
| 32 32 |  | 
| 33 33 | 
             
                        def #{name}=(value)
         | 
| @@ -152,9 +152,10 @@ module Ambry | |
| 152 152 |  | 
| 153 153 | 
             
                  # Update this instance's attributes and invoke #save.
         | 
| 154 154 | 
             
                  def update(attributes)
         | 
| 155 | 
            -
                     | 
| 156 | 
            -
                       | 
| 157 | 
            -
             | 
| 155 | 
            +
                    HashProxy.with(attributes) do |proxy|
         | 
| 156 | 
            +
                      self.class.attribute_names.each do |name|
         | 
| 157 | 
            +
                        send("#{name}=", proxy[name]) if proxy.key?(name)
         | 
| 158 | 
            +
                      end
         | 
| 158 159 | 
             
                    end
         | 
| 159 160 | 
             
                    save
         | 
| 160 161 | 
             
                  end
         | 
    
        data/lib/ambry/version.rb
    CHANGED
    
    
    
        data/spec/model_spec.rb
    CHANGED
    
    | @@ -150,6 +150,12 @@ describe Ambry::Model do | |
| 150 150 | 
             
                  assert_equal count, Person.count
         | 
| 151 151 | 
             
                end
         | 
| 152 152 |  | 
| 153 | 
            +
                it "should allow false as an update value (regression)" do
         | 
| 154 | 
            +
                  p = Person.get("moe@3stooges.com")
         | 
| 155 | 
            +
                  p.update(:name => false)
         | 
| 156 | 
            +
                  assert_equal false, p.name
         | 
| 157 | 
            +
                end
         | 
| 158 | 
            +
             | 
| 153 159 | 
             
              end
         | 
| 154 160 |  | 
| 155 161 | 
             
              describe "#save" do
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ambry
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.1
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,11 +9,11 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2011-09- | 
| 12 | 
            +
            date: 2011-09-20 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: ffaker
         | 
| 16 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &70104361299880 !ruby/object:Gem::Requirement
         | 
| 17 17 | 
             
                none: false
         | 
| 18 18 | 
             
                requirements:
         | 
| 19 19 | 
             
                - - ! '>='
         | 
| @@ -21,10 +21,10 @@ dependencies: | |
| 21 21 | 
             
                    version: '0'
         | 
| 22 22 | 
             
              type: :development
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *70104361299880
         | 
| 25 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 26 | 
             
              name: minitest
         | 
| 27 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &70104361299380 !ruby/object:Gem::Requirement
         | 
| 28 28 | 
             
                none: false
         | 
| 29 29 | 
             
                requirements:
         | 
| 30 30 | 
             
                - - ~>
         | 
| @@ -32,10 +32,10 @@ dependencies: | |
| 32 32 | 
             
                    version: 2.2.2
         | 
| 33 33 | 
             
              type: :development
         | 
| 34 34 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 35 | 
            +
              version_requirements: *70104361299380
         | 
| 36 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 37 | 
             
              name: mocha
         | 
| 38 | 
            -
              requirement: & | 
| 38 | 
            +
              requirement: &70104361298940 !ruby/object:Gem::Requirement
         | 
| 39 39 | 
             
                none: false
         | 
| 40 40 | 
             
                requirements:
         | 
| 41 41 | 
             
                - - ! '>='
         | 
| @@ -43,10 +43,10 @@ dependencies: | |
| 43 43 | 
             
                    version: '0'
         | 
| 44 44 | 
             
              type: :development
         | 
| 45 45 | 
             
              prerelease: false
         | 
| 46 | 
            -
              version_requirements: * | 
| 46 | 
            +
              version_requirements: *70104361298940
         | 
| 47 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 48 48 | 
             
              name: activesupport
         | 
| 49 | 
            -
              requirement: & | 
| 49 | 
            +
              requirement: &70104361298360 !ruby/object:Gem::Requirement
         | 
| 50 50 | 
             
                none: false
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - ~>
         | 
| @@ -54,10 +54,10 @@ dependencies: | |
| 54 54 | 
             
                    version: '3.0'
         | 
| 55 55 | 
             
              type: :development
         | 
| 56 56 | 
             
              prerelease: false
         | 
| 57 | 
            -
              version_requirements: * | 
| 57 | 
            +
              version_requirements: *70104361298360
         | 
| 58 58 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 59 59 | 
             
              name: activemodel
         | 
| 60 | 
            -
              requirement: & | 
| 60 | 
            +
              requirement: &70104361297820 !ruby/object:Gem::Requirement
         | 
| 61 61 | 
             
                none: false
         | 
| 62 62 | 
             
                requirements:
         | 
| 63 63 | 
             
                - - ~>
         | 
| @@ -65,10 +65,10 @@ dependencies: | |
| 65 65 | 
             
                    version: '3.0'
         | 
| 66 66 | 
             
              type: :development
         | 
| 67 67 | 
             
              prerelease: false
         | 
| 68 | 
            -
              version_requirements: * | 
| 68 | 
            +
              version_requirements: *70104361297820
         | 
| 69 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 70 | 
             
              name: rake
         | 
| 71 | 
            -
              requirement: & | 
| 71 | 
            +
              requirement: &70104361297440 !ruby/object:Gem::Requirement
         | 
| 72 72 | 
             
                none: false
         | 
| 73 73 | 
             
                requirements:
         | 
| 74 74 | 
             
                - - ! '>='
         | 
| @@ -76,7 +76,7 @@ dependencies: | |
| 76 76 | 
             
                    version: '0'
         | 
| 77 77 | 
             
              type: :development
         | 
| 78 78 | 
             
              prerelease: false
         | 
| 79 | 
            -
              version_requirements: * | 
| 79 | 
            +
              version_requirements: *70104361297440
         | 
| 80 80 | 
             
            description: ! "    Ambry is not an ORM, man! It's a database and ORM replacement
         | 
| 81 81 | 
             
              for (mostly)\n    static models and small datasets. It provides ActiveModel compatibility,
         | 
| 82 82 | 
             
              and\n    flexible searching and storage.\n"
         | 
| @@ -137,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 137 137 | 
             
                  version: '0'
         | 
| 138 138 | 
             
            requirements: []
         | 
| 139 139 | 
             
            rubyforge_project: ! '[none]'
         | 
| 140 | 
            -
            rubygems_version: 1.8. | 
| 140 | 
            +
            rubygems_version: 1.8.5
         | 
| 141 141 | 
             
            signing_key: 
         | 
| 142 142 | 
             
            specification_version: 3
         | 
| 143 143 | 
             
            summary: An ActiveModel-compatible ORM-like library for storing model instances in
         |