ndr_support 5.6.1 → 5.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 78cc28964136a687eb52b6d70fb215b782f4a9dc3689f6781b62281aba3ce7ed
4
- data.tar.gz: b0769e6a9224abedc32b3517f1d26bcc0b8482e587e911960429e94b3fec3a98
3
+ metadata.gz: e06c6fad074bb00f7ba16334d194b9fcf369147688dbd1f22dcd1cca86e71073
4
+ data.tar.gz: 7ede15deb1aec6e6ee02d627437eb7c94810755dbcb717db9212c17c2f09ca3e
5
5
  SHA512:
6
- metadata.gz: 57c36e4153aa9c9c7dc8500d78ddacd19b70ed6ca8a22268c978a2af47e08a054d2ef8451a570ec7d05670f28cab9c92c49d55a3c797442a5440d0b2fd2ed5ee
7
- data.tar.gz: 99d6457af2cfa72b7351c524c0fb19b74846f53b7815b8aa9585b39b3d02ef9f6fb89be4ce4314c072c332d2efb3670ddfdb229a50333557b01626fb877d6416
6
+ metadata.gz: f3b03a27b86891d3cb52dcf3fab222cf3bd42b05cb859918142dd6791a6dc18e5ebba0075911d9d177e7451a5b447b0cf6324455641f913ebb86c78808cf5843
7
+ data.tar.gz: e5d89586818d5a50a1c3211086ce812d485e90b3080c46986be570ec32e7c740f6d5c312a8580ef727243c5910b60d5acd13f8e94276e0fa07dbf922879a9a85
@@ -1,6 +1,10 @@
1
1
  ## [Unreleased]
2
2
  *no unreleased changes*
3
3
 
4
+ ## 5.7.0 / 2020-06-30
5
+ ## Added
6
+ * Handle three char months in Daterange
7
+
4
8
  ## 5.6.1 / 2020-01-02
5
9
  ## Fixed
6
10
  * Fix issue with 2020 public holiday
@@ -16,8 +16,8 @@ file safety:
16
16
  safe_revision: 0cfcfac5ddcd721a67dcd23f04cbf6bc2278b922
17
17
  CHANGELOG.md:
18
18
  comments:
19
- reviewed_by: josh.pencheon
20
- safe_revision: 6d47e4cec0d8384a2bbbf36c544bb386f69f5273
19
+ reviewed_by: ollietulloch
20
+ safe_revision: ce582c10aa4ddddcd22f907d6228cc7bb324a280
21
21
  CODE_OF_CONDUCT.md:
22
22
  comments:
23
23
  reviewed_by: timgentry
@@ -68,8 +68,8 @@ file safety:
68
68
  safe_revision: c1158eccb843b637b4dd82815dc7c081f12b93e4
69
69
  lib/ndr_support/daterange.rb:
70
70
  comments:
71
- reviewed_by: josh.pencheon
72
- safe_revision: 8f18bbaa2cd5dbbf6e40eae2e403e47b589d5e9b
71
+ reviewed_by: ollietulloch
72
+ safe_revision: 9a4b8e53f477725c2c2be5000b3c9e66f07d7389
73
73
  lib/ndr_support/hash.rb:
74
74
  comments:
75
75
  reviewed_by: pauleves
@@ -132,8 +132,8 @@ file safety:
132
132
  safe_revision: 60cc69774d5aff92252558feae9604544def7583
133
133
  lib/ndr_support/string/conversions.rb:
134
134
  comments:
135
- reviewed_by: josh.pencheon
136
- safe_revision: 4a26fe1677b99f8da3a6928c36d6c4c8d6de0cb8
135
+ reviewed_by: ollietulloch
136
+ safe_revision: 9a4b8e53f477725c2c2be5000b3c9e66f07d7389
137
137
  lib/ndr_support/tasks.rb:
138
138
  comments:
139
139
  reviewed_by: timgentry
@@ -160,8 +160,8 @@ file safety:
160
160
  safe_revision: f7adf44fc2772e1926df37abfd9041d41c303328
161
161
  lib/ndr_support/version.rb:
162
162
  comments:
163
- reviewed_by: josh.pencheon
164
- safe_revision: 6d47e4cec0d8384a2bbbf36c544bb386f69f5273
163
+ reviewed_by: ollietulloch
164
+ safe_revision: ce582c10aa4ddddcd22f907d6228cc7bb324a280
165
165
  lib/ndr_support/working_days.rb:
166
166
  comments:
167
167
  reviewed_by: josh.pencheon
@@ -184,8 +184,8 @@ file safety:
184
184
  safe_revision: fe6c3beff445e3c84ed0c89f08e1ab10bfb00587
185
185
  test/daterange_test.rb:
186
186
  comments:
187
- reviewed_by: josh.pencheon
188
- safe_revision: 8f18bbaa2cd5dbbf6e40eae2e403e47b589d5e9b
187
+ reviewed_by: ollietulloch
188
+ safe_revision: 9a4b8e53f477725c2c2be5000b3c9e66f07d7389
189
189
  test/hash_test.rb:
190
190
  comments:
191
191
  reviewed_by: timgentry
@@ -244,8 +244,8 @@ file safety:
244
244
  safe_revision: 60cc69774d5aff92252558feae9604544def7583
245
245
  test/string/conversions_test.rb:
246
246
  comments:
247
- reviewed_by: josh.pencheon
248
- safe_revision: 4a26fe1677b99f8da3a6928c36d6c4c8d6de0cb8
247
+ reviewed_by: ollietulloch
248
+ safe_revision: 9a4b8e53f477725c2c2be5000b3c9e66f07d7389
249
249
  test/test_helper.rb:
250
250
  comments:
251
251
  reviewed_by: josh.pencheon
@@ -135,12 +135,12 @@ class Daterange
135
135
 
136
136
  # Update our attribute values using a string representation of the date(s).
137
137
  # +s+ consists of one or more dates separated with spaces.
138
- # Each date can be in various formats, e.g. d/m/yyyy, ddmmyyyy, yyyy-mm-dd.
139
- # Each date can omit days or months, e.g. yyyy, dd/yyyy, yyyy-mm
138
+ # Each date can be in various formats, e.g. d/m/yyyy, ddmmyyyy, yyyy-mm-dd, dd-mon-yyyy
139
+ # Each date can omit days or months, e.g. yyyy, dd/yyyy, yyyy-mm, mon-yyyy
140
140
  def source=(s)
141
141
  @source = s
142
142
  ss = s.upcase.sub(/TO/, ' ') # accept default _to_s format
143
- if ss =~ /[^0-9\-\/\. ]/ # only allow digits, hyphen, slash, dot, space
143
+ if ss =~ /[^\w0-9\-\/\. ]/i # only allow letters, digits, hyphen, slash, dot, space
144
144
  @date1 = @date2 = nil
145
145
  else
146
146
  da = [] # temporary array of arrays of dates
@@ -184,7 +184,9 @@ class Daterange
184
184
  # e.g year only or year/month only) and return an array of 1..3 integers
185
185
  # representing the year, month and day
186
186
  def date_string_parts(ds)
187
- if ds =~ /([\/\.\-])/ # find a slash or dot or hyphen
187
+ if ds =~ /\A(\d{1,2}[\/\.\-])?\w{3}[\/\.\-]\d{4}\z/i # dd[-/.]mon[-/.]yyyy or mon[-/.]yyyy
188
+ result = handle_three_char_months(ds)
189
+ elsif ds =~ /([\/\.\-])/ # find a slash or dot or hyphen
188
190
  delimiter = $1
189
191
  result = ds.split(delimiter)
190
192
  elsif ds.length == 8 # ddmmyyyy
@@ -200,4 +202,21 @@ class Daterange
200
202
  result.reverse! unless delimiter == '-' # change to YMD if not ISO format
201
203
  result.collect(&:to_i)
202
204
  end
205
+
206
+ def handle_three_char_months(datestring)
207
+ delimiter = datestring.match(%r{[\/\.\-]})[0]
208
+ components = datestring.split(delimiter)
209
+
210
+ if datestring =~ /\A\d{1,2}#{delimiter}\w{3}#{delimiter}\d{4}\z/i
211
+ month = abbreviated_month_index_for(components[1])
212
+ month.nil? ? [] : [components.first, month, components.last]
213
+ elsif datestring =~ /\A\w{3}#{delimiter}\d{4}\z/i
214
+ month = abbreviated_month_index_for(components.first)
215
+ month.nil? ? [] : [month, components.last]
216
+ end
217
+ end
218
+
219
+ def abbreviated_month_index_for(string)
220
+ Date::ABBR_MONTHNAMES.index(string.capitalize)
221
+ end
203
222
  end
@@ -117,7 +117,7 @@ class String
117
117
  year += 100 if year <= Ourdate.today.year % 100
118
118
  year += 1900
119
119
  elsif 9 == length && self =~ /\A\d{2}[^A-Z0-9][A-Z]{3}[^A-Z0-9]\d{2}\z/i
120
- # dd/mmm/yy, rare case.
120
+ # dd/mon/yy, rare case.
121
121
  year += 100 if year <= Ourdate.today.year % 100
122
122
  year += 1900
123
123
  end
@@ -3,5 +3,5 @@
3
3
  # This defines the NdrSupport version. If you change it, rebuild and commit the gem.
4
4
  # Use "rake build" to build the gem, see rake -T for all bundler rake tasks.
5
5
  module NdrSupport
6
- VERSION = '5.6.1'
6
+ VERSION = '5.7.0'
7
7
  end
@@ -226,4 +226,42 @@ class DaterangeTest < Minitest::Test
226
226
  refute_equal dr1, nil
227
227
  refute_equal dr1, 0
228
228
  end
229
+
230
+ def test_three_char_months
231
+ dr1 = Daterange.new('01-APR-2020')
232
+ assert_equal '01.04.2020', dr1.date1.to_s
233
+ assert_equal '01.04.2020', dr1.date2.to_s
234
+
235
+ dr2 = Daterange.new('APR-2020')
236
+ assert_equal '01.04.2020', dr2.date1.to_s
237
+ assert_equal '30.04.2020', dr2.date2.to_s
238
+
239
+ dr3 = Daterange.new('JAN-2020 TO apr-2020')
240
+ assert_equal '01.01.2020', dr3.date1.to_s
241
+ assert_equal '30.04.2020', dr3.date2.to_s
242
+
243
+ dr4 = Daterange.new('20-JAN-2020 TO 12-Apr-2020')
244
+ assert_equal '20.01.2020', dr4.date1.to_s
245
+ assert_equal '12.04.2020', dr4.date2.to_s
246
+
247
+ dr5 = Daterange.new('01-BOB-2020')
248
+ assert_nil dr5.date1
249
+ assert_nil dr5.date2
250
+
251
+ dr6 = Daterange.new('01/APR/2020')
252
+ assert_equal '01.04.2020', dr6.date1.to_s
253
+ assert_equal '01.04.2020', dr6.date2.to_s
254
+
255
+ dr7 = Daterange.new('APR/2020')
256
+ assert_equal '01.04.2020', dr7.date1.to_s
257
+ assert_equal '30.04.2020', dr7.date2.to_s
258
+
259
+ dr8 = Daterange.new('JAN/2020 TO apr.2020')
260
+ assert_equal '01.01.2020', dr8.date1.to_s
261
+ assert_equal '30.04.2020', dr8.date2.to_s
262
+
263
+ dr9 = Daterange.new('20.JAN.2020 TO 12/Apr/2020')
264
+ assert_equal '20.01.2020', dr9.date1.to_s
265
+ assert_equal '12.04.2020', dr9.date2.to_s
266
+ end
229
267
  end
@@ -311,7 +311,7 @@ class String::ConversionsTest < Minitest::Test
311
311
  assert_equal Ourdate.build_datetime(2008, 05, 03), '03/05/08'.to_date
312
312
  end
313
313
 
314
- test 'inferred dd/mmm/yy string to_date' do
314
+ test 'inferred dd/mon/yy string to_date' do
315
315
  # pre_epoch
316
316
  assert_equal Ourdate.build_datetime(1945, 02, 13), '13/FEB/45'.to_date
317
317
  assert_equal Ourdate.build_datetime(1945, 06, 03), '03/JUN/45'.to_date
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ndr_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.6.1
4
+ version: 5.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - NCRS Development Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-02 00:00:00.000000000 Z
11
+ date: 2020-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord