denormalizer 0.0.3 → 0.0.4

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/Gemfile.lock CHANGED
@@ -90,7 +90,7 @@ GEM
90
90
  rack-ssl (~> 1.3.2)
91
91
  rake (>= 0.8.7)
92
92
  rdoc (~> 3.4)
93
- thor (< 2.0, >= 0.14.6)
93
+ thor (>= 0.14.6, < 2.0)
94
94
  rake (0.9.2.2)
95
95
  rdoc (3.12)
96
96
  json (~> 1.4)
@@ -126,7 +126,7 @@ GEM
126
126
  sprockets (2.1.3)
127
127
  hike (~> 1.2)
128
128
  rack (~> 1.0)
129
- tilt (!= 1.3.0, ~> 1.1)
129
+ tilt (~> 1.1, != 1.3.0)
130
130
  sqlite3 (1.3.6)
131
131
  thor (0.15.4)
132
132
  tilt (1.3.3)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -7,9 +7,9 @@ class Denormalizer::MethodOutput < ActiveRecord::Base
7
7
  FalseOutput = 0
8
8
  TrueOutput = 1
9
9
 
10
- def self.by_object_and_method_name(obj, method_name)
10
+ def self.by_object_and_method_name(obj, method_name, class_name)
11
11
  attributes = {
12
- :denormalized_object_type => obj.class.name,
12
+ :denormalized_object_type => class_name,
13
13
  :denormalized_object_id => obj.id,
14
14
  :denormalized_object_method => method_name
15
15
  }
data/denormalizer.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
3
+ # Instead, edit Jeweler::Tasks in rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "denormalizer"
8
- s.version = "0.0.3"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jeremiah Hemphill"]
12
- s.date = "2012-12-03"
12
+ s.date = "2013-08-02"
13
13
  s.description = "Cache method outputs and automatically create chainable scopes based on their outputs"
14
14
  s.email = "jeremiah@cloudspace.com"
15
15
  s.extra_rdoc_files = [
@@ -83,7 +83,7 @@ Gem::Specification.new do |s|
83
83
  s.homepage = "http://github.com/jeremiahishere/denormalizer"
84
84
  s.licenses = ["MIT"]
85
85
  s.require_paths = ["lib"]
86
- s.rubygems_version = "1.8.15"
86
+ s.rubygems_version = "1.8.25"
87
87
  s.summary = "Cache method outputs"
88
88
 
89
89
  if s.respond_to? :specification_version then
@@ -14,11 +14,13 @@ module Denormalizer
14
14
  end
15
15
  end
16
16
 
17
- def denormalize(args)
17
+ def denormalize(args, options = {} )
18
18
  # setup list of denormalized methods
19
19
  mattr_accessor :denormalized_methods unless respond_to? :denormalized_methods
20
20
  self.denormalized_methods = [] unless self.denormalized_methods.is_a?(Array)
21
21
 
22
+ mattr_accessor :denormalization_class unless respond_to? :denormalization_class
23
+
22
24
  # add association
23
25
  has_many :denormalized_method_outputs, :class_name => 'Denormalizer::MethodOutput', :as => :denormalized_object, :dependent => :destroy
24
26
 
@@ -26,6 +28,9 @@ module Denormalizer
26
28
  args = [args] unless args.is_a?(Array)
27
29
  self.denormalized_methods |= args
28
30
 
31
+ # setting class name if one is passed in, otherwise use class of model with mixin (AU 8-1-13)
32
+ self.denormalization_class = options.has_key?(:class_name) ? options[:class_name] : self.to_s
33
+
29
34
  # create scopes
30
35
  # note that at some point, we probably need to identify these as denormalized scopes (JH 7-5-2012)
31
36
  # dn_method_name maybe
@@ -33,6 +38,7 @@ module Denormalizer
33
38
  # Table aliases have been added so that denormalized scopes can be chained (JH 12-3-2012)
34
39
  # Note that you can chain a method with it's false version
35
40
  args.each do |method_name|
41
+ # table_name is called on the model of the mixin
36
42
  table_alias = "dnmos_#{table_name}_#{self.denormalized_methods.size - 1}"
37
43
  # setup true scope
38
44
  true_attributes = {
@@ -40,7 +46,7 @@ module Denormalizer
40
46
  "#{table_alias}.method_output" => Denormalizer::MethodOutput::TrueOutput
41
47
  }
42
48
  true_scope_name = "denormalized_#{method_name.to_s.gsub('?', '')}".pluralize.to_sym
43
- scope true_scope_name, lambda { joins("INNER JOIN denormalizer_method_outputs AS #{table_alias} on #{table_alias}.denormalized_object_type='#{to_s}' AND #{table_alias}.denormalized_object_id=#{table_name}.id").where(true_attributes)}
49
+ scope true_scope_name, lambda { joins("INNER JOIN denormalizer_method_outputs AS #{table_alias} on #{table_alias}.denormalized_object_type='#{denormalization_class}' AND #{table_alias}.denormalized_object_id=#{table_name}.id").where(true_attributes)}
44
50
 
45
51
  # setup false scope
46
52
  # the false query uses the same table alias
@@ -53,7 +59,7 @@ module Denormalizer
53
59
 
54
60
  instance_method_name = "denormalized_#{method_name.to_s}"
55
61
  define_method instance_method_name do
56
- saved_output = Denormalizer::MethodOutput.by_object_and_method_name(self, method_name).first
62
+ saved_output = Denormalizer::MethodOutput.by_object_and_method_name(self, method_name, self.denormalization_class).first
57
63
  return saved_output.method_output == Denormalizer::MethodOutput::TrueOutput
58
64
  end
59
65
  end
@@ -88,10 +94,10 @@ module Denormalizer
88
94
 
89
95
  # find a match then create or update based on success
90
96
  # TODO: refactor this entire section to metho on Denormalizer::MethodOutput (JH 7-13-2012)
91
- saved_output = Denormalizer::MethodOutput.by_object_and_method_name(self, method_name).first
97
+ saved_output = Denormalizer::MethodOutput.by_object_and_method_name(self, method_name, self.denormalization_class).first
92
98
  if saved_output.nil?
93
99
  attributes = {
94
- :denormalized_object_type => self.class.name,
100
+ :denormalized_object_type => self.denormalization_class,
95
101
  :denormalized_object_id => self.id,
96
102
  :denormalized_object_method => method_name,
97
103
  :method_output => method_output
@@ -6,10 +6,9 @@ class Book < ActiveRecord::Base
6
6
  def short_name?
7
7
  name.length < 5
8
8
  end
9
- denormalize :short_name?
9
+ denormalize [:short_name?, :printed?], :class_name => "different 'class' name"
10
10
 
11
11
  def printed?
12
12
  !printings.empty?
13
13
  end
14
- denormalize :printed?
15
14
  end
@@ -1,4 +1,4 @@
1
1
  class Printing < ActiveRecord::Base
2
2
  belongs_to :book
3
- also_denormalize :book
3
+ also_denormalize :book
4
4
  end
metadata CHANGED
@@ -1,137 +1,185 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: denormalizer
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
4
5
  prerelease:
5
- version: 0.0.3
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Jeremiah Hemphill
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2012-12-03 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2013-08-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: rails
17
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
18
17
  none: false
19
- requirements:
20
- - - ">="
21
- - !ruby/object:Gem::Version
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
22
21
  version: 3.0.0
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.0.0
30
+ - !ruby/object:Gem::Dependency
27
31
  name: capybara
28
- requirement: &id002 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
29
33
  none: false
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
33
37
  version: 0.4.0
34
38
  type: :development
35
39
  prerelease: false
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 0.4.0
46
+ - !ruby/object:Gem::Dependency
38
47
  name: sqlite3
39
- requirement: &id003 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
40
49
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- version: "0"
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
45
54
  type: :development
46
55
  prerelease: false
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
49
63
  name: ruby-debug19
50
- requirement: &id004 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
51
65
  none: false
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: "0"
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
56
70
  type: :development
57
71
  prerelease: false
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
60
79
  name: rspec
61
- requirement: &id005 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
62
81
  none: false
63
- requirements:
82
+ requirements:
64
83
  - - ~>
65
- - !ruby/object:Gem::Version
84
+ - !ruby/object:Gem::Version
66
85
  version: 2.6.0
67
86
  type: :development
68
87
  prerelease: false
69
- version_requirements: *id005
70
- - !ruby/object:Gem::Dependency
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 2.6.0
94
+ - !ruby/object:Gem::Dependency
71
95
  name: rspec-rails
72
- requirement: &id006 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
73
97
  none: false
74
- requirements:
98
+ requirements:
75
99
  - - ~>
76
- - !ruby/object:Gem::Version
100
+ - !ruby/object:Gem::Version
77
101
  version: 2.6.1
78
102
  type: :development
79
103
  prerelease: false
80
- version_requirements: *id006
81
- - !ruby/object:Gem::Dependency
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 2.6.1
110
+ - !ruby/object:Gem::Dependency
82
111
  name: yard
83
- requirement: &id007 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
84
113
  none: false
85
- requirements:
114
+ requirements:
86
115
  - - ~>
87
- - !ruby/object:Gem::Version
116
+ - !ruby/object:Gem::Version
88
117
  version: 0.6.0
89
118
  type: :development
90
119
  prerelease: false
91
- version_requirements: *id007
92
- - !ruby/object:Gem::Dependency
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 0.6.0
126
+ - !ruby/object:Gem::Dependency
93
127
  name: database_cleaner
94
- requirement: &id008 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
95
129
  none: false
96
- requirements:
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- version: "0"
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
100
134
  type: :development
101
135
  prerelease: false
102
- version_requirements: *id008
103
- - !ruby/object:Gem::Dependency
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
104
143
  name: jeweler
105
- requirement: &id009 !ruby/object:Gem::Requirement
144
+ requirement: !ruby/object:Gem::Requirement
106
145
  none: false
107
- requirements:
146
+ requirements:
108
147
  - - ~>
109
- - !ruby/object:Gem::Version
148
+ - !ruby/object:Gem::Version
110
149
  version: 1.6.3
111
150
  type: :development
112
151
  prerelease: false
113
- version_requirements: *id009
114
- - !ruby/object:Gem::Dependency
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: 1.6.3
158
+ - !ruby/object:Gem::Dependency
115
159
  name: ci_reporter
116
- requirement: &id010 !ruby/object:Gem::Requirement
160
+ requirement: !ruby/object:Gem::Requirement
117
161
  none: false
118
- requirements:
119
- - - ">="
120
- - !ruby/object:Gem::Version
121
- version: "0"
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
122
166
  type: :development
123
167
  prerelease: false
124
- version_requirements: *id010
125
- description: Cache method outputs and automatically create chainable scopes based on their outputs
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ description: Cache method outputs and automatically create chainable scopes based
175
+ on their outputs
126
176
  email: jeremiah@cloudspace.com
127
177
  executables: []
128
-
129
178
  extensions: []
130
-
131
- extra_rdoc_files:
179
+ extra_rdoc_files:
132
180
  - LICENSE.txt
133
181
  - README.rdoc
134
- files:
182
+ files:
135
183
  - .document
136
184
  - .rspec
137
185
  - CHANGELOG
@@ -195,34 +243,31 @@ files:
195
243
  - spec/method_denormalization_spec.rb
196
244
  - spec/spec_helper.rb
197
245
  homepage: http://github.com/jeremiahishere/denormalizer
198
- licenses:
246
+ licenses:
199
247
  - MIT
200
248
  post_install_message:
201
249
  rdoc_options: []
202
-
203
- require_paths:
250
+ require_paths:
204
251
  - lib
205
- required_ruby_version: !ruby/object:Gem::Requirement
252
+ required_ruby_version: !ruby/object:Gem::Requirement
206
253
  none: false
207
- requirements:
208
- - - ">="
209
- - !ruby/object:Gem::Version
210
- hash: -921716589672485106
211
- segments:
254
+ requirements:
255
+ - - ! '>='
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ segments:
212
259
  - 0
213
- version: "0"
214
- required_rubygems_version: !ruby/object:Gem::Requirement
260
+ hash: -3214271311698412174
261
+ required_rubygems_version: !ruby/object:Gem::Requirement
215
262
  none: false
216
- requirements:
217
- - - ">="
218
- - !ruby/object:Gem::Version
219
- version: "0"
263
+ requirements:
264
+ - - ! '>='
265
+ - !ruby/object:Gem::Version
266
+ version: '0'
220
267
  requirements: []
221
-
222
268
  rubyforge_project:
223
- rubygems_version: 1.8.15
269
+ rubygems_version: 1.8.25
224
270
  signing_key:
225
271
  specification_version: 3
226
272
  summary: Cache method outputs
227
273
  test_files: []
228
-