activerecord-time 0.10.1 → 0.17.0

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.
@@ -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)