virtus 1.0.1 → 1.0.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/.travis.yml +4 -2
 - data/Changelog.md +10 -2
 - data/Gemfile.devtools +26 -15
 - data/README.md +2 -66
 - data/lib/virtus/attribute/accessor.rb +11 -0
 - data/lib/virtus/attribute_set.rb +2 -2
 - data/lib/virtus/instance_methods.rb +1 -1
 - data/lib/virtus/support/equalizer.rb +1 -1
 - data/lib/virtus/version.rb +1 -1
 - data/spec/spec_helper.rb +0 -1
 - data/spec/unit/virtus/attribute/defined_spec.rb +20 -0
 - data/spec/unit/virtus/freeze_spec.rb +13 -0
 - data/virtus.gemspec +3 -3
 - metadata +24 -13
 - checksums.yaml +0 -7
 
    
        data/.travis.yml
    CHANGED
    
    | 
         @@ -1,16 +1,18 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            language: ruby
         
     | 
| 
       2 
2 
     | 
    
         
             
            before_install: gem install bundler
         
     | 
| 
       3 
3 
     | 
    
         
             
            bundler_args: --without yard guard benchmarks
         
     | 
| 
       4 
     | 
    
         
            -
            script: "bundle exec rake spec"
         
     | 
| 
      
 4 
     | 
    
         
            +
            script: "bundle exec rake metrics:coverage spec:integration"
         
     | 
| 
       5 
5 
     | 
    
         
             
            rvm:
         
     | 
| 
       6 
6 
     | 
    
         
             
              - 1.9.3
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 2.0.0
         
     | 
| 
      
 8 
     | 
    
         
            +
              - 2.1.0
         
     | 
| 
       8 
9 
     | 
    
         
             
              - jruby-19mode
         
     | 
| 
       9 
     | 
    
         
            -
              - rbx 
     | 
| 
      
 10 
     | 
    
         
            +
              - rbx
         
     | 
| 
       10 
11 
     | 
    
         
             
              - ruby-head
         
     | 
| 
       11 
12 
     | 
    
         
             
            matrix:
         
     | 
| 
       12 
13 
     | 
    
         
             
              allow_failures:
         
     | 
| 
       13 
14 
     | 
    
         
             
                - rvm: ruby-head
         
     | 
| 
      
 15 
     | 
    
         
            +
                - rvm: rbx
         
     | 
| 
       14 
16 
     | 
    
         
             
            notifications:
         
     | 
| 
       15 
17 
     | 
    
         
             
              email:
         
     | 
| 
       16 
18 
     | 
    
         
             
                - piotr.solnica@gmail.com
         
     | 
    
        data/Changelog.md
    CHANGED
    
    | 
         @@ -1,9 +1,17 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # v1.0. 
     | 
| 
      
 1 
     | 
    
         
            +
            # v1.0.2 2014-12-03
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            * [improvement] Don’t override already-defined default values when freezing (amarshall)
         
     | 
| 
      
 4 
     | 
    
         
            +
            * [improvement] Improved performance of `AttributeSet#each` (Antti)
         
     | 
| 
      
 5 
     | 
    
         
            +
            * updated axiom-types dependency to ~> 0.1 (solnic)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            [Compare v1.0.1..v1.0.2](https://github.com/solnic/virtus/compare/v1.0.1...v1.0.2)
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            # v1.0.1 2013-12-10
         
     | 
| 
       2 
10 
     | 
    
         | 
| 
       3 
11 
     | 
    
         
             
            * [feature] re-introduce `ValueObject#with`, which was removed in the past (senny)
         
     | 
| 
       4 
12 
     | 
    
         
             
            * [fixed] strict mode for Boolean type (solnic)
         
     | 
| 
       5 
13 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            [Compare v1.0.0.. 
     | 
| 
      
 14 
     | 
    
         
            +
            [Compare v1.0.0..v1.0.1](https://github.com/solnic/virtus/compare/v1.0.0...v1.0.1)
         
     | 
| 
       7 
15 
     | 
    
         | 
| 
       8 
16 
     | 
    
         
             
            # v1.0.0 2013-10-16
         
     | 
| 
       9 
17 
     | 
    
         | 
    
        data/Gemfile.devtools
    CHANGED
    
    | 
         @@ -1,24 +1,28 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # encoding: utf-8
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            group :development do
         
     | 
| 
       4 
     | 
    
         
            -
              gem 'rake', 
     | 
| 
       5 
     | 
    
         
            -
              gem 'rspec', 
     | 
| 
       6 
     | 
    
         
            -
              gem ' 
     | 
| 
      
 4 
     | 
    
         
            +
              gem 'rake',       '~> 10.1.0'
         
     | 
| 
      
 5 
     | 
    
         
            +
              gem 'rspec',      '~> 2.14.1'
         
     | 
| 
      
 6 
     | 
    
         
            +
              gem 'rspec-core', '~> 2.14.8'
         
     | 
| 
      
 7 
     | 
    
         
            +
              gem 'yard',       '~> 0.8.7'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              platform :rbx do
         
     | 
| 
      
 10 
     | 
    
         
            +
                gem 'rubysl-singleton', '~> 2.0.0'
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
       7 
12 
     | 
    
         
             
            end
         
     | 
| 
       8 
13 
     | 
    
         | 
| 
       9 
14 
     | 
    
         
             
            group :yard do
         
     | 
| 
       10 
     | 
    
         
            -
              gem 'kramdown', '~> 1.2 
     | 
| 
      
 15 
     | 
    
         
            +
              gem 'kramdown', '~> 1.3.2'
         
     | 
| 
       11 
16 
     | 
    
         
             
            end
         
     | 
| 
       12 
17 
     | 
    
         | 
| 
       13 
18 
     | 
    
         
             
            group :guard do
         
     | 
| 
       14 
     | 
    
         
            -
              gem 'guard',         '~>  
     | 
| 
       15 
     | 
    
         
            -
              gem 'guard-bundler', '~>  
     | 
| 
       16 
     | 
    
         
            -
              gem 'guard-rspec',   '~>  
     | 
| 
       17 
     | 
    
         
            -
              gem 'guard-rubocop', '~> 0.2 
     | 
| 
       18 
     | 
    
         
            -
              gem 'guard-mutant',  '~> 0.0.1'
         
     | 
| 
      
 19 
     | 
    
         
            +
              gem 'guard',         '~> 2.4.0'
         
     | 
| 
      
 20 
     | 
    
         
            +
              gem 'guard-bundler', '~> 2.0.0'
         
     | 
| 
      
 21 
     | 
    
         
            +
              gem 'guard-rspec',   '~> 4.2.6'
         
     | 
| 
      
 22 
     | 
    
         
            +
              gem 'guard-rubocop', '~> 1.0.2'
         
     | 
| 
       19 
23 
     | 
    
         | 
| 
       20 
24 
     | 
    
         
             
              # file system change event handling
         
     | 
| 
       21 
     | 
    
         
            -
              gem 'listen',     '~>  
     | 
| 
      
 25 
     | 
    
         
            +
              gem 'listen',     '~> 2.5.0'
         
     | 
| 
       22 
26 
     | 
    
         
             
              gem 'rb-fchange', '~> 0.0.6', require: false
         
     | 
| 
       23 
27 
     | 
    
         
             
              gem 'rb-fsevent', '~> 0.9.3', require: false
         
     | 
| 
       24 
28 
     | 
    
         
             
              gem 'rb-inotify', '~> 0.9.0', require: false
         
     | 
| 
         @@ -30,17 +34,24 @@ group :guard do 
     | 
|
| 
       30 
34 
     | 
    
         
             
            end
         
     | 
| 
       31 
35 
     | 
    
         | 
| 
       32 
36 
     | 
    
         
             
            group :metrics do
         
     | 
| 
       33 
     | 
    
         
            -
              gem 'coveralls', '~> 0. 
     | 
| 
      
 37 
     | 
    
         
            +
              gem 'coveralls', '~> 0.7.0'
         
     | 
| 
       34 
38 
     | 
    
         
             
              gem 'flay',      '~> 2.4.0'
         
     | 
| 
       35 
     | 
    
         
            -
              gem 'flog',      '~> 4. 
     | 
| 
      
 39 
     | 
    
         
            +
              gem 'flog',      '~> 4.2.0'
         
     | 
| 
       36 
40 
     | 
    
         
             
              gem 'reek',      '~> 1.3.2'
         
     | 
| 
       37 
     | 
    
         
            -
              gem ' 
     | 
| 
       38 
     | 
    
         
            -
              gem ' 
     | 
| 
       39 
     | 
    
         
            -
              gem 'yardstick', '~> 0.9.7', git: 'https://github.com/dkubb/yardstick.git'
         
     | 
| 
      
 41 
     | 
    
         
            +
              gem 'simplecov', '~> 0.8.2'
         
     | 
| 
      
 42 
     | 
    
         
            +
              gem 'yardstick', '~> 0.9.9'
         
     | 
| 
       40 
43 
     | 
    
         | 
| 
       41 
44 
     | 
    
         
             
              platforms :ruby_19, :ruby_20 do
         
     | 
| 
       42 
45 
     | 
    
         
             
                gem 'yard-spellcheck', '~> 0.1.5'
         
     | 
| 
       43 
46 
     | 
    
         
             
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
              platform :rbx do
         
     | 
| 
      
 49 
     | 
    
         
            +
                gem 'json',               '~> 1.8.1'
         
     | 
| 
      
 50 
     | 
    
         
            +
                gem 'racc',               '~> 1.4'
         
     | 
| 
      
 51 
     | 
    
         
            +
                gem 'rubysl-logger',      '~> 2.0.0'
         
     | 
| 
      
 52 
     | 
    
         
            +
                gem 'rubysl-open-uri',    '~> 2.0.0'
         
     | 
| 
      
 53 
     | 
    
         
            +
                gem 'rubysl-prettyprint', '~> 2.0.2'
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
       44 
55 
     | 
    
         
             
            end
         
     | 
| 
       45 
56 
     | 
    
         | 
| 
       46 
57 
     | 
    
         
             
            group :benchmarks do
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -6,12 +6,14 @@ Virtus 
     | 
|
| 
       6 
6 
     | 
    
         
             
            [][gemnasium]
         
     | 
| 
       7 
7 
     | 
    
         
             
            [][codeclimate]
         
     | 
| 
       8 
8 
     | 
    
         
             
            [][coveralls]
         
     | 
| 
      
 9 
     | 
    
         
            +
            [][inchpages]
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
            [gem]: https://rubygems.org/gems/virtus
         
     | 
| 
       11 
12 
     | 
    
         
             
            [travis]: https://travis-ci.org/solnic/virtus
         
     | 
| 
       12 
13 
     | 
    
         
             
            [gemnasium]: https://gemnasium.com/solnic/virtus
         
     | 
| 
       13 
14 
     | 
    
         
             
            [codeclimate]: https://codeclimate.com/github/solnic/virtus
         
     | 
| 
       14 
15 
     | 
    
         
             
            [coveralls]: https://coveralls.io/r/solnic/virtus
         
     | 
| 
      
 16 
     | 
    
         
            +
            [inchpages]: http://inch-pages.github.io/github/solnic/virtus
         
     | 
| 
       15 
17 
     | 
    
         | 
| 
       16 
18 
     | 
    
         
             
            This is a partial extraction of the DataMapper [Property
         
     | 
| 
       17 
19 
     | 
    
         
             
            API](http://rubydoc.info/github/datamapper/dm-core/master/DataMapper/Property)
         
     | 
| 
         @@ -427,48 +429,6 @@ user.set_unique_id('1234-1234') 
     | 
|
| 
       427 
429 
     | 
    
         
             
            user.unique_id # => '1234-1234'
         
     | 
| 
       428 
430 
     | 
    
         
             
            ```
         
     | 
| 
       429 
431 
     | 
    
         | 
| 
       430 
     | 
    
         
            -
            Coercions
         
     | 
| 
       431 
     | 
    
         
            -
            ---------
         
     | 
| 
       432 
     | 
    
         
            -
             
     | 
| 
       433 
     | 
    
         
            -
            Virtus uses [Coercible](https://github.com/solnic/coercible) for coercions. This
         
     | 
| 
       434 
     | 
    
         
            -
            feature is turned on by default. You can turn it off for all attributes like that:
         
     | 
| 
       435 
     | 
    
         
            -
             
     | 
| 
       436 
     | 
    
         
            -
            ```ruby
         
     | 
| 
       437 
     | 
    
         
            -
            # Turn coercions off globally
         
     | 
| 
       438 
     | 
    
         
            -
            Virtus.coerce(false)
         
     | 
| 
       439 
     | 
    
         
            -
             
     | 
| 
       440 
     | 
    
         
            -
            # ...or you can turn it off for a single attribute
         
     | 
| 
       441 
     | 
    
         
            -
            class User
         
     | 
| 
       442 
     | 
    
         
            -
              include Virtus.model
         
     | 
| 
       443 
     | 
    
         
            -
             
     | 
| 
       444 
     | 
    
         
            -
              attribute :name, String, :coerce => false
         
     | 
| 
       445 
     | 
    
         
            -
            end
         
     | 
| 
       446 
     | 
    
         
            -
            ```
         
     | 
| 
       447 
     | 
    
         
            -
             
     | 
| 
       448 
     | 
    
         
            -
            You can configure coercers too:
         
     | 
| 
       449 
     | 
    
         
            -
             
     | 
| 
       450 
     | 
    
         
            -
            ```ruby
         
     | 
| 
       451 
     | 
    
         
            -
            Virtus.coercer do |config|
         
     | 
| 
       452 
     | 
    
         
            -
              config.string.boolean_map = { 'yup' => true, 'nope' => false }
         
     | 
| 
       453 
     | 
    
         
            -
            end
         
     | 
| 
       454 
     | 
    
         
            -
             
     | 
| 
       455 
     | 
    
         
            -
            # Virtus.coercer instance is used by default for all attributes.
         
     | 
| 
       456 
     | 
    
         
            -
            # You *can* override it for a single attribute if you want:
         
     | 
| 
       457 
     | 
    
         
            -
             
     | 
| 
       458 
     | 
    
         
            -
            my_cool_coercer = Coercible::Coercer.new do |config|
         
     | 
| 
       459 
     | 
    
         
            -
              # some customization
         
     | 
| 
       460 
     | 
    
         
            -
            end
         
     | 
| 
       461 
     | 
    
         
            -
             
     | 
| 
       462 
     | 
    
         
            -
            class User
         
     | 
| 
       463 
     | 
    
         
            -
              include Virtus.model
         
     | 
| 
       464 
     | 
    
         
            -
             
     | 
| 
       465 
     | 
    
         
            -
              attribute :name, String, :coercer => my_cool_coercer
         
     | 
| 
       466 
     | 
    
         
            -
            end
         
     | 
| 
       467 
     | 
    
         
            -
            ```
         
     | 
| 
       468 
     | 
    
         
            -
             
     | 
| 
       469 
     | 
    
         
            -
            Please check out [Coercible README](https://github.com/solnic/coercible/blob/master/README.md)
         
     | 
| 
       470 
     | 
    
         
            -
            for more information.
         
     | 
| 
       471 
     | 
    
         
            -
             
     | 
| 
       472 
432 
     | 
    
         
             
            ## Strict Coercion Mode
         
     | 
| 
       473 
433 
     | 
    
         | 
| 
       474 
434 
     | 
    
         
             
            By default Virtus returns the input value even when it couldn't coerce it to the expected type.
         
     | 
| 
         @@ -562,27 +522,3 @@ Contributing 
     | 
|
| 
       562 
522 
     | 
    
         
             
            * Commit, do not mess with Rakefile or version
         
     | 
| 
       563 
523 
     | 
    
         
             
              (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
         
     | 
| 
       564 
524 
     | 
    
         
             
            * Send me a pull request. Bonus points for topic branches.
         
     | 
| 
       565 
     | 
    
         
            -
             
     | 
| 
       566 
     | 
    
         
            -
            License
         
     | 
| 
       567 
     | 
    
         
            -
            -------
         
     | 
| 
       568 
     | 
    
         
            -
             
     | 
| 
       569 
     | 
    
         
            -
            Copyright (c) 2011-2013 Piotr Solnica
         
     | 
| 
       570 
     | 
    
         
            -
             
     | 
| 
       571 
     | 
    
         
            -
            Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
       572 
     | 
    
         
            -
            a copy of this software and associated documentation files (the
         
     | 
| 
       573 
     | 
    
         
            -
            "Software"), to deal in the Software without restriction, including
         
     | 
| 
       574 
     | 
    
         
            -
            without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
       575 
     | 
    
         
            -
            distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
       576 
     | 
    
         
            -
            permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
       577 
     | 
    
         
            -
            the following conditions:
         
     | 
| 
       578 
     | 
    
         
            -
             
     | 
| 
       579 
     | 
    
         
            -
            The above copyright notice and this permission notice shall be
         
     | 
| 
       580 
     | 
    
         
            -
            included in all copies or substantial portions of the Software.
         
     | 
| 
       581 
     | 
    
         
            -
             
     | 
| 
       582 
     | 
    
         
            -
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
       583 
     | 
    
         
            -
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
       584 
     | 
    
         
            -
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
       585 
     | 
    
         
            -
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
       586 
     | 
    
         
            -
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
       587 
     | 
    
         
            -
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
       588 
     | 
    
         
            -
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
| 
         @@ -34,6 +34,17 @@ module Virtus 
     | 
|
| 
       34 
34 
     | 
    
         
             
                    descendant.instance_variable_set('@instance_variable_name', "@#{name}")
         
     | 
| 
       35 
35 
     | 
    
         
             
                  end
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
      
 37 
     | 
    
         
            +
                  # Return if attribute value is defined
         
     | 
| 
      
 38 
     | 
    
         
            +
                  #
         
     | 
| 
      
 39 
     | 
    
         
            +
                  # @param [Object] instance
         
     | 
| 
      
 40 
     | 
    
         
            +
                  #
         
     | 
| 
      
 41 
     | 
    
         
            +
                  # @return [Boolean]
         
     | 
| 
      
 42 
     | 
    
         
            +
                  #
         
     | 
| 
      
 43 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 44 
     | 
    
         
            +
                  def defined?(instance)
         
     | 
| 
      
 45 
     | 
    
         
            +
                    instance.instance_variable_defined?(instance_variable_name)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
       37 
48 
     | 
    
         
             
                  # Return value of the attribute
         
     | 
| 
       38 
49 
     | 
    
         
             
                  #
         
     | 
| 
       39 
50 
     | 
    
         
             
                  # @param [Object] instance
         
     | 
    
        data/lib/virtus/attribute_set.rb
    CHANGED
    
    | 
         @@ -43,7 +43,7 @@ module Virtus 
     | 
|
| 
       43 
43 
     | 
    
         
             
                # @api public
         
     | 
| 
       44 
44 
     | 
    
         
             
                def each
         
     | 
| 
       45 
45 
     | 
    
         
             
                  return to_enum unless block_given?
         
     | 
| 
       46 
     | 
    
         
            -
                  @index. 
     | 
| 
      
 46 
     | 
    
         
            +
                  @index.each { |name, attribute| yield attribute if name.kind_of?(Symbol) }
         
     | 
| 
       47 
47 
     | 
    
         
             
                  self
         
     | 
| 
       48 
48 
     | 
    
         
             
                end
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
         @@ -209,7 +209,7 @@ module Virtus 
     | 
|
| 
       209 
209 
     | 
    
         | 
| 
       210 
210 
     | 
    
         
             
                # @api private
         
     | 
| 
       211 
211 
     | 
    
         
             
                def skip_default?(object, attribute)
         
     | 
| 
       212 
     | 
    
         
            -
                  attribute.lazy? ||  
     | 
| 
      
 212 
     | 
    
         
            +
                  attribute.lazy? || attribute.defined?(object)
         
     | 
| 
       213 
213 
     | 
    
         
             
                end
         
     | 
| 
       214 
214 
     | 
    
         | 
| 
       215 
215 
     | 
    
         
             
                # Merge the attributes into the index
         
     | 
    
        data/lib/virtus/version.rb
    CHANGED
    
    
    
        data/spec/spec_helper.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe Virtus::Attribute, '#defined?' do
         
     | 
| 
      
 4 
     | 
    
         
            +
              subject { object.defined?(instance) }
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              let(:object) { described_class.build(String, :name => name) }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              let(:model)    { Class.new { attr_accessor :test } }
         
     | 
| 
      
 9 
     | 
    
         
            +
              let(:name)     { :test }
         
     | 
| 
      
 10 
     | 
    
         
            +
              let(:instance) { model.new }
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              context 'when the attribute value has not been defined' do
         
     | 
| 
      
 13 
     | 
    
         
            +
                it { should be(false) }
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              context 'when the attribute value has been defined' do
         
     | 
| 
      
 17 
     | 
    
         
            +
                before { instance.test = nil }
         
     | 
| 
      
 18 
     | 
    
         
            +
                it { should be(true) }
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -9,6 +9,7 @@ describe Virtus, '#freeze' do 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                  attribute :name, String,  :default => 'foo', :lazy => true
         
     | 
| 
       11 
11 
     | 
    
         
             
                  attribute :age,  Integer, :default => 30
         
     | 
| 
      
 12 
     | 
    
         
            +
                  attribute :rand, Float,   :default => Proc.new { rand }
         
     | 
| 
       12 
13 
     | 
    
         
             
                }
         
     | 
| 
       13 
14 
     | 
    
         
             
              }
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
         @@ -18,4 +19,16 @@ describe Virtus, '#freeze' do 
     | 
|
| 
       18 
19 
     | 
    
         | 
| 
       19 
20 
     | 
    
         
             
              its(:name) { should eql('foo') }
         
     | 
| 
       20 
21 
     | 
    
         
             
              its(:age)  { should be(30) }
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              it "does not change dynamic default values" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                original_value = object.rand
         
     | 
| 
      
 25 
     | 
    
         
            +
                object.freeze
         
     | 
| 
      
 26 
     | 
    
         
            +
                expect(object.rand).to eq original_value
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              it "does not change default attributes that have been explicitly set" do
         
     | 
| 
      
 30 
     | 
    
         
            +
                object.rand = 3.14
         
     | 
| 
      
 31 
     | 
    
         
            +
                object.freeze
         
     | 
| 
      
 32 
     | 
    
         
            +
                expect(object.rand).to eq 3.14
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
       21 
34 
     | 
    
         
             
            end
         
     | 
    
        data/virtus.gemspec
    CHANGED
    
    | 
         @@ -17,8 +17,8 @@ Gem::Specification.new do |gem| 
     | 
|
| 
       17 
17 
     | 
    
         
             
              gem.test_files       = `git ls-files -- {spec}/*`.split("\n")
         
     | 
| 
       18 
18 
     | 
    
         
             
              gem.extra_rdoc_files = %w[LICENSE README.md TODO.md]
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
              gem.add_dependency('descendants_tracker', '~> 0.0. 
     | 
| 
       21 
     | 
    
         
            -
              gem.add_dependency('equalizer',           '~> 0.0. 
     | 
| 
      
 20 
     | 
    
         
            +
              gem.add_dependency('descendants_tracker', '~> 0.0.3')
         
     | 
| 
      
 21 
     | 
    
         
            +
              gem.add_dependency('equalizer',           '~> 0.0.9')
         
     | 
| 
       22 
22 
     | 
    
         
             
              gem.add_dependency('coercible',           '~> 1.0')
         
     | 
| 
       23 
     | 
    
         
            -
              gem.add_dependency('axiom-types',         '~> 0. 
     | 
| 
      
 23 
     | 
    
         
            +
              gem.add_dependency('axiom-types',         '~> 0.1')
         
     | 
| 
       24 
24 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,46 +1,52 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: virtus
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.0.2
         
     | 
| 
      
 5 
     | 
    
         
            +
              prerelease: 
         
     | 
| 
       5 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
7 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
8 
     | 
    
         
             
            - Piotr Solnica
         
     | 
| 
       8 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2014-03-12 00:00:00.000000000 Z
         
     | 
| 
       12 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
15 
     | 
    
         
             
              name: descendants_tracker
         
     | 
| 
       15 
16 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 17 
     | 
    
         
            +
                none: false
         
     | 
| 
       16 
18 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
19 
     | 
    
         
             
                - - ~>
         
     | 
| 
       18 
20 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version: 0.0. 
     | 
| 
      
 21 
     | 
    
         
            +
                    version: 0.0.3
         
     | 
| 
       20 
22 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       21 
23 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       22 
24 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 25 
     | 
    
         
            +
                none: false
         
     | 
| 
       23 
26 
     | 
    
         
             
                requirements:
         
     | 
| 
       24 
27 
     | 
    
         
             
                - - ~>
         
     | 
| 
       25 
28 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
     | 
    
         
            -
                    version: 0.0. 
     | 
| 
      
 29 
     | 
    
         
            +
                    version: 0.0.3
         
     | 
| 
       27 
30 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
31 
     | 
    
         
             
              name: equalizer
         
     | 
| 
       29 
32 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 33 
     | 
    
         
            +
                none: false
         
     | 
| 
       30 
34 
     | 
    
         
             
                requirements:
         
     | 
| 
       31 
35 
     | 
    
         
             
                - - ~>
         
     | 
| 
       32 
36 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       33 
     | 
    
         
            -
                    version: 0.0. 
     | 
| 
      
 37 
     | 
    
         
            +
                    version: 0.0.9
         
     | 
| 
       34 
38 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       35 
39 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       36 
40 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 41 
     | 
    
         
            +
                none: false
         
     | 
| 
       37 
42 
     | 
    
         
             
                requirements:
         
     | 
| 
       38 
43 
     | 
    
         
             
                - - ~>
         
     | 
| 
       39 
44 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       40 
     | 
    
         
            -
                    version: 0.0. 
     | 
| 
      
 45 
     | 
    
         
            +
                    version: 0.0.9
         
     | 
| 
       41 
46 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       42 
47 
     | 
    
         
             
              name: coercible
         
     | 
| 
       43 
48 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 49 
     | 
    
         
            +
                none: false
         
     | 
| 
       44 
50 
     | 
    
         
             
                requirements:
         
     | 
| 
       45 
51 
     | 
    
         
             
                - - ~>
         
     | 
| 
       46 
52 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
         @@ -48,6 +54,7 @@ dependencies: 
     | 
|
| 
       48 
54 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       49 
55 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       50 
56 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 57 
     | 
    
         
            +
                none: false
         
     | 
| 
       51 
58 
     | 
    
         
             
                requirements:
         
     | 
| 
       52 
59 
     | 
    
         
             
                - - ~>
         
     | 
| 
       53 
60 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
         @@ -55,17 +62,19 @@ dependencies: 
     | 
|
| 
       55 
62 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       56 
63 
     | 
    
         
             
              name: axiom-types
         
     | 
| 
       57 
64 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 65 
     | 
    
         
            +
                none: false
         
     | 
| 
       58 
66 
     | 
    
         
             
                requirements:
         
     | 
| 
       59 
67 
     | 
    
         
             
                - - ~>
         
     | 
| 
       60 
68 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       61 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 69 
     | 
    
         
            +
                    version: '0.1'
         
     | 
| 
       62 
70 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       63 
71 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       64 
72 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 73 
     | 
    
         
            +
                none: false
         
     | 
| 
       65 
74 
     | 
    
         
             
                requirements:
         
     | 
| 
       66 
75 
     | 
    
         
             
                - - ~>
         
     | 
| 
       67 
76 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       68 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 77 
     | 
    
         
            +
                    version: '0.1'
         
     | 
| 
       69 
78 
     | 
    
         
             
            description: Attributes on Steroids for Plain Old Ruby Objects
         
     | 
| 
       70 
79 
     | 
    
         
             
            email:
         
     | 
| 
       71 
80 
     | 
    
         
             
            - piotr.solnica@gmail.com
         
     | 
| 
         @@ -163,6 +172,7 @@ files: 
     | 
|
| 
       163 
172 
     | 
    
         
             
            - spec/unit/virtus/attribute/collection/class_methods/build_spec.rb
         
     | 
| 
       164 
173 
     | 
    
         
             
            - spec/unit/virtus/attribute/collection/coerce_spec.rb
         
     | 
| 
       165 
174 
     | 
    
         
             
            - spec/unit/virtus/attribute/custom_collection_spec.rb
         
     | 
| 
      
 175 
     | 
    
         
            +
            - spec/unit/virtus/attribute/defined_spec.rb
         
     | 
| 
       166 
176 
     | 
    
         
             
            - spec/unit/virtus/attribute/embedded_value/class_methods/build_spec.rb
         
     | 
| 
       167 
177 
     | 
    
         
             
            - spec/unit/virtus/attribute/embedded_value/coerce_spec.rb
         
     | 
| 
       168 
178 
     | 
    
         
             
            - spec/unit/virtus/attribute/get_spec.rb
         
     | 
| 
         @@ -199,26 +209,27 @@ files: 
     | 
|
| 
       199 
209 
     | 
    
         
             
            homepage: https://github.com/solnic/virtus
         
     | 
| 
       200 
210 
     | 
    
         
             
            licenses:
         
     | 
| 
       201 
211 
     | 
    
         
             
            - MIT
         
     | 
| 
       202 
     | 
    
         
            -
            metadata: {}
         
     | 
| 
       203 
212 
     | 
    
         
             
            post_install_message: 
         
     | 
| 
       204 
213 
     | 
    
         
             
            rdoc_options: []
         
     | 
| 
       205 
214 
     | 
    
         
             
            require_paths:
         
     | 
| 
       206 
215 
     | 
    
         
             
            - lib
         
     | 
| 
       207 
216 
     | 
    
         
             
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 217 
     | 
    
         
            +
              none: false
         
     | 
| 
       208 
218 
     | 
    
         
             
              requirements:
         
     | 
| 
       209 
     | 
    
         
            -
              - - '>='
         
     | 
| 
      
 219 
     | 
    
         
            +
              - - ! '>='
         
     | 
| 
       210 
220 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       211 
221 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       212 
222 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 223 
     | 
    
         
            +
              none: false
         
     | 
| 
       213 
224 
     | 
    
         
             
              requirements:
         
     | 
| 
       214 
     | 
    
         
            -
              - - '>='
         
     | 
| 
      
 225 
     | 
    
         
            +
              - - ! '>='
         
     | 
| 
       215 
226 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       216 
227 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       217 
228 
     | 
    
         
             
            requirements: []
         
     | 
| 
       218 
229 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       219 
     | 
    
         
            -
            rubygems_version:  
     | 
| 
      
 230 
     | 
    
         
            +
            rubygems_version: 1.8.23
         
     | 
| 
       220 
231 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       221 
     | 
    
         
            -
            specification_version:  
     | 
| 
      
 232 
     | 
    
         
            +
            specification_version: 3
         
     | 
| 
       222 
233 
     | 
    
         
             
            summary: Attributes on Steroids for Plain Old Ruby Objects
         
     | 
| 
       223 
234 
     | 
    
         
             
            test_files: []
         
     | 
| 
       224 
235 
     | 
    
         
             
            has_rdoc: 
         
     | 
    
        checksums.yaml
    DELETED
    
    | 
         @@ -1,7 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            ---
         
     | 
| 
       2 
     | 
    
         
            -
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz: 6888ad6cccbdd89e1d41781ceafcc78502aea7d6
         
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz: 6638f3068fdee7c541917a7171501a79be0077ea
         
     | 
| 
       5 
     | 
    
         
            -
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz: de43cc6cccde89c7009fcb77301e34aa062aea154cfbffc2655efd28d35e41bf0cb0eec547b522cc16861ea66805a7594fa532f2d147366dee5482ae69a9f73f
         
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz: 982101e49074af9ce296b4a647e9855e94dd327d7ab35196fb542201d83503b2c2e75e9d4e074e01e5e1565943f26f05b1784c8cca4501d5b638f6ff1992bbe7
         
     |