business 2.2.1 → 2.3.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: ecbb66616260ec96ece9868d9eb337e31fc3ffb791caf58b9f05010ebd7354dc
4
- data.tar.gz: 2f13155d38f7fad38db25cbe49378af3166b2c99886379dc2b6c8a2dce7282c6
3
+ metadata.gz: b251f5b883fe268c312d1d85b129f20244ca8729a427784f8e5c0b87681ff646
4
+ data.tar.gz: '05779798d8c21739f31a604b6e46c063f62189b0a7e0a1064e674c1c5fbe9278'
5
5
  SHA512:
6
- metadata.gz: 13c43f3e262bac0402194d0c9bd98cbd5090b38ec2ed7cb25e66087c831127db1c313661672d74fdf4fe26f3073daab0d5377b345d8d71cfd5137173b2192b0d
7
- data.tar.gz: eb039def7aceb3e4936940daaac94e8c2f64c9be8ae92fc776e5c77f3c8f8ceb315a5c6720ecec92c9b5ae7b55ab19dc9752e403d6957bc9cc141ad8a06efad8
6
+ metadata.gz: 7d117a929340ee63c4978d6a0869e3e99fb585c002ac609a9d12d047aee7a96f75fc04f7a03bda894591348d23a3d3f43a32c1e33366d2bdb77d2ce9481c7e21
7
+ data.tar.gz: b2b9acd515306f0460e3e48aa89a0c0296b8bd9eebf9a4b51a4a3731fd94b7096ca521fd50db9ace4ba97bbcb7bb24e17cc6d38c488e6855bc8b34c1d0cd982f
data/.circleci/config.yml CHANGED
@@ -3,7 +3,7 @@ version: 2.1
3
3
  jobs:
4
4
  test:
5
5
  docker:
6
- - image: circleci/ruby:<< parameters.ruby-version >>
6
+ - image: cimg/ruby:<< parameters.ruby-version >>
7
7
  parameters:
8
8
  ruby-version:
9
9
  type: string
@@ -34,4 +34,4 @@ workflows:
34
34
  name: Ruby << matrix.ruby-version >>
35
35
  matrix:
36
36
  parameters:
37
- ruby-version: ["2.4.9", "2.5.8", "2.6.6", "2.7.1"]
37
+ ruby-version: ["2.6.7", "2.7.3", "3.0.1", "3.1.0"]
@@ -0,0 +1,7 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ open-pull-requests-limit: 10
data/.rubocop.yml CHANGED
@@ -11,3 +11,6 @@ Naming/AccessorMethodName:
11
11
 
12
12
  Gemspec/RequiredRubyVersion:
13
13
  Enabled: false
14
+
15
+ Style/HashSyntax:
16
+ Enabled: false
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.7.1
1
+ 3.1.0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## Upcoming
2
+
3
+ ## 2.3.0 - Jan 31, 2022
4
+
5
+ - Added permitted classes to YAML's `safe_load` #112 - thanks @attack
6
+ - Removed support for Ruby 2.4, 2.5
7
+
1
8
  ## 2.2.1 - March 9, 2021
2
9
 
3
10
  - Fix regression on `Calendar#new` #83 - thanks @ineu!
data/business.gemspec CHANGED
@@ -20,8 +20,8 @@ Gem::Specification.new do |spec|
20
20
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_development_dependency "gc_ruboconfig", "~> 2.24.0"
23
+ spec.add_development_dependency "gc_ruboconfig", "~> 2.31.0"
24
24
  spec.add_development_dependency "rspec", "~> 3.1"
25
- spec.add_development_dependency "rspec_junit_formatter", "~> 0.4.1"
26
- spec.add_development_dependency "rubocop", "~> 1.10.0"
25
+ spec.add_development_dependency "rspec_junit_formatter", "~> 0.5.1"
26
+ spec.add_development_dependency "rubocop", "~> 1.25.0"
27
27
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "yaml"
4
4
  require "date"
5
+ require "pathname"
5
6
 
6
7
  module Business
7
8
  class Calendar
@@ -16,7 +17,6 @@ module Business
16
17
  end
17
18
  private_class_method :calendar_directories
18
19
 
19
- # rubocop:disable Metrics/MethodLength
20
20
  def self.load(calendar_name)
21
21
  data = find_calendar_data(calendar_name)
22
22
  raise "No such calendar '#{calendar_name}'" unless data
@@ -32,16 +32,16 @@ module Business
32
32
  extra_working_dates: data["extra_working_dates"],
33
33
  )
34
34
  end
35
- # rubocop:enable Metrics/MethodLength
36
35
 
37
36
  def self.find_calendar_data(calendar_name)
38
37
  calendar_directories.detect do |path|
39
38
  if path.is_a?(Hash)
40
39
  break path[calendar_name] if path[calendar_name]
41
40
  else
42
- next unless File.exist?(File.join(path, "#{calendar_name}.yml"))
41
+ calendar_path = Pathname.new(path).join("#{calendar_name}.yml")
42
+ next unless calendar_path.exist?
43
43
 
44
- break YAML.load_file(File.join(path, "#{calendar_name}.yml"))
44
+ break YAML.safe_load(calendar_path.read, permitted_classes: [Date])
45
45
  end
46
46
  end
47
47
  end
@@ -156,8 +156,6 @@ module Business
156
156
  # Count the number of business days between two dates.
157
157
  # This method counts from start of date1 to start of date2. So,
158
158
  # business_days_between(mon, weds) = 2 (assuming no holidays)
159
- # rubocop:disable Metrics/AbcSize
160
- # rubocop:disable Metrics/MethodLength
161
159
  def business_days_between(date1, date2)
162
160
  date1 = date1.to_date
163
161
  date2 = date2.to_date
@@ -190,8 +188,6 @@ module Business
190
188
  # Loop through each day in remaining_range and count if a business day
191
189
  num_biz_days + remaining_range.count { |a| business_day?(a) }
192
190
  end
193
- # rubocop:enable Metrics/AbcSize
194
- # rubocop:enable Metrics/MethodLength
195
191
 
196
192
  def day_interval_for(date)
197
193
  date.is_a?(Date) ? 1 : 3600 * 24
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Business
4
- VERSION = "2.2.1"
4
+ VERSION = "2.3.0"
5
5
  end
@@ -13,9 +13,9 @@ RSpec.describe Business::Calendar do
13
13
  subject(:load_calendar) { described_class.load(calendar) }
14
14
 
15
15
  let(:dummy_calendar) { { "working_days" => ["monday"] } }
16
+ let(:fixture_path) { File.join(File.dirname(__FILE__), "../fixtures", "calendars") }
16
17
 
17
18
  before do
18
- fixture_path = File.join(File.dirname(__FILE__), "../fixtures", "calendars")
19
19
  described_class.load_paths = [fixture_path, { "foobar" => dummy_calendar }]
20
20
  end
21
21
 
@@ -25,7 +25,10 @@ RSpec.describe Business::Calendar do
25
25
  after { described_class.load_paths = nil }
26
26
 
27
27
  it "loads the yaml file" do
28
- expect(YAML).to receive(:load_file).with(/ecb\.yml$/).and_return({})
28
+ path = Pathname.new(fixture_path).join("ecb.yml")
29
+ expect(YAML).to receive(:safe_load).
30
+ with(path.read, permitted_classes: [Date]).
31
+ and_return({})
29
32
 
30
33
  load_calendar
31
34
  end
@@ -6,7 +6,7 @@ working_days:
6
6
  - friday
7
7
 
8
8
  holidays:
9
- - January 1st, 2013
9
+ - 2013-01-01
10
10
  - March 29th, 2013
11
11
  - April 1st, 2013
12
12
  - May 1st, 2013
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: business
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harry Marr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-09 00:00:00.000000000 Z
11
+ date: 2022-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gc_ruboconfig
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.24.0
19
+ version: 2.31.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.24.0
26
+ version: 2.31.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,28 +44,28 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.4.1
47
+ version: 0.5.1
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.4.1
54
+ version: 0.5.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rubocop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.10.0
61
+ version: 1.25.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.10.0
68
+ version: 1.25.0
69
69
  description: Date calculations based on business calendars
70
70
  email:
71
71
  - developers@gocardless.com
@@ -74,6 +74,7 @@ extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
76
  - ".circleci/config.yml"
77
+ - ".github/dependabot.yml"
77
78
  - ".gitignore"
78
79
  - ".rubocop.yml"
79
80
  - ".ruby-version"
@@ -108,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
109
  - !ruby/object:Gem::Version
109
110
  version: '0'
110
111
  requirements: []
111
- rubygems_version: 3.1.2
112
+ rubygems_version: 3.3.3
112
113
  signing_key:
113
114
  specification_version: 4
114
115
  summary: Date calculations based on business calendars