utusemi 0.0.3 → 0.0.4

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: 80ebe354ddd670b48b24665f4867646aa3dbcbb9
4
- data.tar.gz: 5d0c5e1b648dfee60d51f54f27cae5b8408a681a
3
+ metadata.gz: 4b16d77100fe212c9bd6e394b78d2d78016f88ff
4
+ data.tar.gz: b0f86e567be982e9e9e90ea676ad1996da452f45
5
5
  SHA512:
6
- metadata.gz: c81151427b717334d4dccb4f213c175c759bf56edf9d1a41122a0f4759921c7f67a0f97c13800a73a5ec7c61d45b7f662b55d88328a38fcaf415369f339086e2
7
- data.tar.gz: 993b5541e62a5f5544a3142e883fb378e782c83a0993908256639cbbf3b5e48b3126d593c381288ada94a90c9ab2e8eaf5c3a82e20f58494654abadba1883efb
6
+ metadata.gz: 2807f6a7381168122fc1d6240c207e897d20d1bd7a5d6240d493584265a1670f62eeba4f1d007d0b96a44cbc8da8f4ce97723868ca9d00835dad03027115fd78
7
+ data.tar.gz: 3ab9cacae33c0bb31faa35e5b11b3ca82606e0356023ecc5075f681cd8dde9444ad3090516a0d98ccabc71f67dcc01de35d3fb93eac65d16519054e2cb338472
@@ -3,13 +3,13 @@ require 'rails'
3
3
  require 'utusemi/definition'
4
4
  require 'utusemi/configuration'
5
5
  require 'utusemi/railtie'
6
+ require 'utusemi/core'
6
7
 
7
8
  module Utusemi
8
9
  class << self
9
10
  def enable
10
11
  this = self
11
12
  ActiveSupport.on_load(:active_record) do
12
- require 'utusemi/core'
13
13
  # for instance
14
14
  this.include_to_activerecord_base
15
15
  # for model and relation
@@ -26,6 +26,7 @@ module Utusemi
26
26
  obj = true if obj.nil?
27
27
  utusemi_values[:flag] = obj ? true : false
28
28
  utusemi_values[:type] = obj.to_sym if obj.class.in? [Symbol, String]
29
+ utusemi_values[:type] ||= default_utusemi_type
29
30
  utusemi_values[:options] = options
30
31
  warning_checker unless Rails.env.production?
31
32
  self
@@ -54,6 +55,21 @@ module Utusemi
54
55
  Rails.logger.warn "[Utusemi:WARNING] \"#{new_column_name}\" is duplicated in map(:#{utusemi_values[:type]})."
55
56
  end
56
57
  end
58
+
59
+ def default_utusemi_type
60
+ class_for_default_utusemi_type.model_name.singular.to_sym
61
+ end
62
+
63
+ def class_for_default_utusemi_type
64
+ case self
65
+ when ActiveRecord::Relation
66
+ @klass
67
+ when ActiveRecord::Base
68
+ self.class
69
+ else
70
+ self
71
+ end
72
+ end
57
73
  end
58
74
 
59
75
  # 用途
@@ -213,6 +229,16 @@ module Utusemi
213
229
  end
214
230
  end
215
231
 
232
+ # Rails 3.x で関連モデルの named scope に対してのカラムマッピングが正常に動作するようにするためのもの
233
+ #
234
+ # 原因
235
+ # product.stocks.unsold のような named scope において、stocks は utusemi_values を所持していないため
236
+ # カラムマッピングが作動しない
237
+ #
238
+ # 対策
239
+ # stocks は呼び出し元である product を truthly_owner として所持しているので、
240
+ # これを見てカラムマッピングを実施するか否かを判別するようにした
241
+ #
216
242
  module CollectionProxy
217
243
  def scoped(*args, &block)
218
244
  association = @association
@@ -294,7 +320,7 @@ module Utusemi
294
320
  #
295
321
  # 使用例
296
322
  # class Product
297
- # has_many :stocks, utusemi: true
323
+ # has_many :stocks
298
324
  # ...
299
325
  # end
300
326
  # stock = Product.utusemi(:product).stocks.first
@@ -316,48 +342,39 @@ module Utusemi
316
342
  end
317
343
 
318
344
  module AssociationMethods
319
- def belongs_to(name, *args)
320
- utusemi_association(:belongs_to, name, *args) { |*a| super(*a) }
345
+ def belongs_to(name, *args, &block)
346
+ prepend_utusemi_association_reader_module(name)
347
+ super
321
348
  end
322
349
 
323
- def has_one(name, *args)
324
- utusemi_association(:has_one, name, *args) { |*a| super(*a) }
350
+ def has_one(name, *args, &block)
351
+ prepend_utusemi_association_reader_module(name)
352
+ super
325
353
  end
326
354
 
327
- def has_many(name, *args)
328
- utusemi_association(:has_many, name, *args) { |*a| super(*a) }
355
+ def has_many(name, *args, &block)
356
+ prepend_utusemi_association_reader_module(name)
357
+ super
329
358
  end
330
359
 
331
360
  private
332
361
 
333
- def check_deplicated_association_warning(association_type, name, scope)
334
- return unless method_defined?(name)
335
- return unless method_defined?("#{name}_with_utusemi")
336
- return if scope.try(:[], :utusemi)
337
- Rails.logger.warn "[Utusemi:WARNING] \"#{association_type} :#{name}\" is duplicated in #{self.name}."
362
+ def prepend_utusemi_association_reader_module(name)
363
+ return if method_defined?(name)
364
+ prepend build_utusemi_association_reader_module(name)
338
365
  end
339
366
 
340
- def utusemi_association(association_type, name, *args)
341
- if args.empty?
342
- yield name, *args
343
- return define_utusemi_association_reader(name)
344
- end
345
- scope = args.shift
346
- check_deplicated_association_warning(association_type, name, scope)
347
- utusemi_flag = scope.try(:delete, :utusemi)
348
- yield name, scope, *args if !utusemi_flag || !method_defined?(name)
349
- define_utusemi_association_reader(name, utusemi_flag => true)
350
- end
351
-
352
- def define_utusemi_association_reader(name, options = {})
353
- return if method_defined?("#{name}_with_utusemi")
354
- define_method "#{name}_with_utusemi" do |*args|
355
- association = send("#{name}_without_utusemi", *args)
356
- return unless association
357
- return association unless association.is_a? ActiveRecord::Base
358
- utusemi_for_association(name, association, options)
359
- end
360
- alias_method_chain name, :utusemi
367
+ def build_utusemi_association_reader_module(name)
368
+ wodule = Module.new
369
+ wodule.class_eval <<-EOS, __FILE__, __LINE__ + 1
370
+ def #{name}(*args, &block)
371
+ association = super
372
+ return unless association
373
+ return association unless association.is_a? ActiveRecord::Base
374
+ utusemi_for_association('#{name}'.to_sym, association)
375
+ end
376
+ EOS
377
+ wodule
361
378
  end
362
379
  end
363
380
  end
@@ -1,3 +1,3 @@
1
1
  module Utusemi
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
metadata CHANGED
@@ -1,139 +1,139 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: utusemi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - YOSHIDA Hiroki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-16 00:00:00.000000000 Z
11
+ date: 2014-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 3.2.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: railties
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 3.2.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 3.2.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pg
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec-rails
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: factory_girl_rails
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rubocop
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: coveralls
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: byebug
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '>='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: pry-rails
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '>='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  description: Providing a flexible alias for column names in ActiveRecord.
@@ -163,12 +163,12 @@ require_paths:
163
163
  - lib
164
164
  required_ruby_version: !ruby/object:Gem::Requirement
165
165
  requirements:
166
- - - '>='
166
+ - - ">="
167
167
  - !ruby/object:Gem::Version
168
168
  version: '0'
169
169
  required_rubygems_version: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - '>='
171
+ - - ">="
172
172
  - !ruby/object:Gem::Version
173
173
  version: '0'
174
174
  requirements: []