attribution 0.7.1 → 0.8.0
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 +4 -4
- data/attribution.gemspec +1 -1
- data/lib/attribution/version.rb +1 -1
- data/lib/attribution.rb +31 -6
- data/test/attribution_test.rb +7 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76c80b1626e3995ef953a1ecf966eeb2e0cf0935
|
4
|
+
data.tar.gz: 60f0bb25b5470c74f7ba0ba38991c447a8cc63b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e29e6caae51db60d0e910bb568f92d93a125881968a2e97018990d87655f6e189d4ca20d8dcf5ae43e18fae2c0b7ac40228e6a9cddb3568094a3fd23bf064bdf
|
7
|
+
data.tar.gz: 75f106172c77d966576e169e565fed38976cff5274ad1e3189f56dc892e4077b56800c365e0e017926083767d375f6083d1811c374b12f9b73dd22e18aa1f022
|
data/attribution.gemspec
CHANGED
data/lib/attribution/version.rb
CHANGED
data/lib/attribution.rb
CHANGED
@@ -197,14 +197,38 @@ module Attribution
|
|
197
197
|
end
|
198
198
|
end
|
199
199
|
|
200
|
+
# Associations
|
201
|
+
|
202
|
+
# @return [Array<Hash>] The associations for this class
|
203
|
+
def associations
|
204
|
+
@associations ||= if superclass && superclass.respond_to?(:associations)
|
205
|
+
superclass.associations.dup
|
206
|
+
else
|
207
|
+
[]
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
# Defines an association
|
212
|
+
#
|
213
|
+
# @param [String] name The name of the association
|
214
|
+
# @param [Symbol] type The type of the association
|
215
|
+
# @param [Hash{Symbol => Object}] metadata The metadata for the association
|
216
|
+
def add_association(name, type, metadata={})
|
217
|
+
associations << (metadata || {}).merge(:name => name.to_sym, :type => type.to_sym)
|
218
|
+
end
|
219
|
+
|
220
|
+
# @param [Boolean] autoload_associations Enable/Disable autoloading of
|
221
|
+
# associations for this class and all subclasses.
|
200
222
|
def autoload_associations(autoload_associations)
|
201
223
|
@autoload_associations = autoload_associations
|
202
224
|
end
|
203
225
|
|
226
|
+
# @return [Boolean] autoload_associations Whether or not this will
|
227
|
+
# autoload associations.
|
204
228
|
def autoload_associations?
|
205
229
|
if defined? @autoload_associations
|
206
230
|
@autoload_associations
|
207
|
-
elsif superclass
|
231
|
+
elsif superclass.respond_to?(:autoload_associations?)
|
208
232
|
superclass.autoload_associations?
|
209
233
|
else
|
210
234
|
true
|
@@ -212,8 +236,8 @@ module Attribution
|
|
212
236
|
end
|
213
237
|
|
214
238
|
# Association macros
|
215
|
-
|
216
|
-
# Defines an
|
239
|
+
#
|
240
|
+
# Defines an association that is a reference to another Attribution class.
|
217
241
|
#
|
218
242
|
# @param [Symbol] association_name The name of the association
|
219
243
|
# @param [Hash] metadata Extra information about the association.
|
@@ -223,7 +247,7 @@ module Attribution
|
|
223
247
|
# foo_id
|
224
248
|
id_getter = "#{association_name}_id".to_sym
|
225
249
|
add_attribute(id_getter, :integer, metadata)
|
226
|
-
|
250
|
+
add_association association_name, :belongs_to, metadata
|
227
251
|
association_class_name = metadata.try(:fetch, :class_name, [name.split('::')[0..-2].join('::'), association_name.to_s.classify].reject(&:blank?).join('::'))
|
228
252
|
|
229
253
|
define_method(id_getter) do
|
@@ -279,7 +303,7 @@ module Attribution
|
|
279
303
|
end
|
280
304
|
end
|
281
305
|
|
282
|
-
# Defines an
|
306
|
+
# Defines an association that is a reference to an Array of another Attribution class.
|
283
307
|
#
|
284
308
|
# @param [Symbol] association_name The name of the association
|
285
309
|
# @param [Hash] metadata Extra information about the association.
|
@@ -287,11 +311,12 @@ module Attribution
|
|
287
311
|
# defaults to a class name based on the association name
|
288
312
|
def has_many(association_name, metadata={})
|
289
313
|
|
314
|
+
add_association association_name, :has_many, metadata
|
315
|
+
|
290
316
|
association_class_name = metadata.try(:fetch, :class_name, [name.split('::')[0..-2].join('::'), association_name.to_s.singularize.classify].reject(&:blank?).join('::'))
|
291
317
|
|
292
318
|
# foos
|
293
319
|
define_method(association_name) do |*query|
|
294
|
-
|
295
320
|
# TODO: Support a more generic version of lazy-loading
|
296
321
|
begin
|
297
322
|
association_class = Object.const_get(association_class_name)
|
data/test/attribution_test.rb
CHANGED
@@ -39,7 +39,6 @@ class Book
|
|
39
39
|
time :updated_at
|
40
40
|
time_zone :time_zone
|
41
41
|
|
42
|
-
belongs_to :book
|
43
42
|
has_many :chapters
|
44
43
|
has_many :readers
|
45
44
|
|
@@ -343,4 +342,11 @@ class AttributionTest < Test::Unit::TestCase
|
|
343
342
|
product.orders
|
344
343
|
end
|
345
344
|
|
345
|
+
def test_associations
|
346
|
+
assert_equal [
|
347
|
+
{ :name => :book, :type => :belongs_to },
|
348
|
+
{ :name => :pages, :type => :has_many }
|
349
|
+
], Chapter.associations
|
350
|
+
end
|
351
|
+
|
346
352
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: attribution
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Barry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|