constant_table_saver 5.1.1 → 5.1.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.
- checksums.yaml +4 -4
- data/Gemfile +1 -3
- data/MIT-LICENSE +1 -1
- data/README.md +7 -2
- data/constant_table_saver.gemspec +3 -0
- data/lib/constant_table_saver.rb +2 -2
- data/lib/constant_table_saver/version.rb +1 -1
- data/test/constant_table_saver_test.rb +23 -0
- data/test/database.yml +0 -4
- data/test/test_helper.rb +1 -1
- data/test_all.rb +8 -5
- metadata +45 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 952a6f9f15aa9905df69f3dcb279391f55a5abde
         | 
| 4 | 
            +
              data.tar.gz: ac94f3acbf0e194aad02e91fb4c45ed16f2594d3
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 278138ada54ee955e1a29b58505959e772e4db8468d4835393502912e8d91ecd7766cc1347f40afcfece79892b3419ce93580a15f2a3f6ff57a177a7a42e6dcf
         | 
| 7 | 
            +
              data.tar.gz: 6367660c3f7a614fa90357558fa93f8ced9a3a1b3a26a9486a48c05c496a96ff8a6acf661aac9990d8914220d17d835d3adf8dddf02be15a7601a0b3f3776982
         | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/MIT-LICENSE
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -11,7 +11,7 @@ named after the name field you specify. | |
| 11 11 | 
             
            Compatibility
         | 
| 12 12 | 
             
            =============
         | 
| 13 13 |  | 
| 14 | 
            -
            Currently tested against Rails 5.1 (5.1. | 
| 14 | 
            +
            Currently tested against Rails 5.1 (up to 5.1.6), 5.0 (up to 5.0.6), and 4.2 (up to 4.2.10), on Ruby 2.3.6, 2.4.3, and 2.5.0.
         | 
| 15 15 |  | 
| 16 16 | 
             
            For earlier versions of Rails, use an older version of the gem.
         | 
| 17 17 |  | 
| @@ -82,4 +82,9 @@ Means you will also have methods returning those records: | |
| 82 82 | 
             
            Optionally, you can specify a `:name_prefix` and/or `:name_suffix`.
         | 
| 83 83 |  | 
| 84 84 |  | 
| 85 | 
            -
             | 
| 85 | 
            +
            Thanks
         | 
| 86 | 
            +
            ======
         | 
| 87 | 
            +
             | 
| 88 | 
            +
            * Marc Shaw (@marcshaw)
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            Copyright (c) 2010-2018 Will Bryant, Sekuda Ltd, released under the MIT license
         | 
    
        data/lib/constant_table_saver.rb
    CHANGED
    
    | @@ -80,7 +80,7 @@ module ConstantTableSaver | |
| 80 80 | 
             
              module ActiveRecord5ClassMethods
         | 
| 81 81 | 
             
                def find_by_sql(sql, binds = [], preparable: nil, &block)
         | 
| 82 82 | 
             
                  @find_by_sql ||= {
         | 
| 83 | 
            -
                    :all   =>  | 
| 83 | 
            +
                    :all   => relation.to_sql,
         | 
| 84 84 | 
             
                    :id    => relation.where(relation.table[primary_key].eq(Arel::Nodes::BindParam.new)).limit(1).arel,
         | 
| 85 85 | 
             
                    :first => relation.order(relation.table[primary_key].asc).limit(1).arel,
         | 
| 86 86 | 
             
                    :last  => relation.order(relation.table[primary_key].desc).limit(1).arel,
         | 
| @@ -119,7 +119,7 @@ module ConstantTableSaver | |
| 119 119 | 
             
              module ActiveRecord4ClassMethods
         | 
| 120 120 | 
             
                def find_by_sql(sql, binds = [])
         | 
| 121 121 | 
             
                  @find_by_sql ||= {
         | 
| 122 | 
            -
                    :all   =>  | 
| 122 | 
            +
                    :all   => relation.to_sql,
         | 
| 123 123 | 
             
                    :id    => relation.where(relation.table[primary_key].eq(connection.substitute_at(columns_hash[primary_key], 0))).limit(1).
         | 
| 124 124 | 
             
                                tap {|r| r.bind_values += [[columns_hash[primary_key], :undefined]]}. # work around AR 4.1.9-4.1.x (but not 4.2.x) calling nil.first if there's no bind_values
         | 
| 125 125 | 
             
                                arel,
         | 
| @@ -14,6 +14,10 @@ class ConstantPie < ActiveRecord::Base | |
| 14 14 | 
             
              def self.with_unicorn_filling_scope
         | 
| 15 15 | 
             
                with_scope(:find => {:conditions => {:filling => 'unicorn'}}) { yield }
         | 
| 16 16 | 
             
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              def self.retrieve_pies
         | 
| 19 | 
            +
                all.map { |x| x }
         | 
| 20 | 
            +
              end
         | 
| 17 21 | 
             
            end
         | 
| 18 22 |  | 
| 19 23 | 
             
            class ConstantNamedPie < ActiveRecord::Base
         | 
| @@ -160,6 +164,25 @@ class ConstantTableSaverTest < ActiveSupport::TestCase | |
| 160 164 | 
             
                end
         | 
| 161 165 | 
             
              end
         | 
| 162 166 |  | 
| 167 | 
            +
              test "it doesn't cache find queries on scoped methods, even when no binds are set, if the records have been cached" do
         | 
| 168 | 
            +
                ConstantPie.all.to_a
         | 
| 169 | 
            +
                assert_queries(1) do
         | 
| 170 | 
            +
                  @pies = ConstantPie.where(:filling => ["Tasty beef steak"]).retrieve_pies
         | 
| 171 | 
            +
                end
         | 
| 172 | 
            +
                assert_equal 1, @pies.size
         | 
| 173 | 
            +
              end
         | 
| 174 | 
            +
             | 
| 175 | 
            +
              test "it doesn't cache find queries on scoped methods, even when no binds are set, if the records have not been cached" do
         | 
| 176 | 
            +
                # these two lines are needed to fix random test order failures when nothing has hit the ConstantPie schema before
         | 
| 177 | 
            +
                ConstantPie.all.to_a
         | 
| 178 | 
            +
                ConstantPie.reset_constant_record_cache!
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                assert_queries(1) do
         | 
| 181 | 
            +
                  @pies = ConstantPie.where(:filling => ["Tasty beef steak"]).retrieve_pies
         | 
| 182 | 
            +
                end
         | 
| 183 | 
            +
                assert_equal 1, @pies.size
         | 
| 184 | 
            +
              end
         | 
| 185 | 
            +
             | 
| 163 186 | 
             
              test "it passes the options preventing caching to the underlying query methods" do
         | 
| 164 187 | 
             
                assert_nil ConstantPie.where(:filling => 'unicorn').first
         | 
| 165 188 | 
             
                assert_equal [],  ConstantPie.where(:filling => 'unicorn').all
         | 
    
        data/test/database.yml
    CHANGED
    
    
    
        data/test/test_helper.rb
    CHANGED
    
    
    
        data/test_all.rb
    CHANGED
    
    | @@ -2,12 +2,15 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            require 'yaml'
         | 
| 4 4 |  | 
| 5 | 
            -
            rails_versions = [" | 
| 5 | 
            +
            rails_versions = ["5.1.1".."5.1.6", "5.0.2".."5.0.6", "4.2.10"].flat_map {|spec| Array(spec).collect {|v| v.gsub /.0(\d)/, '.\\1'}}
         | 
| 6 6 | 
             
            rails_envs = YAML.load(File.read("test/database.yml")).keys
         | 
| 7 7 |  | 
| 8 | 
            -
             | 
| 9 | 
            -
               | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 8 | 
            +
            rails_versions.each do |version|
         | 
| 9 | 
            +
              puts "*"*40
         | 
| 10 | 
            +
              system "RAILS_VERSION=#{version} bundle update rails" or exit(1)
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              rails_envs.each do |env|
         | 
| 13 | 
            +
                puts "Rails #{version}, #{env}"
         | 
| 14 | 
            +
                system "RAILS_ENV=#{env} bundle exec rake" or exit(2)
         | 
| 12 15 | 
             
              end
         | 
| 13 16 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: constant_table_saver
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 5.1. | 
| 4 | 
            +
              version: 5.1.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Will Bryant
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2018-06-04 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activerecord
         | 
| @@ -38,6 +38,34 @@ dependencies: | |
| 38 38 | 
             
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 40 | 
             
                    version: '0'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: mysql2
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - ">="
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '0'
         | 
| 48 | 
            +
              type: :development
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - ">="
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '0'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: pg
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ">="
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '0'
         | 
| 62 | 
            +
              type: :development
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - ">="
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: '0'
         | 
| 41 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 70 | 
             
              name: sqlite3
         | 
| 43 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -52,6 +80,20 @@ dependencies: | |
| 52 80 | 
             
                - - ">="
         | 
| 53 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 82 | 
             
                    version: '0'
         | 
| 83 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            +
              name: byebug
         | 
| 85 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 | 
            +
                requirements:
         | 
| 87 | 
            +
                - - ">="
         | 
| 88 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            +
                    version: '0'
         | 
| 90 | 
            +
              type: :development
         | 
| 91 | 
            +
              prerelease: false
         | 
| 92 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 | 
            +
                requirements:
         | 
| 94 | 
            +
                - - ">="
         | 
| 95 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            +
                    version: '0'
         | 
| 55 97 | 
             
            description: |
         | 
| 56 98 | 
             
              Loads all records from the table on first use, and thereafter returns the
         | 
| 57 99 | 
             
              cached (and frozen) records for all find calls.
         | 
| @@ -121,3 +163,4 @@ test_files: | |
| 121 163 | 
             
            - test/fixtures/pies.yml
         | 
| 122 164 | 
             
            - test/schema.rb
         | 
| 123 165 | 
             
            - test/test_helper.rb
         | 
| 166 | 
            +
            has_rdoc: false
         |