trading_day_jp 1.0.2 → 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: cea525fccd73e7a559f0d62a23438e6b19be4971
4
- data.tar.gz: 27d2bef15b429b3ec0451cf005be25cacd962d3f
3
+ metadata.gz: 9205b753b14e42d931a01a8d90b46c9cd695e254
4
+ data.tar.gz: 94fa5f305d24b40632138dab2e3d51b859d4cadf
5
5
  SHA512:
6
- metadata.gz: 82a5163801b5040a6749e4b6f32d586882deebf7ed5fbd45358b24db10dc5220dba4a0a246a41fc402e7f1aaaa0dad0c245e71e8b93edbda4621a3c6ff002379
7
- data.tar.gz: ea83499e129fb0040cad615acce03c315a50a7dc085d3fbf8bd9f6917c9317df8581142ee8057b09810b94ff0a97451b8607e1b2932a6c223052cdc87b4b2bab
6
+ metadata.gz: 84d895e9523bf4112b9af8d6163375b25567a65e01017c4135ed2f82a33703e8268d31c9f6209f316dd64217b229108d9fdf868ac997469de6ee208e8d561d63
7
+ data.tar.gz: d2d49ab97d15ab8a3a10ced316fddc703a393cb73fbc3584dcbb89a0019e6a141450510722eb05d7890c8772fc2c823f1fd8228e07ffd578510ea7b140252794
data/README.md CHANGED
@@ -24,19 +24,36 @@ Or install it yourself as:
24
24
  大発会〜大納会のうち、休日及び祝日でない日が該当します。
25
25
 
26
26
  ``` ruby
27
+ # 2014年12月30日は大納会
27
28
  date = Date.new(2014, 12, 30)
28
29
 
29
30
  date.trading_day_jp? # => true
30
31
  TradingDayJp.open?(date) # => true
31
32
 
33
+ # 2014年12月31日は取引日でない
32
34
  date = Date.new(2014, 12, 31)
33
35
 
34
36
  date.trading_day_jp? # => false
35
37
  TradingDayJp.open?(date) # => false
36
38
 
39
+ # 2014年9月23日は秋分の日
37
40
  start = Date.new(2014, 9, 22)
38
41
  last = Date.new(2014, 9, 26)
39
- TradingDayJp.between(start, last) # => [<Date: 2014-09-22>, <Date: 2014-09-24>, <Date: 2014-09-25>, <Date: 2014-09-26>]
42
+
43
+ TradingDayJp.between(start, last)
44
+ # => [<Date: 2014-09-22>, <Date: 2014-09-24>, <Date: 2014-09-25>, <Date: 2014-09-26>]
45
+
46
+ # 2014年6月2日はその月の最初の取引日
47
+ date = Date.new(2014, 6, 10)
48
+
49
+ TradingDayJp.beginning_of_month(date) # => <Date: 2014-06-02>
50
+
51
+ # 2014年8月29日はその月の最後の取引日
52
+ date = Date.new(2014, 8, 10)
53
+
54
+ TradingDayJp.end_of_month(date) # => <Date: 2014-08-29>
55
+
56
+ # 他にもメソッドあります
40
57
  ```
41
58
 
42
59
  ## Contributing
@@ -2,14 +2,109 @@ require "trading_day_jp/date"
2
2
 
3
3
  module TradingDayJp
4
4
 
5
- def self.open?(date)
6
- date.trading_day_jp?
7
- end
5
+ class << self
8
6
 
9
- def self.between(start, last)
10
- (start..last).select do |date|
7
+ def open?(date)
11
8
  date.trading_day_jp?
12
9
  end
10
+
11
+ def next(date)
12
+ loop do
13
+ date = date + 1
14
+
15
+ return date if date.trading_day_jp?
16
+ end
17
+ end
18
+
19
+ def prev(date)
20
+ loop do
21
+ date = date - 1
22
+
23
+ return date if date.trading_day_jp?
24
+ end
25
+ end
26
+
27
+ def between(start, last)
28
+ (start..last).select do |date|
29
+ date.trading_day_jp?
30
+ end
31
+ end
32
+
33
+ def beginning_of_month(date)
34
+ date = Date.new(date.year, date.month)
35
+
36
+ loop do
37
+ return date if date.trading_day_jp?
38
+
39
+ date = date + 1
40
+ end
41
+ end
42
+
43
+ def end_of_month(date)
44
+ date = Date.new(date.year, date.month).next_month - 1
45
+
46
+ loop do
47
+ return date if date.trading_day_jp?
48
+
49
+ date = date - 1
50
+ end
51
+ end
52
+
53
+ def beginning_of_month?(date)
54
+ date == beginning_of_month(date)
55
+ end
56
+
57
+ def end_of_month?(date)
58
+ date == end_of_month(date)
59
+ end
60
+
61
+ def beginning_of_quarter(date)
62
+ if date.month <= 3
63
+ beginning_of_month Date.new(date.year, 1)
64
+ elsif date.month <= 6
65
+ beginning_of_month Date.new(date.year, 4)
66
+ elsif date.month <= 9
67
+ beginning_of_month Date.new(date.year, 7)
68
+ else
69
+ beginning_of_month Date.new(date.year, 10)
70
+ end
71
+ end
72
+
73
+ def end_of_quarter(date)
74
+ if date.month <= 3
75
+ end_of_month Date.new(date.year, 3)
76
+ elsif date.month <= 6
77
+ end_of_month Date.new(date.year, 6)
78
+ elsif date.month <= 9
79
+ end_of_month Date.new(date.year, 9)
80
+ else
81
+ end_of_month Date.new(date.year, 12)
82
+ end
83
+ end
84
+
85
+ def beginning_of_quarter?(date)
86
+ date == beginning_of_quarter(date)
87
+ end
88
+
89
+ def end_of_quarter?(date)
90
+ date == end_of_quarter(date)
91
+ end
92
+
93
+ def beginning_of_year(date)
94
+ self.next(Date.new date.year)
95
+ end
96
+
97
+ def end_of_year(date)
98
+ prev beginning_of_year(Date.new(date.year + 1))
99
+ end
100
+
101
+ def beginning_of_year?(date)
102
+ date == beginning_of_year(date)
103
+ end
104
+
105
+ def end_of_year?(date)
106
+ date == end_of_year(date)
107
+ end
13
108
  end
14
109
 
15
110
  end
@@ -1,3 +1,3 @@
1
1
  module TradingDayJp
2
- VERSION = "1.0.2"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -12,6 +12,30 @@ describe TradingDayJp do
12
12
  end
13
13
  end
14
14
 
15
+ describe '.next' do
16
+ it '次の取引日を取得する' do
17
+ date = Date.new 2014, 2, 10
18
+ next_date = date + 1
19
+ next_trading_day = TradingDayJp.next date
20
+
21
+ expect(next_date.trading_day_jp?).to eq false
22
+ expect(next_trading_day.trading_day_jp?).to eq true
23
+ expect(next_trading_day).to eq Date.new(2014, 2, 12)
24
+ end
25
+ end
26
+
27
+ describe '.prev' do
28
+ it '前の取引日を取得する' do
29
+ date = Date.new 2014, 2, 12
30
+ prev_date = date - 1
31
+ prev_trading_day = TradingDayJp.prev date
32
+
33
+ expect(prev_date.trading_day_jp?).to eq false
34
+ expect(prev_trading_day.trading_day_jp?).to eq true
35
+ expect(prev_trading_day).to eq Date.new(2014, 2, 10)
36
+ end
37
+ end
38
+
15
39
  describe '.between' do
16
40
  it '取引日でない日を含まない' do
17
41
  start = Date.new 2014, 9, 22
@@ -25,4 +49,168 @@ describe TradingDayJp do
25
49
  end
26
50
  end
27
51
 
52
+ describe '.beginning_of_month' do
53
+ it 'その月の最初の取引日を取得する' do
54
+ date = Date.new 2014, 6, 10
55
+
56
+ expect(TradingDayJp.beginning_of_month date).to eq Date.new(2014, 6, 2)
57
+ end
58
+
59
+ context '月初' do
60
+ it do
61
+ date = Date.new 2014, 5, 1
62
+
63
+ expect(TradingDayJp.beginning_of_month date).to eq date
64
+ end
65
+ end
66
+ end
67
+
68
+ describe '.end_of_month' do
69
+ it 'その月の最後の取引日を取得する' do
70
+ date = Date.new 2014, 8, 10
71
+
72
+ expect(TradingDayJp.end_of_month date).to eq Date.new(2014, 8, 29)
73
+ end
74
+
75
+ context '月末' do
76
+ it do
77
+ date = Date.new 2014, 6, 30
78
+
79
+ expect(TradingDayJp.end_of_month date).to eq date
80
+ end
81
+ end
82
+ end
83
+
84
+ describe '.beginning_of_month?' do
85
+ it do
86
+ date = Date.new 2014, 6, 2
87
+
88
+ expect(TradingDayJp.beginning_of_month? date).to eq true
89
+ end
90
+ end
91
+
92
+ describe '.end_of_month?' do
93
+ it do
94
+ date = Date.new 2014, 8, 29
95
+
96
+ expect(TradingDayJp.end_of_month? date).to eq true
97
+ end
98
+ end
99
+
100
+ describe '.beginning_of_quarter' do
101
+ context '3月' do
102
+ it do
103
+ date = Date.new 2014, 3, 1
104
+
105
+ expect(TradingDayJp.beginning_of_quarter date).to eq Date.new(2014, 1, 6)
106
+ end
107
+ end
108
+
109
+ context '6月' do
110
+ it do
111
+ date = Date.new 2014, 6, 1
112
+
113
+ expect(TradingDayJp.beginning_of_quarter date).to eq Date.new(2014, 4, 1)
114
+ end
115
+ end
116
+
117
+ context '9月' do
118
+ it do
119
+ date = Date.new 2014, 9, 1
120
+
121
+ expect(TradingDayJp.beginning_of_quarter date).to eq Date.new(2014, 7, 1)
122
+ end
123
+ end
124
+
125
+ context '12月' do
126
+ it do
127
+ date = Date.new 2014, 12, 1
128
+
129
+ expect(TradingDayJp.beginning_of_quarter date).to eq Date.new(2014, 10, 1)
130
+ end
131
+ end
132
+ end
133
+
134
+ describe '.end_of_quarter' do
135
+ context '1月' do
136
+ it do
137
+ date = Date.new 2014, 1, 1
138
+
139
+ expect(TradingDayJp.end_of_quarter date).to eq Date.new(2014, 3, 31)
140
+ end
141
+ end
142
+
143
+ context '4月' do
144
+ it do
145
+ date = Date.new 2014, 4, 1
146
+
147
+ expect(TradingDayJp.end_of_quarter date).to eq Date.new(2014, 6, 30)
148
+ end
149
+ end
150
+
151
+ context '7月' do
152
+ it do
153
+ date = Date.new 2014, 7, 1
154
+
155
+ expect(TradingDayJp.end_of_quarter date).to eq Date.new(2014, 9, 30)
156
+ end
157
+ end
158
+
159
+ context '10月' do
160
+ it do
161
+ date = Date.new 2014, 10, 1
162
+
163
+ expect(TradingDayJp.end_of_quarter date).to eq Date.new(2014, 12, 30)
164
+ end
165
+ end
166
+ end
167
+
168
+ describe '.beginning_of_quarter?' do
169
+ it do
170
+ date = Date.new 2014, 4, 1
171
+
172
+ expect(TradingDayJp.beginning_of_quarter? date).to eq true
173
+ end
174
+ end
175
+
176
+ describe '.end_of_quarter?' do
177
+ it do
178
+ date = Date.new 2014, 3, 31
179
+
180
+ expect(TradingDayJp.end_of_quarter? date).to eq true
181
+ end
182
+ end
183
+
184
+ describe '.beginning_of_year' do
185
+ it 'その年の最初の取引日を取得する' do
186
+ date = Date.new 2014, 6, 10
187
+
188
+ expect(TradingDayJp.beginning_of_year date).to eq Date.new(2014, 1, 6)
189
+ end
190
+ end
191
+
192
+ describe '.end_of_year' do
193
+ it 'その年の最後の取引日を取得する' do
194
+ date = Date.new 2014, 6, 10
195
+
196
+ expect(TradingDayJp.end_of_year date).to eq Date.new(2014, 12, 30)
197
+ end
198
+ end
199
+
200
+ describe '.beginning_of_year?' do
201
+ it do
202
+ date = Date.new 2014, 1, 6
203
+
204
+ expect(TradingDayJp.beginning_of_year? date).to eq true
205
+ end
206
+ end
207
+
208
+ describe '.end_of_year?' do
209
+ it do
210
+ date = Date.new 2014, 12, 30
211
+
212
+ expect(TradingDayJp.end_of_year? date).to eq true
213
+ end
214
+ end
215
+
28
216
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trading_day_jp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takehiko Shinkura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-19 00:00:00.000000000 Z
11
+ date: 2014-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler