activerecord-time 0.10.1 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,13 +1,24 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
- activemodel (5.2.0)
5
- activesupport (= 5.2.0)
6
- activerecord (5.2.0)
7
- activemodel (= 5.2.0)
8
- activesupport (= 5.2.0)
4
+ activemodel (5.2.3)
5
+ activesupport (= 5.2.3)
6
+ activerecord (5.2.3)
7
+ activemodel (= 5.2.3)
8
+ activesupport (= 5.2.3)
9
9
  arel (>= 9.0)
10
- activesupport (5.2.0)
10
+ activerecord-jdbc-adapter (52.3-java)
11
+ activerecord (~> 5.2.0)
12
+ activerecord-jdbcderby-adapter (0.8.2)
13
+ activerecord-jdbc-adapter (>= 0.8.2)
14
+ jdbc-derby (>= 10.3.2.1)
15
+ activerecord-jdbcpostgresql-adapter (52.3-java)
16
+ activerecord-jdbc-adapter (= 52.3)
17
+ jdbc-postgres (>= 9.4, < 43)
18
+ activerecord-jdbcsqlite3-adapter (52.3-java)
19
+ activerecord-jdbc-adapter (= 52.3)
20
+ jdbc-sqlite3 (~> 3.8, < 3.30)
21
+ activesupport (5.2.3)
11
22
  concurrent-ruby (~> 1.0, >= 1.0.2)
12
23
  i18n (>= 0.7, < 2)
13
24
  minitest (~> 5.1)
@@ -15,28 +26,30 @@ GEM
15
26
  ansi (1.5.0)
16
27
  arel (9.0.0)
17
28
  builder (3.2.3)
18
- concurrent-ruby (1.0.5)
19
- concurrent-ruby (1.0.5-java)
20
- docile (1.3.0)
21
- i18n (1.0.1)
29
+ concurrent-ruby (1.1.5)
30
+ docile (1.3.2)
31
+ i18n (1.7.0)
22
32
  concurrent-ruby (~> 1.0)
23
- json (2.1.0)
24
- json (2.1.0-java)
25
- minitest (5.10.3)
26
- minitest-reporters (1.2.0)
33
+ jdbc-derby (10.12.1.1)
34
+ jdbc-postgres (42.2.6)
35
+ jdbc-sqlite3 (3.28.0)
36
+ json (2.2.0)
37
+ json (2.2.0-java)
38
+ minitest (5.12.2)
39
+ minitest-reporters (1.4.1)
27
40
  ansi
28
41
  builder
29
42
  minitest (>= 5.0)
30
43
  ruby-progressbar
31
44
  pg (0.21.0)
32
- rake (12.3.1)
33
- ruby-progressbar (1.9.0)
34
- simplecov (0.16.1)
45
+ rake (13.0.0)
46
+ ruby-progressbar (1.10.1)
47
+ simplecov (0.17.1)
35
48
  docile (~> 1.1)
36
49
  json (>= 1.8, < 3)
37
50
  simplecov-html (~> 0.10.0)
38
51
  simplecov-html (0.10.2)
39
- sqlite3 (1.3.13)
52
+ sqlite3 (1.4.1)
40
53
  thread_safe (0.3.6)
41
54
  thread_safe (0.3.6-java)
42
55
  tzinfo (1.2.5)
@@ -48,6 +61,10 @@ PLATFORMS
48
61
 
49
62
  DEPENDENCIES
50
63
  activerecord (~> 5.2.0)
64
+ activerecord-jdbc-adapter
65
+ activerecord-jdbcderby-adapter
66
+ activerecord-jdbcpostgresql-adapter
67
+ activerecord-jdbcsqlite3-adapter
51
68
  minitest-reporters
52
69
  pg (< 1)
53
70
  rake
@@ -55,4 +72,4 @@ DEPENDENCIES
55
72
  sqlite3
56
73
 
57
74
  BUNDLED WITH
58
- 1.16.1
75
+ 1.17.2
@@ -1,3 +1,3 @@
1
1
  eval File.read("#{File.dirname __FILE__}/common.gemfile")
2
2
 
3
- gem 'activerecord', '~>4.2.3'
3
+ gem 'activerecord', '~>6.0.0'
@@ -1,67 +1,66 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
- activemodel (5.0.7)
5
- activesupport (= 5.0.7)
6
- activerecord (5.0.7)
7
- activemodel (= 5.0.7)
8
- activesupport (= 5.0.7)
9
- arel (~> 7.0)
10
- activerecord-jdbc-adapter (50.0)
11
- activerecord (>= 2.2)
4
+ activemodel (6.0.2.1)
5
+ activesupport (= 6.0.2.1)
6
+ activerecord (6.0.2.1)
7
+ activemodel (= 6.0.2.1)
8
+ activesupport (= 6.0.2.1)
9
+ activerecord-jdbc-adapter (60.1-java)
10
+ activerecord (~> 6.0.0)
12
11
  activerecord-jdbcderby-adapter (0.8.2)
13
12
  activerecord-jdbc-adapter (>= 0.8.2)
14
13
  jdbc-derby (>= 10.3.2.1)
15
- activerecord-jdbcpostgresql-adapter (50.0)
16
- activerecord-jdbc-adapter (~> 50.0)
14
+ activerecord-jdbcpostgresql-adapter (60.1-java)
15
+ activerecord-jdbc-adapter (= 60.1)
17
16
  jdbc-postgres (>= 9.4, < 43)
18
- activerecord-jdbcsqlite3-adapter (50.0)
19
- activerecord-jdbc-adapter (~> 50.0)
17
+ activerecord-jdbcsqlite3-adapter (60.1-java)
18
+ activerecord-jdbc-adapter (= 60.1)
20
19
  jdbc-sqlite3 (~> 3.8, < 3.30)
21
- activesupport (5.0.7)
20
+ activesupport (6.0.2.1)
22
21
  concurrent-ruby (~> 1.0, >= 1.0.2)
23
22
  i18n (>= 0.7, < 2)
24
23
  minitest (~> 5.1)
25
24
  tzinfo (~> 1.1)
25
+ zeitwerk (~> 2.2)
26
26
  ansi (1.5.0)
27
- arel (7.1.4)
28
- builder (3.2.3)
29
- concurrent-ruby (1.0.5)
30
- concurrent-ruby (1.0.5-java)
31
- docile (1.3.0)
32
- i18n (1.0.1)
27
+ builder (3.2.4)
28
+ concurrent-ruby (1.1.5)
29
+ docile (1.3.2)
30
+ i18n (1.7.0)
33
31
  concurrent-ruby (~> 1.0)
34
32
  jdbc-derby (10.12.1.1)
35
- jdbc-postgres (42.1.4)
36
- jdbc-sqlite3 (3.20.1)
37
- json (2.1.0)
38
- json (2.1.0-java)
39
- minitest (5.10.3)
40
- minitest-reporters (1.2.0)
33
+ jdbc-postgres (42.2.6)
34
+ jdbc-sqlite3 (3.28.0)
35
+ json (2.3.0)
36
+ json (2.3.0-java)
37
+ minitest (5.13.0)
38
+ minitest-reporters (1.4.2)
41
39
  ansi
42
40
  builder
43
41
  minitest (>= 5.0)
44
42
  ruby-progressbar
45
43
  pg (0.21.0)
46
- rake (12.3.1)
47
- ruby-progressbar (1.9.0)
48
- simplecov (0.16.1)
44
+ rake (13.0.1)
45
+ ruby-progressbar (1.10.1)
46
+ simplecov (0.17.1)
49
47
  docile (~> 1.1)
50
48
  json (>= 1.8, < 3)
51
49
  simplecov-html (~> 0.10.0)
52
50
  simplecov-html (0.10.2)
53
- sqlite3 (1.3.13)
51
+ sqlite3 (1.4.2)
54
52
  thread_safe (0.3.6)
55
53
  thread_safe (0.3.6-java)
56
- tzinfo (1.2.5)
54
+ tzinfo (1.2.6)
57
55
  thread_safe (~> 0.1)
56
+ zeitwerk (2.2.2)
58
57
 
59
58
  PLATFORMS
60
59
  java
61
60
  ruby
62
61
 
63
62
  DEPENDENCIES
64
- activerecord (~> 5.0.1)
63
+ activerecord (~> 6.0.0)
65
64
  activerecord-jdbc-adapter
66
65
  activerecord-jdbcderby-adapter
67
66
  activerecord-jdbcpostgresql-adapter
@@ -73,4 +72,4 @@ DEPENDENCIES
73
72
  sqlite3
74
73
 
75
74
  BUNDLED WITH
76
- 1.16.1
75
+ 1.17.2
@@ -1,3 +1,3 @@
1
1
  eval File.read("#{File.dirname __FILE__}/common.gemfile")
2
2
 
3
- gem 'activerecord', '~>5.0.1'
3
+ gem 'activerecord', '~>6.1.0'
@@ -25,7 +25,7 @@ unless defined?(SKIP_JRUBY)
25
25
  end
26
26
 
27
27
  platform :ruby do
28
- gem 'pg', '<1'
28
+ gem 'pg'
29
29
  gem 'sqlite3'
30
30
  end
31
31
 
@@ -1,19 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'activerecord-time/version'
2
- require 'active_record/version'
3
4
  require 'time_of_day'
4
5
  require 'time_of_day/core_ext'
5
-
6
- # TODO(uwe): Simplify when we stop supporting ActiveRecord 3.2
7
- if ActiveRecord::VERSION::MAJOR < 3 ||
8
- (ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR < 2)
9
- raise 'activerecord-time only supports ActiveRecord 3.2.21 or later'
10
- # TODO(uwe): Simplify when we stop supporting ActiveRecord 4.0 and 4.1
11
- elsif ActiveRecord::VERSION::MAJOR == 3 ||
12
- (ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR <= 1)
13
- require 'activerecord-time/extension_until_4_1'
14
- # TODO(uwe): Simplify when we stop supporting ActiveRecord 4.2
15
- elsif ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR >= 2
16
- require 'activerecord-time/extension_4_2'
17
- elsif ActiveRecord.gem_version >= Gem::Version.new('5.0.0')
18
- require 'activerecord-time/extension_5_0'
19
- end
6
+ require 'activerecord-time/extension'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_record/connection_adapters/abstract/quoting'
2
4
 
3
5
  module Activerecord
@@ -5,11 +7,13 @@ module Activerecord
5
7
  module Quoting
6
8
  def _quote(value)
7
9
  return "'#{value}'" if value.is_a?(TimeOfDay)
10
+
8
11
  super(value)
9
12
  end
10
13
 
11
14
  def _type_cast(value)
12
15
  return value.to_s if value.is_a?(TimeOfDay)
16
+
13
17
  super(value)
14
18
  end
15
19
  end
@@ -26,6 +30,7 @@ module ActiveRecord
26
30
  return value.time_of_day if value.is_a?(::DateTime) || value.is_a?(::Time)
27
31
  return value unless value.is_a?(::String)
28
32
  return if value.empty?
33
+
29
34
  TimeOfDay._parse(value)
30
35
  end
31
36
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Activerecord
2
4
  module Time
3
- VERSION = '0.10.1'.freeze
5
+ VERSION = '0.17.0'
4
6
  end
5
7
  end
data/lib/time_of_day.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
 
3
5
  class TimeOfDay
@@ -8,9 +10,16 @@ class TimeOfDay
8
10
  attr_accessor :second # 0 - 59
9
11
 
10
12
  def initialize(hour, minute = 0, second = 0)
11
- raise "Invalid hour: #{hour}" unless hour >= 0 && hour <= 23
13
+ if hour == 24
14
+ unless minute == 0 && second == 0
15
+ raise "Invalid TimeOfDay. #{hour}:#{minute}:#{second} given, but highest allowed value is 24:00:00"
16
+ end
17
+ else
18
+ raise "Invalid hour: #{hour}" unless hour >= 0 && hour <= 23
19
+ end
12
20
  raise "Invalid minute: #{minute}" unless minute >= 0 && minute <= 59
13
21
  raise "Invalid second: #{second}" unless second >= 0 && second <= 59
22
+
14
23
  @hour = hour
15
24
  @minute = minute
16
25
  @second = second
@@ -32,29 +41,46 @@ class TimeOfDay
32
41
 
33
42
  def self.parse(string)
34
43
  return nil if string.blank?
44
+
35
45
  tod = _parse(string)
36
46
  raise ArgumentError, "Illegal time format: '#{string}'" unless tod
47
+
37
48
  tod
38
49
  end
39
50
 
40
51
  def self._parse(string)
41
52
  parts = parse_parts(string)
42
53
  return unless parts
54
+
43
55
  new(*parts)
44
56
  end
45
57
 
46
58
  def self.parse_parts(string)
47
59
  return nil if string.blank?
48
60
  return unless /^(?<hours>\d{1,2}):?(?<minutes>\d{2})?(?::(?<seconds>\d{1,2}))?$/ =~ string.strip
61
+
49
62
  [hours.to_i, minutes.to_i, seconds.to_i]
50
63
  end
51
64
 
65
+ def acts_like_time?
66
+ true
67
+ end
68
+
69
+ def in_time_zone(*)
70
+ self
71
+ end
72
+
73
+ def to_time
74
+ on Date.today
75
+ end
76
+
52
77
  def on(date)
53
78
  Time.local(date.year, date.month, date.day, hour, minute, second) # rubocop: disable Rails/TimeZone
54
79
  end
55
80
 
56
81
  def +(other)
57
82
  raise "Illegal argument: #{other.inspect}" unless other.is_a? Numeric
83
+
58
84
  t = Time.local(0, 1, 1, hour, minute, second) # rubocop: disable Rails/TimeZone
59
85
  t += other
60
86
  self.class.new(t.hour, t.min, t.sec)
@@ -62,11 +88,13 @@ class TimeOfDay
62
88
 
63
89
  def -(other)
64
90
  raise "Illegal argument: #{other.inspect}" unless other.is_a? Numeric
91
+
65
92
  self.+(-other)
66
93
  end
67
94
 
68
95
  def <=>(other)
69
96
  return -1 unless other
97
+
70
98
  other_tod = if other.is_a?(TimeOfDay)
71
99
  other
72
100
  elsif other.respond_to?(:time_of_day)
@@ -78,8 +106,19 @@ class TimeOfDay
78
106
  to_a <=> [other_tod.hour, other_tod.minute, other_tod.second]
79
107
  end
80
108
 
109
+ # Referring to the same H/M/S makes objects equal.
110
+ # and we only want one hash key.
111
+ def hash
112
+ @hour.hash ^ @minute.hash ^ @second.hash
113
+ end
114
+
115
+ # Referring to the same H/M/S makes objects equal.
116
+ def eql?(other)
117
+ hash == other.hash
118
+ end
119
+
81
120
  def strftime(format)
82
- on(Date.today).strftime(format) # rubocop: disable Rails/Date
121
+ on(Date.today).strftime(format)
83
122
  end
84
123
 
85
124
  def to_s(with_seconds = true)
@@ -92,6 +131,10 @@ class TimeOfDay
92
131
  "#{@hour.inspect}:#{@minute.inspect}:#{@second.inspect}"
93
132
  end
94
133
 
134
+ def inspect
135
+ "#<#{self.class} hour=#{@hour}, minute=#{@minute}, second=#{@second}>"
136
+ end
137
+
95
138
  def to_a
96
139
  [@hour, @minute, @second]
97
140
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'time_of_day'
2
4
 
3
5
  class Time
@@ -6,6 +8,12 @@ class Time
6
8
  end
7
9
  end
8
10
 
11
+ class ActiveSupport::TimeWithZone
12
+ def time_of_day
13
+ TimeOfDay.new(hour, min, sec)
14
+ end
15
+ end
16
+
9
17
  class Date
10
18
  def at(time_of_day)
11
19
  time_of_day = TimeOfDay.parse(time_of_day) if time_of_day.is_a?(String)
@@ -21,6 +29,7 @@ module Kernel
21
29
  unless ints.empty?
22
30
  raise(ArgumentError, 'TimeOfDay() takes a string or multiple integers as arguments')
23
31
  end
32
+
24
33
  TimeOfDay.parse(string_or_int)
25
34
  else
26
35
  TimeOfDay.new(string_or_int, *ints)
data/matrix_test.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby -w
2
+ # frozen_string_literal: true
2
3
 
3
4
  system('rubocop --auto-correct') || exit(1)
4
5
 
@@ -16,6 +17,7 @@ def run_script(ruby, env, gemfile)
16
17
  puts
17
18
  system("chruby-exec #{ruby} -- bundle exec rake") || exit(1)
18
19
  puts '*' * 80
20
+ puts
19
21
  end
20
22
 
21
23
  def use_gemfile(ruby, gemfile, update_gemfiles)
@@ -23,6 +25,7 @@ def use_gemfile(ruby, gemfile, update_gemfiles)
23
25
  puts "Testing #{gemfile}"
24
26
  puts
25
27
  ENV['BUNDLE_GEMFILE'] = gemfile
28
+ system "chruby-exec #{ruby} -- bundle -v"
26
29
  if update_gemfiles
27
30
  system "chruby-exec #{ruby} -- bundle update"
28
31
  else
@@ -33,19 +36,30 @@ def use_gemfile(ruby, gemfile, update_gemfiles)
33
36
  puts '$' * 80
34
37
  end
35
38
 
36
- bad_variants = (travis['matrix']['exclude'].to_a + travis['matrix']['allow_failures'].to_a)
39
+ bad_variants = (travis.dig('matrix', 'exclude').to_a + travis.dig('matrix', 'allow_failures').to_a)
40
+
41
+ travis['env']['global'].each do |env|
42
+ env.scan(/\b(?<key>[A-Z_]+)="(?<value>.+?)"/) do |key, value|
43
+ ENV[key] = value
44
+ end
45
+ end
37
46
 
38
47
  travis['rvm'].each do |ruby|
39
- next if ruby =~ /head/ # ruby-install does not support HEAD installation
48
+ next if /head/.match?(ruby) # ruby-install does not support HEAD installation
49
+
40
50
  puts '#' * 80
41
51
  puts "Testing #{ruby}"
42
52
  puts
43
53
  system "ruby-install --no-reinstall #{ruby}" || exit(1)
44
- bundler_gem_check_cmd = "chruby-exec #{ruby} -- gem query -i -n bundler >/dev/null"
45
- system "#{bundler_gem_check_cmd} || chruby-exec #{ruby} -- gem install bundler" || exit(1)
54
+ bundler_version = '1.17.2'
55
+ gem_cmd = "chruby-exec #{ruby} -- gem"
56
+ system "#{gem_cmd} uninstall --force --all --version '!=#{bundler_version}' bundler"
57
+ bundler_gem_check_cmd = "#{gem_cmd} query -i -n '^bundler$' -v '#{bundler_version}' >/dev/null"
58
+ bundler_install_cmd = "#{gem_cmd} install bundler -v '#{bundler_version}'"
59
+ system "#{bundler_gem_check_cmd} || #{bundler_install_cmd}" || exit(1)
46
60
  travis['gemfile'].each do |gemfile|
47
61
  use_gemfile(ruby, gemfile, update_gemfiles) do
48
- travis['env'].each do |env|
62
+ travis['env']['matrix'].each do |env|
49
63
  bad_variant = bad_variants.any? do |f|
50
64
  (f['rvm'].nil? || f['rvm'] == ruby) &&
51
65
  (f['gemfile'].nil? || f['gemfile'] == gemfile) && (f['env'].nil? || f['env'] == env)