has_metrics 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f48a7598ad01f84ad88033cbd27f3db579471077
4
- data.tar.gz: 8f2bc339c0a146c2c787e9d605c9097963c3dc69
3
+ metadata.gz: cebdeea08917071eeaaed9b9872d2d423de1e2cb
4
+ data.tar.gz: 4eaa44ee624b9859a153a69e5acab96a5630457e
5
5
  SHA512:
6
- metadata.gz: 05f470ca3023d9c5ed3ebd1a2dd6f8dc3b3c6cbc2a20b96f9af249646b4afc7c72453e653b2a363165b8942d883afa899255615228b48d2b99e0270d809dd871
7
- data.tar.gz: 4363c5d42770658fd5a197e36ebad47a495fe75915654dcd39becbe5c9e81a13bb3515e437a5de66d441d19fb70017c9db1100af62b88d8bc8d211715643ad06
6
+ metadata.gz: c180c3f247487600bdfc16b49775fe0e6e6759e90d2a9d68f312de1adba64dc8862dd344c6bd44b0e272964eaafb3ae092dcb8db044c604cb41a1a91b8ff8fe5
7
+ data.tar.gz: b9bca19f30f5caeb68fc7476584273ec1b58ff42333c85cf514082293f7a7c58b7fb02c3093a0218dbcf451b8cac4151cae1af05195f7db0a35d500d496e1ed6
data/has_metrics.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "has_metrics"
5
- s.version = "0.1.1"
5
+ s.version = "0.2.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Allan Grant"]
@@ -17,21 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.summary = "Calculate \"metrics\" (any expensive methods) on ActiveRecord entries and memoize them to an automagical table."
18
18
  s.test_files = ["spec/metrics_spec.rb", "spec/segmentation_spec.rb", "spec/spec_helper.rb", "spec/support/active_record.rb"]
19
19
 
20
- if s.respond_to? :specification_version then
21
- s.specification_version = 4
22
-
23
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
24
- s.add_runtime_dependency(%q<activerecord>, ["< 4.0"])
25
- s.add_development_dependency(%q<rake>, [">= 0"])
26
- s.add_development_dependency(%q<bundler>, [">= 0"])
27
- else
28
- s.add_dependency(%q<activerecord>, ["< 4.0"])
29
- s.add_dependency(%q<rake>, [">= 0"])
30
- s.add_dependency(%q<bundler>, [">= 0"])
31
- end
32
- else
33
- s.add_dependency(%q<activerecord>, ["< 4.0"])
34
- s.add_dependency(%q<rake>, [">= 0"])
35
- s.add_dependency(%q<bundler>, [">= 0"])
36
- end
20
+ s.add_dependency "activerecord"
21
+ s.add_development_dependency "rake"
22
+ s.add_development_dependency "bundler"
37
23
  end
@@ -25,7 +25,14 @@ module Metrics
25
25
  end
26
26
 
27
27
  def metrics
28
- @metrics ||= self.class.metrics_class.find_or_initialize_by_id(id)
28
+ @metrics ||= begin
29
+ metrics_class = self.class.metrics_class
30
+ if metrics_class.respond_to?(:find_or_initialize_by)
31
+ metrics_class.find_or_initialize_by(id: id)
32
+ else
33
+ metrics_class.find_or_initialize_by_id(id)
34
+ end
35
+ end
29
36
  end
30
37
  end
31
38
  end
@@ -42,8 +49,11 @@ module Metrics
42
49
 
43
50
  metrics[name.to_sym] ||= {}
44
51
  metrics[name.to_sym].merge!(options)
45
- metrics_class.class_eval do
46
- attr_accessible(name, "updated__#{name}__at")
52
+
53
+ if metrics_class.respond_to?(:attr_accessible)
54
+ metrics_class.class_eval do
55
+ attr_accessible(name, "updated__#{name}__at") rescue RuntimeError
56
+ end
47
57
  end
48
58
  end
49
59
 
@@ -141,7 +151,15 @@ module Metrics
141
151
  ActiveRecord::Base.logger = existing_logger
142
152
 
143
153
  unless sql_capturer.query.count != 1
144
- subquery = sql_capturer.query.first.gsub(warmup.id.to_s, "#{metrics_class.table_name}.id")
154
+ single_query = sql_capturer.query.first
155
+ subquery = if single_query =~ /(\?|\$\d+)/
156
+ # AR 4 parameterized query style
157
+ single_query
158
+ .gsub(/\[\[.*?\]\]/, '')
159
+ .gsub(/(\?|\$\d+)/, "#{metrics_class.table_name}.id")
160
+ else
161
+ single_query.gsub(warmup.id.to_s, "#{metrics_class.table_name}.id")
162
+ end
145
163
  unless subquery == %Q{SELECT "#{metrics_class.table_name}".* FROM "#{metrics_class.table_name}" WHERE "#{metrics_class.table_name}"."id" = #{metrics_class.table_name}.id LIMIT 1}
146
164
  update_sql = %Q{
147
165
  UPDATE #{metrics_class.table_name}
@@ -1,3 +1,3 @@
1
1
  module HasMetrics
2
- VERSION = "0.0.9"
2
+ VERSION = "0.2.0"
3
3
  end
data/spec/metrics_spec.rb CHANGED
@@ -13,11 +13,16 @@ end
13
13
 
14
14
  class Activity < ActiveRecord::Base
15
15
  belongs_to :actor, class_name: 'Identity'
16
- attr_accessible :actor
16
+ if respond_to?(:attr_accessible)
17
+ attr_accessible :actor rescue RuntimeError
18
+ end
19
+ self.inheritance_column = nil
17
20
  end
18
21
 
19
22
  class User < ActiveRecord::Base
20
- attr_accessible :identity, :name
23
+ if respond_to?(:attr_accessible)
24
+ attr_accessible :identity, :name rescue RuntimeError
25
+ end
21
26
  include Metrics
22
27
  belongs_to :identity
23
28
 
@@ -83,7 +88,12 @@ describe Metrics do
83
88
  it "has their values precomputed" do
84
89
  user
85
90
  User.update_all_metrics!
86
- UserMetrics.count(:group => :name_length).should == {4=>1}
91
+ count = if RAILS_4_OR_GREATER
92
+ UserMetrics.group(:name_length).count
93
+ else
94
+ UserMetrics.count(:group => :name_length)
95
+ end
96
+ count.should == { 4 => 1 }
87
97
  end
88
98
 
89
99
  describe 'aggregate functions' do
@@ -30,7 +30,12 @@ describe Segmentation do
30
30
  end
31
31
 
32
32
  it "segments properly" do
33
- PostMetrics.count(:group => :by_name_length).should == {'short'=>1, 'seven'=>1, 'long'=>1}
33
+ count = if RAILS_4_OR_GREATER
34
+ PostMetrics.group(:by_name_length).count
35
+ else
36
+ PostMetrics.count(:group => :by_name_length)
37
+ end
38
+ count.should == {'short'=>1, 'seven'=>1, 'long'=>1}
34
39
  end
35
40
  end
36
41
  end
data/spec/spec_helper.rb CHANGED
@@ -5,6 +5,10 @@ require 'active_record'
5
5
  require 'support/active_record'
6
6
  require 'has_metrics'
7
7
 
8
+ RAILS_4_OR_GREATER = ::ActiveRecord.respond_to?(:version) && ::ActiveRecord.version >= Gem::Version.new('4.0.0')
9
+
10
+ ActiveRecord::Base.default_timezone = :local
11
+
8
12
  RSpec.configure do |config|
9
13
  # some (optional) config here
10
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: has_metrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Allan Grant
@@ -14,16 +14,16 @@ dependencies:
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "<"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.0'
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "<"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '4.0'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement