kushojin 0.1.2 → 0.1.3

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
  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