activerecord-bixformer 0.3.0 → 0.3.1

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
  SHA1:
3
- metadata.gz: dd4ea598a0c120a784bbeb9f5a296471a5385f57
4
- data.tar.gz: 7078cc54cd2675e0081362d897ee7ff74985b2c8
3
+ metadata.gz: 565674ba58147fc9345db47ffd3948b310a1b42b
4
+ data.tar.gz: fb55615709f7d11e1e17bb7eac0ec215b247bd72
5
5
  SHA512:
6
- metadata.gz: 868cd4eba053a212776bb8c5b1ea4b1c25d0da8c5dcddd5f0e48cd302e13db17bd4ed4d497f4b9f157544de472d22b46a3462ae97b814fa16a8d69f6cc8f2f20
7
- data.tar.gz: 2856bb8d614bbd9e64bbf6c4bd47d85e7c064123d0603dec9d236478580dd93b30225e8cbc25d6c327fc98f402e269592ebadc4863dcaf5d432a4ae345d3d00a
6
+ metadata.gz: 80893b6689eddf6315186104099449bf752bdd7ca66399eeeded3e8c1dbe3a30580f2f047de48ca72d797b12328e3598aa9bb8befa471abd36b796b032737e6c
7
+ data.tar.gz: aea5af76daaa004464480f4c155bb1f9f7502b02fe0c558c5518b011ea80ad8c36213e3b606920e0ff59b6d703fea7ab84b51cc28a2704d8947d6a7525d24382
@@ -91,9 +91,9 @@ module ActiveRecord
91
91
  values = {}.with_indifferent_access
92
92
  normalizer = ::ActiveRecord::Bixformer::AssignableAttributesNormalizer.new(plan, self, parent_record_id)
93
93
 
94
- run_callback :import, type: :attribute do
94
+ run_bixformer_callback :import, type: :attribute do
95
95
  @attributes.each do |attr|
96
- attribute_value = run_callback :import, on: attr.name do
96
+ attribute_value = run_bixformer_callback :import, on: attr.name do
97
97
  block.call(attr)
98
98
  end
99
99
 
@@ -123,9 +123,9 @@ module ActiveRecord
123
123
  def make_each_association_import_value(values, &block)
124
124
  self_record_id = values[activerecord_constant.primary_key]
125
125
 
126
- run_callback :import, type: :association do
126
+ run_bixformer_callback :import, type: :association do
127
127
  @associations.each do |association|
128
- association_value = run_callback :import, on: association.name do
128
+ association_value = run_bixformer_callback :import, on: association.name do
129
129
  block.call(association, self_record_id)
130
130
  end
131
131
 
@@ -4,12 +4,12 @@ module ActiveRecord
4
4
  module Csv
5
5
  class Base < ::ActiveRecord::Bixformer::Model::Base
6
6
  def export(record_or_records)
7
- run_callback :export do
8
- values = run_callback :export, type: :attribute do
7
+ run_bixformer_callback :export do
8
+ values = run_bixformer_callback :export, type: :attribute do
9
9
  # has_one でしか使わない想定なので record_or_records は ActiveRecord::Base のはず
10
10
  @attributes.map do |attr|
11
11
  attribute_value = if record_or_records
12
- run_callback :export, on: attr.name do
12
+ run_bixformer_callback :export, on: attr.name do
13
13
  attr.export(record_or_records)
14
14
  end
15
15
  end
@@ -18,10 +18,10 @@ module ActiveRecord
18
18
  end.to_h.with_indifferent_access
19
19
  end
20
20
 
21
- run_callback :export, type: :association do
21
+ run_bixformer_callback :export, type: :association do
22
22
  @associations.inject(values) do |each_values, association|
23
23
  association_value = if record_or_records
24
- run_callback :export, on: association.name do
24
+ run_bixformer_callback :export, on: association.name do
25
25
  record_or_records.__send__(association.name)
26
26
  end
27
27
  end
@@ -35,7 +35,7 @@ module ActiveRecord
35
35
  end
36
36
 
37
37
  def import(csv_body_row, parent_record_id = nil)
38
- run_callback :import do
38
+ run_bixformer_callback :import do
39
39
  values = make_each_attribute_import_value(parent_record_id) do |attr|
40
40
  csv_value = csv_body_row[csv_title(attr.name)]
41
41
 
@@ -4,15 +4,12 @@ module ActiveRecord
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
- class_attribute :__bixformer_export_callbacks
8
- class_attribute :__bixformer_import_callbacks
9
-
10
- self.__bixformer_export_callbacks = {}
11
- self.__bixformer_import_callbacks = {}
7
+ class_attribute :__bixformer_export_callbacks, instance_writer: false
8
+ class_attribute :__bixformer_import_callbacks, instance_writer: false
12
9
 
13
10
  private
14
11
 
15
- def self.callback_store_key(options)
12
+ def self.bixformer_callback_key(options)
16
13
  if options[:on]
17
14
  "on:#{options[:on]}"
18
15
  elsif options[:type]
@@ -27,14 +24,15 @@ module ActiveRecord
27
24
  [:export, :import].each do |target|
28
25
  [:before, :around, :after].each do |timing|
29
26
  define_method "bixformer_#{timing}_#{target}" do |*callback, &block|
30
- callback_store = self.__send__("__bixformer_#{target}_callbacks")[timing] ||= {}
27
+ unless __send__("__bixformer_#{target}_callbacks")
28
+ __send__("__bixformer_#{target}_callbacks=", {})
29
+ end
31
30
 
31
+ store = __send__("__bixformer_#{target}_callbacks")[timing] ||= {}
32
32
  options = callback.extract_options!.with_indifferent_access
33
- key = callback_store_key(options)
33
+ key = bixformer_callback_key(options)
34
34
 
35
- callback_store[key] = options.merge(
36
- body: block ? block : options[:body] || callback.first
37
- )
35
+ store[key] = options.merge(body: block ? block : options[:body] || callback.first)
38
36
  end
39
37
  end
40
38
  end
@@ -42,50 +40,53 @@ module ActiveRecord
42
40
 
43
41
  private
44
42
 
45
- def run_callback(target, options = {}, &body)
46
- options = options.with_indifferent_access
43
+ def run_bixformer_callback(target, options = {}, &body)
44
+ fetcher = -> (timing) do
45
+ return unless __send__("__bixformer_#{target}_callbacks")
47
46
 
48
- before_callback = callback(target, :before, options)
49
- if before_callback
50
- return nil unless invoke_callback(before_callback)
51
- end
47
+ store = __send__("__bixformer_#{target}_callbacks")[timing] || {}
48
+ key = self.class.bixformer_callback_key(options)
49
+ values = store[key] || {}
52
50
 
53
- around_callback = callback(target, :around, options)
54
- result = invoke_callback(around_callback, &body)
51
+ values[:body]
52
+ end
55
53
 
56
- after_callback = callback(target, :after, options)
57
- invoke_callback(after_callback, args_required: true, args_value: result) if after_callback
54
+ invoker = -> (callback, args_required: false, args_value: nil, &block) do
55
+ if callback.is_a?(::Proc)
56
+ if block
57
+ self.instance_exec block, &callback
58
+ elsif args_required
59
+ self.instance_exec args_value, &callback
60
+ else
61
+ self.instance_exec &callback
62
+ end
63
+ elsif callback.is_a?(::Symbol) || callback.is_a?(::String)
64
+ if block
65
+ self.__send__(callback, &block)
66
+ elsif args_required
67
+ self.__send__(callback, args_value)
68
+ else
69
+ self.__send__(callback)
70
+ end
71
+ elsif block
72
+ yield block
73
+ end
74
+ end
58
75
 
59
- result
60
- end
76
+ options = options.with_indifferent_access
61
77
 
62
- def invoke_callback(callback, args_required: false, args_value: nil, &block)
63
- if callback.is_a?(::Proc)
64
- if block
65
- self.instance_exec block, &callback
66
- elsif args_required
67
- self.instance_exec args_value, &callback
68
- else
69
- self.instance_exec &callback
70
- end
71
- elsif callback.is_a?(::Symbol) || callback.is_a?(::String)
72
- if block
73
- self.__send__(callback, &block)
74
- elsif args_required
75
- self.__send__(callback, args_value)
76
- else
77
- self.__send__(callback)
78
- end
79
- elsif block
80
- yield block
78
+ before_callback = fetcher.call(:before)
79
+ if before_callback
80
+ return nil unless invoker.call(before_callback)
81
81
  end
82
- end
83
82
 
84
- def callback(target, timing, options)
85
- callback_store = self.__send__("__bixformer_#{target}_callbacks")[timing] || {}
86
- callback_values = callback_store[self.class.callback_store_key(options)] || {}
83
+ around_callback = fetcher.call(:around)
84
+ result = invoker.call(around_callback, &body)
87
85
 
88
- callback_values[:body]
86
+ after_callback = fetcher.call(:after)
87
+ invoker.call(after_callback, args_required: true, args_value: result) if after_callback
88
+
89
+ result
89
90
  end
90
91
  end
91
92
  end
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module Bixformer
3
- VERSION = "0.3.0"
3
+ VERSION = "0.3.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-bixformer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroaki Otsu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-03 00:00:00.000000000 Z
11
+ date: 2016-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord