ruby-rails-extensions 2.1.0 → 2.1.2.pre.pre.pre.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3445f7f15fe0a736b52ccbaa2f176fd017b2b5fe0b58e42115a9a4d003599b32
4
- data.tar.gz: 66ea1200362e7c25c1cb88496ac0273ba960a4ed3ed24d6ab8027fe867b0e014
3
+ metadata.gz: 583296f66df2e8c559b9a853ceaa84ad89c121beafeec7344fd36ea74a38f27c
4
+ data.tar.gz: f3695aa98a9132b58c4db6bf26c76a5262ea67edd433637da0ff17128520353c
5
5
  SHA512:
6
- metadata.gz: 15599ad4fc3f8a9d17fa9d3ceefca301d91a257fc79763cd29a46ef52664278a8e947b4bd717b33f54fe3434a67c45c2debfaba209717bc808c4b1c4242660a6
7
- data.tar.gz: 8a01c3eae7ecd21bc27fcfe34302a2dd33946e5b213037e4b41ce29a3c03241e2a17f058f1967b474485ef36617ccba5d01088b540487b13d4bafc8201c6c1d0
6
+ metadata.gz: 067e780771b6b58b8e864bd9d048aefc6ed7232406fab5a91c012c3edbd53d2bbbfd73f836fba2484f7bdd69a867283c6fee9058adda612ebeb70a1c9941a861
7
+ data.tar.gz: 42b38bf305a57adbd52be3ce294ce7ee3107d1a0b7aafa5413f41b205f20d431e627234c44ef8fa0895e641944ea5646b49fcae7eed828268efc7647d3a26e95
data/CHANGELOG.md CHANGED
@@ -1,7 +1,17 @@
1
1
  Unreleased Changes
2
2
  ------------------
3
3
 
4
- 2.1.0 (Unreleased)
4
+ 2.1.2 (2025-01-13)
5
+ ------------------
6
+
7
+ * Fix bad regex in `to_new_time` for no am/pm
8
+
9
+ 2.1.1 (2024-10-11)
10
+ ------------------
11
+
12
+ * Fix bad `2.1.0` publish
13
+
14
+ 2.1.0 (2024-10-11)
5
15
  ------------------
6
16
 
7
17
  * Modules added:
@@ -19,6 +29,7 @@ Unreleased Changes
19
29
  * `Time#quarter_str` and `DateTime#quarter_str`
20
30
  * `String#to_new_date`, `String#to_new_date_safe`, and `String#to_new_date_mm_yy`
21
31
  * `String#cutoff`
32
+ * `String#to_new_time`
22
33
  * Other changes:
23
34
  * Initial test framework added
24
35
  * Initial benchmark framework added
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StringToNewTime
4
+ NEW_TIME_REGEXES = {
5
+ # Supports: 9:00am, 12:15 pm, 10:12am
6
+ hh_mm_p: /^(1[0-2]|0?[1-9]).([0-5]?[0-9])(.?[AaPp][Mm])$/i,
7
+ # Supports: 16:0, 23:23, 01:00
8
+ hh_mm: /^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$/i,
9
+ # Supports: 1p, 12a, 5a, 9p
10
+ h_p: /^[0-1][0-9]?(.?[AaPp][Mm]?)?$/i
11
+ }.freeze
12
+
13
+ # Converts a string to a date object when following one of the
14
+ # following patterns (no space delimiters):
15
+ # - HH:MM AM/PM
16
+ # - HH:MM (24 hour)
17
+ # - HH AM/PM
18
+ #
19
+ # @param options [Hash]
20
+ #
21
+ # @option options [Integer] :year Year to use as the base time object.
22
+ # This will default to today's year.
23
+ #
24
+ # @option options [Integer] :month Month to use as the base time object.
25
+ # This will default to today's month.
26
+ #
27
+ # @option options [Integer] :day Day to use as the base time object.
28
+ # This will default to today's day.
29
+ #
30
+ # @return [Date, String, nil]
31
+ #
32
+ def to_new_time(options = {})
33
+ opts = options || {}
34
+ today = Date.today
35
+ year = opts.fetch(:year, today.year)
36
+ month = opts.fetch(:month, today.month)
37
+ day = opts.fetch(:day, today.day)
38
+ parts = extract_time
39
+
40
+ Time.use_zone(RubyRailsExtensions.configuration.default_time_zone || 'Eastern Time (US & Canada)') do
41
+ # Use {Time#parse} as there is no `Time.zone.new` method
42
+ Time.zone.parse("#{year}-#{month}-#{day} #{parts[:hour]}:#{parts[:minute]} #{parts[:ampm]}")
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ # Checks the string for any supported format,
49
+ # then converts the string time parts.
50
+ #
51
+ # @return [Hash, nil]
52
+ #
53
+ def extract_time
54
+ key = NEW_TIME_REGEXES.find { |_key, value| match?(value) }&.first
55
+
56
+ return if key.nil?
57
+
58
+ __send__(:"#{key}_time")
59
+ end
60
+
61
+ # @return [Hash]
62
+ def hh_mm_p_time
63
+ parts = scan(NEW_TIME_REGEXES[:hh_mm_p])
64
+
65
+ parts.flatten!
66
+
67
+ parts.map!(&:strip)
68
+
69
+ hour, min, ampm = parts
70
+
71
+ {
72
+ hour: hour,
73
+ minute: min,
74
+ second: 0,
75
+ ampm: ampm
76
+ }
77
+ end
78
+
79
+ # @return [Hash]
80
+ def hh_mm_time
81
+ parts = scan(NEW_TIME_REGEXES[:hh_mm])
82
+
83
+ parts.flatten!
84
+
85
+ parts.map!(&:strip)
86
+
87
+ hour, min = parts
88
+
89
+ {
90
+ hour: hour,
91
+ minute: min,
92
+ second: 0,
93
+ ampm: nil
94
+ }
95
+ end
96
+
97
+ # @return [Hash]
98
+ def h_p_time
99
+ {
100
+ hour: gsub(/[apm]/i, ''),
101
+ minute: 0,
102
+ second: 0,
103
+ ampm: match?(/a/i) ? 'am' : 'pm'
104
+ }
105
+ end
106
+ end
107
+
108
+ String.class_eval do
109
+ include StringToNewTime
110
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyRailsExtensions
4
- VERSION = '2.1.0'
4
+ VERSION = '2.1.2-pre-1'
5
5
  end
@@ -63,6 +63,7 @@ module RubyRailsExtensions
63
63
  to_money
64
64
  to_negative_i
65
65
  to_new_date
66
+ to_new_time
66
67
  to_nonzero_i
67
68
  to_or_sentence
68
69
  to_percentage
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-rails-extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.2.pre.pre.pre.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brands Insurance
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-11 00:00:00.000000000 Z
11
+ date: 2025-01-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -77,6 +77,7 @@ files:
77
77
  - lib/ruby-rails-extensions/extensions/to_money.rb
78
78
  - lib/ruby-rails-extensions/extensions/to_negative_i.rb
79
79
  - lib/ruby-rails-extensions/extensions/to_new_date.rb
80
+ - lib/ruby-rails-extensions/extensions/to_new_time.rb
80
81
  - lib/ruby-rails-extensions/extensions/to_nonzero_i.rb
81
82
  - lib/ruby-rails-extensions/extensions/to_or_sentence.rb
82
83
  - lib/ruby-rails-extensions/extensions/to_percentage.rb
@@ -109,9 +110,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
110
  version: 3.0.1
110
111
  required_rubygems_version: !ruby/object:Gem::Requirement
111
112
  requirements:
112
- - - ">="
113
+ - - ">"
113
114
  - !ruby/object:Gem::Version
114
- version: '0'
115
+ version: 1.3.1
115
116
  requirements: []
116
117
  rubygems_version: 3.2.15
117
118
  signing_key: