Commit 6c2064574daa1e273bcd3aeea2b27f864d910f24
1 parent
170914b6
Exists in
master
and in
17 other branches
Ruby 1.8 compatible
Showing
5 changed files
with
23 additions
and
18 deletions
Show diff stats
.travis.yml
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 | ... | ... |