Commit 6c2064574daa1e273bcd3aeea2b27f864d910f24

Authored by Andrew Kane
1 parent 170914b6

Ruby 1.8 compatible

.travis.yml
1 1 language: ruby
2 2 rvm:
  3 + - 1.8.7
3 4 - 1.9.3
4 5 - 2.0.0
5 6 - jruby
... ...
Gemfile
... ... @@ -6,6 +6,6 @@ gemspec
6 6 # gem "activerecord", github: "rails/rails"
7 7  
8 8 platform :jruby do
9   - gem "activerecord-jdbcpostgresql-adapter", github: "jruby/activerecord-jdbc-adapter"
10   - gem "activerecord-jdbcmysql-adapter", github: "jruby/activerecord-jdbc-adapter"
  9 + gem "activerecord-jdbcpostgresql-adapter", :github => "jruby/activerecord-jdbc-adapter"
  10 + gem "activerecord-jdbcmysql-adapter", :github => "jruby/activerecord-jdbc-adapter"
11 11 end
... ...
README.md
... ... @@ -125,10 +125,10 @@ Use the master version of your JDBC adapter. You will get incorrect results for
125 125  
126 126 ```sh
127 127 # postgresql
128   -gem "activerecord-jdbcpostgresql-adapter", github: "jruby/activerecord-jdbc-adapter"
  128 +gem "activerecord-jdbcpostgresql-adapter", :github => "jruby/activerecord-jdbc-adapter"
129 129  
130 130 # mysql
131   -gem "activerecord-jdbcmysql-adapter", github: "jruby/activerecord-jdbc-adapter"
  131 +gem "activerecord-jdbcmysql-adapter", :github => "jruby/activerecord-jdbc-adapter"
132 132 ```
133 133  
134 134 ## Complete list
... ...
lib/groupdate.rb
... ... @@ -30,9 +30,9 @@ module Groupdate
30 30 # http://www.postgresql.org/docs/9.1/static/functions-datetime.html
31 31 fields = %w(second minute hour day week month year day_of_week hour_of_day)
32 32 fields.each do |field|
33   - self.scope :"group_by_#{field}", lambda {|unsafe_column, time_zone = Time.zone|
34   - column = connection.quote_column_name(unsafe_column)
35   - time_zone ||= "Etc/UTC"
  33 + self.scope :"group_by_#{field}", lambda {|*args|
  34 + column = connection.quote_column_name(args[0])
  35 + time_zone = args[1] || Time.zone || "Etc/UTC"
36 36 if time_zone.is_a?(ActiveSupport::TimeZone) or time_zone = ActiveSupport::TimeZone[time_zone]
37 37 time_zone = time_zone.tzinfo.name
38 38 else
... ...
test/groupdate_test.rb
... ... @@ -16,7 +16,7 @@ end
16 16  
17 17 # migrations
18 18 %w(postgresql mysql2).each do |adapter|
19   - ActiveRecord::Base.establish_connection adapter: adapter, database: "groupdate_test", username: adapter == "mysql2" ? "root" : nil
  19 + ActiveRecord::Base.establish_connection :adapter => adapter, :database => "groupdate_test", :username => adapter == "mysql2" ? "root" : nil
20 20  
21 21 unless ActiveRecord::Base.connection.table_exists? "users"
22 22 ActiveRecord::Migration.create_table :users do |t|
... ... @@ -32,22 +32,22 @@ describe Groupdate do
32 32 describe adapter do
33 33  
34 34 before do
35   - User.establish_connection adapter: adapter, database: "groupdate_test", username: adapter == "mysql2" ? "root" : nil
  35 + User.establish_connection :adapter => adapter, :database => "groupdate_test", :username => adapter == "mysql2" ? "root" : nil
36 36 User.delete_all
37 37 end
38 38  
39 39 it "works!" do
40 40 [
41   - {name: "Andrew", score: 1, created_at: Time.parse("2013-04-01 00:00:00 UTC")},
42   - {name: "Jordan", score: 2, created_at: Time.parse("2013-04-01 00:00:00 UTC")},
43   - {name: "Nick", score: 3, created_at: Time.parse("2013-04-02 00:00:00 UTC")}
  41 + {:name => "Andrew", :score => 1, :created_at => Time.parse("2013-04-01 00:00:00 UTC")},
  42 + {:name => "Jordan", :score => 2, :created_at => Time.parse("2013-04-01 00:00:00 UTC")},
  43 + {:name => "Nick", :score => 3, :created_at => Time.parse("2013-04-02 00:00:00 UTC")}
44 44 ].each{|u| User.create!(u) }
45 45  
46 46 assert_equal(
47   - {
  47 + ordered_hash({
48 48 time_key("2013-04-01 00:00:00 UTC") => 1,
49 49 time_key("2013-04-02 00:00:00 UTC") => 1
50   - },
  50 + }),
51 51 User.where("score > 1").group_by_day(:created_at).count
52 52 )
53 53 end
... ... @@ -124,7 +124,7 @@ describe Groupdate do
124 124  
125 125 def assert_group(method, created_at, key, time_zone = nil)
126 126 create_user created_at
127   - assert_equal({time_key(key) => 1}, User.send(:"group_by_#{method}", :created_at, time_zone).count)
  127 + assert_equal(ordered_hash({time_key(key) => 1}), User.send(:"group_by_#{method}", :created_at, time_zone).count)
128 128 end
129 129  
130 130 def assert_group_tz(method, created_at, key)
... ... @@ -133,7 +133,7 @@ describe Groupdate do
133 133  
134 134 def assert_group_number(method, created_at, key, time_zone = nil)
135 135 create_user created_at
136   - assert_equal({number_key(key) => 1}, User.send(:"group_by_#{method}", :created_at, time_zone).count)
  136 + assert_equal(ordered_hash({number_key(key) => 1}), User.send(:"group_by_#{method}", :created_at, time_zone).count)
137 137 end
138 138  
139 139 def assert_group_number_tz(method, created_at, key)
... ... @@ -144,7 +144,7 @@ describe Groupdate do
144 144 if RUBY_PLATFORM == "java"
145 145 User.connection.adapter_name == "PostgreSQL" ? Time.parse(key).strftime("%Y-%m-%d %H:%M:%S%z")[0..-3] : Time.parse(key).strftime("%Y-%m-%d %H:%M:%S").gsub(/ 00\:00\:00\z/, "")
146 146 else
147   - User.connection.adapter_name == "PostgreSQL" && ActiveRecord::VERSION::MAJOR == 3 ? Time.parse(key).strftime("%Y-%m-%d %H:%M:%S%z")[0..-3] : Time.parse(key)
  147 + User.connection.adapter_name == "PostgreSQL" && ActiveRecord::VERSION::MAJOR == 3 ? Time.parse(key).strftime("%Y-%m-%d %H:%M:%S+00") : Time.parse(key)
148 148 end
149 149 end
150 150  
... ... @@ -156,8 +156,12 @@ describe Groupdate do
156 156 end
157 157 end
158 158  
  159 + def ordered_hash(hash)
  160 + RUBY_VERSION =~ /1\.8/ ? hash.inject(ActiveSupport::OrderedHash.new){|h, (k, v)| h[k] = v; h } : hash
  161 + end
  162 +
159 163 def create_user(created_at)
160   - User.create!(name: "Andrew", score: 1, created_at: Time.parse(created_at))
  164 + User.create!(:name => "Andrew", :score => 1, :created_at => Time.parse(created_at))
161 165 end
162 166  
163 167 end
... ...