lazy_model 0.0.6 → 0.0.7
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.
- data/VERSION +1 -1
- data/lazy_model.gemspec +2 -2
- data/lib/lazy_model/lazy_model_support.rb +15 -3
- data/lib/lazy_model/lazy_state.rb +34 -6
- data/lib/lazy_model.rb +0 -1
- data/test/lazy_model.sqlite3 +0 -0
- metadata +15 -15
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.7
|
data/lazy_model.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "lazy_model"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Aaron Scruggs"]
|
12
|
-
s.date = "2011-12-
|
12
|
+
s.date = "2011-12-11"
|
13
13
|
s.description = "write common active_record methods in shorthand"
|
14
14
|
s.email = "ascruggs@academicworks.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -2,18 +2,30 @@ module LazyModelSupport
|
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
4
|
included do
|
5
|
-
attr_accessor :
|
5
|
+
attr_accessor :raw_attribute, :enumerables, :custom_finders, :column, :model, :attribute, :belongs_to
|
6
6
|
end
|
7
7
|
|
8
|
-
def initialize(model,
|
8
|
+
def initialize(model, raw_attribute, enumerables = nil, custom_finders = {})
|
9
9
|
self.model = model
|
10
|
-
self.
|
10
|
+
self.raw_attribute = raw_attribute
|
11
11
|
self.enumerables = enumerables
|
12
12
|
self.custom_finders = custom_finders
|
13
|
+
calculate_atttribute_and_belongs_to
|
13
14
|
end
|
14
15
|
|
15
16
|
def to_method_name(any_string_or_symbol)
|
16
17
|
any_string_or_symbol.to_s.underscore
|
17
18
|
end
|
18
19
|
|
20
|
+
private
|
21
|
+
|
22
|
+
def calculate_atttribute_and_belongs_to
|
23
|
+
if raw_attribute.is_a?(Hash)
|
24
|
+
self.attribute = raw_attribute.keys.first
|
25
|
+
self.belongs_to = raw_attribute[attribute]
|
26
|
+
else
|
27
|
+
self.attribute = raw_attribute
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
19
31
|
end
|
@@ -22,7 +22,7 @@ module LazyModel
|
|
22
22
|
enumerables.each do |enumerable|
|
23
23
|
model.class_eval <<-LZY
|
24
24
|
def #{to_method_name(enumerable)}?
|
25
|
-
#{
|
25
|
+
#{belongs_to_attribute} == "#{enumerable}"
|
26
26
|
end
|
27
27
|
LZY
|
28
28
|
end
|
@@ -32,27 +32,44 @@ module LazyModel
|
|
32
32
|
custom_finders.each do |custom_finder, values|
|
33
33
|
model.class_eval <<-LZY
|
34
34
|
def #{to_method_name(custom_finder)}?
|
35
|
-
#{values}.include?(#{
|
35
|
+
#{values}.include?(#{belongs_to_attribute})
|
36
36
|
end
|
37
37
|
LZY
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
def belongs_to_attribute
|
42
|
+
belongs_to ? "#{belongs_to}.#{attribute}" : attribute
|
43
|
+
end
|
44
|
+
|
41
45
|
|
42
46
|
##### CLASS METHODS ##########
|
43
47
|
|
44
48
|
def define_class_methods
|
49
|
+
define_join_finder_method
|
45
50
|
define_core_class_finder_methods
|
46
51
|
define_enumerables_class_finder_methods
|
47
52
|
define_custom_class_finder_methods
|
48
53
|
end
|
49
54
|
|
55
|
+
def define_join_finder_method
|
56
|
+
if belongs_to
|
57
|
+
model.class_eval <<-LZY
|
58
|
+
class << self
|
59
|
+
def #{joins_method_name}
|
60
|
+
"joins(:#{belongs_to})"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
LZY
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
50
67
|
def define_core_class_finder_methods
|
51
68
|
model.class_eval <<-LZY
|
52
69
|
class << self
|
53
70
|
|
54
71
|
def #{to_method_name(attribute)}(value = nil)
|
55
|
-
table =
|
72
|
+
table = #{klass}.arel_table[:#{attribute}]
|
56
73
|
|
57
74
|
filter = case value.class.to_s
|
58
75
|
when 'Array' then table.in(value)
|
@@ -61,11 +78,11 @@ module LazyModel
|
|
61
78
|
else raise "\'" + value + "\' with class \'"+value.class.to_s+ "\' is not valid comparitor"
|
62
79
|
end
|
63
80
|
|
64
|
-
where(filter)
|
81
|
+
#{joins}where(filter)
|
65
82
|
end
|
66
83
|
|
67
84
|
def not_#{to_method_name(attribute)}(value = nil)
|
68
|
-
table =
|
85
|
+
table = #{klass}.arel_table[:#{attribute}]
|
69
86
|
|
70
87
|
filter = case value.class.to_s
|
71
88
|
when 'Array' then table.not_in(value)
|
@@ -74,7 +91,7 @@ module LazyModel
|
|
74
91
|
else raise "\'" + value + "\' with class \'"+value.class.to_s+ "\' is not valid comparitor"
|
75
92
|
end
|
76
93
|
|
77
|
-
where(filter)
|
94
|
+
#{joins}where(filter)
|
78
95
|
end
|
79
96
|
|
80
97
|
end
|
@@ -113,7 +130,18 @@ module LazyModel
|
|
113
130
|
end
|
114
131
|
LZY
|
115
132
|
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def klass
|
136
|
+
belongs_to ? "#{belongs_to.to_s.camelize}" : "self"
|
137
|
+
end
|
138
|
+
|
139
|
+
def joins_method_name
|
140
|
+
"with_#{belongs_to}"
|
141
|
+
end
|
116
142
|
|
143
|
+
def joins
|
144
|
+
belongs_to ? "#{joins_method_name}." : nil
|
117
145
|
end
|
118
146
|
|
119
147
|
end
|
data/lib/lazy_model.rb
CHANGED
data/test/lazy_model.sqlite3
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lazy_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: &
|
16
|
+
requirement: &70309235756960 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70309235756960
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activesupport
|
27
|
-
requirement: &
|
27
|
+
requirement: &70309235771440 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '3.0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70309235771440
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: shoulda
|
38
|
-
requirement: &
|
38
|
+
requirement: &70309235770600 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70309235770600
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &70309235768520 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.0.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70309235768520
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &70309235766560 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.6.4
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70309235766560
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: sqlite3-ruby
|
71
|
-
requirement: &
|
71
|
+
requirement: &70309235765260 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70309235765260
|
80
80
|
description: write common active_record methods in shorthand
|
81
81
|
email: ascruggs@academicworks.com
|
82
82
|
executables: []
|
@@ -118,7 +118,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
118
118
|
version: '0'
|
119
119
|
segments:
|
120
120
|
- 0
|
121
|
-
hash: -
|
121
|
+
hash: -2967426173384193686
|
122
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
123
|
none: false
|
124
124
|
requirements:
|