lazy_record 0.4.3 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/lazy_record.rb +2 -0
- data/lib/lazy_record/associations.rb +6 -87
- data/lib/lazy_record/base_module.rb +1 -0
- data/lib/lazy_record/collections.rb +91 -0
- data/lib/lazy_record/nesting.rb +8 -0
- data/lib/lazy_record/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86fc7c8a4fc3d5cb68c30d8967dccc32e41a300a
|
4
|
+
data.tar.gz: 4a3d473eef29dda64e62689394103992a46a1750
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2192b9b391256c80b27c2bbc0e8dabe0f617793c8ad502d092c8e88f8fcd75dabbab0313c442386469c4378cead5509b4bb9b4c62b7e09a2b341792b975ebc87
|
7
|
+
data.tar.gz: 121c6dc8b06a5a11b7c6bc8895e380156d332c98385ddc0c8685041ed3d2c60e43f9de807ff2fadc6b6befd95e38408497665102fc2f893e46862fe97a4880ed
|
data/lib/lazy_record.rb
CHANGED
@@ -8,8 +8,10 @@ require 'lazy_record/version'
|
|
8
8
|
require 'lazy_record/associations'
|
9
9
|
require 'lazy_record/attributes'
|
10
10
|
require 'lazy_record/callbacks'
|
11
|
+
require 'lazy_record/collections'
|
11
12
|
require 'lazy_record/dynamic_modules'
|
12
13
|
require 'lazy_record/methods'
|
14
|
+
require 'lazy_record/nesting'
|
13
15
|
require 'lazy_record/scopes'
|
14
16
|
require 'lazy_record/validations'
|
15
17
|
require 'lazy_record/relation'
|
@@ -1,81 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'lazy_record/nesting'
|
4
|
+
|
3
5
|
module LazyRecord
|
4
|
-
# Set up in-memory associations between POROs.
|
6
|
+
# Set up in-memory one-to-one associations between POROs.
|
5
7
|
module Associations
|
6
|
-
|
7
|
-
NESTED_ATTRS_MODULE_NAME = :NestedAttributes
|
8
|
-
|
9
|
-
def define_collection_getter(collection)
|
10
|
-
model = find_scoped_collection_class(collection)
|
11
|
-
define_method(collection) do
|
12
|
-
if instance_variable_get("@#{collection}").nil?
|
13
|
-
instance_variable_set("@#{collection}", Relation.new(model: model))
|
14
|
-
end
|
15
|
-
instance_variable_get("@#{collection}")
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def define_collection_setter(collection)
|
20
|
-
model = find_scoped_collection_class(collection)
|
21
|
-
define_method("#{collection}=") do |coll|
|
22
|
-
coll = Relation.new(model: model, array: coll) if coll.is_a?(Array)
|
23
|
-
return instance_variable_set("@#{collection}", coll) if coll.is_a? Relation
|
24
|
-
raise ArgumentError, "Argument must be a collection of #{collection}"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def find_scoped_collection_class(collection)
|
29
|
-
-> { apply_nesting(collection.to_s.classify).constantize }
|
30
|
-
end
|
31
|
-
|
32
|
-
def define_collection_counter(collection)
|
33
|
-
define_method("#{collection}_count") do
|
34
|
-
send(collection).count
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def define_collections(*collections)
|
39
|
-
define_method(:collections) do
|
40
|
-
collections
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def define_collection_counts_to_s
|
45
|
-
define_method(:collection_counts_to_s) do
|
46
|
-
collections.map do |collection|
|
47
|
-
"#{collection}_count: #{stringify_value(send("#{collection}_count"))}"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
private :collection_counts_to_s
|
51
|
-
end
|
8
|
+
include LazyRecord::Nesting
|
52
9
|
|
53
|
-
|
54
|
-
"#{to_s.split('::')[0..-3].join('::')}::#{class_name}"
|
55
|
-
end
|
56
|
-
|
57
|
-
def lr_has_many(*collections)
|
58
|
-
include mod = get_or_set_mod(COLLECTION_MODULE_NAME)
|
59
|
-
mod.extend(Associations)
|
60
|
-
mod.module_eval { add_collection_methods(collections) }
|
61
|
-
end
|
10
|
+
ASSOCIATION_MODULE_NAME = :Associations
|
62
11
|
|
63
12
|
def lr_has_one(*args)
|
64
|
-
include mod = get_or_set_mod(
|
13
|
+
include mod = get_or_set_mod(ASSOCIATION_MODULE_NAME)
|
65
14
|
mod.extend(Associations) unless mod.const_defined?('Associations')
|
66
15
|
mod.module_eval { add_has_one_methods(args) }
|
67
16
|
end
|
68
17
|
|
69
|
-
def add_collection_methods(collections)
|
70
|
-
define_collections(*collections)
|
71
|
-
define_collection_counts_to_s
|
72
|
-
collections.each do |collection|
|
73
|
-
define_collection_getter(collection)
|
74
|
-
define_collection_setter(collection)
|
75
|
-
define_collection_counter(collection)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
18
|
def add_has_one_methods(args)
|
80
19
|
define_has_one_associations(*args)
|
81
20
|
define_has_one_associations_to_s
|
@@ -117,25 +56,5 @@ module LazyRecord
|
|
117
56
|
def find_scoped_association_class(association)
|
118
57
|
-> { apply_nesting(association.to_s.camelize).constantize }
|
119
58
|
end
|
120
|
-
|
121
|
-
def define_collection_attributes_setter(collection, class_name)
|
122
|
-
define_method("#{collection}_attributes=") do |collection_attributes|
|
123
|
-
collection_attributes.values.each do |attributes|
|
124
|
-
send(collection) << class_name.new(attributes)
|
125
|
-
end
|
126
|
-
collection
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
def lr_accepts_nested_attributes_for(*collections)
|
131
|
-
include mod = get_or_set_mod(NESTED_ATTRS_MODULE_NAME)
|
132
|
-
mod.extend(Associations)
|
133
|
-
mod.module_eval do
|
134
|
-
collections.each do |collection|
|
135
|
-
class_name = collection.to_s.classify.constantize
|
136
|
-
define_collection_attributes_setter(collection, class_name)
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
59
|
end
|
141
60
|
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'lazy_record/nesting'
|
2
|
+
|
3
|
+
module LazyRecord
|
4
|
+
# Set up in-memory one-to-many relationships between objects
|
5
|
+
module Collections
|
6
|
+
include LazyRecord::Nesting
|
7
|
+
|
8
|
+
COLLECTION_MODULE_NAME = :Collections
|
9
|
+
NESTED_ATTRS_MODULE_NAME = :NestedAttributes
|
10
|
+
|
11
|
+
def define_collection_getter(collection)
|
12
|
+
model = find_scoped_collection_class(collection)
|
13
|
+
define_method(collection) do
|
14
|
+
if instance_variable_get("@#{collection}").nil?
|
15
|
+
instance_variable_set("@#{collection}", Relation.new(model: model))
|
16
|
+
end
|
17
|
+
instance_variable_get("@#{collection}")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def define_collection_setter(collection)
|
22
|
+
model = find_scoped_collection_class(collection)
|
23
|
+
define_method("#{collection}=") do |coll|
|
24
|
+
coll = Relation.new(model: model, array: coll) if coll.is_a?(Array)
|
25
|
+
return instance_variable_set("@#{collection}", coll) if coll.is_a? Relation
|
26
|
+
raise ArgumentError, "Argument must be a collection of #{collection}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def find_scoped_collection_class(collection)
|
31
|
+
-> { apply_nesting(collection.to_s.classify).constantize }
|
32
|
+
end
|
33
|
+
|
34
|
+
def define_collection_counter(collection)
|
35
|
+
define_method("#{collection}_count") do
|
36
|
+
send(collection).count
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def define_collections(*collections)
|
41
|
+
define_method(:collections) do
|
42
|
+
collections
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def define_collection_counts_to_s
|
47
|
+
define_method(:collection_counts_to_s) do
|
48
|
+
collections.map do |collection|
|
49
|
+
"#{collection}_count: #{stringify_value(send("#{collection}_count"))}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
private :collection_counts_to_s
|
53
|
+
end
|
54
|
+
|
55
|
+
def lr_has_many(*collections)
|
56
|
+
include mod = get_or_set_mod(COLLECTION_MODULE_NAME)
|
57
|
+
mod.extend(Collections)
|
58
|
+
mod.module_eval { add_collection_methods(collections) }
|
59
|
+
end
|
60
|
+
|
61
|
+
def add_collection_methods(collections)
|
62
|
+
define_collections(*collections)
|
63
|
+
define_collection_counts_to_s
|
64
|
+
collections.each do |collection|
|
65
|
+
define_collection_getter(collection)
|
66
|
+
define_collection_setter(collection)
|
67
|
+
define_collection_counter(collection)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def define_collection_attributes_setter(collection, class_name)
|
72
|
+
define_method("#{collection}_attributes=") do |collection_attributes|
|
73
|
+
collection_attributes.values.each do |attributes|
|
74
|
+
send(collection) << class_name.new(attributes)
|
75
|
+
end
|
76
|
+
collection
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def lr_accepts_nested_attributes_for(*collections)
|
81
|
+
include mod = get_or_set_mod(NESTED_ATTRS_MODULE_NAME)
|
82
|
+
mod.extend(Collections)
|
83
|
+
mod.module_eval do
|
84
|
+
collections.each do |collection|
|
85
|
+
class_name = collection.to_s.classify.constantize
|
86
|
+
define_collection_attributes_setter(collection, class_name)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
data/lib/lazy_record/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lazy_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- M. Simon Borg
|
@@ -136,8 +136,10 @@ files:
|
|
136
136
|
- lib/lazy_record/base.rb
|
137
137
|
- lib/lazy_record/base_module.rb
|
138
138
|
- lib/lazy_record/callbacks.rb
|
139
|
+
- lib/lazy_record/collections.rb
|
139
140
|
- lib/lazy_record/dynamic_modules.rb
|
140
141
|
- lib/lazy_record/methods.rb
|
142
|
+
- lib/lazy_record/nesting.rb
|
141
143
|
- lib/lazy_record/relation.rb
|
142
144
|
- lib/lazy_record/scopes.rb
|
143
145
|
- lib/lazy_record/validations.rb
|