utusemi 0.0.1 → 0.0.2

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: c3d9dc71891093baf91f418243e79cda7c2fde5e
4
- data.tar.gz: 3c298928855391ac65f36f93b93c44226ba2b54a
3
+ metadata.gz: 0de35704b1f48b29fd9b17d6cfcde7b3a4b58dae
4
+ data.tar.gz: c45997636abef147456bce3644560253359aed76
5
5
  SHA512:
6
- metadata.gz: f327281cc8a51c3f0c779bde5f78a0ad4f6f039102024df4dfc07d630a33161e7bba35a2cef9a0c444b78e46af2348a8d545d0df038ba08f4d6d2b641ff86e51
7
- data.tar.gz: 721fb167c66338488ba3e136f981e8dddf4d699628a8fb0ad7d38117e41a2fce1562ae01209ffe848f843b44ee42bef328ffbde8ecbce6429a42dc605b277e0d
6
+ metadata.gz: aa10b9e42f0b726d46e0cce55d93fecaede375ef93783dd70d3c6a26b7fda39a4ec25a46f899c4c104dffd7743d69f208c1e1079ec8fdca1752c2ae6ff1cfeb5
7
+ data.tar.gz: 274d391ef5645427c30ff4c8911c3b4978c953842161be256ed88dd085974fb1cf5b6c761bb38437b90480dffe0286020be859249b25b0813bc8254b7c37e458
@@ -1,4 +1,4 @@
1
- Copyright 2014 YOURNAME
1
+ Copyright 2014 YOSHIDA Hiroki
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -29,6 +29,7 @@ module Utusemi
29
29
  end
30
30
 
31
31
  def include_to_activerecord_base
32
+ # TODO: Organize name spaces
32
33
  ActiveRecord::Base.send(:include, Core::InstanceMethods)
33
34
  end
34
35
 
@@ -42,7 +43,7 @@ module Utusemi
42
43
  end
43
44
 
44
45
  def prepend_to_activerecord_eigenclass
45
- activerecord_eigenclass.send(:prepend, Core::ActiveRecord::Querying)
46
+ activerecord_eigenclass.send(:prepend, Core::ActiveRecord::Base::ClassMethods)
46
47
  # for rails 3.x
47
48
  activerecord_eigenclass.send(:prepend, Core::ActiveRecord::RelationMethod) if Rails::VERSION::MAJOR == 3
48
49
  # for association
@@ -5,6 +5,7 @@ module Utusemi
5
5
  end
6
6
 
7
7
  def map(name, *args, &block)
8
+ name = (name || '').to_sym
8
9
  return map_get(name, *args) unless block_given?
9
10
  options = args.shift if args.first.is_a? Hash
10
11
  map_set(name, options, &block)
@@ -13,12 +14,14 @@ module Utusemi
13
14
  private
14
15
 
15
16
  def map_set(name, options, &block)
16
- @maps[name.to_sym] = (options || {}).merge(block: block)
17
+ @maps[name] = {}
18
+ @maps[name].update(options) if options
19
+ @maps[name].update(block: block)
17
20
  end
18
21
 
19
22
  def map_get(name, *args)
20
- map = @maps[name.to_sym].try(:dup) if name
21
- block = map.delete(:block) if map
23
+ map = @maps[name].try(:dup) || {}
24
+ block = map.delete(:block)
22
25
  definition = Definition.new(map)
23
26
  definition.exec(*args, &block)
24
27
  end
@@ -132,19 +132,21 @@ module Utusemi
132
132
  # #=> [<products.titleが"test"であるレコード>]
133
133
  #
134
134
  module ActiveRecord
135
- module Querying
136
- include Base
137
-
138
- case Rails::VERSION::MAJOR
139
- when 4
140
- delegate :utusemi, to: :all
141
- when 3
142
- delegate :utusemi, to: :scoped
135
+ module Base
136
+ module ClassMethods
137
+ include Utusemi::Core::Base
138
+
139
+ case Rails::VERSION::MAJOR
140
+ when 4
141
+ delegate :utusemi, to: :all
142
+ when 3
143
+ delegate :utusemi, to: :scoped
144
+ end
143
145
  end
144
146
  end
145
147
 
146
148
  module QueryMethods
147
- include Base
149
+ include Utusemi::Core::Base
148
150
 
149
151
  def utusemi!(obj = nil, options = {})
150
152
  super.tap { warning_checker unless Rails.env.production? }
@@ -264,6 +266,25 @@ module Utusemi
264
266
  utusemi!(utusemi_values[:type], utusemi_values[:options]) if utusemi_values[:flag]
265
267
  super
266
268
  end
269
+
270
+ # 用途
271
+ # cloneでは浅いコピーしか行われず@utusemi_valuesの内容が
272
+ # 書き変わってしまうので、これを解決するために@utusemi_valuesもdupする
273
+ def initialize_copy(original_obj)
274
+ @utusemi_values = original_obj.utusemi_values.dup
275
+ super
276
+ end
277
+
278
+ # 用途
279
+ # association_cacheの影響でAssociation#ownerでclone前のインスタンスしか取得できないため
280
+ # 別経路から実際の呼び出し元インスタンスを参照できるようにし、utusemi_valuesを取り出せるようにする
281
+ def association(name)
282
+ truthly_owner = self
283
+ association = super
284
+ eigenclass = class << association; self; end
285
+ eigenclass.send(:define_method, :truthly_owner) { truthly_owner }
286
+ association
287
+ end
267
288
  end
268
289
 
269
290
  # 用途
@@ -280,35 +301,29 @@ module Utusemi
280
301
  #
281
302
  module Associations
282
303
  def scope(*args)
283
- utusemi_values = owner.utusemi_values
304
+ utusemi_values = truthly_owner.utusemi_values
284
305
  return super unless utusemi_values[:flag]
285
306
  super.utusemi!(@reflection.name.to_s.singularize, utusemi_values[:options])
286
307
  end
308
+
309
+ def load_target(*args)
310
+ utusemi_values = truthly_owner.utusemi_values
311
+ return super unless utusemi_values[:flag]
312
+ super.each { |record| record.utusemi!(@reflection.name.to_s.singularize, utusemi_values[:options]) }
313
+ end
287
314
  end
288
315
 
289
316
  module AssociationMethods
290
- def belongs_to(name, scope = nil, options = {})
291
- check_deplicated_association_warning(:belongs_to, name, scope)
292
- utusemi_flag = scope.try(:delete, :utusemi)
293
- scope = utusemi_association_scope(:belongs_to, name, scope) if utusemi_flag
294
- super if !utusemi_flag || !method_defined?(name)
295
- define_utusemi_association_reader(name, utusemi_flag => true)
317
+ def belongs_to(name, *args)
318
+ utusemi_association(:belongs_to, name, *args) { |*a| super(*a) }
296
319
  end
297
320
 
298
- def has_one(name, scope = nil, options = {})
299
- check_deplicated_association_warning(:has_one, name, scope)
300
- utusemi_flag = scope.try(:delete, :utusemi)
301
- scope = utusemi_association_scope(:has_one, name, scope) if utusemi_flag
302
- super if !utusemi_flag || !method_defined?(name)
303
- define_utusemi_association_reader(name, utusemi_flag => true)
321
+ def has_one(name, *args)
322
+ utusemi_association(:has_one, name, *args) { |*a| super(*a) }
304
323
  end
305
324
 
306
- def has_many(name, scope = nil, options = {}, &extension)
307
- check_deplicated_association_warning(:has_many, name, scope)
308
- utusemi_flag = scope.try(:delete, :utusemi)
309
- scope = utusemi_association_scope(:has_many, name, scope) if utusemi_flag
310
- super if !utusemi_flag || !method_defined?(name)
311
- define_utusemi_association_reader(name, utusemi_flag => true)
325
+ def has_many(name, *args)
326
+ utusemi_association(:has_many, name, *args) { |*a| super(*a) }
312
327
  end
313
328
 
314
329
  private
@@ -320,7 +335,20 @@ module Utusemi
320
335
  Rails.logger.warn "[Utusemi:WARNING] \"#{association_type} :#{name}\" is duplicated in #{self.name}."
321
336
  end
322
337
 
323
- def utusemi_association_scope(method_name, name, scope = {})
338
+ def utusemi_association(association_type, name, *args)
339
+ if args.empty?
340
+ yield name, *args
341
+ return define_utusemi_association_reader(name)
342
+ end
343
+ scope = args.shift
344
+ check_deplicated_association_warning(association_type, name, scope)
345
+ utusemi_flag = scope.try(:delete, :utusemi)
346
+ scope = utusemi_association_scope(association_type, name, scope) if utusemi_flag
347
+ yield name, scope, *args if !utusemi_flag || !method_defined?(name)
348
+ define_utusemi_association_reader(name, utusemi_flag => true)
349
+ end
350
+
351
+ def utusemi_association_scope(method_name, name, scope)
324
352
  utusemi_map = Utusemi.config.map(name.to_s.singularize)
325
353
  default_scope = { class_name: utusemi_map.class_name }
326
354
  default_scope[:foreign_key] = utusemi_map.foreign_key if method_name == :belongs_to
@@ -1,3 +1,3 @@
1
1
  module Utusemi
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: utusemi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
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-10 00:00:00.000000000 Z
11
+ date: 2014-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -108,6 +108,34 @@ dependencies:
108
108
  - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: byebug
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry-rails
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
111
139
  description: Providing a flexible alias for column names in ActiveRecord.
112
140
  email:
113
141
  - hyoshida@appirits.com