activerecord-userstamp 3.0.1 → 3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7a7867df9eb9d4eea12bdad4a66da1c5412e0593
4
- data.tar.gz: b888a7d64f3f13306a2e0cf371775d3e99ba7aba
3
+ metadata.gz: 56c177f02be82c8c7a1a66cf7b7392d862b25efa
4
+ data.tar.gz: 7f8d80e37b76903dcc04125b62657355d96e0619
5
5
  SHA512:
6
- metadata.gz: 91875d1531de92434925a3408e7da73bd84b82a56490d4687409dd68c4169b33aa3e0e616a10f225829fd2257b42e61cfb1cc5a5b2d8957d4c645617bbec5555
7
- data.tar.gz: d11f8898d2a39b569a76e9e124f78036a4dbcd2d46f396e1df94256d4861a31232df35b3d5e0cde13249d7a693d3ea1e32628eba13b4978d41f950fd7384da05
6
+ metadata.gz: ff83831f18094fc7fd05d4f8396b38eae47e1b3d45a180f9909964d6d333fdd660ca420df7d79c0df1cc45c3df7ecf0b500844b84ae0d83d5ad4bfe27429a4e0
7
+ data.tar.gz: 1b5a4812a59624987bd4a9201b5845ed3a23f7af40c1b7b01bf749dffc2410047e50a841d39786a40d0b50b12412d90417791cc7926ee5874b155d86cd745660
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  *.sqlite3
3
3
  /.rdoc
4
4
  /spec/examples.txt
5
+ /.bundle
@@ -1,4 +1,18 @@
1
1
  # Changelog
2
+ ## 3.0.2 (12-7-2015)
3
+ * Joel Low - Depending on what was set to a stamper (ID or record object), the
4
+ association ID or association setter is used to assign the
5
+ creator/updater/deleter attributes. This only applies if the attributes
6
+ end with `_id`; otherwise the attribute would be used verbatim (e.g. the
7
+ compatibility mode `created_by`).
8
+ * Joel Low - Provide a `with_stamper` method to specify the stamper for a given
9
+ stamper class during the execution of the block.
10
+ * Joel Low - Ensure that the `set_stamper` and `reset_stamper` calls from the
11
+ controller are always paired so that the stamper state is always properly
12
+ restored. `set_stamper` and `reset_stamper` is now deprecated and will be
13
+ removed in ActiveRecord::Userstamp 3.1 and replaced with a single
14
+ `with_stamper` `around_action` callback.
15
+
2
16
  ## 3.0.1 (11-7-2015)
3
17
  * Joel Low - Only declare the creator/updater/deleter associations when the table has
4
18
  the attribute columns. If the columns cannot be determined (e.g. if the
@@ -8,26 +8,38 @@ module ActiveRecord::Userstamp::ControllerAdditions
8
8
  extend ActiveSupport::Concern
9
9
 
10
10
  included do
11
- before_filter :set_stamper
12
- after_filter :reset_stamper
11
+ around_action :with_stamper
13
12
  end
14
13
 
15
14
  private
16
15
 
17
- # The +set_stamper+ method as implemented here assumes a couple of things. First, that you are
16
+ # This {#with_stamper} method sets the stamper for the duration of the action. This ensures
17
+ # that exceptions raised within the controller action would properly restore the previous stamper.
18
+ #
19
+ # TODO: Remove set_stamper/reset_stamper
20
+ def with_stamper
21
+ set_stamper
22
+ yield
23
+ ensure
24
+ reset_stamper
25
+ end
26
+
27
+ # The {#set_stamper} method as implemented here assumes a couple of things. First, that you are
18
28
  # using a +User+ model as the stamper and second that your controller has a +current_user+
19
29
  # method that contains the currently logged in stamper. If either of these are not the case in
20
30
  # your application you will want to manually add your own implementation of this method to the
21
31
  # private section of your +ApplicationController+
22
32
  def set_stamper
33
+ @_userstamp_stamper = ActiveRecord::Userstamp.config.default_stamper_class.stamper
23
34
  ActiveRecord::Userstamp.config.default_stamper_class.stamper = current_user
24
35
  end
25
36
 
26
- # The +reset_stamper+ method as implemented here assumes that a +User+ model is being used as
37
+ # The {#reset_stamper} method as implemented here assumes that a +User+ model is being used as
27
38
  # the stamper. If this is not the case then you will need to manually add your own
28
39
  # implementation of this method to the private section of your +ApplicationController+
29
40
  def reset_stamper
30
- ActiveRecord::Userstamp.config.default_stamper_class.reset_stamper
41
+ ActiveRecord::Userstamp.config.default_stamper_class.stamper = @_userstamp_stamper
42
+ @_userstamp_stamper = nil
31
43
  end
32
44
  end
33
45
 
@@ -95,29 +95,29 @@ module ActiveRecord::Userstamp::Stampable
95
95
  end
96
96
 
97
97
  def set_creator_attribute
98
- creator_attribute = ActiveRecord::Userstamp.config.creator_attribute
99
- return if !has_stamper? || creator_attribute.nil? || !has_attribute?(creator_attribute)
98
+ attribute = ActiveRecord::Userstamp.config.creator_attribute
99
+ return if !has_stamper? || attribute.nil? || !has_attribute?(attribute)
100
100
 
101
- current_attribute_value = send(creator_attribute)
101
+ current_attribute_value = send(attribute)
102
102
  return if current_attribute_value.present?
103
103
 
104
- send("#{creator_attribute}=", self.class.stamper_class.stamper)
104
+ ActiveRecord::Userstamp::Utilities.assign_attribute(self, attribute)
105
105
  end
106
106
 
107
107
  def set_updater_attribute
108
- updater_attribute = ActiveRecord::Userstamp.config.updater_attribute
109
- return if !has_stamper? || updater_attribute.nil? || !has_attribute?(updater_attribute)
108
+ attribute = ActiveRecord::Userstamp.config.updater_attribute
109
+ return if !has_stamper? || attribute.nil? || !has_attribute?(attribute)
110
110
 
111
111
  return if !self.new_record? && !self.changed?
112
112
 
113
- send("#{updater_attribute}=", self.class.stamper_class.stamper)
113
+ ActiveRecord::Userstamp::Utilities.assign_attribute(self, attribute)
114
114
  end
115
115
 
116
116
  def set_deleter_attribute
117
- deleter_attribute = ActiveRecord::Userstamp.config.deleter_attribute
118
- return if !has_stamper? || deleter_attribute.nil? || !has_attribute?(deleter_attribute)
117
+ attribute = ActiveRecord::Userstamp.config.deleter_attribute
118
+ return if !has_stamper? || attribute.nil? || !has_attribute?(attribute)
119
119
 
120
- send("#{deleter_attribute}=", self.class.stamper_class.stamper)
120
+ ActiveRecord::Userstamp::Utilities.assign_attribute(self, attribute)
121
121
  save
122
122
  end
123
123
  end
@@ -1,47 +1,54 @@
1
- module ActiveRecord::Userstamp
2
- module Stamper
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- extend ClassMethods
1
+ module ActiveRecord::Userstamp::Stamper
2
+ extend ActiveSupport::Concern
3
+
4
+ module ClassMethods
5
+ def model_stamper
6
+ # don't allow multiple calls
7
+ return if singleton_class.included_modules.include?(InstanceMethods)
8
+ extend ActiveRecord::Userstamp::Stamper::InstanceMethods
7
9
  end
10
+ end
8
11
 
9
- module ClassMethods
10
- def model_stamper
11
- # don't allow multiple calls
12
- return if self.included_modules.include?(ActiveRecord::Userstamp::Stamper::InstanceMethods)
13
- send(:extend, ActiveRecord::Userstamp::Stamper::InstanceMethods)
14
- end
12
+ module InstanceMethods
13
+ # Used to set the current stamper for this model.
14
+ #
15
+ # @overload stamper=(object_id)
16
+ # @param [Fixnum] object_id The ID of the stamper.
17
+ # @return [Fixnum]
18
+ # @overload stamper=(object)
19
+ # @param [ActiveRecord::Base] object The stamper object.
20
+ # @return [ActiveRecord::Base]
21
+ def stamper=(object)
22
+ Thread.current[stamper_identifier] = object
15
23
  end
16
24
 
17
- module InstanceMethods
18
- # Used to set the stamper for a particular request. See the Userstamp module for more
19
- # details on how to use this method.
20
- def stamper=(object)
21
- object_stamper = if object.is_a?(ActiveRecord::Base)
22
- object.send("#{object.class.primary_key}".to_sym)
23
- else
24
- object
25
- end
26
-
27
- Thread.current[stamper_identifier] = object_stamper
28
- end
25
+ # Retrieves the existing stamper.
26
+ def stamper
27
+ Thread.current[stamper_identifier]
28
+ end
29
29
 
30
- # Retrieves the existing stamper for the current request.
31
- def stamper
32
- Thread.current[stamper_identifier]
33
- end
30
+ # Sets the stamper back to +nil+ to prepare for the next request.
31
+ def reset_stamper
32
+ self.stamper = nil
33
+ end
34
34
 
35
- # Sets the stamper back to +nil+ to prepare for the next request.
36
- def reset_stamper
37
- Thread.current[stamper_identifier] = nil
38
- end
35
+ # For the duration that execution is within the provided block, the stamper for this class
36
+ # would be the specified value.
37
+ #
38
+ # This replaces the {#stamper=} and {#reset_stamper} pair because this guarantees exception
39
+ # safety.
40
+ def with_stamper(stamper)
41
+ old_stamper = self.stamper
42
+ self.stamper = stamper
43
+ yield
44
+ ensure
45
+ self.stamper = old_stamper
46
+ end
39
47
 
40
- private
48
+ private
41
49
 
42
- def stamper_identifier
43
- "#{self.to_s.downcase}_#{self.object_id}_stamper"
44
- end
50
+ def stamper_identifier
51
+ "#{self.to_s.downcase}_#{self.object_id}_stamper"
45
52
  end
46
53
  end
47
54
  end
@@ -36,5 +36,19 @@ module ActiveRecord::Userstamp::Utilities
36
36
  rescue ActiveRecord::StatementInvalid => _
37
37
  nil
38
38
  end
39
- end
40
39
 
40
+ # Assigns the given attribute to the record, based on the model's stamper.
41
+ #
42
+ # If the stamper is a record, then it is assigned to the attribute; if it is a number, then it
43
+ # is assigned to the +_id+ attribute
44
+ #
45
+ # @param [ActiveRecord::Base] record The record to assign.
46
+ # @param [Symbol] attribute The attribute to assign.
47
+ def self.assign_attribute(record, attribute)
48
+ attribute = attribute.to_s
49
+ stamp_value = record.class.stamper_class.stamper
50
+
51
+ attribute = attribute[0..-4] if !stamp_value.is_a?(Fixnum) && attribute.end_with?('_id')
52
+ record.send("#{attribute}=", stamp_value)
53
+ end
54
+ end
@@ -1,4 +1,4 @@
1
1
  module ActiveRecord; end
2
2
  module ActiveRecord::Userstamp
3
- VERSION = '3.0.1'
3
+ VERSION = '3.0.2'
4
4
  end
@@ -4,9 +4,7 @@ RSpec.describe PostsController, type: :controller do
4
4
  controller do
5
5
  end
6
6
 
7
- before(:each) do
8
- reset_to_defaults
9
- end
7
+ before(:each) { define_first_post }
10
8
 
11
9
  context 'when updating a Post' do
12
10
  it 'sets the correct updater' do
@@ -4,10 +4,6 @@ RSpec.describe UsersController, type: :controller do
4
4
  controller do
5
5
  end
6
6
 
7
- before(:each) do
8
- reset_to_defaults
9
- end
10
-
11
7
  context 'when updating a User' do
12
8
  it 'sets the correct updater' do
13
9
  request.session = { user_id: @hera.id }
@@ -38,4 +34,17 @@ RSpec.describe UsersController, type: :controller do
38
34
  simulate_second_request
39
35
  end
40
36
  end
37
+
38
+ context 'when the handler raises an exception' do
39
+ before { @stamper = User.stamper }
40
+ it 'restores the correct stamper' do
41
+ begin
42
+ request.session = { user_id: @zeus.id }
43
+ post :create
44
+ rescue
45
+ end
46
+
47
+ expect(User.stamper).to be(@stamper)
48
+ end
49
+ end
41
50
  end
@@ -10,6 +10,10 @@ class PostsController < ApplicationController
10
10
  render(inline: "<%= @post.title %>")
11
11
  end
12
12
 
13
+ def create
14
+ fail
15
+ end
16
+
13
17
  protected
14
18
 
15
19
  def current_user
@@ -17,7 +21,7 @@ class PostsController < ApplicationController
17
21
  end
18
22
 
19
23
  def set_stamper
20
- Person.stamper = self.current_user
24
+ Person.stamper = current_user
21
25
  end
22
26
 
23
27
  def reset_stamper
@@ -10,6 +10,10 @@ class UsersController < ApplicationController
10
10
  render(inline: "<%= @user.name %>")
11
11
  end
12
12
 
13
+ def create
14
+ fail
15
+ end
16
+
13
17
  private
14
18
 
15
19
  def user_params
@@ -1,14 +1,6 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  RSpec.describe 'Migration helpers', type: :model do
4
- after do
5
- ActiveRecord::Userstamp.configure do |config|
6
- config.creator_attribute = :creator_id
7
- config.updater_attribute = :updater_id
8
- config.deleter_attribute = :deleter_id
9
- end
10
- end
11
-
12
4
  context 'when default attribute names are used' do
13
5
  class self::DefaultRandom < ActiveRecord::Base
14
6
  stampable
@@ -38,21 +30,31 @@ RSpec.describe 'Migration helpers', type: :model do
38
30
  end
39
31
 
40
32
  context 'when overridden attribute names are used' do
41
- class self::OverriddenRandom < ActiveRecord::Base
42
- stampable
43
- end
44
- subject { self.class::OverriddenRandom.new }
45
-
46
- temporary_table(:overridden_randoms) do |t|
33
+ before(:each) do
47
34
  ActiveRecord::Userstamp.configure do |config|
48
35
  config.creator_attribute = :created_by
49
36
  config.updater_attribute = :updated_by
50
37
  config.deleter_attribute = :deleted_by
51
38
  end
39
+ class self.class::OverriddenRandom < ActiveRecord::Base
40
+ stampable
41
+ end
42
+ end
43
+ after(:each) do
44
+ ActiveRecord::Userstamp.configure do |config|
45
+ config.creator_attribute = :creator_id
46
+ config.updater_attribute = :updater_id
47
+ config.deleter_attribute = :deleter_id
48
+ end
49
+ end
50
+
51
+ subject { self.class::OverriddenRandom.new }
52
+
53
+ temporary_table(:overridden_randoms) do |t|
52
54
  t.userstamps
53
55
  end
54
56
 
55
- with_temporary_table(:overridden_randoms) do
57
+ with_temporary_table(:overridden_randoms, :each) do
56
58
  it 'has a created_by attribute' do
57
59
  expect(subject.has_attribute?(:created_by)).to be true
58
60
  end
@@ -0,0 +1,66 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe 'Stamper' do
4
+ describe '.model_stamper' do
5
+ it 'can only be included once' do
6
+ expect(User.singleton_class.included_modules.count(
7
+ ActiveRecord::Userstamp::Stamper::InstanceMethods)).to eq(1)
8
+
9
+ User.class_eval do
10
+ stamper
11
+ end
12
+
13
+ expect(User.singleton_class.included_modules.count(
14
+ ActiveRecord::Userstamp::Stamper::InstanceMethods)).to eq(1)
15
+ end
16
+ end
17
+
18
+ describe '.stamper' do
19
+ it 'defaults to nil' do
20
+ User.reset_stamper
21
+ expect(User.stamper).to be_nil
22
+ end
23
+ end
24
+
25
+ describe '.stamper=' do
26
+ it 'assigns the stamper' do
27
+ stamper = User.new
28
+ User.stamper = stamper
29
+ expect(User.stamper).to eq(stamper)
30
+ end
31
+
32
+ context 'when the stamper is nil' do
33
+ it 'resets the stamper' do
34
+ User.stamper = nil
35
+ expect(User.stamper).to be(nil)
36
+ end
37
+ end
38
+ end
39
+
40
+ describe '.reset_stamper' do
41
+ it 'resets the stamper' do
42
+ User.reset_stamper
43
+ expect(User.stamper).to be_nil
44
+ end
45
+ end
46
+
47
+ describe '.with_stamper' do
48
+ context 'when within the block' do
49
+ it 'uses the correct stamper' do
50
+ stamper = User.create(name: 'Joel')
51
+ User.with_stamper(stamper) do
52
+ expect(User.stamper).to eq(stamper)
53
+ end
54
+ end
55
+ end
56
+
57
+ context 'when exiting the block' do
58
+ it 'restores the stamper' do
59
+ expect do
60
+ User.with_stamper(User.create(name: 'Joel')) do
61
+ end
62
+ end.not_to change { User.stamper }
63
+ end
64
+ end
65
+ end
66
+ end
@@ -2,15 +2,24 @@ require 'rails_helper'
2
2
 
3
3
  RSpec.describe 'Stamping', type: :model do
4
4
  before(:each) do
5
- reset_to_defaults
5
+ define_first_post
6
6
  User.stamper = @zeus
7
7
  Person.stamper = @delynn
8
8
  end
9
9
 
10
10
  context 'when creating a Person' do
11
11
  context 'when the stamper is an object' do
12
+ it 'sets using the the association' do
13
+ User.stamper = @zeus
14
+ expect(User.stamper).to eq(@zeus)
15
+
16
+ person = Person.new
17
+ expect(person).to receive(:creator=)
18
+ person.valid?
19
+ end
20
+
12
21
  it 'sets the correct creator and updater' do
13
- expect(User.stamper).to eq(@zeus.id)
22
+ expect(User.stamper).to eq(@zeus)
14
23
 
15
24
  person = Person.create(name: 'David')
16
25
  expect(person.creator_id).to eq(@zeus.id)
@@ -21,7 +30,7 @@ RSpec.describe 'Stamping', type: :model do
21
30
 
22
31
  context 'when a creator is specified' do
23
32
  it 'does not reset the creator' do
24
- expect(User.stamper).to eq(@zeus.id)
33
+ expect(User.stamper).to eq(@zeus)
25
34
 
26
35
  person = Person.create(name: 'David', creator: @hera)
27
36
  expect(person.creator_id).to eq(@hera.id)
@@ -29,11 +38,21 @@ RSpec.describe 'Stamping', type: :model do
29
38
  expect(person.creator).to eq(@hera)
30
39
  expect(person.updater).to eq(@zeus)
31
40
  end
41
+
42
+ it 'does not reset the creator' do
43
+ expect(User.stamper).to eq(@zeus)
44
+
45
+ person = Person.create(name: 'David', creator_id: @hera.id)
46
+ expect(person.creator_id).to eq(@hera.id)
47
+ expect(person.updater_id).to eq(@zeus.id)
48
+ expect(person.creator).to eq(@hera)
49
+ expect(person.updater).to eq(@zeus)
50
+ end
32
51
  end
33
52
 
34
53
  context 'when saving without validations' do
35
54
  it 'sets the correct creator and updater' do
36
- expect(User.stamper).to eq(@zeus.id)
55
+ expect(User.stamper).to eq(@zeus)
37
56
 
38
57
  person = Person.new(name: 'David')
39
58
  person.save(validate: false)
@@ -46,7 +65,7 @@ RSpec.describe 'Stamping', type: :model do
46
65
 
47
66
  context 'when temporarily disabling stampng' do
48
67
  it 'does not set the creator and updater' do
49
- expect(User.stamper).to eq(@zeus.id)
68
+ expect(User.stamper).to eq(@zeus)
50
69
 
51
70
  Person.without_stamps do
52
71
  person = Person.create(name: 'David')
@@ -60,6 +79,15 @@ RSpec.describe 'Stamping', type: :model do
60
79
  end
61
80
 
62
81
  context 'when the stamper is an ID' do
82
+ it 'sets using the the association ID' do
83
+ User.stamper = @zeus.id
84
+ expect(User.stamper).to eq(@zeus.id)
85
+
86
+ person = Person.new
87
+ expect(person).to receive(:creator_id=)
88
+ person.valid?
89
+ end
90
+
63
91
  it 'sets the correct creator and updater' do
64
92
  User.stamper = @hera.id
65
93
  expect(User.stamper).to eq(@hera.id)
@@ -76,7 +104,7 @@ RSpec.describe 'Stamping', type: :model do
76
104
  context 'when creating a Post' do
77
105
  context 'when the stamper is an object' do
78
106
  it 'sets the correct creator and updater' do
79
- expect(Person.stamper).to eq(@delynn.id)
107
+ expect(Person.stamper).to eq(@delynn)
80
108
 
81
109
  post = Post.create(title: 'Test Post - 1')
82
110
  expect(post.creator_id).to eq(@delynn.id)
@@ -104,7 +132,7 @@ RSpec.describe 'Stamping', type: :model do
104
132
  context 'when the stamper is an object' do
105
133
  it 'sets the correct updater' do
106
134
  User.stamper = @hera
107
- expect(User.stamper).to eq(@hera.id)
135
+ expect(User.stamper).to eq(@hera)
108
136
 
109
137
  @delynn.name << " Berry"
110
138
  @delynn.save
@@ -116,10 +144,25 @@ RSpec.describe 'Stamping', type: :model do
116
144
  end
117
145
  end
118
146
 
147
+ context 'when the stamper is an ID' do
148
+ it 'sets the correct updater' do
149
+ User.stamper = @hera.id
150
+ expect(User.stamper).to eq(@hera.id)
151
+
152
+ @delynn.name << " Berry"
153
+ @delynn.save
154
+ @delynn.reload
155
+ expect(@delynn.creator_id).to eq(@zeus.id)
156
+ expect(@delynn.updater_id).to eq(@hera.id)
157
+ expect(@delynn.creator).to eq(@zeus)
158
+ expect(@delynn.updater).to eq(@hera)
159
+ end
160
+ end
161
+
119
162
  context 'when temporarily disabling stamping' do
120
163
  it 'does not set the updater' do
121
164
  User.stamper = @zeus
122
- expect(User.stamper).to eq(@zeus.id)
165
+ expect(User.stamper).to eq(@zeus)
123
166
 
124
167
  original_updater = @delynn.updater
125
168
  Person.without_stamps do
@@ -135,21 +178,6 @@ RSpec.describe 'Stamping', type: :model do
135
178
  end
136
179
  end
137
180
 
138
- context 'when the stamper is an ID' do
139
- it 'sets the correct updater' do
140
- User.stamper = @hera.id
141
- expect(User.stamper).to eq(@hera.id)
142
-
143
- @delynn.name << " Berry"
144
- @delynn.save
145
- @delynn.reload
146
- expect(@delynn.creator_id).to eq(@zeus.id)
147
- expect(@delynn.updater_id).to eq(@hera.id)
148
- expect(@delynn.creator).to eq(@zeus)
149
- expect(@delynn.updater).to eq(@hera)
150
- end
151
- end
152
-
153
181
  context 'when updating a Post' do
154
182
  context 'when the stamper is an ID' do
155
183
  it 'sets the correct updater' do
@@ -169,7 +197,7 @@ RSpec.describe 'Stamping', type: :model do
169
197
  context 'when the stamper is an object' do
170
198
  it 'sets the correct updater' do
171
199
  Person.stamper = @nicole
172
- expect(Person.stamper).to eq(@nicole.id)
200
+ expect(Person.stamper).to eq(@nicole)
173
201
 
174
202
  @first_post.title << " - Updated"
175
203
  @first_post.save
@@ -1,20 +1,22 @@
1
- def reset_to_defaults
2
- create_test_models
1
+ def define_first_post
2
+ @first_post = Post.create!(title: 'a title')
3
3
  end
4
4
 
5
- def create_test_models
6
- User.delete_all
7
- Person.delete_all
8
- Post.delete_all
9
- Comment.delete_all
10
-
11
- @zeus = User.create!(name: 'Zeus')
12
- @hera = User.create!(name: 'Hera')
13
- User.stamper = @zeus.id
5
+ RSpec.configure do |config|
6
+ config.before(:each) do
7
+ User.delete_all
8
+ Person.delete_all
9
+ Post.delete_all
10
+ Comment.delete_all
11
+ User.reset_stamper
12
+ Person.reset_stamper
14
13
 
15
- @delynn = Person.create!(name: 'Delynn')
16
- @nicole = Person.create!(name: 'Nicole')
17
- Person.stamper = @delynn.id
14
+ @zeus = User.create!(name: 'Zeus')
15
+ @hera = User.create!(name: 'Hera')
16
+ User.stamper = @zeus.id
18
17
 
19
- @first_post = Post.create!(title: 'a title')
18
+ @delynn = Person.create!(name: 'Delynn')
19
+ @nicole = Person.create!(name: 'Nicole')
20
+ Person.stamper = @delynn.id
21
+ end
20
22
  end
@@ -17,28 +17,29 @@ module ActiveRecord::TemporaryTable::TestGroupHelpers
17
17
  # Using the temporary table defined previously, run the examples in this group.
18
18
  #
19
19
  # @param [Symbol] table_name The name of the table to use.
20
+ # @param [Symbol] create_at When to create the table. Defaults to :context.
20
21
  # @param [Proc] proc The examples requiring the use of the temporary table.
21
- def with_temporary_table(table_name, &proc)
22
+ def with_temporary_table(table_name, create_at = :context, &proc)
22
23
  context "with temporary table #{table_name}" do |*params|
23
- before(:context) do
24
- ActiveRecord::TemporaryTable::TestGroupHelpers.before_context(table_name, send(table_name))
24
+ before(create_at) do
25
+ ActiveRecord::TemporaryTable::TestGroupHelpers.create_table(table_name, send(table_name))
25
26
  end
26
27
 
27
- after(:context) do
28
- ActiveRecord::TemporaryTable::TestGroupHelpers.after_context(table_name)
28
+ after(create_at) do
29
+ ActiveRecord::TemporaryTable::TestGroupHelpers.drop_table(table_name)
29
30
  end
30
31
 
31
32
  module_exec(*params, &proc)
32
33
  end
33
34
  end
34
35
 
35
- def self.before_context(table_name, table_definition)
36
+ def self.create_table(table_name, table_definition)
36
37
  ActiveRecord::Migration.suppress_messages do
37
38
  ActiveRecord::Migration.create_table(table_name, &table_definition)
38
39
  end
39
40
  end
40
41
 
41
- def self.after_context(table_name)
42
+ def self.drop_table(table_name)
42
43
  ActiveRecord::Migration.suppress_messages do
43
44
  ActiveRecord::Migration.drop_table(table_name)
44
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-userstamp
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Low
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-11 00:00:00.000000000 Z
11
+ date: 2015-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -244,6 +244,7 @@ files:
244
244
  - spec/dummy/public/favicon.ico
245
245
  - spec/lib/configuration_spec.rb
246
246
  - spec/lib/migration_spec.rb
247
+ - spec/lib/stamper_spec.rb
247
248
  - spec/lib/stamping_spec.rb
248
249
  - spec/lib/userstamp_spec.rb
249
250
  - spec/rails_helper.rb