activerecord-typedstore 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.
- checksums.yaml +4 -4
- data/activerecord-typedstore.gemspec +1 -1
- data/gemfiles/Gemfile.ar-5.1 +11 -0
- data/lib/active_record/typed_store/dsl.rb +10 -4
- data/lib/active_record/typed_store/extension.rb +8 -1
- data/lib/active_record/typed_store/version.rb +1 -1
- data/spec/active_record/typed_store_spec.rb +5 -0
- data/spec/support/models.rb +6 -4
- metadata +5 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: d9f474258f3d2248355c75bfaaed2439a6f17d01
         | 
| 4 | 
            +
              data.tar.gz: a7f227175a6583d765931a9feda03e8ede33b4b0
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f2f2191bb5cec0d4e138b3adeafdd6a779bd032f31c2d93f8862484676afd5683f6fdb7bf230ebe3f6f9a0e9843f6d0b58f1278917c5db5488f684ff6664a978
         | 
| 7 | 
            +
              data.tar.gz: 4f74a8624f48916154ffa549d5e0320c3679db8534280c4593669bc4a2f000d32bdd3947dd2e673b75fae4d8708102b8c3c5492a9c76cece3ea6a9026c177cb6
         | 
| @@ -18,7 +18,7 @@ Gem::Specification.new do |spec| | |
| 18 18 | 
             
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         | 
| 19 19 | 
             
              spec.require_paths = ['lib']
         | 
| 20 20 |  | 
| 21 | 
            -
              spec.add_dependency 'activerecord', '>= 4.2', '< 5. | 
| 21 | 
            +
              spec.add_dependency 'activerecord', '>= 4.2', '< 5.2'
         | 
| 22 22 |  | 
| 23 23 | 
             
              spec.add_development_dependency 'bundler', '~> 1.3'
         | 
| 24 24 | 
             
              spec.add_development_dependency 'rake', '~> 10'
         | 
| @@ -4,16 +4,22 @@ module ActiveRecord::TypedStore | |
| 4 4 | 
             
              class DSL
         | 
| 5 5 | 
             
                attr_reader :fields, :coder
         | 
| 6 6 |  | 
| 7 | 
            -
                def initialize(options)
         | 
| 8 | 
            -
                  @coder = options.fetch(:coder) { default_coder }
         | 
| 7 | 
            +
                def initialize(attribute_name, options)
         | 
| 8 | 
            +
                  @coder = options.fetch(:coder) { default_coder(attribute_name) }
         | 
| 9 9 | 
             
                  @accessors = options[:accessors]
         | 
| 10 10 | 
             
                  @accessors = [] if options[:accessors] == false
         | 
| 11 11 | 
             
                  @fields = {}
         | 
| 12 12 | 
             
                  yield self
         | 
| 13 13 | 
             
                end
         | 
| 14 14 |  | 
| 15 | 
            -
                 | 
| 16 | 
            -
                   | 
| 15 | 
            +
                if ActiveRecord.gem_version < Gem::Version.new('5.1.0')
         | 
| 16 | 
            +
                  def default_coder(attribute_name)
         | 
| 17 | 
            +
                    ActiveRecord::Coders::YAMLColumn.new
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
                else
         | 
| 20 | 
            +
                  def default_coder(attribute_name)
         | 
| 21 | 
            +
                    ActiveRecord::Coders::YAMLColumn.new(attribute_name)
         | 
| 22 | 
            +
                  end
         | 
| 17 23 | 
             
                end
         | 
| 18 24 |  | 
| 19 25 | 
             
                def accessors
         | 
| @@ -17,7 +17,7 @@ module ActiveRecord::TypedStore | |
| 17 17 | 
             
                  end
         | 
| 18 18 |  | 
| 19 19 | 
             
                  def typed_store(store_attribute, options={}, &block)
         | 
| 20 | 
            -
                    dsl = DSL.new(options, &block)
         | 
| 20 | 
            +
                    dsl = DSL.new(store_attribute, options, &block)
         | 
| 21 21 | 
             
                    self.typed_stores ||= {}
         | 
| 22 22 | 
             
                    self.typed_stores[store_attribute] = dsl
         | 
| 23 23 |  | 
| @@ -61,6 +61,13 @@ module ActiveRecord::TypedStore | |
| 61 61 | 
             
                  super
         | 
| 62 62 | 
             
                end
         | 
| 63 63 |  | 
| 64 | 
            +
                def read_attribute(attr_name)
         | 
| 65 | 
            +
                  if self.class.store_accessors.include?(attr_name.to_sym)
         | 
| 66 | 
            +
                    return public_send(attr_name)
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
                  super
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 64 71 | 
             
                def write_store_attribute(store_attribute, key, value)
         | 
| 65 72 | 
             
                  if typed_stores && typed_stores[store_attribute]
         | 
| 66 73 | 
             
                    prev_value = read_store_attribute(store_attribute, key)
         | 
| @@ -140,6 +140,11 @@ shared_examples 'any model' do | |
| 140 140 | 
             
                it 'is initialized at nil if :default is not defined' do
         | 
| 141 141 | 
             
                  expect(model.no_default).to be_nil
         | 
| 142 142 | 
             
                end
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                it 'is accessible throught #read_attribute' do
         | 
| 145 | 
            +
                  model.name = 'foo'
         | 
| 146 | 
            +
                  expect(model.read_attribute(:name)).to be == 'foo'
         | 
| 147 | 
            +
                end
         | 
| 143 148 | 
             
              end
         | 
| 144 149 |  | 
| 145 150 | 
             
              describe 'string attribute' do
         | 
    
        data/spec/support/models.rb
    CHANGED
    
    | @@ -6,12 +6,13 @@ AR_VERSION = Gem::Version.new(ActiveRecord::VERSION::STRING) | |
| 6 6 | 
             
            AR_4_0 = Gem::Version.new('4.0')
         | 
| 7 7 | 
             
            AR_4_1 = Gem::Version.new('4.1.0.beta')
         | 
| 8 8 | 
             
            AR_4_2 = Gem::Version.new('4.2.0-rc1')
         | 
| 9 | 
            +
            AR_5_0 = Gem::Version.new('5.0.0')
         | 
| 9 10 |  | 
| 10 11 | 
             
            ActiveRecord::Base.time_zone_aware_attributes = ENV['TIMEZONE_AWARE'] != '0'
         | 
| 11 12 | 
             
            ActiveRecord::Base.configurations = {
         | 
| 12 | 
            -
              'test_sqlite3' => {adapter | 
| 13 | 
            -
              'test_postgresql' => {adapter | 
| 14 | 
            -
              'test_mysql' => {adapter | 
| 13 | 
            +
              'test_sqlite3' => { 'adapter' => 'sqlite3', 'database' => '/tmp/typed_store.db' },
         | 
| 14 | 
            +
              'test_postgresql' => { 'adapter' => 'postgresql', 'database' => 'typed_store_test', 'username' => 'postgres' },
         | 
| 15 | 
            +
              'test_mysql' => { 'adapter' => 'mysql2', 'database' => 'typed_store_test', 'username' => 'travis' },
         | 
| 15 16 | 
             
            }
         | 
| 16 17 |  | 
| 17 18 | 
             
            def define_columns(t)
         | 
| @@ -76,7 +77,8 @@ def define_store_with_attributes(**options) | |
| 76 77 | 
             
              end
         | 
| 77 78 | 
             
            end
         | 
| 78 79 |  | 
| 79 | 
            -
             | 
| 80 | 
            +
            MigrationClass = AR_VERSION >= AR_5_0 ? ActiveRecord::Migration["5.0"] : ActiveRecord::Migration
         | 
| 81 | 
            +
            class CreateAllTables < MigrationClass
         | 
| 80 82 |  | 
| 81 83 | 
             
              def self.recreate_table(name, *args, &block)
         | 
| 82 84 | 
             
                execute "drop table if exists #{name}"
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: activerecord-typedstore
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0 | 
| 4 | 
            +
              version: 1.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Jean Boussier
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2017-05-18 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activerecord
         | 
| @@ -19,7 +19,7 @@ dependencies: | |
| 19 19 | 
             
                    version: '4.2'
         | 
| 20 20 | 
             
                - - "<"
         | 
| 21 21 | 
             
                  - !ruby/object:Gem::Version
         | 
| 22 | 
            -
                    version: '5. | 
| 22 | 
            +
                    version: '5.2'
         | 
| 23 23 | 
             
              type: :runtime
         | 
| 24 24 | 
             
              prerelease: false
         | 
| 25 25 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -29,7 +29,7 @@ dependencies: | |
| 29 29 | 
             
                    version: '4.2'
         | 
| 30 30 | 
             
                - - "<"
         | 
| 31 31 | 
             
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            -
                    version: '5. | 
| 32 | 
            +
                    version: '5.2'
         | 
| 33 33 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 34 34 | 
             
              name: bundler
         | 
| 35 35 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -162,6 +162,7 @@ files: | |
| 162 162 | 
             
            - gemfiles/Gemfile.ar-4.1
         | 
| 163 163 | 
             
            - gemfiles/Gemfile.ar-4.2
         | 
| 164 164 | 
             
            - gemfiles/Gemfile.ar-5.0
         | 
| 165 | 
            +
            - gemfiles/Gemfile.ar-5.1
         | 
| 165 166 | 
             
            - lib/active_record/typed_store.rb
         | 
| 166 167 | 
             
            - lib/active_record/typed_store/dsl.rb
         | 
| 167 168 | 
             
            - lib/active_record/typed_store/extension.rb
         |