ruby_calendar 0.0.2 → 1.0.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 +4 -4
- data/.rubocop.yml +45 -3
- data/.rubocop_todo.yml +0 -0
- data/CHANGELOG.md +13 -2
- data/README.md +58 -22
- data/lib/ruby_calendar/calendar.rb +43 -71
- data/lib/ruby_calendar/month.rb +20 -0
- data/lib/ruby_calendar/version.rb +1 -1
- data/lib/ruby_calendar/year.rb +43 -0
- data/lib/ruby_calendar.rb +5 -3
- data/ruby_calendar.gemspec +3 -3
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f96346081a190002a3559eea6c5f6c4c3686f52582ff8e2a34b5f384f902e03
|
4
|
+
data.tar.gz: d81ac7c027998558e4500d55efbb68545bf7d9478f1daf2f790ee8a733f8d212
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7e5d49d0d22f0ab03e324504e970322c1811a29f5106bf39f4f3340cf31da57827db8c02ef474a1df687df45227b3827f4c3179c4a826e0caf9a6317da6e7d0
|
7
|
+
data.tar.gz: fb7cf0d34589dd45329078a85a369bf26b62a0b2bb2bc652d783921b24092402e6ff8dadf01049baf76801d7ec2d6f4fa39445ce89d83cb5d1e9975a9b35689c
|
data/.rubocop.yml
CHANGED
@@ -1,5 +1,46 @@
|
|
1
|
+
inherit_from: .rubocop_todo.yml
|
2
|
+
|
1
3
|
AllCops:
|
2
|
-
|
4
|
+
SuggestExtensions: false
|
5
|
+
|
6
|
+
Documentation:
|
7
|
+
Enabled: false
|
8
|
+
|
9
|
+
Gemspec/RequiredRubyVersion:
|
10
|
+
Description: 'Checks that `required_ruby_version` of gemspec is specified and equal to `TargetRubyVersion` of .rubocop.yml.'
|
11
|
+
Enabled: true
|
12
|
+
VersionAdded: '0.52'
|
13
|
+
VersionChanged: '1.22'
|
14
|
+
Include:
|
15
|
+
- '**/*.gemspec'
|
16
|
+
|
17
|
+
Layout/LineLength:
|
18
|
+
Max: 120
|
19
|
+
|
20
|
+
Metrics/AbcSize:
|
21
|
+
Max: 100
|
22
|
+
|
23
|
+
Metrics/BlockLength:
|
24
|
+
Exclude:
|
25
|
+
- 'spec/**/*'
|
26
|
+
|
27
|
+
Metrics/CyclomaticComplexity:
|
28
|
+
Max: 15
|
29
|
+
|
30
|
+
Metrics/MethodLength:
|
31
|
+
Max: 30
|
32
|
+
|
33
|
+
Metrics/PerceivedComplexity:
|
34
|
+
Max: 15
|
35
|
+
|
36
|
+
Naming/AccessorMethodName:
|
37
|
+
Exclude:
|
38
|
+
- 'lib/ruby_calendar/calendar.rb'
|
39
|
+
|
40
|
+
Naming/MethodParameterName:
|
41
|
+
Exclude:
|
42
|
+
- 'lib/ruby_calendar/month.rb'
|
43
|
+
- 'lib/ruby_calendar/year.rb'
|
3
44
|
|
4
45
|
Style/StringLiterals:
|
5
46
|
Enabled: true
|
@@ -9,5 +50,6 @@ Style/StringLiteralsInInterpolation:
|
|
9
50
|
Enabled: true
|
10
51
|
EnforcedStyle: double_quotes
|
11
52
|
|
12
|
-
|
13
|
-
|
53
|
+
Style/OptionalBooleanParameter:
|
54
|
+
Exclude:
|
55
|
+
- 'lib/ruby_calendar/calendar.rb'
|
data/.rubocop_todo.yml
ADDED
File without changes
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
|
-
## [
|
1
|
+
## [1.0.0] - 2022-1-16
|
2
2
|
|
3
|
-
|
3
|
+
- Renewal module #4
|
4
|
+
- Add spec, rubocop #5
|
5
|
+
- Add GitHub workflow #6
|
6
|
+
- Change inisialize value(calendar class) #7
|
7
|
+
|
8
|
+
## [0.0.2] - 2021-10-13
|
9
|
+
|
10
|
+
- Fixed gemspec #2
|
11
|
+
- Change method #3
|
12
|
+
- Add year method
|
13
|
+
|
14
|
+
## [0.0.1] - 2021-09-15
|
4
15
|
|
5
16
|
- Initial release
|
data/README.md
CHANGED
@@ -17,8 +17,8 @@ $ gem install ruby_calendar
|
|
17
17
|
* Output calendars
|
18
18
|
|
19
19
|
```ruby
|
20
|
-
calendar = RubyCalendar::Calendar.new
|
21
|
-
puts calendar.month
|
20
|
+
calendar = RubyCalendar::Calendar.new(2021, 1)
|
21
|
+
puts calendar.month
|
22
22
|
# January 2021
|
23
23
|
# Su Mo Tu We Th Fr Sa
|
24
24
|
# 1 2
|
@@ -30,36 +30,72 @@ puts calendar.month(2021,1)
|
|
30
30
|
# => nil
|
31
31
|
```
|
32
32
|
|
33
|
-
##
|
33
|
+
## Setting calendar methods
|
34
34
|
|
35
|
-
###
|
35
|
+
### set_year()
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
It specifies the year for which the calendar is displayed.
|
38
|
+
- default values
|
39
|
+
- year: Date.today.year
|
40
|
+
- month: Date.today.month
|
41
|
+
- firstweekday: 0
|
40
42
|
|
41
|
-
|
43
|
+
Change by giving a number to the argument.
|
44
|
+
|
45
|
+
ex) 2021 -> 2022.
|
46
|
+
```ruby
|
47
|
+
calendar = RubyCalendar::Calendar.new(2021, 1)
|
48
|
+
# => #<RubyCalendar::Calendar:0x00007f9a58161788 @year=2021, @month=1, @firstweekday=0>
|
49
|
+
calendar.set_year(2022)
|
50
|
+
# => #<RubyCalendar::Calendar:0x00007f9a58161788 @year=2022, @month=1, @firstweekday=0>
|
51
|
+
```
|
42
52
|
|
53
|
+
### set_month()
|
43
54
|
|
44
|
-
|
55
|
+
It specifies the month to display(month method) the monthly calendar(default: January).
|
56
|
+
Change by giving a number to the argument.
|
45
57
|
|
58
|
+
ex) 1(January) -> 1(December).
|
46
59
|
```ruby
|
47
|
-
|
48
|
-
|
49
|
-
|
60
|
+
calendar = RubyCalendar::Calendar.new(2021, 1)
|
61
|
+
# => #<RubyCalendar::Calendar:0x00007f9a58161788 @year=2021, @month=1, @firstweekday=0>
|
62
|
+
calendar.set_month(12)
|
63
|
+
# => #<RubyCalendar::Calendar:0x00007f9a58149598 @year=2021, @month=12, @firstweekday=0>
|
64
|
+
```
|
50
65
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
#
|
60
|
-
|
66
|
+
### set_firstweekday()
|
67
|
+
|
68
|
+
It specifies the beginning of the week(default: Sunday).
|
69
|
+
Change by giving a number to the argument.
|
70
|
+
|
71
|
+
ex) 0(Sunday) -> 1(Monday).
|
72
|
+
```ruby
|
73
|
+
calendar = RubyCalendar::Calendar.new(2021, 1)
|
74
|
+
# => #<RubyCalendar::Calendar:0x00007f9a58132460 @year=2021, @month=1, @firstweekday=0>
|
75
|
+
calendar.set_firstweekday(1)
|
76
|
+
# => #<RubyCalendar::Calendar:0x00007f9a58132460 @year=2021, @month=1, @firstweekday=1>
|
61
77
|
```
|
62
78
|
|
79
|
+
## Output calendar methods
|
80
|
+
|
81
|
+
### month(year, month, w:0, l:0)
|
82
|
+
|
83
|
+
Return a month’s calendar in a multi-line string.
|
84
|
+
|
85
|
+
- The following keyword arguments can be used.
|
86
|
+
- w: it specifies the width of the date columns which are centered(default: 0).
|
87
|
+
- l: it specifies the number of lines that each week will use(default: 0).
|
88
|
+
|
89
|
+
### year(year, w:0, l:0, c:6, m:3)
|
90
|
+
|
91
|
+
Return a year’s calendar in a multi-line string.
|
92
|
+
|
93
|
+
- The following keyword arguments can be used.
|
94
|
+
- w: it specifies the width of the date columns which are centered(default: 0).
|
95
|
+
- l: it specifies the number of lines that each week will use(default: 0).
|
96
|
+
- c: it specifies the monthly calendar interval(default: 6).
|
97
|
+
- m: it specifies the number of months to display on one line(default: 3).
|
98
|
+
|
63
99
|
## Contributing
|
64
100
|
|
65
101
|
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/ruby_calendar. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/saku888/ruby-calendar/blob/master/CODE_OF_CONDUCT.md).
|
@@ -1,82 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "ruby_calendar/month"
|
4
|
+
require "ruby_calendar/year"
|
5
|
+
|
1
6
|
module RubyCalendar
|
2
7
|
class Calendar
|
8
|
+
include RubyCalendar::Month
|
9
|
+
include RubyCalendar::Year
|
10
|
+
|
3
11
|
attr_accessor :firstweekday
|
4
12
|
|
5
13
|
WEEK_DAY_NAME = %w[Sunday Monday Tuesday Wednesday Thursday Friday Saturday].freeze
|
6
|
-
MONTH_NAMES = %w[January February March April May June July August September October November December].freeze
|
7
14
|
|
8
|
-
def initialize
|
9
|
-
@
|
15
|
+
def initialize(year = today_year, month = today_month, firstweekday: 0)
|
16
|
+
@year = year
|
17
|
+
@month = month
|
18
|
+
@firstweekday = firstweekday
|
10
19
|
end
|
11
20
|
|
12
|
-
def
|
13
|
-
@
|
21
|
+
def set_year(year)
|
22
|
+
@year = year
|
23
|
+
self
|
14
24
|
end
|
15
25
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
19
|
-
s = format_month_name(year, month, 7*(w+1)-1)
|
20
|
-
s = s.rstrip
|
21
|
-
s += "\n" * l
|
22
|
-
s += format_week_header(w).rstrip
|
23
|
-
s += "\n" * l
|
24
|
-
month_days_calendar(year, month).each_slice(7).to_a.each do |week|
|
25
|
-
s += format_week_name(week, w).rstrip
|
26
|
-
s += "\n" * l
|
27
|
-
end
|
28
|
-
s
|
26
|
+
def set_month(month)
|
27
|
+
@month = month
|
28
|
+
self
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
34
|
-
c = [2, c].max
|
35
|
-
colwidth = 7*(w+1)-1
|
36
|
-
a = []
|
37
|
-
a.push(year.to_s.center(colwidth*m+c*(m-1)).rstrip)
|
38
|
-
a.push("\n"*l)
|
39
|
-
header = format_week_header(w)
|
40
|
-
MONTH_NAMES.each_slice(m).to_a.each do |months|
|
41
|
-
a.push(months.map{|month| format_month_name(year, month_to_i(month), colwidth, false) << (' '*c)}.join.rstrip)
|
42
|
-
a.push("\n"*l)
|
43
|
-
a.push(months.map{format_week_header(w) << (' '*c)}.join.rstrip)
|
44
|
-
a.push("\n"*l)
|
45
|
-
month_array = months.map{|month| month_days_calendar(year, month_to_i(month))}
|
46
|
-
slice_month_array = month_array.map{|array| array.each_slice(7).to_a}
|
47
|
-
max_element_count = slice_month_array.map{|array| array.length}.max - 1
|
48
|
-
replace_array = []
|
49
|
-
for num in 0..max_element_count do
|
50
|
-
replace_array.push(slice_month_array.map {|array| array[num].nil? ? [] : array[num]})
|
51
|
-
end
|
52
|
-
replace_array.each do |weeks|
|
53
|
-
a.push(weeks.map{|week| format_week_name(week, w) << (' '*c)}.join.rstrip)
|
54
|
-
a.push("\n"*l)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
a
|
31
|
+
def set_firstweekday(firstweekday)
|
32
|
+
@firstweekday = firstweekday
|
33
|
+
self
|
58
34
|
end
|
59
35
|
|
60
36
|
private
|
61
37
|
|
62
|
-
def
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
def localized_day(format)
|
67
|
-
days = []
|
68
|
-
for i in 1..7 do
|
69
|
-
days << (Date.new(2001,1,i).strftime(format))
|
70
|
-
end
|
71
|
-
days
|
38
|
+
def today_year
|
39
|
+
Date.today.year
|
72
40
|
end
|
73
41
|
|
74
|
-
def
|
75
|
-
|
76
|
-
s.center(width)
|
42
|
+
def today_month
|
43
|
+
Date.today.month
|
77
44
|
end
|
78
45
|
|
79
|
-
def format_month_name(year, month, width, withyear=true)
|
46
|
+
def format_month_name(year, month, width, withyear = true)
|
80
47
|
if withyear
|
81
48
|
Date.new(year, month).strftime("%B #{year}").center(width)
|
82
49
|
else
|
@@ -85,34 +52,39 @@ module RubyCalendar
|
|
85
52
|
end
|
86
53
|
|
87
54
|
def format_week_header(width)
|
88
|
-
format_week_day(width).map{|day| day.center(width) }.join(
|
55
|
+
format_week_day(width).map { |day| day.center(width) }.join(" ")
|
89
56
|
end
|
90
57
|
|
91
|
-
def
|
92
|
-
|
93
|
-
|
94
|
-
names
|
58
|
+
def format_week_name(week, width)
|
59
|
+
if week.empty?
|
60
|
+
Array.new(7) { 0 }.map { |day| format_day(day, width) }.join(" ")
|
95
61
|
else
|
96
|
-
|
62
|
+
week.map { |day| format_day(day, width) }.join(" ")
|
97
63
|
end
|
98
64
|
end
|
99
65
|
|
66
|
+
def format_day(day, width)
|
67
|
+
s = day.zero? ? "" : day.to_s.rjust(2)
|
68
|
+
s.center(width)
|
69
|
+
end
|
70
|
+
|
100
71
|
def month_days_calendar(year, month)
|
101
72
|
firstday_wday = (Date.new(year, month, 1).wday - @firstweekday) % 7
|
102
73
|
lastday_date = Date.new(year, month, -1).day
|
103
74
|
lastday_wday = (6 + @firstweekday - Date.new(year, month, -1).wday) % 7
|
104
75
|
|
105
|
-
days = Array.new(firstday_wday){0}
|
76
|
+
days = Array.new(firstday_wday) { 0 }
|
106
77
|
days.push(*1..lastday_date)
|
107
|
-
lastday_wday.times{ days.push(0) }
|
78
|
+
lastday_wday.times { days.push(0) }
|
108
79
|
days
|
109
80
|
end
|
110
81
|
|
111
|
-
def
|
112
|
-
|
113
|
-
|
82
|
+
def format_week_day(width)
|
83
|
+
names = WEEK_DAY_NAME.rotate(@firstweekday)
|
84
|
+
if width >= 9
|
85
|
+
names
|
114
86
|
else
|
115
|
-
|
87
|
+
names.map { |name| name.slice(0, [3, width].min) }
|
116
88
|
end
|
117
89
|
end
|
118
90
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyCalendar
|
4
|
+
module Month
|
5
|
+
def month(year = @year, month = @month, w: 0, l: 0)
|
6
|
+
w = [2, w].max
|
7
|
+
l = [1, l].max
|
8
|
+
s = format_month_name(year, month, 7 * (w + 1) - 1)
|
9
|
+
s = s.rstrip
|
10
|
+
s += "\n" * l
|
11
|
+
s += format_week_header(w).rstrip
|
12
|
+
s += "\n" * l
|
13
|
+
month_days_calendar(year, month).each_slice(7).to_a.each do |week|
|
14
|
+
s += format_week_name(week, w).rstrip
|
15
|
+
s += "\n" * l
|
16
|
+
end
|
17
|
+
s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyCalendar
|
4
|
+
module Year
|
5
|
+
MONTH_NAMES = %w[January February March April May June July August September October November December].freeze
|
6
|
+
|
7
|
+
def year(year = @year, w: 2, l: 1, c: 6, m: 3)
|
8
|
+
w = [2, w].max
|
9
|
+
l = [1, l].max
|
10
|
+
c = [2, c].max
|
11
|
+
colwidth = 7 * (w + 1) - 1
|
12
|
+
calendar = []
|
13
|
+
calendar.push(year.to_s.center(colwidth * m + c * (m - 1)).rstrip)
|
14
|
+
calendar.push("\n" * l)
|
15
|
+
MONTH_NAMES.each_slice(m).to_a.each do |months|
|
16
|
+
calendar.push(months.map do |month|
|
17
|
+
format_month_name(year, month_to_i(month), colwidth, false) << (" " * c)
|
18
|
+
end.join.rstrip)
|
19
|
+
calendar.push("\n" * l)
|
20
|
+
calendar.push(months.map { format_week_header(w) << (" " * c) }.join.rstrip)
|
21
|
+
calendar.push("\n" * l)
|
22
|
+
month_array = months.map { |month| month_days_calendar(year, month_to_i(month)) }
|
23
|
+
slice_month_array = month_array.map { |array| array.each_slice(7).to_a }
|
24
|
+
max_element_count = slice_month_array.map(&:length).max - 1
|
25
|
+
replace_array = []
|
26
|
+
(0..max_element_count).each do |num|
|
27
|
+
replace_array.push(slice_month_array.map { |array| array[num].nil? ? [] : array[num] })
|
28
|
+
end
|
29
|
+
replace_array.each do |weeks|
|
30
|
+
calendar.push(weeks.map { |week| format_week_name(week, w) << (" " * c) }.join.rstrip)
|
31
|
+
calendar.push("\n" * l)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
calendar.join.to_s
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def month_to_i(month)
|
40
|
+
MONTH_NAMES.index(month) + 1
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/ruby_calendar.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "date"
|
4
|
+
require "ruby_calendar/calendar"
|
5
|
+
require "ruby_calendar/version"
|
4
6
|
|
5
7
|
module RubyCalendar
|
6
8
|
class Error < StandardError; end
|
data/ruby_calendar.gemspec
CHANGED
@@ -8,11 +8,11 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.authors = ["saku888"]
|
9
9
|
spec.email = ["sakura.orn888@gmail.com"]
|
10
10
|
|
11
|
-
spec.summary =
|
12
|
-
spec.description =
|
11
|
+
spec.summary = "This is a calender of gem"
|
12
|
+
spec.description = "This gem produces a calendar output similar to the Unix cal program"
|
13
13
|
spec.homepage = "https://github.com/saku888/ruby-calendar"
|
14
14
|
spec.license = "MIT"
|
15
|
-
spec.required_ruby_version = ">= 2.
|
15
|
+
spec.required_ruby_version = ">= 2.5.0"
|
16
16
|
|
17
17
|
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
18
18
|
spec.metadata["homepage_uri"] = spec.homepage
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_calendar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- saku888
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: This gem produces a calendar output similar to the Unix cal program
|
14
14
|
email:
|
@@ -19,6 +19,7 @@ extra_rdoc_files: []
|
|
19
19
|
files:
|
20
20
|
- ".rspec"
|
21
21
|
- ".rubocop.yml"
|
22
|
+
- ".rubocop_todo.yml"
|
22
23
|
- CHANGELOG.md
|
23
24
|
- CODE_OF_CONDUCT.md
|
24
25
|
- Gemfile
|
@@ -30,7 +31,9 @@ files:
|
|
30
31
|
- bin/setup
|
31
32
|
- lib/ruby_calendar.rb
|
32
33
|
- lib/ruby_calendar/calendar.rb
|
34
|
+
- lib/ruby_calendar/month.rb
|
33
35
|
- lib/ruby_calendar/version.rb
|
36
|
+
- lib/ruby_calendar/year.rb
|
34
37
|
- ruby_calendar.gemspec
|
35
38
|
homepage: https://github.com/saku888/ruby-calendar
|
36
39
|
licenses:
|
@@ -48,7 +51,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
48
51
|
requirements:
|
49
52
|
- - ">="
|
50
53
|
- !ruby/object:Gem::Version
|
51
|
-
version: 2.
|
54
|
+
version: 2.5.0
|
52
55
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
56
|
requirements:
|
54
57
|
- - ">="
|