activerecord-bixformer 0.3.0 → 0.3.1

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