work_day 1.0.1 → 1.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 21d50aa093439ef7e32a14eb8c858b3f6a6e9d16
4
- data.tar.gz: a41a3f371aa76ebfbf6eea560fd8a8e39ca92f54
3
+ metadata.gz: 5ad2e90243c135cdf7a6f7435370a29813ff9f49
4
+ data.tar.gz: b3f3cfb88d70229f837ccffc1d08b21bcd3e7b8f
5
5
  SHA512:
6
- metadata.gz: 58ebd92aee207b27534b5239427fb2c8afde29e51c0392f2c486637a4a930972856020a7ac650e804f2fd6020740d0a325d4e52b02cdb01e7170601875d04227
7
- data.tar.gz: 6b97c360f0859aecb989fb745af5e31a67918c309c5e7897bcc8b87e665d02686652ba67dad100c3d84074f3b209e968b2407f234cb88b5a38f5d65faa669750
6
+ metadata.gz: 66865b24e8e13099f91d1d3044ceba82bcdc4a7d091bdcecfdf4edb28decb852db802ee05e0347b9be29f76f60867feb7f3f1bca53e8b5a0e88d5f726942c5df
7
+ data.tar.gz: 721b82d582cfd2f9f71197ba4422658805cd9a3c700a6e2bc8ec0830959bea603fcd3d1bc4e9ad82bbbf2d622a135eeffb0312459fa13a27b65283186d35c5c4
data/CHANGELOG.md CHANGED
@@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.1.0] - 2018-08-29
10
+ ### Added
11
+ - Feature to use diferent calendars in a block
12
+ - Thread safety
13
+
9
14
  ## [1.0.0] - 2018-03-27
10
15
  ### Added
11
16
  - Feature for foreign calendars
data/README.md CHANGED
@@ -111,12 +111,25 @@ Thu, 10 Jan 2013]
111
111
  Pode ser utilizado mais de um calendário ao mesmo tempo
112
112
  Calendários disponíveis london, new_york e brazil
113
113
 
114
+ ###### Configurando os calendários default
115
+
116
+ ```ruby
117
+ > WorkDay.calendars(['london', 'new_york'])
118
+ > WorkDay.work_day?("2018-05-28")
119
+ => false
120
+ ```
121
+
122
+ ###### Usando calendários apenas em um bloco específico (ex.: por request)
123
+
114
124
  ```ruby
115
- > wd = WorkDay.new(['london', 'new_york'])
116
- > wd.work_day?("2018-05-28")
125
+ > WorkDay.calendars(['new_york'])
126
+ > WorkDay.work_day?("2018-07-04")
117
127
  => false
128
+ > WorkDay.use_calendars('london') { WorkDay.work_day?("2018-07-04") }
129
+ => true
118
130
  ```
119
131
 
132
+
120
133
  ## License
121
134
 
122
135
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class WorkDay
4
- VERSION = '1.0.1'
4
+ VERSION = '1.1.0'
5
5
  end
data/lib/work_day.rb CHANGED
@@ -6,10 +6,13 @@ require 'active_support/core_ext'
6
6
 
7
7
  class WorkDay
8
8
  include Singleton
9
- attr_accessor :calendars
10
9
 
11
- def self.calendars(calendars)
12
- instance.calendars = calendars
10
+ def calendars
11
+ Thread.current[:work_day_calendars]
12
+ end
13
+
14
+ def calendars=(new_calendars)
15
+ Thread.current[:work_day_calendars] = new_calendars
13
16
  end
14
17
 
15
18
  def work_day?(date)
@@ -37,29 +40,31 @@ class WorkDay
37
40
  end
38
41
 
39
42
  def between(start_date, end_date)
40
- (start_date.to_date..end_date.to_date).select { |date| work_day?(date) }
41
- end
42
-
43
- def self.work_day?(date)
44
- WorkDay.instance.work_day?(date)
43
+ (start_date.to_date..end_date.to_date).select(&method(:work_day?))
45
44
  end
46
45
 
47
- def self.last_until(date, days = 0)
48
- WorkDay.instance.last_until(date, days)
46
+ def use_calendars(*new_calendars)
47
+ old_calendars = calendars
48
+ self.calendars = new_calendars
49
+ yield
50
+ ensure
51
+ self.calendars = old_calendars
49
52
  end
50
53
 
51
- def self.next_after(date, days = 1)
52
- WorkDay.instance.next_after(date, days)
53
- end
54
+ class << self
55
+ delegate :work_day?, :last_until, :next_after, :between,
56
+ :calendars=, :use_calendars, to: :instance
54
57
 
55
- def self.between(start_date, end_date)
56
- WorkDay.instance.between(start_date, end_date)
58
+ # TODO: remove in favor of #calendars=. Requires major version upgrade.
59
+ def calendars(new_calendars)
60
+ self.calendars = new_calendars
61
+ end
57
62
  end
58
63
 
59
64
  private
60
65
 
61
66
  def holidays_in(year)
62
- @calendars ||= ['brazil']
67
+ self.calendars ||= ['brazil']
63
68
  @holidays ||= {}
64
69
  @holidays[calendars] ||= {}
65
70
  @holidays[calendars][year] ||= Holiday.new(calendars).in(year)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: work_day
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adriano Bacha
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-25 00:00:00.000000000 Z
11
+ date: 2018-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -96,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
96
  version: '0'
97
97
  requirements: []
98
98
  rubyforge_project:
99
- rubygems_version: 2.4.8
99
+ rubygems_version: 2.6.8
100
100
  signing_key:
101
101
  specification_version: 4
102
102
  summary: work days