dase 3.2.4 → 3.2.5

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/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.3"
4
+ - rbx-19mode
5
+ #- jruby-19mode # JRuby in 1.9 mode
6
+
7
+ # uncomment this line if your project needs to run something other than `rake`:
8
+ # script: bundle exec rspec spec
9
+
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Dase
1
+ [![Build Status](https://secure.travis-ci.org/vovayartsev/dase.png)](http://travis-ci.org/vovayartsev/dase)
2
2
 
3
3
  ## Overview
4
4
 
@@ -16,22 +16,19 @@ Calling 'includes_count_of(:articles)' on a relation object adds 'articles_count
16
16
 
17
17
  ## Installation
18
18
 
19
- Add this line to your application's Gemfile:
19
+ Add this line to your Rails 3.2.x application's Gemfile:
20
20
 
21
- gem 'dase', "~> 3.2.0"
22
-
23
- ### Note on version numbers
24
-
25
- Dase version number correlates with the Active Record's versions number,
26
- which it has been tested with.
27
- E.g. the latest 3.2.* version of Dase will play nicely with the latest 3.2.* version of Active Record.
28
- Since it's a sort of a "hack", make sure you specified the version number for "dase" gem in your Gemfile.
21
+ gem 'dase', "~> 3.2.4"
29
22
 
30
23
  ## Usage
31
24
 
32
25
  ### Basic usage:
33
26
 
34
27
  ```
28
+ class Author
29
+ has_many :articles
30
+ end
31
+
35
32
  Author.includes_count_of(:articles).find_each do |author|
36
33
  puts "#{author.name} has #{author.articles_count} articles published"
37
34
  end
@@ -46,15 +43,17 @@ Author.includes_count_of(:articles, :conditions => {:year => 2012}) # counts o
46
43
 
47
44
  ### Using scope merging
48
45
  ```
49
- scope = Article.where(:year => 2012)
50
- Author.includes_count_of(:articles, :only => scope) # counts only articles in year 2012
51
- ```
46
+ class Article
47
+ belongs_to :author
48
+ scope this_year, lambda { where(:year => 2012) }
49
+ end
52
50
 
53
- ### Using block syntax
54
- ```
55
- Author.includes_count_of(:articles){ where(:year => 2012) } # in the block, 'self' is a Relation instance
56
- Author.includes_count_of(:articles){ |scope| scope.where(:year => 2012) } # 'self' is the same inside and outside the block
51
+ results = Author.includes_count_of(:articles, :only => Article.this_year)
52
+ results.first.articles_count # => # number of articles of given Author for year 2012 only
57
53
  ```
54
+ This is achieved by merging the association scope with the scope provided as ":only => ..." option.
55
+ No additional checks are performed, and providing the association of proper type is solely your responsibility.
56
+
58
57
 
59
58
  ### Renaming counter column
60
59
  ```
@@ -62,10 +61,25 @@ sites = WebSite.includes_count_of(:users, :conditions => {:role => 'admin'}, :as
62
61
  sites.each { |site| puts "Site #{site.url} has #{site.admins_count} admin users" }
63
62
  ```
64
63
 
64
+ ## Compatibility
65
+
66
+ ### Rails versions
65
67
 
66
- ### Known problems
68
+ This gem is for Rails 3.2.x . Earlier versions are not supported.
67
69
 
68
- Dase doesn't support polymorphism.
70
+ Note: the Dase gem version number correlates with the Active Record's versions number,
71
+ which it has been tested with.
72
+ E.g. the latest 3.2.* version of Dase will play nicely with the latest 3.2.* version of Active Record.
73
+ Since dase gem is a sort of a "hack", make sure you specified the version number for "dase" gem in your Gemfile.
74
+
75
+ ### Polymorphic associations and HasManyThrough associations
76
+
77
+ Polymorphic associations and HasManyThrough associations support should work, but it is not tested quite well.
78
+ Bug reports and pull requests are very welcome.
79
+
80
+ ### jRuby support
81
+
82
+ Not yet
69
83
 
70
84
  ## How it works
71
85
 
@@ -77,9 +91,6 @@ Here's a pseudo-code that gives an idea on how it works internally
77
91
  end
78
92
  ```
79
93
 
80
-
81
-
82
-
83
94
  ## Name origin
84
95
 
85
96
  The gem is named by the german mathematician [Johann Dase](http://en.wikipedia.org/wiki/Zacharias_Dase),
data/dase.gemspec CHANGED
@@ -14,11 +14,19 @@ Gem::Specification.new do |gem|
14
14
  gem.summary = %q{Provides includes_count_of method on ActiveRecord::Relation to count associated records efficiently}
15
15
  gem.homepage = "https://github.com/vovayartsev/dase"
16
16
 
17
- gem.add_runtime_dependency "activerecord", "~> 3.2.0"
18
17
  gem.add_runtime_dependency "activesupport", "~> 3.2.0"
19
18
  gem.add_development_dependency 'shoulda'
20
- gem.add_development_dependency 'sqlite3', '~> 1.3.3'
21
- gem.add_development_dependency 'debugger'
19
+
20
+ if defined? JRUBY_VERSION
21
+ gem.add_development_dependency 'activerecord-jdbcsqlite3-adapter'
22
+ else
23
+ gem.add_runtime_dependency "activerecord", "~> 3.2.0"
24
+ gem.add_development_dependency 'sqlite3', '~> 1.3.3'
25
+ end
26
+
27
+ # gem.add_development_dependency 'debugger'
28
+ gem.add_development_dependency 'rake'
29
+ gem.add_development_dependency 'rspec-core'
22
30
 
23
31
  gem.files = `git ls-files`.split($/)
24
32
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -14,9 +14,10 @@ module Dase
14
14
  relation.dase_values ||= {}
15
15
  #options[:proc] = block if block
16
16
  args.each do |arg|
17
- options[:association] = arg.to_sym
18
- options[:as] = (options[:as] || "#{arg}_count").to_sym
19
- relation.dase_values[options[:as]] = options
17
+ opts = options.clone
18
+ opts[:association] = arg.to_sym
19
+ opts[:as] = (opts[:as] || "#{arg}_count").to_sym
20
+ relation.dase_values[opts[:as]] = opts
20
21
  end
21
22
  relation
22
23
  end
data/lib/dase/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dase
2
- VERSION = "3.2.4"
2
+ VERSION = "3.2.5"
3
3
  end
data/test/test_dase.rb CHANGED
@@ -50,7 +50,7 @@ class TestBase < Test::Unit::TestCase
50
50
  end
51
51
 
52
52
  should "count books for year 1990" do
53
- traditional_counts = Author.order(:name).map { |a| a.books.where(year: 1990).count }
53
+ traditional_counts = Author.order(:name).map { |a| a.books.where(:year => 1990).count }
54
54
  dase_counts = Author.includes_count_of(:books, :conditions => {:year => 1990}).order(:name).map { |a| a.books_count }
55
55
  # the order is: Bobby, Joe, Teddy - due to order(:name)
56
56
  true_counts = [1, 2, 0] # see books.yml
@@ -94,5 +94,11 @@ class TestBase < Test::Unit::TestCase
94
94
  compare_counts(traditional_counts, dase_counts, true_counts)
95
95
  end
96
96
 
97
+ should 'support multiple arguments' do
98
+ joe = Author.includes_count_of(:books, :old_books).where(:name => 'Joe').first
99
+ assert_equal 3, joe.books_count, "Invalid books_count"
100
+ assert_equal 2, joe.old_books_count, "Invalid old_books_count"
101
+ end
102
+
97
103
  end
98
104
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dase
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.4
4
+ version: 3.2.5
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: 2012-09-29 00:00:00.000000000 Z
12
+ date: 2012-11-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: activerecord
16
- requirement: &70360982006260 !ruby/object:Gem::Requirement
15
+ name: activesupport
16
+ requirement: &70173173459420 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,21 @@ dependencies:
21
21
  version: 3.2.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70360982006260
24
+ version_requirements: *70173173459420
25
25
  - !ruby/object:Gem::Dependency
26
- name: activesupport
27
- requirement: &70360982005420 !ruby/object:Gem::Requirement
26
+ name: shoulda
27
+ requirement: &70173173458740 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70173173458740
36
+ - !ruby/object:Gem::Dependency
37
+ name: activerecord
38
+ requirement: &70173173458200 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ~>
@@ -32,32 +43,32 @@ dependencies:
32
43
  version: 3.2.0
33
44
  type: :runtime
34
45
  prerelease: false
35
- version_requirements: *70360982005420
46
+ version_requirements: *70173173458200
36
47
  - !ruby/object:Gem::Dependency
37
- name: shoulda
38
- requirement: &70360982004720 !ruby/object:Gem::Requirement
48
+ name: sqlite3
49
+ requirement: &70173173457620 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
- - - ! '>='
52
+ - - ~>
42
53
  - !ruby/object:Gem::Version
43
- version: '0'
54
+ version: 1.3.3
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *70360982004720
57
+ version_requirements: *70173173457620
47
58
  - !ruby/object:Gem::Dependency
48
- name: sqlite3
49
- requirement: &70360982003420 !ruby/object:Gem::Requirement
59
+ name: rake
60
+ requirement: &70173173457020 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
- - - ~>
63
+ - - ! '>='
53
64
  - !ruby/object:Gem::Version
54
- version: 1.3.3
65
+ version: '0'
55
66
  type: :development
56
67
  prerelease: false
57
- version_requirements: *70360982003420
68
+ version_requirements: *70173173457020
58
69
  - !ruby/object:Gem::Dependency
59
- name: debugger
60
- requirement: &70360982001620 !ruby/object:Gem::Requirement
70
+ name: rspec-core
71
+ requirement: &70173173456380 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ! '>='
@@ -65,7 +76,7 @@ dependencies:
65
76
  version: '0'
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *70360982001620
79
+ version_requirements: *70173173456380
69
80
  description: ! "Dase gem creates includes_count_of method in ActiveRecord::Relation\n
70
81
  \ to count associated records efficiently. See examples at
71
82
  https://github.com/vovayartsev/dase\n "
@@ -76,6 +87,7 @@ extensions: []
76
87
  extra_rdoc_files: []
77
88
  files:
78
89
  - .gitignore
90
+ - .travis.yml
79
91
  - Gemfile
80
92
  - LICENSE.txt
81
93
  - README.md