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 CHANGED
@@ -1 +1 @@
1
- 0.0.6
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.6"
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-09"
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 :attribute, :enumerables, :custom_finders, :column, :model
5
+ attr_accessor :raw_attribute, :enumerables, :custom_finders, :column, :model, :attribute, :belongs_to
6
6
  end
7
7
 
8
- def initialize(model, attribute, enumerables = nil, custom_finders = {})
8
+ def initialize(model, raw_attribute, enumerables = nil, custom_finders = {})
9
9
  self.model = model
10
- self.attribute = attribute
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
- #{attribute} == "#{enumerable}"
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?(#{attribute})
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 = self.arel_table[:#{attribute}]
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 = self.arel_table[:#{attribute}]
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
@@ -18,7 +18,6 @@ module LazyModel
18
18
  LazyState.new(self, attribute, enumerables, custom_finders).define_methods
19
19
  end
20
20
 
21
-
22
21
  end
23
22
 
24
23
  ActiveRecord::Base.extend LazyModel
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.6
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-09 00:00:00.000000000 Z
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: &70308384302440 !ruby/object:Gem::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: *70308384302440
24
+ version_requirements: *70309235756960
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activesupport
27
- requirement: &70308384301360 !ruby/object:Gem::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: *70308384301360
35
+ version_requirements: *70309235771440
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: shoulda
38
- requirement: &70308384299280 !ruby/object:Gem::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: *70308384299280
46
+ version_requirements: *70309235770600
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &70308384298300 !ruby/object:Gem::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: *70308384298300
57
+ version_requirements: *70309235768520
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &70308384356860 !ruby/object:Gem::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: *70308384356860
68
+ version_requirements: *70309235766560
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: sqlite3-ruby
71
- requirement: &70308384355900 !ruby/object:Gem::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: *70308384355900
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: -4577784084993632056
121
+ hash: -2967426173384193686
122
122
  required_rubygems_version: !ruby/object:Gem::Requirement
123
123
  none: false
124
124
  requirements: