paper_trail 4.0.0.beta1 → 4.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a4a5a1bfd11ee6bc8acabb03cb262fe4691951a
4
- data.tar.gz: 6854403b0c404645e52c94154d4d8268642969c1
3
+ metadata.gz: 7b96c067cab9f8789c0942d19fe7db30c83b0854
4
+ data.tar.gz: a2f6e330b8c28de3c575c9a7c13ba54c352702ed
5
5
  SHA512:
6
- metadata.gz: 891aa4e3758245d09974c472c49506a4b49b2ac565018acc1afbebe40907c91729b450e45dd9e5c501c6781f7a673f15f9d3f0b43a3fbfe65fbe9a0db079a24d
7
- data.tar.gz: c0ae097eaa91467cd5bc5d944aa65ba9cd43899d8498725c900c6a96bcd8c332a8fedd0610f0c092a5df444e500c4a72119ee3de29df92d5748c4990c2f86282
6
+ metadata.gz: 2eb6e5433a4e085a9ccaa41b5c1862f2c1b25fd4f77d08061470d4cf411560f02aa1cd18179f5fb058b446c0d3e26ba58ea917fbe20c4c13032128e8d3837c3a
7
+ data.tar.gz: 435e06ff6d5e3071f09cb3d4a1b415c132114efb6d01b36d9b15d794a6b249db0392ddad6a1f75f6d0fdbf826befa6509b01c1235cce54034f621e5ab5e04594
data/CHANGELOG.md CHANGED
@@ -5,12 +5,20 @@
5
5
  PaperTrail::Rails::Engine.eager_load!
6
6
  ```
7
7
 
8
+ *Also*
9
+
10
+ If you depend on the `RSpec` or `Cucumber` helpers, you will need to [manually load them into your test helper](https://github.com/airblade/paper_trail#testing).
11
+
12
+ - [#458](https://github.com/airblade/paper_trail/pull/458) - For `create` events, metadata pointing at attributes should attempt
13
+ to grab the current value instead of looking at the value prior to the change (which would always be `nil`)
14
+ - [#440](https://github.com/airblade/paper_trail/pull/440) - `versions` association should clear/reload after a transaction rollback.
8
15
  - [#439](https://github.com/airblade/paper_trail/pull/439) / [#12](https://github.com/airblade/paper_trail/issues/12) -
9
16
  Support for versioning of associations (Has Many, Has One, HABTM, etc.)
10
- - [#440](https://github.com/airblade/paper_trail/pull/440) - `versions` association should clear/reload after a transaction rollback.
11
17
  - [#438](https://github.com/airblade/paper_trail/issues/438) - `Model.paper_trail_enabled_for_model?` should return `false` if
12
18
  `has_paper_trail` has not been declared on the class.
13
19
  - [#427](https://github.com/airblade/paper_trail/pull/427) - Fix `reify` method in context of model where a column has been removed.
20
+ - [#420](https://github.com/airblade/paper_trail/issues/420) - Add `VersionConcern#where_object_changes` instance method;
21
+ acts as a helper for querying against the `object_changes` column in versions table.
14
22
  - [#416](https://github.com/airblade/paper_trail/issues/416) - Added a `config` option for enabling/disabling
15
23
  utilization of `serialized_attributes` for `ActiveRecord`, necessary because `serialized_attributes` has been
16
24
  deprecated in `ActiveRecord` version `4.2` and will be removed in version `5.0`
@@ -85,7 +93,7 @@ in the `PaperTrail::Version` class through a `Rails::Engine` when the gem is use
85
93
  with Rails `4.1.0.rc1`.
86
94
  - [#334](https://github.com/airblade/paper_trail/pull/334) - Add small-scope `whodunnit` method to `PaperTrail::Model::InstanceMethods`.
87
95
  - [#329](https://github.com/airblade/paper_trail/issues/329) - Add `touch_with_version` method to `PaperTrail::Model::InstanceMethods`,
88
- to allow for generating a version `touch`ing a model.
96
+ to allow for generating a version while `touch`ing a model.
89
97
  - [#328](https://github.com/airblade/paper_trail/pull/328) / [#326](https://github.com/airblade/paper_trail/issues/326) /
90
98
  [#307](https://github.com/airblade/paper_trail/issues/307) - `Model.paper_trail_enabled_for_model?` and
91
99
  `model_instance.without_versioning` is now thread-safe.
data/README.md CHANGED
@@ -139,7 +139,7 @@ Widget.paper_trail_on!
139
139
 
140
140
  # Check whether PaperTrail is enabled for all widgets.
141
141
  Widget.paper_trail_enabled_for_model?
142
- widget.paper_trail_enabled_for_model?
142
+ widget.paper_trail_enabled_for_model? # only available on instances of versioned models
143
143
  ```
144
144
 
145
145
  And a `PaperTrail::Version` instance has these methods:
@@ -173,6 +173,12 @@ version.event
173
173
 
174
174
  # Query versions objects by attributes.
175
175
  PaperTrail::Version.where_object(attr1: val1, attr2: val2)
176
+
177
+ # Query versions object_changes field by attributes (requires
178
+ # `object_changes` column on versions table).
179
+ # Also can't guarantee consistent query results for numeric values
180
+ # due to limitations of SQL wildcard matchers against the serialized objects.
181
+ PaperTrail::Version.where_object_changes(attr1: val1)
176
182
  ```
177
183
 
178
184
  In your controllers you can override these methods:
data/Rakefile CHANGED
@@ -4,7 +4,7 @@ Bundler::GemHelper.install_tasks
4
4
  desc 'Set a relevant database.yml for testing'
5
5
  task :prepare do
6
6
  ENV["DB"] ||= "sqlite"
7
- if RUBY_VERSION.to_f >= 1.9
7
+ if RUBY_VERSION >= '1.9'
8
8
  FileUtils.cp "test/dummy/config/database.#{ENV["DB"]}.yml", "test/dummy/config/database.yml"
9
9
  else
10
10
  require 'ftools'
data/gemfiles/3.0.gemfile CHANGED
@@ -32,7 +32,7 @@ group :development, :test do
32
32
  platforms :ruby do
33
33
  gem 'sqlite3', '~> 1.2'
34
34
  gem 'mysql2', '~> 0.3'
35
- gem 'pg', '~> 0.17'
35
+ gem 'pg', '~> 0.17.1'
36
36
  end
37
37
 
38
38
  platforms :jruby, :ruby_18 do
@@ -259,7 +259,7 @@ module PaperTrail
259
259
  #
260
260
  # TODO: lookinto leveraging the `after_touch` callback from `ActiveRecord` to allow the
261
261
  # regular `touch` method go generate a version as normal. May make sense to switch the `record_update`
262
- # method to leverage an `after_update` callback anyways (likely for v3.1.0)
262
+ # method to leverage an `after_update` callback anyways (likely for v4.0.0)
263
263
  def touch_with_version(name = nil)
264
264
  raise ActiveRecordError, "can not touch on a new record object" unless persisted?
265
265
 
@@ -281,8 +281,7 @@ module PaperTrail
281
281
  if paper_trail_switched_on?
282
282
  data = {
283
283
  :event => paper_trail_event || 'create',
284
- :whodunnit => PaperTrail.whodunnit,
285
- :transaction_id => PaperTrail.transaction_id
284
+ :whodunnit => PaperTrail.whodunnit
286
285
  }
287
286
  if respond_to?(:created_at)
288
287
  data[PaperTrail.timestamp_field] = created_at
@@ -291,6 +290,9 @@ module PaperTrail
291
290
  data[:object_changes] = self.class.paper_trail_version_class.object_changes_col_is_json? ? changes_for_paper_trail :
292
291
  PaperTrail.serializer.dump(changes_for_paper_trail)
293
292
  end
293
+ if self.class.paper_trail_version_class.column_names.include?('transaction_id')
294
+ data[:transaction_id] = PaperTrail.transaction_id
295
+ end
294
296
  version = send(self.class.versions_association_name).create! merge_metadata(data)
295
297
  set_transaction_id(version)
296
298
  save_associations(version)
@@ -303,8 +305,7 @@ module PaperTrail
303
305
  data = {
304
306
  :event => paper_trail_event || 'update',
305
307
  :object => self.class.paper_trail_version_class.object_col_is_json? ? object_attrs : PaperTrail.serializer.dump(object_attrs),
306
- :whodunnit => PaperTrail.whodunnit,
307
- :transaction_id => PaperTrail.transaction_id
308
+ :whodunnit => PaperTrail.whodunnit
308
309
  }
309
310
  if respond_to?(:updated_at)
310
311
  data[PaperTrail.timestamp_field] = updated_at
@@ -313,6 +314,9 @@ module PaperTrail
313
314
  data[:object_changes] = self.class.paper_trail_version_class.object_changes_col_is_json? ? changes_for_paper_trail :
314
315
  PaperTrail.serializer.dump(changes_for_paper_trail)
315
316
  end
317
+ if self.class.paper_trail_version_class.column_names.include?('transaction_id')
318
+ data[:transaction_id] = PaperTrail.transaction_id
319
+ end
316
320
  version = send(self.class.versions_association_name).create merge_metadata(data)
317
321
  set_transaction_id(version)
318
322
  save_associations(version)
@@ -352,9 +356,11 @@ module PaperTrail
352
356
  :item_type => self.class.base_class.name,
353
357
  :event => paper_trail_event || 'destroy',
354
358
  :object => self.class.paper_trail_version_class.object_col_is_json? ? object_attrs : PaperTrail.serializer.dump(object_attrs),
355
- :whodunnit => PaperTrail.whodunnit,
356
- :transaction_id => PaperTrail.transaction_id
359
+ :whodunnit => PaperTrail.whodunnit
357
360
  }
361
+ if self.class.paper_trail_version_class.column_names.include?('transaction_id')
362
+ data[:transaction_id] = PaperTrail.transaction_id
363
+ end
358
364
  version = self.class.paper_trail_version_class.create(merge_metadata(data))
359
365
  send("#{self.class.version_association_name}=", version)
360
366
  send(self.class.versions_association_name).send :load_target
@@ -363,7 +369,9 @@ module PaperTrail
363
369
  end
364
370
  end
365
371
 
372
+ # saves associations if the join table for `VersionAssociation` exists
366
373
  def save_associations(version)
374
+ return unless PaperTrail::VersionAssociation.table_exists?
367
375
  self.class.reflect_on_all_associations(:belongs_to).each do |assoc|
368
376
  if assoc.klass.paper_trail_enabled_for_model?
369
377
  PaperTrail::VersionAssociation.create(
@@ -376,6 +384,7 @@ module PaperTrail
376
384
  end
377
385
 
378
386
  def set_transaction_id(version)
387
+ return unless self.class.paper_trail_version_class.column_names.include?('transaction_id')
379
388
  if PaperTrail.transaction? && PaperTrail.transaction_id.nil?
380
389
  PaperTrail.transaction_id = version.id
381
390
  version.transaction_id = version.id
@@ -394,8 +403,9 @@ module PaperTrail
394
403
  if v.respond_to?(:call)
395
404
  v.call(self)
396
405
  elsif v.is_a?(Symbol) && respond_to?(v)
397
- # if it is an attribute that is changing, be sure to grab the current version
398
- if has_attribute?(v) && send("#{v}_changed?".to_sym)
406
+ # if it is an attribute that is changing in an existing object,
407
+ # be sure to grab the current version
408
+ if has_attribute?(v) && send("#{v}_changed?".to_sym) && data[:event] != 'create'
399
409
  send("#{v}_was".to_sym)
400
410
  else
401
411
  send(v)
@@ -13,8 +13,8 @@ module PaperTrail
13
13
  ActiveSupport::JSON.encode object
14
14
  end
15
15
 
16
- # Returns a SQL condition to be used to match the given field and value in
17
- # the serialized object.
16
+ # Returns a SQL condition to be used to match the given field and value
17
+ # in the serialized object
18
18
  def where_object_condition(arel_field, field, value)
19
19
  # Convert to JSON to handle strings and nulls correctly.
20
20
  json_value = value.to_json
@@ -31,6 +31,17 @@ module PaperTrail
31
31
  arel_field.matches("%\"#{field}\":#{json_value}%")
32
32
  end
33
33
  end
34
+
35
+ # Returns a SQL condition to be used to match the given field and value
36
+ # in the serialized object_changes
37
+ def where_object_changes_condition(arel_field, field, value)
38
+ # Convert to JSON to handle strings and nulls correctly.
39
+ json_value = value.to_json
40
+
41
+ # Need to check first (before) and secondary (after) fields
42
+ arel_field.matches("%\"#{field}\":[#{json_value},%").
43
+ or(arel_field.matches("%\"#{field}\":[%,#{json_value}]%"))
44
+ end
34
45
  end
35
46
  end
36
47
  end
@@ -13,11 +13,24 @@ module PaperTrail
13
13
  ::YAML.dump object
14
14
  end
15
15
 
16
- # Returns a SQL condition to be used to match the given field and value in
17
- # the serialized object.
16
+ # Returns a SQL condition to be used to match the given field and value
17
+ # in the serialized object
18
18
  def where_object_condition(arel_field, field, value)
19
19
  arel_field.matches("%\n#{field}: #{value}\n%")
20
20
  end
21
+
22
+ # Returns a SQL condition to be used to match the given field and value
23
+ # in the serialized object_changes
24
+ def where_object_changes_condition(arel_field, field, value)
25
+ # Need to check first (before) and secondary (after) fields
26
+ if defined?(::YAML::ENGINE) && ::YAML::ENGINE.yamler == 'psych'
27
+ arel_field.matches("%\n#{field}:\n- #{value}\n%").
28
+ or(arel_field.matches("%\n#{field}:\n-%\n- #{value}\n%"))
29
+ else # Syck adds extra spaces into array dumps
30
+ arel_field.matches("%\n#{field}: \n%- #{value}\n%").
31
+ or(arel_field.matches("%\n#{field}: \n-%\n- #{value}\n%"))
32
+ end
33
+ end
21
34
  end
22
35
  end
23
36
  end
@@ -88,6 +88,19 @@ module PaperTrail
88
88
  where(where_conditions)
89
89
  end
90
90
 
91
+ def where_object_changes(args = {})
92
+ raise ArgumentError, 'expected to receive a Hash' unless args.is_a?(Hash)
93
+ arel_field = arel_table[:object_changes]
94
+
95
+ where_conditions = args.map do |field, value|
96
+ PaperTrail.serializer.where_object_changes_condition(arel_field, field, value)
97
+ end.reduce do |condition1, condition2|
98
+ condition1.and(condition2)
99
+ end
100
+
101
+ where(where_conditions)
102
+ end
103
+
91
104
  def primary_key_is_int?
92
105
  @primary_key_is_int ||= columns_hash[primary_key].type == :integer
93
106
  rescue
@@ -101,7 +114,7 @@ module PaperTrail
101
114
 
102
115
  # Returns whether the `object_changes` column is using the `json` type supported by PostgreSQL
103
116
  def object_changes_col_is_json?
104
- @object_changes_col_is_json ||= columns_hash['object_changes'].type == :json
117
+ @object_changes_col_is_json ||= columns_hash['object_changes'].try(:type) == :json
105
118
  end
106
119
  end
107
120
 
@@ -283,7 +296,8 @@ module PaperTrail
283
296
  # We lookup the first child versions after version_at timestamp or in same transaction.
284
297
  def reify_has_manys(model, options = {})
285
298
  assoc_has_many_through, assoc_has_many_directly =
286
- model.class.reflect_on_all_associations(:has_many).partition { |assoc| assoc.options[:through] }
299
+ model.class.reflect_on_all_associations(:has_many).
300
+ partition { |assoc| assoc.options[:through] }
287
301
  reify_has_many_directly(assoc_has_many_directly, model, options)
288
302
  reify_has_many_through(assoc_has_many_through, model, options)
289
303
  end
@@ -294,12 +308,12 @@ module PaperTrail
294
308
  associations.each do |assoc|
295
309
  next unless assoc.klass.paper_trail_enabled_for_model?
296
310
  version_id_subquery = PaperTrail::VersionAssociation.joins(model.class.version_association_name).
297
- select("MIN(version_id)").
298
- where("foreign_key_name = ?", assoc.foreign_key).
299
- where("foreign_key_id = ?", model.id).
300
- where("#{version_table_name}.item_type = ?", assoc.class_name).
301
- where("created_at >= ? OR transaction_id = ?", options[:version_at], transaction_id).
302
- group("item_id").to_sql
311
+ select("MIN(version_id)").
312
+ where("foreign_key_name = ?", assoc.foreign_key).
313
+ where("foreign_key_id = ?", model.id).
314
+ where("#{version_table_name}.item_type = ?", assoc.class_name).
315
+ where("created_at >= ? OR transaction_id = ?", options[:version_at], transaction_id).
316
+ group("item_id").to_sql
303
317
  versions = model.class.paper_trail_version_class.where("id IN (#{version_id_subquery})").inject({}) do |acc, v|
304
318
  acc.merge!(v.item_id => v)
305
319
  end
@@ -335,11 +349,11 @@ module PaperTrail
335
349
  collection_keys = through_collection.map { |through_model| through_model.send(assoc.foreign_key) }
336
350
 
337
351
  version_id_subquery = assoc.klass.paper_trail_version_class.
338
- select("MIN(id)").
339
- where("item_type = ?", assoc.class_name).
340
- where("item_id IN (?)", collection_keys).
341
- where("created_at >= ? OR transaction_id = ?", options[:version_at], transaction_id).
342
- group("item_id").to_sql
352
+ select("MIN(id)").
353
+ where("item_type = ?", assoc.class_name).
354
+ where("item_id IN (?)", collection_keys).
355
+ where("created_at >= ? OR transaction_id = ?", options[:version_at], transaction_id).
356
+ group("item_id").to_sql
343
357
  versions = assoc.klass.paper_trail_version_class.where("id IN (#{version_id_subquery})").inject({}) do |acc, v|
344
358
  acc.merge!(v.item_id => v)
345
359
  end
@@ -3,7 +3,7 @@ module PaperTrail
3
3
  MAJOR = 4
4
4
  MINOR = 0
5
5
  TINY = 0
6
- PRE = 'beta1'
6
+ PRE = 'beta2'
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
9
9
 
@@ -26,8 +26,10 @@ describe Gadget, :type => :model do
26
26
  subject { Gadget.new(:created_at => Time.now) }
27
27
 
28
28
  # apparently the private methods list in Ruby18 is different than in Ruby19+
29
- if RUBY_VERSION.to_f >= 1.9
29
+ if RUBY_VERSION >= '1.9'
30
30
  it { expect(subject.private_methods).to include(:changed_notably?) }
31
+ else
32
+ it { expect(subject.private_methods).to include('changed_notably?') }
31
33
  end
32
34
 
33
35
  context "create events" do
@@ -108,6 +108,60 @@ describe PaperTrail::Version, :type => :model do
108
108
  end
109
109
  end
110
110
  end
111
+
112
+ describe '#where_object_changes' do
113
+ it { expect(PaperTrail::Version).to respond_to(:where_object_changes) }
114
+
115
+ context "invalid arguments" do
116
+ it "should raise an error" do
117
+ expect { PaperTrail::Version.where_object_changes(:foo) }.to raise_error(ArgumentError)
118
+ expect { PaperTrail::Version.where_object_changes([]) }.to raise_error(ArgumentError)
119
+ end
120
+ end
121
+
122
+ context "valid arguments", :versioning => true do
123
+ let(:widget) { Widget.new }
124
+ let(:name) { Faker::Name.first_name }
125
+ let(:int) { rand(5) + 2 }
126
+
127
+ before do
128
+ widget.update_attributes!(:name => name, :an_integer => 0)
129
+ widget.update_attributes!(:name => 'foobar', :an_integer => 77)
130
+ widget.update_attributes!(:name => Faker::Name.last_name, :an_integer => int)
131
+ end
132
+
133
+ context "`serializer == YAML`" do
134
+ specify { expect(PaperTrail.serializer).to be PaperTrail::Serializers::YAML }
135
+
136
+ it "should be able to locate versions according to their `object_changes` contents" do
137
+ expect(widget.versions.where_object_changes(:name => name)).to eq(widget.versions[0..1])
138
+ expect(widget.versions.where_object_changes(:an_integer => 77)).to eq(widget.versions[1..2])
139
+ expect(widget.versions.where_object_changes(:an_integer => int)).to eq([widget.versions.last])
140
+ end
141
+
142
+ it "should be able to handle queries for multiple attributes" do
143
+ expect(widget.versions.where_object_changes(:an_integer => 77, :name => 'foobar')).to eq(widget.versions[1..2])
144
+ end
145
+ end
146
+
147
+ context "`serializer == JSON`" do
148
+ before(:all) { PaperTrail.serializer = PaperTrail::Serializers::JSON }
149
+ specify { expect(PaperTrail.serializer).to be PaperTrail::Serializers::JSON }
150
+
151
+ it "should be able to locate versions according to their `object_changes` contents" do
152
+ expect(widget.versions.where_object_changes(:name => name)).to eq(widget.versions[0..1])
153
+ expect(widget.versions.where_object_changes(:an_integer => 77)).to eq(widget.versions[1..2])
154
+ expect(widget.versions.where_object_changes(:an_integer => int)).to eq([widget.versions.last])
155
+ end
156
+
157
+ it "should be able to handle queries for multiple attributes" do
158
+ expect(widget.versions.where_object_changes(:an_integer => 77, :name => 'foobar')).to eq(widget.versions[1..2])
159
+ end
160
+
161
+ after(:all) { PaperTrail.serializer = PaperTrail::Serializers::YAML }
162
+ end
163
+ end
164
+ end
111
165
  end
112
166
  end
113
167
  end
@@ -21,13 +21,11 @@ describe "Articles management", :type => :request, :order => :defined do
21
21
  let(:article) { Article.last }
22
22
 
23
23
  context "`current_user` method returns a `String`" do
24
- if RUBY_VERSION.to_f >= 1.9
25
- it "should set that value as the `whodunnit`" do
26
- expect { post articles_path, valid_params }.to change(PaperTrail::Version, :count).by(1)
27
- expect(article.title).to eq('Doh')
28
- expect(PaperTrail.whodunnit).to eq('foobar')
29
- expect(article.versions.last.whodunnit).to eq('foobar')
30
- end
24
+ it "should set that value as the `whodunnit`" do
25
+ expect { post articles_path, valid_params }.to change(PaperTrail::Version, :count).by(1)
26
+ expect(article.title).to eq('Doh')
27
+ expect(PaperTrail.whodunnit).to eq('foobar')
28
+ expect(article.versions.last.whodunnit).to eq('foobar')
31
29
  end
32
30
  end
33
31
  end
@@ -9,7 +9,7 @@ configs = YAML.load_file("#{Rails.root}/config/database.yml")
9
9
  db_directory = "#{Rails.root}/db"
10
10
  # setup alternate databases
11
11
  if ENV["DB"] == "sqlite"
12
- if RUBY_VERSION.to_f >= 1.9
12
+ if RUBY_VERSION >= '1.9'
13
13
  FileUtils.cp "#{db_directory}/test.sqlite3", "#{db_directory}/test-foo.sqlite3"
14
14
  FileUtils.cp "#{db_directory}/test.sqlite3", "#{db_directory}/test-bar.sqlite3"
15
15
  else
@@ -9,7 +9,7 @@ class ApplicationController < ActionController::Base
9
9
  def current_user
10
10
  @current_user ||= OpenStruct.new(:id => 153).tap do |obj|
11
11
  # Invoking `id` returns the `object_id` value in Ruby18 unless specifically overwritten
12
- def obj.id; 153; end if RUBY_VERSION.to_f < 1.9
12
+ def obj.id; 153; end if RUBY_VERSION < '1.9'
13
13
  end
14
14
  end
15
15
 
@@ -9,6 +9,9 @@ class ArticlesController < ApplicationController
9
9
  end
10
10
 
11
11
  def current_user
12
- 'foobar'
12
+ 'foobar'.tap do |string|
13
+ # Invoking `id` returns the `object_id` value in Ruby18 by default
14
+ string.class_eval { undef_method(:id) } if RUBY_VERSION < '1.9'
15
+ end
13
16
  end
14
17
  end
@@ -11,7 +11,11 @@ Dummy::Application.configure do
11
11
  config.eager_load = true
12
12
 
13
13
  # Configure static asset server for tests with Cache-Control for performance
14
- config.serve_static_assets = true
14
+ if config.respond_to?(:serve_static_files=)
15
+ config.serve_static_files = true
16
+ else
17
+ config.serve_static_assets = true
18
+ end
15
19
  config.static_cache_control = "public, max-age=3600"
16
20
 
17
21
  # Show full error reports and disable caching
@@ -52,7 +52,6 @@ class SetUpTestTables < ActiveRecord::Migration
52
52
  t.string :event, :null => false
53
53
  t.string :whodunnit
54
54
  t.text :object
55
- t.integer :transaction_id
56
55
  t.datetime :created_at
57
56
 
58
57
  # Controller info columns.
@@ -16,7 +16,7 @@ class BaseApp < Sinatra::Base
16
16
  def current_user
17
17
  @current_user ||= OpenStruct.new(:id => 'foobar').tap do |obj|
18
18
  # Invoking `id` returns the `object_id` value in Ruby18 unless specifically overwritten
19
- def obj.id; 'foobar'; end if RUBY_VERSION.to_f < 1.9
19
+ def obj.id; 'foobar'; end if RUBY_VERSION < '1.9'
20
20
  end
21
21
  end
22
22
  end
@@ -16,7 +16,7 @@ class Sinatra::Application
16
16
  def current_user
17
17
  @current_user ||= OpenStruct.new(:id => 'raboof').tap do |obj|
18
18
  # Invoking `id` returns the `object_id` value in Ruby18 unless specifically overwritten
19
- def obj.id; 'raboof'; end if RUBY_VERSION.to_f < 1.9
19
+ def obj.id; 'raboof'; end if RUBY_VERSION < '1.9'
20
20
  end
21
21
  end
22
22
 
@@ -800,8 +800,8 @@ class HasPaperTrailModelTest < ActiveSupport::TestCase
800
800
  assert_equal @article.action_data_provider_method, @article.versions.last.action
801
801
  end
802
802
 
803
- should 'store dynamic meta data based on an attribute of the item prior to creation' do
804
- assert_equal nil, @article.versions.last.title
803
+ should 'store dynamic meta data based on an attribute of the item at creation' do
804
+ assert_equal @initial_title, @article.versions.last.title
805
805
  end
806
806
 
807
807
 
@@ -36,7 +36,7 @@ class ProtectedAttrsTest < ActiveSupport::TestCase
36
36
 
37
37
  should 'the previous version should contain right attributes' do
38
38
  # For some reason this test seems to be broken in JRuby 1.9 mode in the test env even though it works in the console. WTF?
39
- unless ActiveRecord::VERSION::MAJOR >= 4 && defined?(JRUBY_VERSION) && RUBY_VERSION.to_f >= 1.9
39
+ unless ActiveRecord::VERSION::MAJOR >= 4 && defined?(JRUBY_VERSION) && RUBY_VERSION >= '1.9'
40
40
  assert_equal @widget.previous_version.attributes, @initial_attributes
41
41
  end
42
42
  end
@@ -24,7 +24,7 @@ class SerializerTest < ActiveSupport::TestCase
24
24
  assert_equal @original_fluxor_attributes, YAML.load(@fluxor.versions[1].object)
25
25
  # This test can't consistently pass in Ruby1.8 because hashes do no preserve order, which means the order of the
26
26
  # attributes in the `YAML` can't be ensured.
27
- if RUBY_VERSION.to_f >= 1.9
27
+ if RUBY_VERSION >= '1.9'
28
28
  assert_equal YAML.dump(@original_fluxor_attributes), @fluxor.versions[1].object
29
29
  end
30
30
  end
@@ -59,7 +59,7 @@ class SerializerTest < ActiveSupport::TestCase
59
59
  assert_equal @original_fluxor_attributes, ActiveSupport::JSON.decode(@fluxor.versions[1].object)
60
60
  # This test can't consistently pass in Ruby1.8 because hashes do no preserve order, which means the order of the
61
61
  # attributes in the JSON can't be ensured.
62
- if RUBY_VERSION.to_f >= 1.9
62
+ if RUBY_VERSION >= '1.9'
63
63
  assert_equal ActiveSupport::JSON.encode(@original_fluxor_attributes), @fluxor.versions[1].object
64
64
  end
65
65
  end
@@ -101,7 +101,7 @@ class SerializerTest < ActiveSupport::TestCase
101
101
  assert_equal @original_fluxor_attributes, ActiveSupport::JSON.decode(@fluxor.versions[1].object)
102
102
  # This test can't consistently pass in Ruby1.8 because hashes do no preserve order, which means the order of the
103
103
  # attributes in the JSON can't be ensured.
104
- if RUBY_VERSION.to_f >= 1.9
104
+ if RUBY_VERSION >= '1.9'
105
105
  assert_equal ActiveSupport::JSON.encode(@original_fluxor_attributes), @fluxor.versions[1].object
106
106
  end
107
107
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paper_trail
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0.beta1
4
+ version: 4.0.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Stewart
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-12-30 00:00:00.000000000 Z
12
+ date: 2015-01-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord