activerecord-delay_touching 0.0.4 → 1.0.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/README.md +2 -4
- data/activerecord-delay_touching.gemspec +1 -3
- data/lib/activerecord/delay_touching.rb +6 -9
- data/lib/activerecord/delay_touching/state.rb +6 -2
- data/lib/activerecord/delay_touching/version.rb +1 -1
- data/spec/activerecord/delay_touching_spec.rb +0 -22
- data/spec/support/models.rb +0 -13
- data/spec/support/schema.rb +0 -14
- metadata +4 -10
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: bf2e396443031e052664ae33fa9abca71b1a1b45
         | 
| 4 | 
            +
              data.tar.gz: 0009099d96abdb6f58a1590c5f5c7df699d0382e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: bba9504122174575808beec7d1107e603e434535afe421361dd83ad6341867fbdae957e509653349be3a7ebd16c97050d4c12ca900aa22360a547c61a017d2cd
         | 
| 7 | 
            +
              data.tar.gz: 2e822052fb026400b9abd0b9bb25a36220d9eac30acb02267495535b9da99fc3be49e1cd296e6c035ccdd0c97c12c00fe51636d38f3f64664048a4fcb5f6863b
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,7 +1,5 @@ | |
| 1 1 | 
             
            # Activerecord::DelayTouching
         | 
| 2 2 |  | 
| 3 | 
            -
            > **Note:** this version supports ActiveRecord 3.2 through 4.1 only. For ActiveRecord 4.2+, please see the Master branch.
         | 
| 4 | 
            -
             | 
| 5 3 | 
             
            Batch up your ActiveRecord "touch" operations for better performance.
         | 
| 6 4 |  | 
| 7 5 | 
             
            When you want to invalidate a cache in Rails, you use `touch: true`. But when
         | 
| @@ -15,7 +13,7 @@ round-trips as possible. Instead of N touches you get 1 touch. | |
| 15 13 |  | 
| 16 14 | 
             
            Add this line to your application's Gemfile:
         | 
| 17 15 |  | 
| 18 | 
            -
                gem 'activerecord-delay_touching' | 
| 16 | 
            +
                gem 'activerecord-delay_touching'
         | 
| 19 17 |  | 
| 20 18 | 
             
            And then execute:
         | 
| 21 19 |  | 
| @@ -23,7 +21,7 @@ And then execute: | |
| 23 21 |  | 
| 24 22 | 
             
            Or install it yourself:
         | 
| 25 23 |  | 
| 26 | 
            -
                $ gem install activerecord-delay_touching | 
| 24 | 
            +
                $ gem install activerecord-delay_touching
         | 
| 27 25 |  | 
| 28 26 | 
             
            ## Usage
         | 
| 29 27 |  | 
| @@ -13,14 +13,12 @@ Gem::Specification.new do |spec| | |
| 13 13 | 
             
              spec.homepage      = ""
         | 
| 14 14 | 
             
              spec.license       = "MIT"
         | 
| 15 15 |  | 
| 16 | 
            -
              spec.required_ruby_version = ">= 1.9.3"
         | 
| 17 | 
            -
             | 
| 18 16 | 
             
              spec.files         = `git ls-files -z`.split("\x0")
         | 
| 19 17 | 
             
              spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
         | 
| 20 18 | 
             
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         | 
| 21 19 | 
             
              spec.require_paths = ["lib"]
         | 
| 22 20 |  | 
| 23 | 
            -
              spec.add_dependency             "activerecord", ">=  | 
| 21 | 
            +
              spec.add_dependency             "activerecord", ">= 4.2"
         | 
| 24 22 |  | 
| 25 23 | 
             
              spec.add_development_dependency "bundler", "~> 1.6"
         | 
| 26 24 | 
             
              spec.add_development_dependency "rake"
         | 
| @@ -6,9 +6,9 @@ module ActiveRecord | |
| 6 6 | 
             
                extend ActiveSupport::Concern
         | 
| 7 7 |  | 
| 8 8 | 
             
                # Override ActiveRecord::Base#touch.
         | 
| 9 | 
            -
                def touch( | 
| 10 | 
            -
                  if self.class.delay_touching? &&  | 
| 11 | 
            -
                    DelayTouching.add_record(self,  | 
| 9 | 
            +
                def touch(*names)
         | 
| 10 | 
            +
                  if self.class.delay_touching? && !try(:no_touching?)
         | 
| 11 | 
            +
                    DelayTouching.add_record(self, *names)
         | 
| 12 12 | 
             
                    true
         | 
| 13 13 | 
             
                  else
         | 
| 14 14 | 
             
                    super
         | 
| @@ -41,8 +41,8 @@ module ActiveRecord | |
| 41 41 | 
             
                  Thread.current[:delay_touching_state] ||= State.new
         | 
| 42 42 | 
             
                end
         | 
| 43 43 |  | 
| 44 | 
            -
                 | 
| 45 | 
            -
                   | 
| 44 | 
            +
                class << self
         | 
| 45 | 
            +
                  delegate :add_record, to: :state
         | 
| 46 46 | 
             
                end
         | 
| 47 47 |  | 
| 48 48 | 
             
                # Start delaying all touches. When done, apply them. (Unless nested.)
         | 
| @@ -86,7 +86,6 @@ module ActiveRecord | |
| 86 86 | 
             
                      column = column.to_s
         | 
| 87 87 | 
             
                      changes[column] = current_time
         | 
| 88 88 | 
             
                      records.each do |record|
         | 
| 89 | 
            -
                        next if record.destroyed?
         | 
| 90 89 | 
             
                        record.instance_eval do
         | 
| 91 90 | 
             
                          write_attribute column, current_time
         | 
| 92 91 | 
             
                          @changed_attributes.except!(*changes.keys)
         | 
| @@ -102,6 +101,4 @@ module ActiveRecord | |
| 102 101 | 
             
              end
         | 
| 103 102 | 
             
            end
         | 
| 104 103 |  | 
| 105 | 
            -
            ActiveRecord::Base. | 
| 106 | 
            -
              include ActiveRecord::DelayTouching
         | 
| 107 | 
            -
            end
         | 
| 104 | 
            +
            ActiveRecord::Base.include ActiveRecord::DelayTouching
         | 
| @@ -37,14 +37,18 @@ module ActiveRecord | |
| 37 37 | 
             
                    @records.present?
         | 
| 38 38 | 
             
                  end
         | 
| 39 39 |  | 
| 40 | 
            -
                  def add_record(record,  | 
| 41 | 
            -
                     | 
| 40 | 
            +
                  def add_record(record, *columns)
         | 
| 41 | 
            +
                    columns << nil if columns.empty? #if no arguments are passed, we will use nil to infer default column
         | 
| 42 | 
            +
                    columns.each do |column|
         | 
| 43 | 
            +
                      @records[column] += [ record ] unless @already_updated_records[column].include?(record)
         | 
| 44 | 
            +
                    end
         | 
| 42 45 | 
             
                  end
         | 
| 43 46 |  | 
| 44 47 | 
             
                  def clear_records
         | 
| 45 48 | 
             
                    @records.clear
         | 
| 46 49 | 
             
                    @already_updated_records.clear
         | 
| 47 50 | 
             
                  end
         | 
| 51 | 
            +
             | 
| 48 52 | 
             
                end
         | 
| 49 53 | 
             
              end
         | 
| 50 54 | 
             
            end
         | 
| @@ -151,28 +151,6 @@ describe Activerecord::DelayTouching do | |
| 151 151 | 
             
                end
         | 
| 152 152 | 
             
              end
         | 
| 153 153 |  | 
| 154 | 
            -
              context 'dependent deletes' do
         | 
| 155 | 
            -
             | 
| 156 | 
            -
                let(:post) { Post.create! }
         | 
| 157 | 
            -
                let(:user) { User.create! }
         | 
| 158 | 
            -
                let(:comment) { Comment.create! }
         | 
| 159 | 
            -
             | 
| 160 | 
            -
                before do
         | 
| 161 | 
            -
                  post.comments << comment
         | 
| 162 | 
            -
                  user.comments << comment
         | 
| 163 | 
            -
                end
         | 
| 164 | 
            -
             | 
| 165 | 
            -
                it 'does not attempt to touch deleted records' do
         | 
| 166 | 
            -
                  expect do
         | 
| 167 | 
            -
                    ActiveRecord::Base.delay_touching do
         | 
| 168 | 
            -
                      post.destroy
         | 
| 169 | 
            -
                    end
         | 
| 170 | 
            -
                  end.not_to raise_error
         | 
| 171 | 
            -
                  expect(post.destroyed?).to eq true
         | 
| 172 | 
            -
                end
         | 
| 173 | 
            -
             | 
| 174 | 
            -
              end
         | 
| 175 | 
            -
             | 
| 176 154 | 
             
              def expect_updates(tables)
         | 
| 177 155 | 
             
                expected_sql = tables.map do |entry|
         | 
| 178 156 | 
             
                  if entry.kind_of?(Hash)
         | 
    
        data/spec/support/models.rb
    CHANGED
    
    | @@ -5,16 +5,3 @@ end | |
| 5 5 | 
             
            class Pet < ActiveRecord::Base
         | 
| 6 6 | 
             
              belongs_to :person, touch: true, inverse_of: :pets
         | 
| 7 7 | 
             
            end
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            class Post < ActiveRecord::Base
         | 
| 10 | 
            -
              has_many :comments, dependent: :destroy
         | 
| 11 | 
            -
            end
         | 
| 12 | 
            -
             | 
| 13 | 
            -
            class User < ActiveRecord::Base
         | 
| 14 | 
            -
              has_many :comments, dependent: :destroy
         | 
| 15 | 
            -
            end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
            class Comment < ActiveRecord::Base
         | 
| 18 | 
            -
              belongs_to :post, touch: true
         | 
| 19 | 
            -
              belongs_to :user, touch: true
         | 
| 20 | 
            -
            end
         | 
    
        data/spec/support/schema.rb
    CHANGED
    
    | @@ -16,18 +16,4 @@ ActiveRecord::Schema.define do | |
| 16 16 | 
             
                t.timestamps
         | 
| 17 17 | 
             
              end
         | 
| 18 18 |  | 
| 19 | 
            -
              create_table :posts, force: true do |t|
         | 
| 20 | 
            -
                t.timestamps null: false
         | 
| 21 | 
            -
              end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
              create_table :users, force: true do |t|
         | 
| 24 | 
            -
                t.timestamps null: false
         | 
| 25 | 
            -
              end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
              create_table :comments, force: true do |t|
         | 
| 28 | 
            -
                t.integer :post_id
         | 
| 29 | 
            -
                t.integer :user_id
         | 
| 30 | 
            -
                t.timestamps null: false
         | 
| 31 | 
            -
              end
         | 
| 32 | 
            -
             | 
| 33 19 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,23 +1,20 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: activerecord-delay_touching
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0 | 
| 4 | 
            +
              version: 1.0.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Brian Morearty
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015-07 | 
| 11 | 
            +
            date: 2015-05-07 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activerecord
         | 
| 15 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - ">="
         | 
| 18 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: '3.2'
         | 
| 20 | 
            -
                - - "<"
         | 
| 21 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 22 19 | 
             
                    version: '4.2'
         | 
| 23 20 | 
             
              type: :runtime
         | 
| @@ -25,9 +22,6 @@ dependencies: | |
| 25 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 26 23 | 
             
                requirements:
         | 
| 27 24 | 
             
                - - ">="
         | 
| 28 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            -
                    version: '3.2'
         | 
| 30 | 
            -
                - - "<"
         | 
| 31 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 32 26 | 
             
                    version: '4.2'
         | 
| 33 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| @@ -178,7 +172,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 178 172 | 
             
              requirements:
         | 
| 179 173 | 
             
              - - ">="
         | 
| 180 174 | 
             
                - !ruby/object:Gem::Version
         | 
| 181 | 
            -
                  version:  | 
| 175 | 
            +
                  version: '0'
         | 
| 182 176 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 183 177 | 
             
              requirements:
         | 
| 184 178 | 
             
              - - ">="
         | 
| @@ -186,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 186 180 | 
             
                  version: '0'
         | 
| 187 181 | 
             
            requirements: []
         | 
| 188 182 | 
             
            rubyforge_project: 
         | 
| 189 | 
            -
            rubygems_version: 2.4. | 
| 183 | 
            +
            rubygems_version: 2.4.6
         | 
| 190 184 | 
             
            signing_key: 
         | 
| 191 185 | 
             
            specification_version: 4
         | 
| 192 186 | 
             
            summary: Batch up your ActiveRecord "touch" operations for better performance.
         |