goldman 0.1.2 → 0.1.3

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: 313cb238421a3fb15dc26ca2c6ee4ccb12016fa177ffe50070d34c4e71f5c43b
4
- data.tar.gz: 33440dc517e091c34a781d474eb902e7225e431c99689b7cf4ace6dfa46b2c12
3
+ metadata.gz: c43ad648ae8b70aa4fc9c685d49c4e4a51dfc5fcf8502568591a232f6456f58b
4
+ data.tar.gz: ed94b8ab0a2d8275e4dccba56a85f54e987afad71973086052727c545a92037f
5
5
  SHA512:
6
- metadata.gz: 0b751499deeeb6e35928493b41a559287c04c9933d3be4b6d0e4d9b6c5ab4afa3aff4e0d43efbb34b8dd25f312e1e677b30c0eb73b57f4a9366f3d62a86026dc
7
- data.tar.gz: 9329e65c929da794f4a2da183e34b21dae32e50699659cd449496a3f3345ba6be68ee09646158eb94288acb18800df9c6cae154f9b6635bbded5a9dc97644828
6
+ metadata.gz: a67132dae664ff6501afddcdf2a04098b2e74bb7aabde76422e01b7df80e40d8f02685a7ecb862705f7b848df1e4a8d80f7c050ff87a0cd20623b3f54c2abb7f
7
+ data.tar.gz: b0cbf1313bef97ab2907743aed72b9e7113accf6c009ca21e46d3823cf67fee04a5ef7bad5a42bc16cf5d6b362cc316fee2e10f0815aac4d8f2d44845048966c
data/Rakefile CHANGED
@@ -14,3 +14,21 @@ require "rubocop/rake_task"
14
14
  RuboCop::RakeTask.new
15
15
 
16
16
  task default: %i[test rubocop]
17
+
18
+ namespace "gem" do
19
+ desc "Build a gem package"
20
+ task :build do
21
+ sh "gem build goldman.gemspec"
22
+ end
23
+
24
+ desc "Push a gem package"
25
+ task :push do
26
+ Rake::Task["gem:build"].execute
27
+ sh "gem push goldman-#{Goldman::VERSION}.gem"
28
+ end
29
+
30
+ desc "Clean built gem packages"
31
+ task :clean do
32
+ sh "rm goldman-*.gem"
33
+ end
34
+ end
data/exe/goldman CHANGED
@@ -33,11 +33,14 @@ def error(message)
33
33
  end
34
34
 
35
35
  begin
36
- date_form = Goldman::DateForm.new(@options)
36
+ date_list = Goldman::DateRange.new(start_date_str: @options[:start_date],
37
+ end_date_str: @options[:end_date],
38
+ day_str: @options[:day],
39
+ week_str: @options[:week]).date_list
37
40
  config = Goldman::Config.new(@options[:config])
38
41
  formatter = Goldman::Formatter.new(config)
39
42
  data = Goldman::DataLoader.new(config).data
40
- generator = Goldman::Generator.new(data, formatter, date_form)
43
+ generator = Goldman::Generator.new(data, formatter, date_list)
41
44
 
42
45
  @options.each do |k, v|
43
46
  case k
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "date"
4
+
5
+ module Goldman
6
+ class DateRange
7
+ attr_reader :start_date, :end_date
8
+
9
+ def initialize(start_date_str:, end_date_str:, day_str:, week_str:)
10
+ @week = to_integer!(week_str, "week") || default_week
11
+ @day = to_integer!(day_str, "day") || default_day
12
+ @start_date = to_date!(start_date_str, "start_date") || default_start_date
13
+ @end_date = to_date!(end_date_str, "end_date") || calculate_end_date
14
+ validate!
15
+ end
16
+
17
+ def date_list
18
+ (@start_date..@end_date).to_a
19
+ end
20
+
21
+ private
22
+
23
+ def calculate_end_date
24
+ if @week > 0
25
+ @start_date + @week * 7 - 1
26
+ elsif @day > 0
27
+ @start_date + @day - 1
28
+ else
29
+ nil
30
+ end
31
+ end
32
+
33
+ def validate!
34
+ end_date_err_msg = "The parameter of week (#{@week}) or day (#{@day}) is invalid."
35
+ raise Goldman::ParameterError.new(end_date_err_msg) if @end_date.nil?
36
+
37
+ date_range_err_msg = "The start_date (#{@start_date}) should be before end_date (#{@end_date})."
38
+ raise Goldman::ParameterError.new(date_range_err_msg) if @start_date > @end_date
39
+ end
40
+
41
+ def to_date!(str, source)
42
+ return if str.nil?
43
+
44
+ begin
45
+ Date.parse(str)
46
+ rescue Date::Error, TypeError
47
+ raise Goldman::ParameterError.new("The parameter of #{source} (#{str}) is invalid.")
48
+ end
49
+ end
50
+
51
+ def to_integer!(str, source)
52
+ return if str.nil?
53
+
54
+ begin
55
+ Integer(str)
56
+ rescue ArgumentError, TypeError
57
+ raise Goldman::ParameterError.new("The parameter of #{source} (#{str}) is invalid.")
58
+ end
59
+ end
60
+
61
+ def default_start_date
62
+ Date.today
63
+ end
64
+
65
+ def default_week
66
+ 0
67
+ end
68
+
69
+ def default_day
70
+ 7
71
+ end
72
+ end
73
+ end
@@ -4,16 +4,16 @@ require "date"
4
4
 
5
5
  module Goldman
6
6
  class Generator
7
- def initialize(data, formatter, date_form)
7
+ def initialize(data, formatter, date_list)
8
8
  @data = data
9
9
  @formatter = formatter
10
- @date_form = date_form
10
+ @date_list = date_list
11
11
  end
12
12
 
13
13
  def exec
14
14
  raise Goldman::OperationError.new("No data for schedule. Please define them in the config file.") if @data.empty?
15
15
 
16
- @date_form.range.each do |date|
16
+ @date_list.each do |date|
17
17
  @data[date.cwday]&.each do |time|
18
18
  @formatter.schedule(date, time)
19
19
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Goldman
4
- VERSION = "0.1.2"
4
+ VERSION = "0.1.3"
5
5
 
6
6
  def self.version
7
7
  puts "Goldman version #{VERSION}"
data/lib/goldman.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require_relative "goldman/config"
4
4
  require_relative "goldman/data_loader"
5
- require_relative "goldman/date_form"
5
+ require_relative "goldman/date_range"
6
6
  require_relative "goldman/formatter"
7
7
  require_relative "goldman/generator"
8
8
  require_relative "goldman/version"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: goldman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wei Chen (willsmile)
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-08 00:00:00.000000000 Z
11
+ date: 2023-05-12 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: goldman for generating option list of schedule
14
14
  email:
@@ -29,7 +29,7 @@ files:
29
29
  - lib/goldman.rb
30
30
  - lib/goldman/config.rb
31
31
  - lib/goldman/data_loader.rb
32
- - lib/goldman/date_form.rb
32
+ - lib/goldman/date_range.rb
33
33
  - lib/goldman/formatter.rb
34
34
  - lib/goldman/generator.rb
35
35
  - lib/goldman/version.rb
@@ -1,64 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "date"
4
-
5
- module Goldman
6
- class DateForm
7
- def initialize(options)
8
- @week_num = parse_num!(options[:week], "week")
9
- @day_num = parse_num!(options[:day], "day") || default_day_num
10
- @start_date = parse_date!(options[:start_date], "start_date") || today
11
- @end_date = parse_date!(options[:end_date], "end_date")
12
- validate_end_date!
13
- end
14
-
15
- def range
16
- return @start_date..@end_date if @end_date
17
-
18
- @start_date..(@start_date + interval_day)
19
- end
20
-
21
- def interval_day
22
- return @week_num * 7 - 1 if @week_num
23
-
24
- @day_num - 1
25
- end
26
-
27
- private
28
-
29
- def validate_end_date!
30
- return if @end_date.nil?
31
-
32
- err_msg = "The date in start_date (#{@start_date}) should be before the date in end_date (#{@end_date})."
33
- raise Goldman::ParameterError.new(err_msg) if @start_date > @end_date
34
- end
35
-
36
- def parse_date!(str, source)
37
- return if str.nil?
38
-
39
- begin
40
- Date.parse(str)
41
- rescue Date::Error, TypeError
42
- raise Goldman::ParameterError.new("The parameter of #{source} (#{str}) is invalid.")
43
- end
44
- end
45
-
46
- def parse_num!(str, source)
47
- return if str.nil?
48
-
49
- begin
50
- Integer(str)
51
- rescue ArgumentError, TypeError
52
- raise Goldman::ParameterError.new("The parameter of #{source} (#{str}) is invalid.")
53
- end
54
- end
55
-
56
- def today
57
- Date.today
58
- end
59
-
60
- def default_day_num
61
- 7
62
- end
63
- end
64
- end