ruby_calendar 0.0.1 → 0.0.2
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/Gemfile.lock +1 -1
- data/README.md +3 -3
- data/lib/ruby_calendar/calendar.rb +49 -4
- data/lib/ruby_calendar/version.rb +1 -1
- data/ruby_calendar.gemspec +4 -5
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6048b0b0dfc52fb9363ec4759390f68da7194378f601df9b81c2f17a18476957
|
4
|
+
data.tar.gz: 0b33bbd7beb16225d2808679a607ef34ccab1ee8dfe646493d6bf3b989133e21
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4dcc5f5d57e772f9baa753601ebc31976e1f1365996f81673ec370023a66a922a186d401b90be5415cd5f3af1ad0bca6c7836679d380fe4e136ca328ca94c668
|
7
|
+
data.tar.gz: b1b77df11e7cf6b51ff4a50d94a6663257358608df19ed5ed50f3bb897d9bb824e9736df8c99c0a9c34bc5da35fc3011c761b9b4008d492f4a9cb3827f9aad3a
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -18,7 +18,7 @@ $ gem install ruby_calendar
|
|
18
18
|
|
19
19
|
```ruby
|
20
20
|
calendar = RubyCalendar::Calendar.new
|
21
|
-
puts calendar.
|
21
|
+
puts calendar.month(2021,1)
|
22
22
|
# January 2021
|
23
23
|
# Su Mo Tu We Th Fr Sa
|
24
24
|
# 1 2
|
@@ -32,7 +32,7 @@ puts calendar.format_month(2021,1)
|
|
32
32
|
|
33
33
|
## Calendar class methods
|
34
34
|
|
35
|
-
###
|
35
|
+
### month(year, month, w=0, l=0)
|
36
36
|
|
37
37
|
Return a month’s calendar in a multi-line string.
|
38
38
|
* w: it specifies the width of the date columns which are centered(default: 0).
|
@@ -49,7 +49,7 @@ calendar = RubyCalendar::Calendar.new
|
|
49
49
|
# => #<RubyCalendar::Calendar:0x00007fd334b9c0d0 @firstweekday=0>
|
50
50
|
|
51
51
|
calendar.set_firstweekday(1) # set the first day of the week to Monday
|
52
|
-
puts calendar.
|
52
|
+
puts calendar.month(2021,1)
|
53
53
|
# January 2021
|
54
54
|
# Mo Tu We Th Fr Sa Su
|
55
55
|
# 1 2 3
|
@@ -3,6 +3,7 @@ module RubyCalendar
|
|
3
3
|
attr_accessor :firstweekday
|
4
4
|
|
5
5
|
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
|
6
7
|
|
7
8
|
def initialize
|
8
9
|
@firstweekday = 0
|
@@ -12,7 +13,7 @@ module RubyCalendar
|
|
12
13
|
@firstweekday = firstweekday
|
13
14
|
end
|
14
15
|
|
15
|
-
def
|
16
|
+
def month(year, month, w=0, l=0)
|
16
17
|
w = [2, w].max
|
17
18
|
l = [1, l].max
|
18
19
|
s = format_month_name(year, month, 7*(w+1)-1)
|
@@ -27,8 +28,41 @@ module RubyCalendar
|
|
27
28
|
s
|
28
29
|
end
|
29
30
|
|
31
|
+
def calendar(year, w=2, l=1, c=6, m=3)
|
32
|
+
w = [2, w].max
|
33
|
+
l = [1, l].max
|
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
|
58
|
+
end
|
59
|
+
|
30
60
|
private
|
31
61
|
|
62
|
+
def month_to_i(month)
|
63
|
+
MONTH_NAMES.index(month)+1
|
64
|
+
end
|
65
|
+
|
32
66
|
def localized_day(format)
|
33
67
|
days = []
|
34
68
|
for i in 1..7 do
|
@@ -42,8 +76,12 @@ module RubyCalendar
|
|
42
76
|
s.center(width)
|
43
77
|
end
|
44
78
|
|
45
|
-
def format_month_name(year, month, width)
|
46
|
-
|
79
|
+
def format_month_name(year, month, width, withyear=true)
|
80
|
+
if withyear
|
81
|
+
Date.new(year, month).strftime("%B #{year}").center(width)
|
82
|
+
else
|
83
|
+
Date.new(year, month).strftime("%B").center(width)
|
84
|
+
end
|
47
85
|
end
|
48
86
|
|
49
87
|
def format_week_header(width)
|
@@ -62,13 +100,20 @@ module RubyCalendar
|
|
62
100
|
def month_days_calendar(year, month)
|
63
101
|
firstday_wday = (Date.new(year, month, 1).wday - @firstweekday) % 7
|
64
102
|
lastday_date = Date.new(year, month, -1).day
|
103
|
+
lastday_wday = (6 + @firstweekday - Date.new(year, month, -1).wday) % 7
|
65
104
|
|
66
105
|
days = Array.new(firstday_wday){0}
|
67
106
|
days.push(*1..lastday_date)
|
107
|
+
lastday_wday.times{ days.push(0) }
|
108
|
+
days
|
68
109
|
end
|
69
110
|
|
70
111
|
def format_week_name(week, width)
|
71
|
-
week.
|
112
|
+
if week.empty?
|
113
|
+
Array.new(7){0}.map{|day| format_day(day, width)}.join(' ')
|
114
|
+
else
|
115
|
+
week.map{|day| format_day(day, width)}.join(' ')
|
116
|
+
end
|
72
117
|
end
|
73
118
|
end
|
74
119
|
end
|
data/ruby_calendar.gemspec
CHANGED
@@ -5,20 +5,19 @@ require_relative "lib/ruby_calendar/version"
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "ruby_calendar"
|
7
7
|
spec.version = RubyCalendar::VERSION
|
8
|
-
spec.authors = ["
|
8
|
+
spec.authors = ["saku888"]
|
9
9
|
spec.email = ["sakura.orn888@gmail.com"]
|
10
10
|
|
11
11
|
spec.summary = %q{This is a calender of gem}
|
12
12
|
spec.description = %q{This gem produces a calendar output similar to the Unix cal program}
|
13
|
-
spec.homepage = "https://github.com/
|
13
|
+
spec.homepage = "https://github.com/saku888/ruby-calendar"
|
14
14
|
spec.license = "MIT"
|
15
15
|
spec.required_ruby_version = ">= 2.4.0"
|
16
16
|
|
17
17
|
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
18
|
-
|
19
18
|
spec.metadata["homepage_uri"] = spec.homepage
|
20
|
-
spec.metadata["source_code_uri"] = "https://github.com/
|
21
|
-
spec.metadata["changelog_uri"] = "https://github.com/
|
19
|
+
spec.metadata["source_code_uri"] = "https://github.com/saku888/ruby-calendar"
|
20
|
+
spec.metadata["changelog_uri"] = "https://github.com/saku888/ruby-calendar/blob/master/CHANGELOG.md"
|
22
21
|
|
23
22
|
# Specify which files should be added to the gem when it is released.
|
24
23
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
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: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- saku888
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-13 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:
|
@@ -32,14 +32,14 @@ files:
|
|
32
32
|
- lib/ruby_calendar/calendar.rb
|
33
33
|
- lib/ruby_calendar/version.rb
|
34
34
|
- ruby_calendar.gemspec
|
35
|
-
homepage: https://github.com/
|
35
|
+
homepage: https://github.com/saku888/ruby-calendar
|
36
36
|
licenses:
|
37
37
|
- MIT
|
38
38
|
metadata:
|
39
39
|
allowed_push_host: https://rubygems.org
|
40
|
-
homepage_uri: https://github.com/
|
41
|
-
source_code_uri: https://github.com/
|
42
|
-
changelog_uri: https://github.com/
|
40
|
+
homepage_uri: https://github.com/saku888/ruby-calendar
|
41
|
+
source_code_uri: https://github.com/saku888/ruby-calendar
|
42
|
+
changelog_uri: https://github.com/saku888/ruby-calendar/blob/master/CHANGELOG.md
|
43
43
|
post_install_message:
|
44
44
|
rdoc_options: []
|
45
45
|
require_paths:
|