From 6c2064574daa1e273bcd3aeea2b27f864d910f24 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Thu, 25 Apr 2013 03:18:20 -0700 Subject: [PATCH] Ruby 1.8 compatible --- .travis.yml | 1 + Gemfile | 4 ++-- README.md | 4 ++-- lib/groupdate.rb | 6 +++--- test/groupdate_test.rb | 26 +++++++++++++++----------- 5 files changed, 23 insertions(+), 18 deletions(-) diff --git a/.travis.yml b/.travis.yml index bd705df..b87fadf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ language: ruby rvm: + - 1.8.7 - 1.9.3 - 2.0.0 - jruby diff --git a/Gemfile b/Gemfile index e5bd046..bd27dd4 100644 --- a/Gemfile +++ b/Gemfile @@ -6,6 +6,6 @@ gemspec # gem "activerecord", github: "rails/rails" platform :jruby do - gem "activerecord-jdbcpostgresql-adapter", github: "jruby/activerecord-jdbc-adapter" - gem "activerecord-jdbcmysql-adapter", github: "jruby/activerecord-jdbc-adapter" + gem "activerecord-jdbcpostgresql-adapter", :github => "jruby/activerecord-jdbc-adapter" + gem "activerecord-jdbcmysql-adapter", :github => "jruby/activerecord-jdbc-adapter" end diff --git a/README.md b/README.md index 707f4d7..fd138b1 100644 --- a/README.md +++ b/README.md @@ -125,10 +125,10 @@ Use the master version of your JDBC adapter. You will get incorrect results for ```sh # postgresql -gem "activerecord-jdbcpostgresql-adapter", github: "jruby/activerecord-jdbc-adapter" +gem "activerecord-jdbcpostgresql-adapter", :github => "jruby/activerecord-jdbc-adapter" # mysql -gem "activerecord-jdbcmysql-adapter", github: "jruby/activerecord-jdbc-adapter" +gem "activerecord-jdbcmysql-adapter", :github => "jruby/activerecord-jdbc-adapter" ``` ## Complete list diff --git a/lib/groupdate.rb b/lib/groupdate.rb index 86c155e..31cd229 100644 --- a/lib/groupdate.rb +++ b/lib/groupdate.rb @@ -30,9 +30,9 @@ module Groupdate # http://www.postgresql.org/docs/9.1/static/functions-datetime.html fields = %w(second minute hour day week month year day_of_week hour_of_day) fields.each do |field| - self.scope :"group_by_#{field}", lambda {|unsafe_column, time_zone = Time.zone| - column = connection.quote_column_name(unsafe_column) - time_zone ||= "Etc/UTC" + self.scope :"group_by_#{field}", lambda {|*args| + column = connection.quote_column_name(args[0]) + time_zone = args[1] || Time.zone || "Etc/UTC" if time_zone.is_a?(ActiveSupport::TimeZone) or time_zone = ActiveSupport::TimeZone[time_zone] time_zone = time_zone.tzinfo.name else diff --git a/test/groupdate_test.rb b/test/groupdate_test.rb index 3357ba5..af53ac6 100644 --- a/test/groupdate_test.rb +++ b/test/groupdate_test.rb @@ -16,7 +16,7 @@ end # migrations %w(postgresql mysql2).each do |adapter| - ActiveRecord::Base.establish_connection adapter: adapter, database: "groupdate_test", username: adapter == "mysql2" ? "root" : nil + ActiveRecord::Base.establish_connection :adapter => adapter, :database => "groupdate_test", :username => adapter == "mysql2" ? "root" : nil unless ActiveRecord::Base.connection.table_exists? "users" ActiveRecord::Migration.create_table :users do |t| @@ -32,22 +32,22 @@ describe Groupdate do describe adapter do before do - User.establish_connection adapter: adapter, database: "groupdate_test", username: adapter == "mysql2" ? "root" : nil + User.establish_connection :adapter => adapter, :database => "groupdate_test", :username => adapter == "mysql2" ? "root" : nil User.delete_all end it "works!" do [ - {name: "Andrew", score: 1, created_at: Time.parse("2013-04-01 00:00:00 UTC")}, - {name: "Jordan", score: 2, created_at: Time.parse("2013-04-01 00:00:00 UTC")}, - {name: "Nick", score: 3, created_at: Time.parse("2013-04-02 00:00:00 UTC")} + {:name => "Andrew", :score => 1, :created_at => Time.parse("2013-04-01 00:00:00 UTC")}, + {:name => "Jordan", :score => 2, :created_at => Time.parse("2013-04-01 00:00:00 UTC")}, + {:name => "Nick", :score => 3, :created_at => Time.parse("2013-04-02 00:00:00 UTC")} ].each{|u| User.create!(u) } assert_equal( - { + ordered_hash({ time_key("2013-04-01 00:00:00 UTC") => 1, time_key("2013-04-02 00:00:00 UTC") => 1 - }, + }), User.where("score > 1").group_by_day(:created_at).count ) end @@ -124,7 +124,7 @@ describe Groupdate do def assert_group(method, created_at, key, time_zone = nil) create_user created_at - assert_equal({time_key(key) => 1}, User.send(:"group_by_#{method}", :created_at, time_zone).count) + assert_equal(ordered_hash({time_key(key) => 1}), User.send(:"group_by_#{method}", :created_at, time_zone).count) end def assert_group_tz(method, created_at, key) @@ -133,7 +133,7 @@ describe Groupdate do def assert_group_number(method, created_at, key, time_zone = nil) create_user created_at - assert_equal({number_key(key) => 1}, User.send(:"group_by_#{method}", :created_at, time_zone).count) + assert_equal(ordered_hash({number_key(key) => 1}), User.send(:"group_by_#{method}", :created_at, time_zone).count) end def assert_group_number_tz(method, created_at, key) @@ -144,7 +144,7 @@ describe Groupdate do if RUBY_PLATFORM == "java" 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/, "") else - 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) + User.connection.adapter_name == "PostgreSQL" && ActiveRecord::VERSION::MAJOR == 3 ? Time.parse(key).strftime("%Y-%m-%d %H:%M:%S+00") : Time.parse(key) end end @@ -156,8 +156,12 @@ describe Groupdate do end end + def ordered_hash(hash) + RUBY_VERSION =~ /1\.8/ ? hash.inject(ActiveSupport::OrderedHash.new){|h, (k, v)| h[k] = v; h } : hash + end + def create_user(created_at) - User.create!(name: "Andrew", score: 1, created_at: Time.parse(created_at)) + User.create!(:name => "Andrew", :score => 1, :created_at => Time.parse(created_at)) end end -- libgit2 0.21.0