age_jp 0.0.2 → 0.0.5

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: f44fd45916598f53ce0643a6a201317d91dc9235
4
- data.tar.gz: bb9b82d8350e2f186f47376bad6d071350406be9
3
+ metadata.gz: 6272b2d23018dac1ebbc09e95fba7451b5252577
4
+ data.tar.gz: 0d3539915128036711c665758edff451347cebcb
5
5
  SHA512:
6
- metadata.gz: 271b86089eb0341b1e3e98fd991595d0d1980155dc750078e6affdca72bfcad1f2baa75bd5d9ea65364305289cbab41619acdbc2a88ec615ddc37ddecc114b7a
7
- data.tar.gz: 147d692c51cdce49cba2a29d64f1d37eb67ec9d18c6f90f449086c62cae4bad548f405cdea713d1d53c275e2f0e8772ab8a8fe375ad6b65b6a75cdab0612949c
6
+ metadata.gz: 5abce402708d389e45665bccf2bb9399d64bf8ea659fc75a22378d0ad4f499ee2940c22d7b9a0ce4ca8e362800c3bb676d1fd7076066ce4ee9c378d0f2124d7f
7
+ data.tar.gz: 546cf36d8c61e9a0133f117fbe81fb394a4a2419c1bd9d71ee416d1556d93930be2c54b7e663bc0b40a691609243eee7c8d14fc92adfbe40ecf2f323f8cc97be
data/.gitignore CHANGED
@@ -1 +1,16 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
1
15
  *.sw*
16
+ .rspec
data/README.md CHANGED
@@ -27,14 +27,16 @@ Or install it yourself as:
27
27
  Timecop.freeze(Time.new(2014, 12, 31))
28
28
 
29
29
  birthday = Date.new(2000, 1, 1)
30
- birthday.age # 14 (通常の年齢)
31
- birthday.age_at(date) # same as birthday.age_at(Date.today)
32
- birthday.age_jp # 15 (日本の法律準拠)
33
- birthday.age_jp_at(date) # same as birthday.age_jp_at(Date.today)
34
- birthday.east_asian_age_reckoning # 15 (数え年)
35
- birthday.east_asian_age_reckoning_at(date) # same as birthday.east_asian_age_reckoning_at(Date.today)
36
- birthday.to_years_old(17) # 2017/01/01. 17歳の誕生日を返却
37
- birthday.to_years_old_jp(17) # 2016/12/31. 17歳の年齢加算日(日本の法律準拠)を返却
30
+ birthday.age # 14 (通常の年齢)
31
+ birthday.age_at(Date.today) # same as birthday.age_at
32
+ birthday.age_jp # 15 (日本の法律準拠)
33
+ birthday.age_jp_at(Date.today) # same as birthday.age_jp_at
34
+ birthday.east_asian_age_reckoning # 15 (数え年)
35
+ birthday.east_asian_age_reckoning_at(Date.today) # same as birthday.east_asian_age_reckoning_at
36
+ birthday.insurance_age # 14 (保険年齢)
37
+ birthday.insurance_age_at(Date.today) # same as birthday.insurance_age_at
38
+ birthday.to_years_old(17) # 2017/01/01. 17歳の誕生日を返却
39
+ birthday.to_years_old_jp(17) # 2016/12/31. 17歳の年齢加算日(日本の法律準拠)を返却
38
40
  ```
39
41
 
40
42
  ## Contributing
data/age_jp.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "activesupport"
21
+ spec.add_dependency "activesupport", '>= 3.2'
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.7"
24
24
  spec.add_development_dependency "rake", "~> 10.0"
@@ -4,50 +4,64 @@ module AgeJp
4
4
  @birthday = birthday
5
5
  end
6
6
 
7
- def age
8
- return unless valid_birthday?
9
-
10
- calculate_age(today)
11
- end
12
-
13
- def age_at(date)
7
+ def age_at(date = today)
14
8
  return unless valid_birthday? && valid_date?(date)
15
9
 
16
10
  calculate_age(date)
17
11
  end
18
12
 
19
- def age_jp
20
- return unless valid_birthday?
21
-
22
- calculate_age_jp(today)
23
- end
24
-
25
- def age_jp_at(date)
13
+ def age_jp_at(date = today)
26
14
  return unless valid_birthday? && valid_date?(date)
27
15
 
28
16
  calculate_age_jp(date)
29
17
  end
30
18
 
31
- def east_asian_age_reckoning
32
- return unless valid_birthday?
19
+ def east_asian_age_reckoning_at(date = today)
20
+ return unless valid_birthday? && valid_date?(date)
33
21
 
34
- age = calculate_age(today)
35
- until_birthday_this_year?(today) ? age + 2 : age + 1
22
+ age = calculate_age(date)
23
+ until_birthday_this_year?(date) ? age + 2 : age + 1
36
24
  end
37
25
 
38
- def east_asian_age_reckoning_at(date)
26
+ def insurance_age_at(date = today)
39
27
  return unless valid_birthday? && valid_date?(date)
40
28
 
29
+ # date時点での満年齢を取得
41
30
  age = calculate_age(date)
42
- until_birthday_this_year?(date) ? age + 2 : age + 1
31
+
32
+ # その年齢に到達した誕生日を取得
33
+ last_birthday = @birthday.next_year(age)
34
+
35
+ # 前回の誕生日から計算基準日までの月差分を取得
36
+ month_diff = (date.year * 12 + date.month) - (last_birthday.year * 12 + last_birthday.month)
37
+
38
+ # 月差分だけlast_birthdayをmonths_sinceした日付と、dateを比較し、month_diffの値を調整する
39
+ # ex)
40
+ # - last_birthday: 1/25
41
+ # - date: 2/15
42
+ # の場合、month_diffは、1だが、実際には0ヶ月差分としたい
43
+ # - last_birthday.months_since(month_diff) => 2/25
44
+ # として、date < last_birthday.months_since(month_diff) の場合は、month_diff -= 1 を月差分とする
45
+ #
46
+ # last_birthday date month_diff months_since後 adjusted_month_diff
47
+ # 2/25 2/27 0 2/25 0
48
+ # 2/25 3/1 1 3/25 0
49
+ # 2/25 3/27 1 3/25 1
50
+ # 2/25 4/1 2 4/25 1
51
+ # 2/25 4/27 2 4/25 2
52
+ month_diff -= 1 if date < last_birthday.months_since(month_diff)
53
+
54
+ age += 1 if month_diff > 6
55
+
56
+ age
43
57
  end
44
58
 
59
+ private
60
+
45
61
  def today
46
62
  Date.today
47
63
  end
48
64
 
49
- private
50
-
51
65
  def calculate_age_jp(date)
52
66
  # 誕生日が閏日の場合は、日本の民法ではdateが閏年であろうとなかろうと、2/28に年齢加算される
53
67
  # つまり、誕生日が閏日 かつ dateが2/27の場合は、閏年であろうと無かろうと、年齢加算しない
@@ -75,7 +89,7 @@ module AgeJp
75
89
  end
76
90
 
77
91
  def valid_date?(date)
78
- raise ArgumentError, 'invalid date' unless date && date.is_a?(Date)
92
+ fail ArgumentError, 'invalid date' unless date && date.is_a?(Date)
79
93
  true
80
94
  end
81
95
 
@@ -1,6 +1,6 @@
1
1
  class Date
2
2
  def age
3
- AgeJp::Calculator.new(self).age
3
+ AgeJp::Calculator.new(self).age_at
4
4
  end
5
5
 
6
6
  def age_at(date)
@@ -8,7 +8,7 @@ class Date
8
8
  end
9
9
 
10
10
  def age_jp
11
- AgeJp::Calculator.new(self).age_jp
11
+ AgeJp::Calculator.new(self).age_jp_at
12
12
  end
13
13
 
14
14
  def age_jp_at(date)
@@ -16,13 +16,21 @@ class Date
16
16
  end
17
17
 
18
18
  def east_asian_age_reckoning
19
- AgeJp::Calculator.new(self).east_asian_age_reckoning
19
+ AgeJp::Calculator.new(self).east_asian_age_reckoning_at
20
20
  end
21
21
 
22
22
  def east_asian_age_reckoning_at(date)
23
23
  AgeJp::Calculator.new(self).east_asian_age_reckoning_at(date)
24
24
  end
25
25
 
26
+ def insurance_age
27
+ AgeJp::Calculator.new(self).insurance_age_at
28
+ end
29
+
30
+ def insurance_age_at(date)
31
+ AgeJp::Calculator.new(self).insurance_age_at(date)
32
+ end
33
+
26
34
  alias_method :to_years_old, :next_year
27
35
 
28
36
  def to_years_old_jp(n)
@@ -1,3 +1,3 @@
1
1
  module AgeJp
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.5"
3
3
  end
data/spec/age_jp_spec.rb CHANGED
@@ -76,6 +76,14 @@ describe AgeJp do
76
76
  it { expect(age_at).to eq 17 }
77
77
  end
78
78
  end
79
+
80
+ context 'invalid date' do
81
+ let(:birthday) { Date.new(2000, 1, 1) }
82
+ let(:invalid_date) { 'String' }
83
+ subject(:age_at) { birthday.age_at(invalid_date) }
84
+
85
+ it { expect { subject }.to raise_error(/invalid date/) }
86
+ end
79
87
  end
80
88
 
81
89
  describe '#age_jp' do
@@ -285,4 +293,56 @@ describe AgeJp do
285
293
  end
286
294
  end
287
295
  end
296
+
297
+ describe '#insurance_age' do
298
+ context "birthday is 2000/01/01. " do
299
+ let(:birthday) { Date.new(2000, 1, 1) }
300
+ subject(:insurance_age) { birthday.insurance_age }
301
+
302
+ context 'when today is 2015/01/01' do
303
+ before { Timecop.freeze(Date.new(2015, 1, 1)) }
304
+
305
+ it { expect(insurance_age).to eq 15 }
306
+ end
307
+
308
+ context 'when today is 2015/07/31' do
309
+ before { Timecop.freeze(Date.new(2015, 7, 31)) }
310
+
311
+ it { expect(insurance_age).to eq 15 }
312
+ end
313
+
314
+ context 'when today is 2015/08/01' do
315
+ before { Timecop.freeze(Date.new(2015, 8, 1)) }
316
+
317
+ it { expect(insurance_age).to eq 16 }
318
+ end
319
+
320
+ after { Timecop.return }
321
+ end
322
+
323
+ context "birthday is 2000/07/31. " do
324
+ let(:birthday) { Date.new(2000, 7, 31) }
325
+ subject(:insurance_age) { birthday.insurance_age }
326
+
327
+ context 'when today is 2016/02/28' do
328
+ before { Timecop.freeze(Date.new(2016, 2, 28)) }
329
+
330
+ it { expect(insurance_age).to eq 15 }
331
+ end
332
+
333
+ context 'when today is 2016/02/29' do
334
+ before { Timecop.freeze(Date.new(2016, 2, 29)) }
335
+
336
+ it { expect(insurance_age).to eq 16 }
337
+ end
338
+
339
+ context 'when today is 2016/03/01' do
340
+ before { Timecop.freeze(Date.new(2016, 3, 1)) }
341
+
342
+ it { expect(insurance_age).to eq 16 }
343
+ end
344
+
345
+ after { Timecop.return }
346
+ end
347
+ end
288
348
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: age_jp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - ryoff
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-25 00:00:00.000000000 Z
11
+ date: 2015-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '3.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '3.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -88,9 +88,7 @@ extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
90
  - ".gitignore"
91
- - ".rspec"
92
91
  - Gemfile
93
- - Gemfile.lock
94
92
  - LICENSE.txt
95
93
  - README.md
96
94
  - Rakefile
@@ -128,3 +126,4 @@ summary: A simpel age calculator for a law of Japan.
128
126
  test_files:
129
127
  - spec/age_jp_spec.rb
130
128
  - spec/spec_helper.rb
129
+ has_rdoc:
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --color
2
- --profile 3
3
- --format documentation
data/Gemfile.lock DELETED
@@ -1,46 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- age_jp (0.0.2)
5
- activesupport
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- activesupport (4.2.1)
11
- i18n (~> 0.7)
12
- json (~> 1.7, >= 1.7.7)
13
- minitest (~> 5.1)
14
- thread_safe (~> 0.3, >= 0.3.4)
15
- tzinfo (~> 1.1)
16
- diff-lcs (1.2.5)
17
- i18n (0.7.0)
18
- json (1.8.2)
19
- minitest (5.5.1)
20
- rake (10.4.0)
21
- rspec (3.1.0)
22
- rspec-core (~> 3.1.0)
23
- rspec-expectations (~> 3.1.0)
24
- rspec-mocks (~> 3.1.0)
25
- rspec-core (3.1.7)
26
- rspec-support (~> 3.1.0)
27
- rspec-expectations (3.1.2)
28
- diff-lcs (>= 1.2.0, < 2.0)
29
- rspec-support (~> 3.1.0)
30
- rspec-mocks (3.1.3)
31
- rspec-support (~> 3.1.0)
32
- rspec-support (3.1.2)
33
- thread_safe (0.3.5)
34
- timecop (0.7.1)
35
- tzinfo (1.2.2)
36
- thread_safe (~> 0.1)
37
-
38
- PLATFORMS
39
- ruby
40
-
41
- DEPENDENCIES
42
- age_jp!
43
- bundler (~> 1.7)
44
- rake (~> 10.0)
45
- rspec
46
- timecop (~> 0.7)