blackcal 0.1.0 → 0.2.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
  SHA256:
3
- metadata.gz: c49267c5358fa204f01ff7dca6d054f9725ae17bf3d20217bb8fcad773cca9c1
4
- data.tar.gz: f52d729090a6c7c7274219c4461516eddcbdb7e50ada790922c886bf767a4209
3
+ metadata.gz: c23e691a5c3523795779efef15fe053f74136c0f0c1ce61acd8a57f8b988f761
4
+ data.tar.gz: 631199640ed9b4af0c913ae4a8b6c54ec11d5b3098996dcc0dedcac7dfb3c1e5
5
5
  SHA512:
6
- metadata.gz: 3632b757a25e37ff7b90833ccde7d2fe0cce9195aa4382d027265a234e35db828e4af1cfadddc71508ea0a3567d7cad6f02ac9a4805e0016effd6e8569c3de4d
7
- data.tar.gz: 775091c9427f3655f319063a6eac010fff45004362ee9577504222a88905ffe31201d7d5a67d73586afc3d88dad3615c7dc311a91b1d2c3d59f0911956758e57
6
+ metadata.gz: 15d610fec732303f9ea7badd1f8139298cb1161bdabf1baf6cee2c355a11cd826f3544747e7baa9159afed3818e83ae06d7fa32a68df7a4612c573e7daa49e27
7
+ data.tar.gz: 1792395fc246472ca622b39920c67f5829d911f1431c8853c1697ab7d380fba6bc278af3a4c24c21f73d579d6019e3f89f2b58c6bef5eefa8299513944f474f0
data/.gitignore CHANGED
@@ -11,3 +11,4 @@
11
11
  .rspec_status
12
12
 
13
13
  .byebug_history
14
+ Gemfile.lock
data/CHANGELOG.md ADDED
@@ -0,0 +1,11 @@
1
+ # Change Log
2
+
3
+ # v0.2.0
4
+
5
+ * Add `Blackcal::schedule`
6
+
7
+ ---
8
+
9
+ ## v0.1.0
10
+
11
+ Is history..
data/README.md CHANGED
@@ -22,16 +22,16 @@ Or install it yourself as:
22
22
 
23
23
  Schedule Mondays and Tuesdays
24
24
  ```ruby
25
- schedule = Blackcal::Schedule.new(weekdays: [:monday, :tuesday])
25
+ schedule = Blackcal.schedule(weekdays: [:monday, :tuesday])
26
26
  schedule.cover?('2019-01-01 19:00')
27
27
  # => false
28
28
  schedule.cover?('2019-01-02 11:00')
29
29
  # => true
30
30
  ```
31
31
 
32
- Schedule between 18pm and 7am every day
32
+ Schedule between 6pm and 7am every day
33
33
  ```ruby
34
- schedule = Blackcal::Schedule.new(start_hour: 18, finish_hour: 7)
34
+ schedule = Blackcal.schedule(start_hour: 18, finish_hour: 7)
35
35
  schedule.cover?('2019-01-01 19:00')
36
36
  # => false
37
37
  schedule.cover?('2019-01-01 11:00')
@@ -40,34 +40,35 @@ schedule.cover?('2019-01-01 11:00')
40
40
 
41
41
  Schedule day 15 and 17 of month
42
42
  ```ruby
43
- schedule = Blackcal::Schedule.new(days: [15, 17])
43
+ schedule = Blackcal.schedule(days: [15, 17])
44
44
  schedule.cover?('2019-01-15 19:00')
45
45
  # => false
46
46
  schedule.cover?('2019-01-01 11:00')
47
47
  # => true
48
48
  ```
49
49
 
50
- All options at once - schedule Tuesdays, day 15-25, between 18pm and 7am every day
50
+ All options at once - schedule January, Mondays and Tuesdays, day 15-25, between 18pm and 7am
51
51
  ```ruby
52
- schedule = Blackcal::Schedule.new(
52
+ schedule = Blackcal.schedule(
53
+ months: [:january],
53
54
  weekdays: [:monday, :tuesday],
54
55
  start_hour: 18, finish_hour: 7,
55
56
  days: (15..25).to_a
56
57
  )
57
58
  schedule.cover?('2019-01-15 19:00')
58
59
  # => false
59
- schedule.cover?('2019-01-01 11:00')
60
+ schedule.cover?('2019-02-01 11:00')
60
61
  # => true
61
62
  ```
62
63
 
63
64
  Define when the schedule is active
64
65
  ```ruby
65
- Blackcal::Schedule.new(start_time: '2018-01-01 11:00', finish_time: '2019-01-01 11:00')
66
+ Blackcal.schedule(start_time: '2018-01-01 11:00', finish_time: '2019-01-01 11:00')
66
67
  ```
67
68
 
68
69
  Matrix representation
69
70
  ```ruby
70
- schedule = Blackcal::Schedule.new(weekdays: :friday, start_hour: 10, finish_hour: 14)
71
+ schedule = Blackcal.schedule(weekdays: :friday, start_hour: 10, finish_hour: 14)
71
72
  schedule.to_matrix(start_date: '2018-09-14', finish_date: '2018-09-16')
72
73
  # => [[true, ...], [true, ...]]
73
74
  ```
File without changes
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blackcal
4
+ # Month range
5
+ class MonthRange
6
+ MONTH_MAP = {
7
+ january: 1,
8
+ february: 2,
9
+ march: 3,
10
+ april: 4,
11
+ may: 5,
12
+ june: 6,
13
+ july: 7,
14
+ august: 8,
15
+ september: 9,
16
+ october: 10,
17
+ november: 11,
18
+ december: 12,
19
+ }.freeze
20
+
21
+ # @return [Array<Symbol>] months in range
22
+ attr_reader :months
23
+
24
+ # Initialize month range
25
+ # @param [Array<String>, Array<Symbol>, String, Symbol, nil] months
26
+ # @example
27
+ # MonthRange.new(:january)
28
+ # @example
29
+ # MonthRange.new([:december, :january])
30
+ def initialize(months)
31
+ @months = Array(months).map(&:to_sym) if months
32
+ end
33
+
34
+ # Returns true if it covers timestamp
35
+ # @return [Boolean]
36
+ def cover?(timestamp)
37
+ return false if @months.nil? || @months.empty?
38
+
39
+ months.any? do |month|
40
+ MONTH_MAP.fetch(month) == timestamp.month
41
+ end
42
+ end
43
+ end
44
+ end
File without changes
@@ -2,10 +2,11 @@
2
2
 
3
3
  require 'time'
4
4
 
5
- require 'blackcal/time_range'
6
- require 'blackcal/time_of_day_range'
7
- require 'blackcal/weekday_range'
8
- require 'blackcal/day_range'
5
+ require 'blackcal/range/time_range'
6
+ require 'blackcal/range/time_of_day_range'
7
+ require 'blackcal/range/weekday_range'
8
+ require 'blackcal/range/month_range'
9
+ require 'blackcal/range/day_range'
9
10
  require 'blackcal/slot_matrix'
10
11
 
11
12
  module Blackcal
@@ -16,6 +17,7 @@ module Blackcal
16
17
  # @param finish_time [Time, Date, String, nil]
17
18
  # @param start_hour [Integer, nil]
18
19
  # @param finish_hour [Integer, nil]
20
+ # @param months [Array<String>, Array<Symbol>, String, Symbol, nil]
19
21
  # @param weekdays [Array<String>, Array<Symbol>, String, Symbol, nil]
20
22
  # @param days [Array<Integer>, Integer, nil]
21
23
  def initialize(
@@ -23,12 +25,14 @@ module Blackcal
23
25
  finish_time: nil,
24
26
  start_hour: nil,
25
27
  finish_hour: nil,
28
+ months: nil,
26
29
  weekdays: nil,
27
30
  # weeks_of_month: nil, # TODO
28
31
  days: nil
29
32
  )
30
33
  @rule_range = TimeRange.new(parse_time(start_time), parse_time(finish_time)) if start_time || finish_time # rubocop:disable Metrics/LineLength
31
34
  @time_of_day = TimeOfDayRange.new(start_hour, finish_hour) if start_hour || finish_hour # rubocop:disable Metrics/LineLength
35
+ @months = MonthRange.new(months) if months
32
36
  @weekdays = WeekdayRange.new(weekdays) if weekdays
33
37
  @days = DayRange.new(days) if days
34
38
  end
@@ -40,7 +44,7 @@ module Blackcal
40
44
  timestamp = parse_time(timestamp)
41
45
  return true if @rule_range && !@rule_range.cover?(timestamp)
42
46
 
43
- [@weekdays, @days, @time_of_day].each do |range|
47
+ [@months, @weekdays, @days, @time_of_day].each do |range|
44
48
  return true if range && !range.cover?(timestamp)
45
49
  end
46
50
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blackcal
4
- VERSION = '0.1.0'.freeze
4
+ VERSION = '0.2.0'.freeze
5
5
  end
data/lib/blackcal.rb CHANGED
@@ -5,4 +5,10 @@ require 'blackcal/schedule'
5
5
 
6
6
  # Main module
7
7
  module Blackcal
8
+ # Initialize schedule
9
+ # @return [Schedule]
10
+ # @see Schedule#initialize
11
+ def self.schedule(**keyword_args)
12
+ Schedule.new(**keyword_args)
13
+ end
8
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blackcal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob Burenstam
@@ -79,8 +79,8 @@ files:
79
79
  - ".rubocop.yml"
80
80
  - ".ruby-style-guide.yml"
81
81
  - ".travis.yml"
82
+ - CHANGELOG.md
82
83
  - Gemfile
83
- - Gemfile.lock
84
84
  - LICENSE.txt
85
85
  - README.md
86
86
  - Rakefile
@@ -88,13 +88,14 @@ files:
88
88
  - bin/setup
89
89
  - blackcal.gemspec
90
90
  - lib/blackcal.rb
91
- - lib/blackcal/day_range.rb
91
+ - lib/blackcal/range/day_range.rb
92
+ - lib/blackcal/range/month_range.rb
93
+ - lib/blackcal/range/time_of_day_range.rb
94
+ - lib/blackcal/range/time_range.rb
95
+ - lib/blackcal/range/weekday_range.rb
92
96
  - lib/blackcal/schedule.rb
93
97
  - lib/blackcal/slot_matrix.rb
94
- - lib/blackcal/time_of_day_range.rb
95
- - lib/blackcal/time_range.rb
96
98
  - lib/blackcal/version.rb
97
- - lib/blackcal/weekday_range.rb
98
99
  homepage: https://github.com/buren/blackcal
99
100
  licenses:
100
101
  - MIT
data/Gemfile.lock DELETED
@@ -1,37 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- blackcal (0.1.0)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- byebug (10.0.2)
10
- diff-lcs (1.3)
11
- rake (10.5.0)
12
- rspec (3.8.0)
13
- rspec-core (~> 3.8.0)
14
- rspec-expectations (~> 3.8.0)
15
- rspec-mocks (~> 3.8.0)
16
- rspec-core (3.8.0)
17
- rspec-support (~> 3.8.0)
18
- rspec-expectations (3.8.1)
19
- diff-lcs (>= 1.2.0, < 2.0)
20
- rspec-support (~> 3.8.0)
21
- rspec-mocks (3.8.0)
22
- diff-lcs (>= 1.2.0, < 2.0)
23
- rspec-support (~> 3.8.0)
24
- rspec-support (3.8.0)
25
-
26
- PLATFORMS
27
- ruby
28
-
29
- DEPENDENCIES
30
- blackcal!
31
- bundler (~> 1.16)
32
- byebug
33
- rake (~> 10.0)
34
- rspec (~> 3.0)
35
-
36
- BUNDLED WITH
37
- 1.16.2