calculated_attributes 0.0.17 → 0.0.18

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: db793fb3f8cf8a0192e4fe046c8f1d2acd1cd143
4
- data.tar.gz: e86982af1eb38cb12fc7f921e2f2f1cacd671a08
3
+ metadata.gz: b751dd8a58b1f4de0e48f23776273daa460cdf81
4
+ data.tar.gz: 0caef728cf0c2314840f443ee08fd57d50eef14e
5
5
  SHA512:
6
- metadata.gz: b5b7505f38be178579646967ef554b2c83892bc4a567036e172f035ef8375def0069e0cc3665a76bb106fdcc588058bc6b1c1467737701d2e609e8a80c6c4572
7
- data.tar.gz: 56a72312eba86c092a1349d73348ef8a1aecaa5b948d012d549553284aafa218ebe58698a924ec7db0ab23b8e6840c78c5d67bd64adff49d0e99f68596404608
6
+ metadata.gz: 82e7bc56070d8594c59b590a70fbdd7f71445e2fabee1599382e2776c099ced798fce0035bd134ceb0b742a0378804638554555ea55d28ec25df85a2a318abcd
7
+ data.tar.gz: 02e510a66e63e67f636f1a41a2073a2c952f321974c2ace9e0b4f6eaed6327b45ed23d8d8b243188d927c77bf0dc0529669230aacba99b3801bc878bf9e2710d
data/Appraisals ADDED
@@ -0,0 +1,11 @@
1
+ appraise 'rails3' do
2
+ gem 'activerecord', '3.2.21'
3
+ end
4
+
5
+ appraise 'rails4_1' do
6
+ gem 'activerecord', '4.1.11'
7
+ end
8
+
9
+ appraise 'rails4_2' do
10
+ gem 'activerecord', '4.2.2'
11
+ end
data/README.md CHANGED
@@ -24,51 +24,77 @@ Add each calculated attribute to your model using the `calculated` keyword. It a
24
24
 
25
25
  For example, if we have two models, `Post` and `Comment`, and `Comment` has a `post_id` attribute, we might write the following code to add a comments count to each `Post` record in a relation:
26
26
 
27
- class Post < ActiveRecord::Base
28
- ...
29
- calculated :comments_count, -> { "select count(*) from comments where comments.post_id = posts.id" }
30
- ...
31
- end
27
+ ```ruby
28
+ class Post < ActiveRecord::Base
29
+ ...
30
+ calculated :comments_count, -> { "select count(*) from comments where comments.post_id = posts.id" }
31
+ ...
32
+ end
33
+ ```
32
34
 
33
35
  Then, the comments count may be accessed as follows:
34
36
 
35
- Post.scoped.calculated(:comments_count).first.comments_count
36
- #=> 5
37
+ ```ruby
38
+ Post.scoped.calculated(:comments_count).first.comments_count
39
+ #=> 5
40
+ ```
37
41
 
38
42
  Multiple calculated attributes may be attached to each model. If we add a `Tag` model that also has a `post_id`, we can update the Post model as following:
39
43
 
40
- class Post < ActiveRecord::Base
41
- ...
42
- calculated :comments_count, -> { "select count(*) from comments where comments.post_id = posts.id" }
43
- calculated :tags_count, -> { "select count(*) from tags where tags.post_id = posts.id" }
44
- ...
45
- end
46
-
44
+ ```ruby
45
+ class Post < ActiveRecord::Base
46
+ ...
47
+ calculated :comments_count, -> { "select count(*) from comments where comments.post_id = posts.id" }
48
+ calculated :tags_count, -> { "select count(*) from tags where tags.post_id = posts.id" }
49
+ ...
50
+ end
51
+ ```
52
+
47
53
  And then access both the `comments_count` and `tags_count` like so:
48
54
 
49
- post = Post.scoped.calculated(:comments_count, :tags_count).first
50
- post.comments_count
51
- #=> 5
52
- post.tags_count
53
- #=> 2
54
-
55
+ ```ruby
56
+ post = Post.scoped.calculated(:comments_count, :tags_count).first
57
+ post.comments_count
58
+ #=> 5
59
+ post.tags_count
60
+ #=> 2
61
+ ```
62
+
63
+ Note that you must call `calculated` on a relation in order to get the desired result. `Post.calculated(:comments_count)` will give you the currently defined lambda for calculating the comments count. `Post.scoped.calculated(:comments_count)` (Rails 3) or `Post.all.calculated(:comments_count)` (Rails 4) will give you an ActiveRecord relation including the calculated attribute.
64
+
55
65
  You may also use the `calculated` method on a single model instance, like so:
56
66
 
57
- Post.first.calculated(:comments_count).comments_count
58
- #=> 5
59
-
67
+ ```ruby
68
+ Post.first.calculated(:comments_count).comments_count
69
+ #=> 5
70
+ ```
71
+
60
72
  If you have defined a `calculated` method, results of that method will be returned rather than throwing a method missing error even if you don't explicitly use the `calculated()` call on the instance:
61
73
 
62
- Post.first.comments_count
63
- #=> 5
64
-
74
+ ```ruby
75
+ Post.first.comments_count
76
+ #=> 5
77
+ ```
78
+
65
79
  If you like, you may define `calculated` lambdas using Arel syntax:
66
80
 
67
- class Post < ActiveRecord::Base
68
- ...
69
- calculated :comments_count, -> { Comment.select(Arel::Nodes::NamedFunction.new("COUNT", [Comment.arel_table[:id]])).where(Comment.arel_table[:post_id].eq(Post.arel_table[:id])) }
70
- ...
71
- end
81
+ ```ruby
82
+ class Post < ActiveRecord::Base
83
+ ...
84
+ calculated :comments_count, -> { Comment.select(Arel::Nodes::NamedFunction.new("COUNT", [Comment.arel_table[:id]])).where(Comment.arel_table[:post_id].eq(Post.arel_table[:id])) }
85
+ ...
86
+ end
87
+ ```
88
+
89
+ ## Known Issues
90
+
91
+ In Rails 4.x, you cannot call `count` on a relation with calculated attributes, e.g.
92
+
93
+ ```ruby
94
+ `Post.scoped.calculated(:comments_count).count`
95
+ ```
96
+
97
+ will error. This is because of an [ActiveRecord issue](https://github.com/rails/rails/blob/master/activerecord/lib/active_record/relation/calculations.rb#L368-L375) that does not permit Arel nodes in the count method.
72
98
 
73
99
  ## Contributing
74
100
 
@@ -17,11 +17,12 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ['lib']
19
19
 
20
+ spec.add_development_dependency 'appraisal', '~> 1.0.3'
20
21
  spec.add_development_dependency 'bundler', '~> 1.7'
21
22
  spec.add_development_dependency 'rake', '~> 10.0'
22
23
  spec.add_development_dependency 'rspec', '~> 3.1'
23
- spec.add_development_dependency 'rubocop'
24
- spec.add_development_dependency 'sqlite3'
24
+ spec.add_development_dependency 'rubocop', '~> 0.32.0'
25
+ spec.add_development_dependency 'sqlite3', '~> 1.3.10'
25
26
 
26
- spec.add_dependency 'activerecord', '~> 3.2.21'
27
+ spec.add_dependency 'activerecord', '>= 3.2.20'
27
28
  end
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "3.2.21"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,73 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ calculated_attributes (0.0.18)
5
+ activerecord (>= 3.2.20)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activemodel (3.2.21)
11
+ activesupport (= 3.2.21)
12
+ builder (~> 3.0.0)
13
+ activerecord (3.2.21)
14
+ activemodel (= 3.2.21)
15
+ activesupport (= 3.2.21)
16
+ arel (~> 3.0.2)
17
+ tzinfo (~> 0.3.29)
18
+ activesupport (3.2.21)
19
+ i18n (~> 0.6, >= 0.6.4)
20
+ multi_json (~> 1.0)
21
+ appraisal (1.0.3)
22
+ bundler
23
+ rake
24
+ thor (>= 0.14.0)
25
+ arel (3.0.3)
26
+ ast (2.0.0)
27
+ astrolabe (1.3.0)
28
+ parser (>= 2.2.0.pre.3, < 3.0)
29
+ builder (3.0.4)
30
+ diff-lcs (1.2.5)
31
+ i18n (0.7.0)
32
+ multi_json (1.11.1)
33
+ parser (2.3.0.pre.2)
34
+ ast (>= 1.1, < 3.0)
35
+ powerpack (0.1.1)
36
+ rainbow (2.0.0)
37
+ rake (10.4.2)
38
+ rspec (3.3.0)
39
+ rspec-core (~> 3.3.0)
40
+ rspec-expectations (~> 3.3.0)
41
+ rspec-mocks (~> 3.3.0)
42
+ rspec-core (3.3.0)
43
+ rspec-support (~> 3.3.0)
44
+ rspec-expectations (3.3.0)
45
+ diff-lcs (>= 1.2.0, < 2.0)
46
+ rspec-support (~> 3.3.0)
47
+ rspec-mocks (3.3.0)
48
+ diff-lcs (>= 1.2.0, < 2.0)
49
+ rspec-support (~> 3.3.0)
50
+ rspec-support (3.3.0)
51
+ rubocop (0.32.0)
52
+ astrolabe (~> 1.3)
53
+ parser (>= 2.2.2.5, < 3.0)
54
+ powerpack (~> 0.1)
55
+ rainbow (>= 1.99.1, < 3.0)
56
+ ruby-progressbar (~> 1.4)
57
+ ruby-progressbar (1.7.5)
58
+ sqlite3 (1.3.10)
59
+ thor (0.19.1)
60
+ tzinfo (0.3.44)
61
+
62
+ PLATFORMS
63
+ ruby
64
+
65
+ DEPENDENCIES
66
+ activerecord (= 3.2.21)
67
+ appraisal (~> 1.0.3)
68
+ bundler (~> 1.7)
69
+ calculated_attributes!
70
+ rake (~> 10.0)
71
+ rspec (~> 3.1)
72
+ rubocop (~> 0.32.0)
73
+ sqlite3 (~> 1.3.10)
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "4.1.11"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,78 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ calculated_attributes (0.0.18)
5
+ activerecord (>= 3.2.20)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activemodel (4.1.11)
11
+ activesupport (= 4.1.11)
12
+ builder (~> 3.1)
13
+ activerecord (4.1.11)
14
+ activemodel (= 4.1.11)
15
+ activesupport (= 4.1.11)
16
+ arel (~> 5.0.0)
17
+ activesupport (4.1.11)
18
+ i18n (~> 0.6, >= 0.6.9)
19
+ json (~> 1.7, >= 1.7.7)
20
+ minitest (~> 5.1)
21
+ thread_safe (~> 0.1)
22
+ tzinfo (~> 1.1)
23
+ appraisal (1.0.3)
24
+ bundler
25
+ rake
26
+ thor (>= 0.14.0)
27
+ arel (5.0.1.20140414130214)
28
+ ast (2.0.0)
29
+ astrolabe (1.3.0)
30
+ parser (>= 2.2.0.pre.3, < 3.0)
31
+ builder (3.2.2)
32
+ diff-lcs (1.2.5)
33
+ i18n (0.7.0)
34
+ json (1.8.3)
35
+ minitest (5.7.0)
36
+ parser (2.2.2.5)
37
+ ast (>= 1.1, < 3.0)
38
+ powerpack (0.1.1)
39
+ rainbow (2.0.0)
40
+ rake (10.4.2)
41
+ rspec (3.3.0)
42
+ rspec-core (~> 3.3.0)
43
+ rspec-expectations (~> 3.3.0)
44
+ rspec-mocks (~> 3.3.0)
45
+ rspec-core (3.3.1)
46
+ rspec-support (~> 3.3.0)
47
+ rspec-expectations (3.3.0)
48
+ diff-lcs (>= 1.2.0, < 2.0)
49
+ rspec-support (~> 3.3.0)
50
+ rspec-mocks (3.3.0)
51
+ diff-lcs (>= 1.2.0, < 2.0)
52
+ rspec-support (~> 3.3.0)
53
+ rspec-support (3.3.0)
54
+ rubocop (0.32.0)
55
+ astrolabe (~> 1.3)
56
+ parser (>= 2.2.2.5, < 3.0)
57
+ powerpack (~> 0.1)
58
+ rainbow (>= 1.99.1, < 3.0)
59
+ ruby-progressbar (~> 1.4)
60
+ ruby-progressbar (1.7.5)
61
+ sqlite3 (1.3.10)
62
+ thor (0.19.1)
63
+ thread_safe (0.3.5)
64
+ tzinfo (1.2.2)
65
+ thread_safe (~> 0.1)
66
+
67
+ PLATFORMS
68
+ ruby
69
+
70
+ DEPENDENCIES
71
+ activerecord (= 4.1.11)
72
+ appraisal (~> 1.0.3)
73
+ bundler (~> 1.7)
74
+ calculated_attributes!
75
+ rake (~> 10.0)
76
+ rspec (~> 3.1)
77
+ rubocop (~> 0.32.0)
78
+ sqlite3 (~> 1.3.10)
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "4.2.2"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,78 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ calculated_attributes (0.0.18)
5
+ activerecord (>= 3.2.20)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activemodel (4.2.2)
11
+ activesupport (= 4.2.2)
12
+ builder (~> 3.1)
13
+ activerecord (4.2.2)
14
+ activemodel (= 4.2.2)
15
+ activesupport (= 4.2.2)
16
+ arel (~> 6.0)
17
+ activesupport (4.2.2)
18
+ i18n (~> 0.7)
19
+ json (~> 1.7, >= 1.7.7)
20
+ minitest (~> 5.1)
21
+ thread_safe (~> 0.3, >= 0.3.4)
22
+ tzinfo (~> 1.1)
23
+ appraisal (1.0.3)
24
+ bundler
25
+ rake
26
+ thor (>= 0.14.0)
27
+ arel (6.0.0)
28
+ ast (2.0.0)
29
+ astrolabe (1.3.0)
30
+ parser (>= 2.2.0.pre.3, < 3.0)
31
+ builder (3.2.2)
32
+ diff-lcs (1.2.5)
33
+ i18n (0.7.0)
34
+ json (1.8.3)
35
+ minitest (5.7.0)
36
+ parser (2.2.2.5)
37
+ ast (>= 1.1, < 3.0)
38
+ powerpack (0.1.1)
39
+ rainbow (2.0.0)
40
+ rake (10.4.2)
41
+ rspec (3.3.0)
42
+ rspec-core (~> 3.3.0)
43
+ rspec-expectations (~> 3.3.0)
44
+ rspec-mocks (~> 3.3.0)
45
+ rspec-core (3.3.1)
46
+ rspec-support (~> 3.3.0)
47
+ rspec-expectations (3.3.0)
48
+ diff-lcs (>= 1.2.0, < 2.0)
49
+ rspec-support (~> 3.3.0)
50
+ rspec-mocks (3.3.0)
51
+ diff-lcs (>= 1.2.0, < 2.0)
52
+ rspec-support (~> 3.3.0)
53
+ rspec-support (3.3.0)
54
+ rubocop (0.32.0)
55
+ astrolabe (~> 1.3)
56
+ parser (>= 2.2.2.5, < 3.0)
57
+ powerpack (~> 0.1)
58
+ rainbow (>= 1.99.1, < 3.0)
59
+ ruby-progressbar (~> 1.4)
60
+ ruby-progressbar (1.7.5)
61
+ sqlite3 (1.3.10)
62
+ thor (0.19.1)
63
+ thread_safe (0.3.5)
64
+ tzinfo (1.2.2)
65
+ thread_safe (~> 0.1)
66
+
67
+ PLATFORMS
68
+ ruby
69
+
70
+ DEPENDENCIES
71
+ activerecord (= 4.2.2)
72
+ appraisal (~> 1.0.3)
73
+ bundler (~> 1.7)
74
+ calculated_attributes!
75
+ rake (~> 10.0)
76
+ rspec (~> 3.1)
77
+ rubocop (~> 0.32.0)
78
+ sqlite3 (~> 1.3.10)
@@ -22,11 +22,21 @@ ActiveRecord::Base.extend CalculatedAttributes
22
22
 
23
23
  ActiveRecord::Base.send(:include, Module.new do
24
24
  def calculated(*args)
25
- self.class.scoped.calculated(*args).find(id)
25
+ if self.class.respond_to? :scoped
26
+ self.class.scoped.calculated(*args).find(id)
27
+ else
28
+ self.class.all.calculated(*args).find(id)
29
+ end
26
30
  end
27
31
 
28
32
  def method_missing(sym, *args, &block)
29
- if !@attributes.include?(sym.to_s) && (self.class.calculated.calculated[sym] || self.class.base_class.calculated.calculated[sym])
33
+ no_sym_in_attr =
34
+ if @attributes.respond_to? :include?
35
+ !@attributes.include?(sym.to_s)
36
+ else
37
+ !@attributes.key?(sym.to_s)
38
+ end
39
+ if no_sym_in_attr && (self.class.calculated.calculated[sym] || self.class.base_class.calculated.calculated[sym])
30
40
  Rails.logger.warn("Using calculated value without including it in the relation: #{sym}") if defined? Rails
31
41
  class_with_attr =
32
42
  if self.class.calculated.calculated[sym]
@@ -34,14 +44,24 @@ ActiveRecord::Base.send(:include, Module.new do
34
44
  else
35
45
  self.class.base_class
36
46
  end
37
- class_with_attr.scoped.calculated(sym).find(id).send(sym)
47
+ if class_with_attr.respond_to? :scoped
48
+ class_with_attr.scoped.calculated(sym).find(id).send(sym)
49
+ else
50
+ class_with_attr.all.calculated(sym).find(id).send(sym)
51
+ end
38
52
  else
39
53
  super(sym, *args, &block)
40
54
  end
41
55
  end
42
56
 
43
57
  def respond_to?(method, include_private = false)
44
- super || (!@attributes.include?(method.to_s) && (self.class.calculated.calculated[method] || self.class.base_class.calculated.calculated[method]))
58
+ no_sym_in_attr =
59
+ if @attributes.respond_to? :include?
60
+ !@attributes.include?(method.to_s)
61
+ else
62
+ !@attributes.key?(method.to_s)
63
+ end
64
+ super || (no_sym_in_attr && (self.class.calculated.calculated[method] || self.class.base_class.calculated.calculated[method]))
45
65
  end
46
66
  end)
47
67
 
@@ -1,3 +1,3 @@
1
1
  module CalculatedAttributes
2
- VERSION = '0.0.17'
2
+ VERSION = '0.0.18'
3
3
  end
@@ -1,18 +1,26 @@
1
1
  require 'spec_helper'
2
2
 
3
+ def model_scoped(klass)
4
+ if klass.respond_to? :scoped
5
+ klass.scoped
6
+ else
7
+ klass.all
8
+ end
9
+ end
10
+
3
11
  describe 'calculated_attributes' do
4
12
  it 'includes calculated attributes' do
5
- expect(Post.scoped.calculated(:comments).first.comments).to eq(1)
13
+ expect(model_scoped(Post).calculated(:comments).first.comments).to eq(1)
6
14
  end
7
15
 
8
16
  it 'includes multiple calculated attributes' do
9
- post = Post.scoped.calculated(:comments, :comments_two).first
17
+ post = model_scoped(Post).calculated(:comments, :comments_two).first
10
18
  expect(post.comments).to eq(1)
11
19
  expect(post.comments_two).to eq(1)
12
20
  end
13
21
 
14
22
  it 'includes chained calculated attributes' do
15
- post = Post.scoped.calculated(:comments).calculated(:comments_two).first
23
+ post = model_scoped(Post).calculated(:comments).calculated(:comments_two).first
16
24
  expect(post.comments).to eq(1)
17
25
  expect(post.comments_two).to eq(1)
18
26
  end
@@ -56,26 +64,24 @@ describe 'calculated_attributes' do
56
64
  end
57
65
 
58
66
  it 'allows attributes to be defined using AREL' do
59
- expect(Post.scoped.calculated(:comments_arel).first.comments_arel).to eq(1)
67
+ expect(model_scoped(Post).calculated(:comments_arel).first.comments_arel).to eq(1)
60
68
  end
61
69
 
62
70
  it 'maintains previous scope' do
63
- expect(Post.where(text: 'First post!').calculated(:comments).count).to eq(1)
64
71
  expect(Post.where(text: 'First post!').calculated(:comments).first.comments).to eq(1)
65
72
  expect(Post.where("posts.text = 'First post!'").calculated(:comments).first.comments).to eq(1)
66
73
  end
67
74
 
68
75
  it 'maintains subsequent scope' do
69
- expect(Post.scoped.calculated(:comments).where(text: 'First post!').count).to eq(1)
70
- expect(Post.scoped.calculated(:comments).where(text: 'First post!').first.comments).to eq(1)
71
- expect(Post.scoped.calculated(:comments).where("posts.text = 'First post!'").first.comments).to eq(1)
76
+ expect(model_scoped(Post).calculated(:comments).where(text: 'First post!').first.comments).to eq(1)
77
+ expect(model_scoped(Post).calculated(:comments).where("posts.text = 'First post!'").first.comments).to eq(1)
72
78
  end
73
79
 
74
80
  it 'includes calculated attributes with STI and lambda on base class' do
75
- expect(Tutorial.scoped.calculated(:comments).first.comments).to eq(1)
81
+ expect(model_scoped(Tutorial).calculated(:comments).first.comments).to eq(1)
76
82
  end
77
83
 
78
84
  it 'includes calculated attributes with STI and lambda on subclass' do
79
- expect(Article.scoped.calculated(:sub_comments).first.sub_comments).to eq(1)
85
+ expect(model_scoped(Article).calculated(:sub_comments).first.sub_comments).to eq(1)
80
86
  end
81
87
  end
@@ -3,12 +3,12 @@ ActiveRecord::Schema.define do
3
3
 
4
4
  create_table :posts, force: true do |t|
5
5
  t.string :text
6
- t.timestamps
6
+ t.timestamps null: false
7
7
  end
8
8
 
9
9
  create_table :comments, force: true do |t|
10
10
  t.integer :post_id
11
11
  t.string :text
12
- t.timestamps
12
+ t.timestamps null: false
13
13
  end
14
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: calculated_attributes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zach Schneider
@@ -10,6 +10,20 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2015-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: appraisal
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.3
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.3
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -56,44 +70,44 @@ dependencies:
56
70
  name: rubocop
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ">="
73
+ - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '0'
75
+ version: 0.32.0
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ">="
80
+ - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '0'
82
+ version: 0.32.0
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: sqlite3
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ">="
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '0'
89
+ version: 1.3.10
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ">="
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '0'
96
+ version: 1.3.10
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: activerecord
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - "~>"
101
+ - - ">="
88
102
  - !ruby/object:Gem::Version
89
- version: 3.2.21
103
+ version: 3.2.20
90
104
  type: :runtime
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - "~>"
108
+ - - ">="
95
109
  - !ruby/object:Gem::Version
96
- version: 3.2.21
110
+ version: 3.2.20
97
111
  description:
98
112
  email:
99
113
  - zach@aha.io
@@ -104,11 +118,18 @@ files:
104
118
  - ".gitignore"
105
119
  - ".rspec"
106
120
  - ".rubocop.yml"
121
+ - Appraisals
107
122
  - Gemfile
108
123
  - LICENSE.txt
109
124
  - README.md
110
125
  - Rakefile
111
126
  - calculated_attributes.gemspec
127
+ - gemfiles/rails3.gemfile
128
+ - gemfiles/rails3.gemfile.lock
129
+ - gemfiles/rails4_1.gemfile
130
+ - gemfiles/rails4_1.gemfile.lock
131
+ - gemfiles/rails4_2.gemfile
132
+ - gemfiles/rails4_2.gemfile.lock
112
133
  - lib/calculated_attributes.rb
113
134
  - lib/calculated_attributes/version.rb
114
135
  - spec/lib/calculated_attributes_spec.rb