trading_day_jp 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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