kushojin 0.1.2 → 0.1.3

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
  SHA256:
3
- metadata.gz: 06f7c8d3b7b0fe28792b4c01bc6af184a25cca40b5c70ab0f2916acc3d696b6a
4
- data.tar.gz: 59b0051cf2b0d30e5d6f468621fcb8719e35cc167eca2774cf638ff5a2cc97f6
3
+ metadata.gz: aded25303e7f5437b7c4ff30cf00786404573a9b348e41ec717ed3fe2ba91a12
4
+ data.tar.gz: 7a2475384378eebc452d62d2ad969c8d5c792599aa59265b47dc9ad9d08b388b
5
5
  SHA512:
6
- metadata.gz: 90c9302c8beca1dcbefff47f30fe97713ce31e232480fcb2718817efa775d696745b9de15c0242330035ade1fc78a81ccd21129264adae27f503df35098f3e52
7
- data.tar.gz: e7626085b763c4c2ec0ca83bd68da28c0fb4484eeada3ee56150d595720b60a38bef0e7601fac96268336efb9008acec7c2d52129ba2d24301460f060004db33
6
+ metadata.gz: d1c3a9cb1b8ae4cd2e07b0e2da45583b1a2f38f18d9a96bddaa1c7d74ee9dd9483059b0ca007754cdaac349fcae758f13840f0d391f26233dc59742cc9317faf
7
+ data.tar.gz: 7b00fca7decfed5b27caf9e357c8cbf0813a13d1d80ea8e399dad7c12d841485cc8f4f09e2776b809242bead4dbb58338b17dd1567d85bad56887b917dd0c4fb
@@ -1,5 +1,5 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.4.2
5
- before_install: gem install bundler -v 1.15.4
4
+ - 2.5.3
5
+ before_install: gem install bundler -v 1.17.1
data/README.md CHANGED
@@ -57,10 +57,10 @@ Custom callback object can be used with `:callbacks` option.
57
57
 
58
58
  ```ruby
59
59
  class CustomCallbacks
60
- # Must respond to after_create, after_update, and before_destroy.
60
+ # Must respond to after_create, after_update, and after_destroy.
61
61
  def after_create(record); end
62
62
  def after_update(record); end
63
- def before_destroy(record); end
63
+ def after_destroy(record); end
64
64
  end
65
65
 
66
66
  class User < ApplicationRecord
@@ -7,8 +7,8 @@ require "kushojin"
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
10
+ require "pry"
11
+ Pry.start
12
12
 
13
- require "irb"
14
- IRB.start(__FILE__)
13
+ # require "irb"
14
+ # IRB.start(__FILE__)
@@ -1,7 +1,7 @@
1
1
  module Kushojin
2
2
  module ModelMethods
3
3
  module Callback
4
- RECORD_EVENTS = %i[before_destroy after_create after_update].freeze
4
+ RECORD_EVENTS = %i[after_create after_update after_destroy].freeze
5
5
 
6
6
  module ClassMethods
7
7
  def self.extended(klass)
@@ -22,10 +22,10 @@ module Kushojin
22
22
  # Custom callback object can be used with +:callbacks+ option.
23
23
  #
24
24
  # class CustomCallbacks
25
- # # Must respond to after_create, after_update, and before_destroy.
25
+ # # Must respond to after_create, after_update, and after_destroy.
26
26
  # def after_create(record); end
27
27
  # def after_update(record); end
28
- # def before_destroy(record); end
28
+ # def after_destroy(record); end
29
29
  # end
30
30
  #
31
31
  # class User < ApplicationRecord
@@ -1,18 +1,37 @@
1
1
  module Kushojin
2
2
  module ModelMethods
3
3
  class Change
4
- attr_reader :event, :model, :changes
4
+ attr_reader :event, :model
5
5
 
6
6
  delegate :primary_key, :table_name, to: "@model.class"
7
7
 
8
8
  def initialize(event, model)
9
9
  @event = event
10
- @model = model.class.new(model.attributes).freeze
11
- @changes = model.saved_changes.freeze
10
+ @model = take_copy_of(model).freeze
11
+ end
12
+
13
+ def changes
14
+ @model.saved_changes
12
15
  end
13
16
 
14
17
  def changes_without_primary_key
15
- @changes.reject { |attr_name, _| attr_name == primary_key }
18
+ changes.reject { |attr_name, _| attr_name == primary_key }
19
+ end
20
+
21
+ private
22
+
23
+ class_attribute :copy_ivars, instance_writer: false
24
+ self.copy_ivars = %i[
25
+ @attributes
26
+ @mutations_before_last_save
27
+ ]
28
+
29
+ def take_copy_of(model)
30
+ model.class.new do |copy|
31
+ copy_ivars.each do |ivar|
32
+ copy.instance_variable_set(ivar, model.instance_variable_get(ivar).deep_dup)
33
+ end
34
+ end
16
35
  end
17
36
  end
18
37
  end
@@ -2,10 +2,22 @@ module Kushojin
2
2
  module ModelMethods
3
3
  class RecordChangesCallbacks
4
4
  Callback::RECORD_EVENTS.each do |event|
5
+ callback = event.to_s.split(/_/).last
6
+
5
7
  class_eval <<-RUBY, __FILE__, __LINE__ + 1
6
- def #{event}(model) # def after_create(model)
7
- Recorder.record(:#{event.to_s.split(/_/).last}, model) if Recorder.current # Recorder.record(:create, model) if Recorder.current
8
- end # end
8
+ def #{event}(model) # def after_create(model)
9
+ return unless Recorder.current # return unless Recorder.current
10
+ #
11
+ change = build_change_on_#{callback}(model) # change = build_change_on_create(model)
12
+ Recorder.record(change) # Recorder.record(change)
13
+ end # end
14
+ RUBY
15
+
16
+ class_eval <<-RUBY, __FILE__, __LINE__ + 1
17
+ def build_change_on_#{callback}(model) # def build_change_on_create(model)
18
+ ModelMethods::Change.new(:#{callback}, model) # ModelMethods::Change.new(:create, model)
19
+ end # end
20
+ private :build_change_on_#{callback} # private :build_change_on_create
9
21
  RUBY
10
22
  end
11
23
  end
@@ -22,8 +22,8 @@ module Kushojin
22
22
  @changes = []
23
23
  end
24
24
 
25
- def record(event, model)
26
- @changes << ModelMethods::Change.new(event, model)
25
+ def record(change)
26
+ @changes << change
27
27
  end
28
28
  end
29
29
  end
@@ -17,17 +17,6 @@ module Kushojin
17
17
  def tag(controller)
18
18
  "#{controller.controller_name}.#{controller.action_name}"
19
19
  end
20
-
21
- def map(change, controller:)
22
- changes = change.changes_without_primary_key.reject { |attr_name, _| ignore_columns.include?(attr_name) }
23
- {
24
- "event" => change.event.to_s,
25
- "request_id" => controller.request.request_id,
26
- "table_name" => change.table_name,
27
- change.primary_key => change.model.id,
28
- "changes" => changes,
29
- }
30
- end
31
20
  end
32
21
  end
33
22
  end
@@ -1,3 +1,3 @@
1
1
  module Kushojin
2
- VERSION = "0.1.2".freeze
2
+ VERSION = "0.1.3".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kushojin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Loose coupling
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-17 00:00:00.000000000 Z
11
+ date: 2018-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord