active_record-events 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YWIyMzk2ODkyNDRlMGE2ZjA0ZmNhOGM1YmM5YjVjYjQ2ZWM0NmVhMQ==
5
- data.tar.gz: !binary |-
6
- YTAyZGNhYTU5NTcxOWE1OTM3NTg2YmMzZjA2OGEwNzBjN2U5YjJlZA==
2
+ SHA256:
3
+ metadata.gz: 925ad39a33ff672195121c743c130982bf379388a98dfb9fddefe4a624ce0d3a
4
+ data.tar.gz: c428f4b9ea6a9c44b5c472c80a5bd4349eaab9337b67209d58e7238325824b72
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- OTUyZDQxYzdhOGIwMTU1ZGE3MGI3NDAwNzM4ZDEwMjE1YzVmNjA5MGFhN2Jm
10
- M2UxZGQxMmRmYzU3MjVlNGY4ZWY0ODdjZmE0MzQ5OGEyMzY3N2U3NjIyODYx
11
- OTVmNTRmYjhiMjYyNTIzZDIwYTQxZjdmODkzMTI4MWVkM2RjODU=
12
- data.tar.gz: !binary |-
13
- YjYxMzgyNmExNmQxNjI1Y2VmZTgzNTNjOGVkN2M1Y2MzODAyZWIyN2NlMWI2
14
- MmNiMjQyYmQ1MGJlYjk5NDYwMzAxZGQxZTMwZDMwNGUxMzY3MzY4NTM3MDhh
15
- ZjliZGY3MzZmZjU5MzVjMjVkYWUwMWVjMWE2NTdjYjQ5ZTBlYjI=
6
+ metadata.gz: a5eadfba86bf1b157fcf1906628c3e391b79677524e9851374cedd764b7170867f933781ddb6ee87f435c67b872171e471dccd57904b65700c4534c18a005815
7
+ data.tar.gz: ba34b744b02a293db01f51dbad13cac7c5afc687aaf4e8ee4d3ac533981d121ba46b8b7099e789b0df26022e5383d788e1c098ca581780c2430b540f6d012d0a
data/README.md CHANGED
@@ -46,10 +46,14 @@ class Task < ActiveRecord::Base
46
46
  def complete!
47
47
  touch(:completed_at)
48
48
  end
49
+
50
+ def self.complete_all
51
+ touch_all(:completed_at)
52
+ end
49
53
  end
50
54
  ```
51
55
 
52
- Instead of defining these four methods explicitly, you can use a macro provided by the gem.
56
+ Instead of defining these five methods explicitly, you can use a macro provided by the gem.
53
57
 
54
58
  ```ruby
55
59
  class Task < ActiveRecord::Base
@@ -84,7 +88,18 @@ class User < ActiveRecord::Base
84
88
  end
85
89
  ```
86
90
 
87
- This will generate `email_not_confirmed?`, `email_confirmed?`, `confirm_email` and `confirm_email!` methods.
91
+ This will generate the following methods:
92
+
93
+ - `email_not_confirmed?`
94
+ - `email_confirmed?`
95
+ - `confirm_email`
96
+ - `confirm_email!`
97
+ - `confirm_all_emails` (class method)
98
+
99
+ As well as these two scopes:
100
+
101
+ - `email_confirmed`
102
+ - `email_not_confirmed`
88
103
 
89
104
  ## See also
90
105
 
data/Rakefile CHANGED
@@ -16,15 +16,22 @@ end
16
16
 
17
17
  RDoc::Task.new(:rdoc) do |rdoc|
18
18
  rdoc.rdoc_dir = 'rdoc'
19
- rdoc.title = 'ActiveRecord::Events'
19
+ rdoc.title = 'ActiveRecord::Events'
20
20
  rdoc.options << '--line-numbers'
21
21
  rdoc.rdoc_files.include('README.rdoc')
22
22
  rdoc.rdoc_files.include('lib/**/*.rb')
23
23
  end
24
24
 
25
25
  require 'standalone_migrations'
26
+
26
27
  StandaloneMigrations::Tasks.load_tasks
27
28
 
29
+ if Gem::Version.new(ActiveRecord::VERSION::STRING) >= Gem::Version.new('5.1.0')
30
+ ACTIVE_RECORD_MIGRATION_CLASS = ActiveRecord::Migration[4.2]
31
+ else
32
+ ACTIVE_RECORD_MIGRATION_CLASS = ActiveRecord::Migration
33
+ end
34
+
28
35
  Bundler::GemHelper.install_tasks
29
36
 
30
37
  require 'rspec/core'
@@ -27,6 +27,10 @@ module ActiveRecord
27
27
  touch(naming.field)
28
28
  end
29
29
 
30
+ define_singleton_method(naming.collective_action) do
31
+ update_all(naming.field => Time.current)
32
+ end
33
+
30
34
  define_singleton_method(naming.scope) do
31
35
  where(arel_table[naming.field].not_eq(nil))
32
36
  end
@@ -24,6 +24,10 @@ module ActiveRecord
24
24
  [@infinitive, @object].compact.join('_')
25
25
  end
26
26
 
27
+ def collective_action
28
+ [@infinitive, 'all', pluralized_object].compact.join('_')
29
+ end
30
+
27
31
  def scope
28
32
  [@object, past_participle].compact.join('_')
29
33
  end
@@ -37,6 +41,10 @@ module ActiveRecord
37
41
  def past_participle
38
42
  @infinitive.verb.conjugate(tense: :past, aspect: :perfective)
39
43
  end
44
+
45
+ def pluralized_object
46
+ @object.to_s.pluralize if @object.present?
47
+ end
40
48
  end
41
49
  end
42
50
  end
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module Events
3
- VERSION = '2.1.0'
3
+ VERSION = '2.2.0'
4
4
  end
5
5
  end
@@ -20,6 +20,10 @@ RSpec.describe ActiveRecord::Events::Naming do
20
20
  expect(subject.action).to eq('complete')
21
21
  end
22
22
 
23
+ it 'generates a collective action name' do
24
+ expect(subject.collective_action).to eq('complete_all')
25
+ end
26
+
23
27
  it 'generates a scope name' do
24
28
  expect(subject.scope).to eq('completed')
25
29
  end
@@ -48,6 +52,10 @@ RSpec.describe ActiveRecord::Events::Naming do
48
52
  expect(subject.action).to eq('confirm_email')
49
53
  end
50
54
 
55
+ it 'generates a collective action name' do
56
+ expect(subject.collective_action).to eq('confirm_all_emails')
57
+ end
58
+
51
59
  it 'generates a scope name' do
52
60
  expect(subject.scope).to eq('email_confirmed')
53
61
  end
@@ -1,42 +1,69 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe ActiveRecord::Events do
4
- let(:task) { create(:task) }
4
+ around(:each) { |e| Timecop.freeze { e.run } }
5
5
 
6
- it 'records a timestamp' do
7
- task.complete
6
+ context 'without an object' do
7
+ let!(:task) { create(:task) }
8
8
 
9
- expect(task).to be_completed
10
- expect(task).not_to be_not_completed
9
+ it 'records a timestamp' do
10
+ task.complete
11
11
 
12
- expect(task.completed_at).to eq(Time.now)
13
- end
12
+ expect(task.completed?).to eq(true)
13
+ expect(task.not_completed?).to eq(false)
14
14
 
15
- it 'preserves a timestamp' do
16
- task = create(:task, completed_at: 3.days.ago)
17
- task.complete
15
+ expect(task.completed_at).to eq(Time.current)
16
+ end
18
17
 
19
- expect(task.completed_at).to eq(3.days.ago)
20
- end
18
+ it 'preserves a timestamp' do
19
+ task = create(:task, completed_at: 3.days.ago)
20
+ task.complete
21
21
 
22
- it 'updates a timestamp' do
23
- task = create(:task, completed_at: 3.days.ago)
24
- task.complete!
22
+ expect(task.completed_at).to eq(3.days.ago)
23
+ end
25
24
 
26
- expect(task.completed_at).to eq(Time.now)
27
- end
25
+ it 'updates a timestamp' do
26
+ task = create(:task, completed_at: 3.days.ago)
27
+ task.complete!
28
+
29
+ expect(task.completed_at).to eq(Time.current)
30
+ end
31
+
32
+ it 'records multiple timestamps' do
33
+ Task.complete_all
34
+ expect(task.reload.completed?).to eq(true)
35
+ end
28
36
 
29
- it 'defines scope methods' do
30
- expect(Task.not_completed).to include(task)
31
- expect(Task.completed).not_to include(task)
37
+ it 'defines a scope' do
38
+ expect(Task.completed).not_to include(task)
39
+ end
40
+
41
+ it 'defines an inverse scope' do
42
+ expect(Task.not_completed).to include(task)
43
+ end
32
44
  end
33
45
 
34
- let(:user) { create(:user) }
46
+ context 'with an object' do
47
+ let!(:user) { create(:user) }
48
+
49
+ it 'records a timestamp' do
50
+ user.confirm_email
51
+
52
+ expect(user.email_confirmed?).to eq(true)
53
+ expect(user.email_not_confirmed?).to eq(false)
54
+ end
55
+
56
+ it 'records multiple timestamps' do
57
+ User.confirm_all_emails
58
+ expect(user.reload.email_confirmed?).to eq(true)
59
+ end
35
60
 
36
- it 'handles an object' do
37
- user.confirm_email
61
+ it 'defines a scope' do
62
+ expect(User.email_confirmed).not_to include(user)
63
+ end
38
64
 
39
- expect(user.email_confirmed?).to be(true)
40
- expect(user.email_not_confirmed?).to be(false)
65
+ it 'defines an inverse scope' do
66
+ expect(User.email_not_confirmed).to include(user)
67
+ end
41
68
  end
42
69
  end
@@ -1,5 +1,6 @@
1
- # Set up gems listed in the Gemfile.
1
+ # Set up gems listed in the Gemfile
2
2
  ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../../Gemfile', __FILE__)
3
3
 
4
4
  require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
5
+
5
6
  $LOAD_PATH.unshift File.expand_path('../../../../lib', __FILE__)
@@ -1,4 +1,4 @@
1
- class CreateTasks < ActiveRecord::Migration
1
+ class CreateTasks < ACTIVE_RECORD_MIGRATION_CLASS
2
2
  def change
3
3
  create_table :tasks do |t|
4
4
  t.datetime :completed_at
@@ -1,4 +1,4 @@
1
- class CreateUsers < ActiveRecord::Migration
1
+ class CreateUsers < ACTIVE_RECORD_MIGRATION_CLASS
2
2
  def change
3
3
  create_table :users do |t|
4
4
  t.datetime :email_confirmed_at
@@ -1,4 +1,3 @@
1
- # encoding: UTF-8
2
1
  # This file is auto-generated from the current state of the database. Instead
3
2
  # of editing this file, please use the migrations feature of Active Record to
4
3
  # incrementally modify your database, and then regenerate this schema definition.
@@ -9,20 +8,20 @@
9
8
  # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
9
  # you'll amass, the slower it'll run and the greater likelihood for issues).
11
10
  #
12
- # It's strongly recommended to check this file into your version control system.
11
+ # It's strongly recommended that you check this file into your version control system.
13
12
 
14
- ActiveRecord::Schema.define(:version => 20170103215307) do
13
+ ActiveRecord::Schema.define(version: 2017_01_03_215307) do
15
14
 
16
- create_table "tasks", :force => true do |t|
15
+ create_table "tasks", force: :cascade do |t|
17
16
  t.datetime "completed_at"
18
- t.datetime "created_at", :null => false
19
- t.datetime "updated_at", :null => false
17
+ t.datetime "created_at", null: false
18
+ t.datetime "updated_at", null: false
20
19
  end
21
20
 
22
- create_table "users", :force => true do |t|
21
+ create_table "users", force: :cascade do |t|
23
22
  t.datetime "email_confirmed_at"
24
- t.datetime "created_at", :null => false
25
- t.datetime "updated_at", :null => false
23
+ t.datetime "created_at", null: false
24
+ t.datetime "updated_at", null: false
26
25
  end
27
26
 
28
27
  end
Binary file
@@ -1,11 +1,10 @@
1
1
  ENV['RAILS_ENV'] ||= 'test'
2
2
 
3
- require File.expand_path('../dummy/config/environment.rb', __FILE__)
3
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
4
4
 
5
5
  require 'factory_girl'
6
6
  require 'timecop'
7
7
 
8
- # Load support files
9
8
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
10
9
 
11
10
  RSpec.configure do |config|
@@ -13,8 +12,4 @@ RSpec.configure do |config|
13
12
  config.order = :random
14
13
 
15
14
  config.include FactoryGirl::Syntax::Methods
16
-
17
- config.around(:each) do |example|
18
- Timecop.freeze { example.run }
19
- end
20
15
  end
metadata CHANGED
@@ -1,125 +1,125 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record-events
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bartosz Pieńkowski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-10 00:00:00.000000000 Z
11
+ date: 2019-03-17 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
18
  - !ruby/object:Gem::Version
19
19
  version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: verbs
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '2.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: appraisal
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: standalone_migrations
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: sqlite3
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ! '>='
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 1.3.13
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 1.3.13
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rspec
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: factory_girl
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ! '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ! '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: timecop
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ! '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ! '>='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  description: An ActiveRecord extension providing convenience methods for timestamp
@@ -159,32 +159,32 @@ require_paths:
159
159
  - lib
160
160
  required_ruby_version: !ruby/object:Gem::Requirement
161
161
  requirements:
162
- - - ! '>='
162
+ - - ">="
163
163
  - !ruby/object:Gem::Version
164
164
  version: 1.9.3
165
165
  required_rubygems_version: !ruby/object:Gem::Requirement
166
166
  requirements:
167
- - - ! '>='
167
+ - - ">="
168
168
  - !ruby/object:Gem::Version
169
169
  version: '0'
170
170
  requirements: []
171
171
  rubyforge_project:
172
- rubygems_version: 2.4.8
172
+ rubygems_version: 2.7.8
173
173
  signing_key:
174
174
  specification_version: 4
175
175
  summary: Manage timestamps in ActiveRecord models
176
176
  test_files:
177
- - spec/active_record/events/naming_spec.rb
178
- - spec/active_record/events_spec.rb
179
- - spec/dummy/app/models/task.rb
177
+ - spec/spec_helper.rb
180
178
  - spec/dummy/app/models/user.rb
181
- - spec/dummy/config/boot.rb
182
- - spec/dummy/config/database.yml
179
+ - spec/dummy/app/models/task.rb
183
180
  - spec/dummy/config/environment.rb
184
- - spec/dummy/db/development.sqlite3
185
- - spec/dummy/db/migrate/20150813132804_create_tasks.rb
186
- - spec/dummy/db/migrate/20170103215307_create_users.rb
181
+ - spec/dummy/config/database.yml
182
+ - spec/dummy/config/boot.rb
187
183
  - spec/dummy/db/schema.rb
188
184
  - spec/dummy/db/test.sqlite3
189
- - spec/spec_helper.rb
185
+ - spec/dummy/db/migrate/20170103215307_create_users.rb
186
+ - spec/dummy/db/migrate/20150813132804_create_tasks.rb
187
+ - spec/dummy/db/development.sqlite3
188
+ - spec/active_record/events/naming_spec.rb
189
+ - spec/active_record/events_spec.rb
190
190
  - spec/support/factories.rb