activehistory 0.2.2 → 5.1.0

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: d963f534f27dfefd26d29a44571a997f74abc8b6
4
- data.tar.gz: 0cda709c598c17b4fa85d845769ce06eaf0a4c2c
3
+ metadata.gz: 7d058bc974abf0cc2b78bbe2f1a310d923917c39
4
+ data.tar.gz: b71d899daa40624f2fcdd234c66242e42944d36f
5
5
  SHA512:
6
- metadata.gz: a82a9e4858e82570938b99cb6a1b696c27b163c578480d9f312cb4c33b6e09fb298768ccfeb0ab0c2f87540fab4c2a6169b6d83ae0a037a69f9f3251aadfc472
7
- data.tar.gz: 269c594656f0bc6110c40a86ed8db03ce1afadadad8dd9a0d8f20f1e22e80327904f42385cd9cf601e546983fc9c51a9db1301383f01d7d24ab3dcb343a9d225
6
+ metadata.gz: 1f73eff939b5cf10570e7738ba267c3b1c20a990981818590d86f9dc8cbecbf216e27d6e306a9a00380511a73dd7493006f1d9e9f78f5643da8f061676a4c219
7
+ data.tar.gz: 9691514585efb7e08f972733f73a7179da93755db86decbb88f5fa75da2c1384659df1366ada96dce8fafec28756ef0fa81c0273460d584728e1c14011ca5363
data/.gitignore CHANGED
@@ -2,6 +2,7 @@
2
2
  *.DS_Store
3
3
  /coverage/
4
4
  /tmp/
5
+ .byebug_history
5
6
 
6
7
  # Used by dotenv library to load environment variables.
7
8
  # .env
@@ -1,30 +1,30 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- activehistory (0.2.1)
5
- activerecord (~> 5.0)
6
- arel (~> 7.0)
4
+ activehistory (0.2.3)
5
+ activerecord (~> 5.1)
7
6
  globalid (~> 0.3.7)
8
7
 
9
8
  GEM
10
9
  remote: http://rubygems.org/
11
10
  specs:
12
- activemodel (5.0.0.1)
13
- activesupport (= 5.0.0.1)
14
- activerecord (5.0.0.1)
15
- activemodel (= 5.0.0.1)
16
- activesupport (= 5.0.0.1)
17
- arel (~> 7.0)
18
- activesupport (5.0.0.1)
11
+ activemodel (5.1.0)
12
+ activesupport (= 5.1.0)
13
+ activerecord (5.1.0)
14
+ activemodel (= 5.1.0)
15
+ activesupport (= 5.1.0)
16
+ arel (~> 8.0)
17
+ activesupport (5.1.0)
19
18
  concurrent-ruby (~> 1.0, >= 1.0.2)
20
19
  i18n (~> 0.7)
21
20
  minitest (~> 5.1)
22
21
  tzinfo (~> 1.1)
23
22
  addressable (2.4.0)
24
23
  ansi (1.5.0)
25
- arel (7.1.4)
24
+ arel (8.0.0)
26
25
  builder (3.2.2)
27
- concurrent-ruby (1.0.2)
26
+ byebug (9.0.6)
27
+ concurrent-ruby (1.0.5)
28
28
  crack (0.4.3)
29
29
  safe_yaml (~> 1.0.0)
30
30
  docile (1.1.5)
@@ -35,10 +35,10 @@ GEM
35
35
  globalid (0.3.7)
36
36
  activesupport (>= 4.1.0)
37
37
  hashdiff (0.3.0)
38
- i18n (0.7.0)
39
- json (1.8.3)
38
+ i18n (0.8.1)
39
+ json (1.8.6)
40
40
  metaclass (0.0.4)
41
- minitest (5.9.1)
41
+ minitest (5.10.1)
42
42
  minitest-reporters (1.1.11)
43
43
  ansi
44
44
  builder
@@ -62,8 +62,8 @@ GEM
62
62
  json (>= 1.8, < 3)
63
63
  simplecov-html (~> 0.10.0)
64
64
  simplecov-html (0.10.0)
65
- thread_safe (0.3.5)
66
- tzinfo (1.2.2)
65
+ thread_safe (0.3.6)
66
+ tzinfo (1.2.3)
67
67
  thread_safe (~> 0.1)
68
68
  webmock (2.1.0)
69
69
  addressable (>= 2.3.6)
@@ -76,6 +76,7 @@ PLATFORMS
76
76
  DEPENDENCIES
77
77
  activehistory!
78
78
  bundler
79
+ byebug
79
80
  factory_girl
80
81
  faker
81
82
  minitest
@@ -90,4 +91,4 @@ DEPENDENCIES
90
91
  webmock
91
92
 
92
93
  BUNDLED WITH
93
- 1.13.2
94
+ 1.15.3
@@ -31,11 +31,9 @@ Gem::Specification.new do |s|
31
31
  s.add_development_dependency 'sdoc-templates-42floors'
32
32
  s.add_development_dependency 'simplecov'
33
33
  s.add_development_dependency 'pg'
34
+ s.add_development_dependency 'byebug'
34
35
 
35
36
  # Runtime
36
- # s.add_runtime_dependency 'msgpack'
37
- # s.add_runtime_dependency 'cookie_store'
38
- s.add_runtime_dependency 'arel', '~> 7.0'
39
- s.add_runtime_dependency 'activerecord', '~> 5.0'
37
+ s.add_runtime_dependency 'activerecord', '~> 5.1'
40
38
  s.add_runtime_dependency 'globalid', '~> 0.3.7'
41
39
  end
@@ -1,6 +1,6 @@
1
1
  class ActiveHistory::Action
2
2
 
3
- attr_accessor :type, :timestamp, :subject_type, :subject_id, :diff
3
+ attr_accessor :id, :event_id, :type, :timestamp, :subject_type, :subject_id, :diff
4
4
 
5
5
  def initialize(attrs)
6
6
  attrs.each do |k,v|
@@ -12,11 +12,13 @@ class ActiveHistory::Action
12
12
  def as_json
13
13
  {
14
14
  diff: diff.as_json,
15
- subject_type: @subject_type,
16
- subject_id: @subject_id,
17
- timestamp: @timestamp.iso8601(3),
18
- type: @type
19
- }
15
+ subject_type: subject_type,
16
+ subject_id: subject_id,
17
+ timestamp: timestamp.iso8601(3),
18
+ type: type,
19
+ event_id: event_id,
20
+ id: id
21
+ }.select { |k, v| !v.nil? }
20
22
  end
21
23
 
22
24
  end
@@ -21,7 +21,7 @@ module ActiveHistory::Adapter
21
21
  @activehistory = options
22
22
  end
23
23
 
24
- def has_and_belongs_to_many(name, scope = nil, options = {}, &extension)
24
+ def has_and_belongs_to_many(name, scope = nil, **options, &extension)
25
25
  super
26
26
  name = name.to_s
27
27
  habtm_model = self.const_get("HABTM_#{name.to_s.camelize}")
@@ -53,6 +53,7 @@ module ActiveHistory::Adapter
53
53
  action.diff[diff_key] ||= [[], []]
54
54
  action.diff[diff_key][0] |= removed
55
55
  action.diff[diff_key][1] |= added
56
+
56
57
  in_common = (action.diff[diff_key][0] & action.diff[diff_key][1])
57
58
  if !in_common.empty?
58
59
  action.diff[diff_key][0] = action.diff[diff_key][0] - in_common
@@ -155,7 +156,8 @@ module ActiveHistory::Adapter
155
156
  return if !activehistory_tracking
156
157
 
157
158
  if type == :create || type == :update
158
- diff = self.changes.select { |k,v| !activehistory_tracking[:exclude].include?(k.to_sym) }
159
+ diff = self.saved_changes.select { |k,v| !activehistory_tracking[:exclude].include?(k.to_sym) }
160
+
159
161
  if type == :create
160
162
  self.class.columns.each do |column|
161
163
  if !diff[column.name] && !activehistory_tracking[:exclude].include?(column.name.to_sym) && column.default != self.attributes[column.name]
@@ -164,11 +166,29 @@ module ActiveHistory::Adapter
164
166
  end
165
167
  end
166
168
  elsif type == :destroy
167
- diff = self.attributes.select { |k| !activehistory_tracking[:exclude].include?(k.to_sym) }.map { |k, i| [k, [i, nil]] }.to_h
169
+ relations_ids = self.class.reflect_on_all_associations.map { |r| "#{r.name.to_s.singularize}_ids" }
170
+
171
+ diff = self.attributes.select do |k|
172
+ !activehistory_tracking[:exclude].include?(k.to_sym)
173
+ end.map do |k, i|
174
+ if relations_ids.include?(k)
175
+ [ k, [ i, [] ] ]
176
+ else
177
+ [ k, [ i, nil ] ]
178
+ end
179
+ end.to_h
168
180
  end
169
-
170
- return if type == :update && (diff.keys - (self.send(:timestamp_attributes_for_update) + self.send(:timestamp_attributes_for_create)).map(&:to_s)).empty?
171
-
181
+
182
+ if type == :update
183
+ diff_without_timestamps = if self.class.record_timestamps
184
+ diff.keys - (self.class.send(:timestamp_attributes_for_update_in_model) + self.class.send(:timestamp_attributes_for_create_in_model))
185
+ else
186
+ diff.keys
187
+ end
188
+
189
+ return if diff_without_timestamps.empty?
190
+ end
191
+
172
192
  if activehistory_tracking[:habtm_model]
173
193
  if type == :create
174
194
  self.class.reflect_on_association(:left_side).klass.activehistory_association_changed(
@@ -269,6 +289,7 @@ module ActiveHistory::Adapter
269
289
  })
270
290
 
271
291
  action.diff ||= {}
292
+
272
293
  if inverse_association.collection? || activehistory_tracking[:habtm_model]
273
294
  diff_key = "#{inverse_association.name.to_s.singularize}_ids"
274
295
  action.diff[diff_key] ||= [[], []]
@@ -8,7 +8,7 @@ end
8
8
  class ActiveHistory::Event
9
9
  include GlobalID::Identification
10
10
 
11
- attr_accessor :id, :ip, :user_agent, :session_id, :metadata, :timestamp, :performed_by_id, :performed_by_type, :actions
11
+ attr_accessor :id, :metadata, :timestamp, :actions
12
12
 
13
13
  def initialize(attrs={})
14
14
  attrs.each do |k,v|
@@ -25,7 +25,7 @@ class ActiveHistory::Event
25
25
  @actions ||= []
26
26
  @timestamp ||= Time.now
27
27
  end
28
-
28
+
29
29
  def persisted?
30
30
  @persisted
31
31
  end
@@ -37,7 +37,6 @@ class ActiveHistory::Event
37
37
  end
38
38
 
39
39
  def action_for(type, id, new_options=nil)
40
- byebug if $debugging
41
40
  type = type.base_class.model_name.name if !type.is_a?(String)
42
41
  action = @actions.find { |a| a.subject_type.to_s == type.to_s && a.subject_id.to_s == id.to_s }
43
42
 
@@ -85,12 +84,7 @@ class ActiveHistory::Event
85
84
  def as_json
86
85
  {
87
86
  id: id,
88
- ip: ip,
89
- user_agent: user_agent,
90
- session_id: session_id,
91
87
  metadata: metadata,
92
- performed_by_type: performed_by_type,
93
- performed_by_id: performed_by_id,
94
88
  timestamp: timestamp.utc.iso8601(3),
95
89
  actions: actions.as_json
96
90
  }
@@ -0,0 +1,9 @@
1
+ class Metadatum
2
+
3
+ attr_accessor :event_id, :key, :value
4
+
5
+ def initialize(attrs)
6
+ attrs.each { |k, v| self.send("#{k}=", v) }
7
+ end
8
+
9
+ end
@@ -1,3 +1,3 @@
1
1
  module ActiveHistory
2
- VERSION = '0.2.2'
2
+ VERSION = '5.1.0'
3
3
  end
@@ -9,12 +9,14 @@ class EventTest < ActiveSupport::TestCase
9
9
 
10
10
  test 'Data captured from Event encalpsulation' do
11
11
  data = {
12
- ip: '127.0.0.1',
13
- user_agent: 'user-agent',
14
- session_id: 'session-id',
15
- performed_by_type: 'model',
16
- performed_by_id: 'id',
17
- metadata: {random: 'stuff'},
12
+ metadata: {
13
+ ip: '127.0.0.1',
14
+ user_agent: 'user-agent',
15
+ session_id: 'session-id',
16
+ performed_by_type: 'model',
17
+ performed_by_id: 'id',
18
+ random: 'stuff'
19
+ },
18
20
  timestamp: Time.now
19
21
  }
20
22
 
@@ -40,9 +40,19 @@ class Region < ActiveRecord::Base
40
40
  track
41
41
 
42
42
  has_and_belongs_to_many :properties, inverse_of: :regions
43
- has_and_belongs_to_many :parents, :join_table => 'regions_regions', :class_name => 'Region', :foreign_key => 'child_id', :association_foreign_key => 'parent_id'
44
- has_and_belongs_to_many :children, :join_table => 'regions_regions', :class_name => 'Region', :foreign_key => 'parent_id', :association_foreign_key => 'child_id'
45
-
43
+
44
+ has_and_belongs_to_many :parents,
45
+ class_name: 'Region',
46
+ join_table: 'regions_regions',
47
+ foreign_key: 'child_id',
48
+ association_foreign_key: 'parent_id'
49
+
50
+ has_and_belongs_to_many :children,
51
+ class_name: 'Region',
52
+ join_table: 'regions_regions',
53
+ foreign_key: 'parent_id',
54
+ association_foreign_key: 'child_id'
55
+
46
56
  end
47
57
 
48
58
  class Comment < ActiveRecord::Base
@@ -56,5 +66,3 @@ end
56
66
  class UnobservedModel < ActiveRecord::Base
57
67
 
58
68
  end
59
-
60
- # ActiveRecord::Base.logger = Logger.new(STDOUT)
@@ -8,6 +8,7 @@ require 'minitest/reporters'
8
8
  require 'webmock/minitest'
9
9
  require 'factory_girl'
10
10
  require 'faker'
11
+ require 'byebug'
11
12
 
12
13
 
13
14
  WebMock.disable_net_connect!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activehistory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Bracy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-17 00:00:00.000000000 Z
11
+ date: 2017-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -193,33 +193,33 @@ dependencies:
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
195
  - !ruby/object:Gem::Dependency
196
- name: arel
196
+ name: byebug
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - "~>"
199
+ - - ">="
200
200
  - !ruby/object:Gem::Version
201
- version: '7.0'
202
- type: :runtime
201
+ version: '0'
202
+ type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
- - - "~>"
206
+ - - ">="
207
207
  - !ruby/object:Gem::Version
208
- version: '7.0'
208
+ version: '0'
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: activerecord
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
213
  - - "~>"
214
214
  - !ruby/object:Gem::Version
215
- version: '5.0'
215
+ version: '5.1'
216
216
  type: :runtime
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
- version: '5.0'
222
+ version: '5.1'
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: globalid
225
225
  requirement: !ruby/object:Gem::Requirement
@@ -256,6 +256,7 @@ files:
256
256
  - lib/activehistory/connection.rb
257
257
  - lib/activehistory/event.rb
258
258
  - lib/activehistory/exceptions.rb
259
+ - lib/activehistory/metadatum.rb
259
260
  - lib/activehistory/regard.rb
260
261
  - lib/activehistory/version.rb
261
262
  - test/active_record_adapter/association_test/belongs_to_association_test.rb
@@ -290,7 +291,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
290
291
  version: '0'
291
292
  requirements: []
292
293
  rubyforge_project:
293
- rubygems_version: 2.6.8
294
+ rubygems_version: 2.6.11
294
295
  signing_key:
295
296
  specification_version: 4
296
297
  summary: Track changes to ActiveRecord models