operator_recordable 0.1.1 → 0.2.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
  SHA256:
3
- metadata.gz: 9439bc5b4ce5623c61b5d9c4f4ad0d9da08fdec39f7bfdb19000d8e622dc2ce0
4
- data.tar.gz: 27c6348566975088b2a1b43523a41d1a7e4997c1152794ab9e9c8a7ba378f335
3
+ metadata.gz: 3e05ee5e40a24819f5628847408a64657df213e1f96bf7060b87b9b86f45d6aa
4
+ data.tar.gz: 6491c0178099e81c2b423e5344e018b76de979e76009d7ef21df9d3bb0bfdec6
5
5
  SHA512:
6
- metadata.gz: 4cef8201a40b1e628177f249ae8f0978a42d8e78c18ab43cef3e9d159cb14e3e7dd9ba230c75d54ed3576c45ede68d086900a580f53a4a508a281360b85d89e2
7
- data.tar.gz: 775227886773bb67f8f57fb08b403f50b84c2bbb63077273cb0825e160e0fdd8f3cb990987a925cd09f74210bc8f71dbe69b71b288946f49e9a31856043ab9aa
6
+ metadata.gz: d24f2ffdcb2a74658cf298da772d5b5945c56c5283b0087fb0f52c4d07afb56a144265a26633df7fb5c5399d4aed38e43f1a4700f489d5741bccca24867748f1
7
+ data.tar.gz: a4803ce15c437240371fb6e32433880e2862d2598fe8616f5681fda4d21647550ad017dd5471578d95a9ea4e1b070103b39a729f16ab83526d8a698de7950555
data/CHANGELOG.md CHANGED
@@ -1,13 +1,25 @@
1
1
  ## Unreleased
2
2
 
3
3
 
4
- ## 0.1.1 (2018/09/19)
4
+ ## 0.2.0 (2018-09-27)
5
+
6
+ ### Cbanges
7
+
8
+ * Add association name options
9
+ * Modify not to define unnecessary class methods for ActiveRecord model
10
+
11
+ ### Misc
12
+
13
+ * Remove unecessary `require`
14
+
15
+
16
+ ## 0.1.1 (2018-09-19)
5
17
 
6
18
  ### Misc
7
19
 
8
20
  * Refactor internal structures
9
21
 
10
22
 
11
- ## 0.1.0 (2018/09/14)
23
+ ## 0.1.0 (2018-09-14)
12
24
 
13
25
  * Initial release
data/README.md CHANGED
@@ -38,6 +38,9 @@ OperatorRecordable.config = {
38
38
  creator_column_name: "created_by",
39
39
  updater_column_name: "updated_by",
40
40
  deleter_column_name: "deleted_by",
41
+ creator_association_name: "creator",
42
+ updater_association_name: "updater",
43
+ deleter_association_name: "deleter",
41
44
  operator_association_options: {},
42
45
  operator_association_scope: nil,
43
46
  store: :thread_store
@@ -52,6 +55,9 @@ OperatorRecordable.config = {
52
55
  | `creator_column_name` | String | column name of creator. | `"created_by"` |
53
56
  | `updater_column_name` | String | column name of updater. | `"updated_by"` |
54
57
  | `deleter_column_name` | String | column name of deleter. | `"deleted_by"` |
58
+ | `creator_association_name` | String | association name of creator. | `"creator"` |
59
+ | `updater_association_name` | String | association name of updater. | `"updater"` |
60
+ | `deleter_association_name` | String | association name of deleter. | `"deleter"` |
55
61
  | `operator_association_options` | Hash | options of operator associations. e.g. `{ optional: true }` | `{}` |
56
62
  | `operator_association_scope` | Proc | The scope of operator associations. e.g. `-> { with_deleted }` | `nil` |
57
63
  | `store` | Enum | operator store. any value of `:thread_store`, `:request_store` or `current_attributes_store` | `:thread_store` |
@@ -12,12 +12,21 @@ module OperatorRecordable
12
12
  end
13
13
 
14
14
  %i[operator_class_name creator_column_name updater_column_name deleter_column_name
15
+ creator_association_name updater_association_name deleter_association_name
15
16
  operator_association_options operator_association_scope].each do |name|
16
17
  define_method name do
17
18
  config[name]
18
19
  end
19
20
  end
20
21
 
22
+ def column_name_for(type)
23
+ config[:"#{type}_column_name"]
24
+ end
25
+
26
+ def association_name_for(type)
27
+ config[:"#{type}_association_name"]
28
+ end
29
+
21
30
  private
22
31
 
23
32
  attr_reader :config
@@ -28,6 +37,9 @@ module OperatorRecordable
28
37
  creator_column_name: "created_by",
29
38
  updater_column_name: "updated_by",
30
39
  deleter_column_name: "deleted_by",
40
+ creator_association_name: "creator",
41
+ updater_association_name: "updater",
42
+ deleter_association_name: "deleter",
31
43
  operator_association_options: {},
32
44
  operator_association_scope: nil,
33
45
  store: :thread_store
@@ -6,7 +6,6 @@ module OperatorRecordable
6
6
  class Recorder < ::Module
7
7
  def initialize(config)
8
8
  define_activate_method(config)
9
- define_predicate_methods
10
9
  end
11
10
 
12
11
  private
@@ -15,55 +14,50 @@ module OperatorRecordable
15
14
  m = self
16
15
 
17
16
  define_method :record_operator_on do |*actions|
18
- @_record_operator_on = Configuration::Model.new(actions)
17
+ c = Configuration::Model.new(actions)
19
18
 
20
- if record_creator?
19
+ if c.record_creator?
21
20
  m.__send__(:run_creator_dsl, self, config)
22
21
  m.__send__(:define_creator_instance_methods, self, config)
23
22
  end
24
23
 
25
- if record_updater?
24
+ if c.record_updater?
26
25
  m.__send__(:run_updater_dsl, self, config)
27
26
  m.__send__(:define_updater_instance_methods, self, config)
28
27
  end
29
28
 
30
- if record_deleter?
29
+ if c.record_deleter?
31
30
  m.__send__(:run_deleter_dsl, self, config)
32
31
  m.__send__(:define_deleter_instance_methods, self, config)
33
32
  end
34
33
  end
35
34
  end
36
35
 
37
- def run_creator_dsl(class_or_module, config)
38
- class_or_module.class_exec do
39
- before_create :assign_creator
40
- belongs_to :creator, config.operator_association_scope,
41
- { foreign_key: config.creator_column_name,
42
- class_name: config.operator_class_name }.merge(config.operator_association_options)
43
- end
36
+ def run_creator_dsl(klass, config)
37
+ klass.before_create :"assign_#{config.creator_association_name}"
38
+ run_add_association_dsl(:creator, klass, config)
44
39
  end
45
40
 
46
- def run_updater_dsl(class_or_module, config)
47
- class_or_module.class_exec do
48
- before_save :assign_updater
49
- belongs_to :updater, config.operator_association_scope,
50
- { foreign_key: config.updater_column_name,
51
- class_name: config.operator_class_name }.merge(config.operator_association_options)
52
- end
41
+ def run_updater_dsl(klass, config)
42
+ klass.before_save :"assign_#{config.updater_association_name}"
43
+ run_add_association_dsl(:updater, klass, config)
53
44
  end
54
45
 
55
- def run_deleter_dsl(class_or_module, config)
56
- class_or_module.class_exec do
57
- before_destroy :assign_deleter
58
- belongs_to :deleter, config.operator_association_scope,
59
- { foreign_key: config.deleter_column_name,
60
- class_name: config.operator_class_name }.merge(config.operator_association_options)
61
- end
46
+ def run_deleter_dsl(klass, config)
47
+ klass.before_destroy :"assign_#{config.deleter_association_name}"
48
+ run_add_association_dsl(:deleter, klass, config)
62
49
  end
63
50
 
64
- def define_creator_instance_methods(class_or_module, config)
65
- class_or_module.class_eval <<~END_OF_DEF, __FILE__, __LINE__ + 1
66
- private def assign_creator
51
+ def run_add_association_dsl(type, klass, config)
52
+ klass.belongs_to config.association_name_for(type).to_sym,
53
+ config.operator_association_scope,
54
+ { foreign_key: config.column_name_for(type),
55
+ class_name: config.operator_class_name }.merge(config.operator_association_options)
56
+ end
57
+
58
+ def define_creator_instance_methods(klass, config)
59
+ klass.class_eval <<~END_OF_DEF, __FILE__, __LINE__ + 1
60
+ private def assign_#{config.creator_association_name}
67
61
  return unless (op = OperatorRecordable.operator)
68
62
 
69
63
  self.#{config.creator_column_name} = op.id
@@ -71,9 +65,9 @@ module OperatorRecordable
71
65
  END_OF_DEF
72
66
  end
73
67
 
74
- def define_updater_instance_methods(class_or_module, config)
75
- class_or_module.class_eval <<~END_OF_DEF, __FILE__, __LINE__ + 1
76
- private def assign_updater
68
+ def define_updater_instance_methods(klass, config)
69
+ klass.class_eval <<~END_OF_DEF, __FILE__, __LINE__ + 1
70
+ private def assign_#{config.updater_association_name}
77
71
  return if !self.new_record? && !self.changed?
78
72
  return unless (op = OperatorRecordable.operator)
79
73
 
@@ -82,9 +76,9 @@ module OperatorRecordable
82
76
  END_OF_DEF
83
77
  end
84
78
 
85
- def define_deleter_instance_methods(class_or_module, config)
86
- class_or_module.class_eval <<~END_OF_DEF, __FILE__, __LINE__ + 1
87
- private def assign_deleter
79
+ def define_deleter_instance_methods(klass, config)
80
+ klass.class_eval <<~END_OF_DEF, __FILE__, __LINE__ + 1
81
+ private def assign_#{config.deleter_association_name}
88
82
  return if self.frozen?
89
83
  return unless (op = OperatorRecordable.operator)
90
84
 
@@ -96,25 +90,5 @@ module OperatorRecordable
96
90
  end
97
91
  END_OF_DEF
98
92
  end
99
-
100
- def define_predicate_methods
101
- define_method :record_creator? do
102
- instance_variable_defined?(:@_record_operator_on) &&
103
- @_record_operator_on.record_creator?
104
- end
105
- private :record_creator?
106
-
107
- define_method :record_updater? do
108
- instance_variable_defined?(:@_record_operator_on) &&
109
- @_record_operator_on.record_updater?
110
- end
111
- private :record_updater?
112
-
113
- define_method :record_deleter? do
114
- instance_variable_defined?(:@_record_operator_on) &&
115
- @_record_operator_on.record_deleter?
116
- end
117
- private :record_deleter?
118
- end
119
93
  end
120
94
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OperatorRecordable
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  require "operator_recordable/version"
4
4
  require "operator_recordable/configuration"
5
- require "operator_recordable/store"
6
5
  require "operator_recordable/recorder"
7
6
 
8
7
  module OperatorRecordable
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: operator_recordable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuji Hanamura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-18 00:00:00.000000000 Z
11
+ date: 2018-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord