wareki 1.0.0 → 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 +4 -4
- data/ChangeLog +10 -0
- data/README.md +3 -0
- data/lib/wareki.rb +2 -0
- data/lib/wareki/common.rb +43 -14
- data/lib/wareki/date.rb +2 -1
- data/lib/wareki/std_ext.rb +13 -1
- data/lib/wareki/version.rb +3 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00264c0e982ca9fc5ddddf077d222e473281f09ae91d1fb4cfc5cd0b445c200a
|
4
|
+
data.tar.gz: 90d886bb8ef63e259e24134ccaeaf3df0722ebc415e15c932f5a6d770a93de55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b06ba92792afd6213be68dc40a836f1b7799e8e836052ce3ff17c036a7f33770a8319dc1e714a07168485c791b8e682622bfb5f21e2905696a35fa355a55892
|
7
|
+
data.tar.gz: ad8e3fd61fe9a697d13c90eeead0f3fdc6b973591f9cb99624e609224c326b1a3f8c775ef0d55b8ffbfc408285eb841fbee918d76bcb33fd0c7a03a45e86e766
|
data/ChangeLog
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
2019-12-24 Tatsuki Sugiura <sugi@nemui.org>
|
2
|
+
|
3
|
+
* Version: 1.1.0
|
4
|
+
|
5
|
+
[ by Akinori MUSHA <knu@idaemons.org> ]
|
6
|
+
* Partially traditional kanji variants support
|
7
|
+
* Compatibility fix: Date.parse with no arguement
|
8
|
+
* Provides Date._parse overrides (currently no kansuji
|
9
|
+
support for time fields at present)
|
10
|
+
|
1
11
|
2019-04-15 Tatsuki Sugiura <sugi@nemui.org>
|
2
12
|
|
3
13
|
* Verion: 1.0.0 🎉, compat with 0.x mostly.
|
data/README.md
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
[<img src="https://travis-ci.org/sugi/wareki.svg?branch=master" alt="Build Status" />](https://travis-ci.org/sugi/wareki)
|
5
5
|
[<img src="https://coveralls.io/repos/sugi/wareki/badge.svg?branch=master&service=github" alt="Coverage Status" />](https://coveralls.io/github/sugi/wareki?branch=master)
|
6
6
|
[<img src="https://api.codeclimate.com/v1/badges/c9209422700b526d2b45/maintainability" />](https://codeclimate.com/github/sugi/wareki/maintainability)
|
7
|
+
[](https://www.codacy.com/app/sugi/wareki?utm_source=github.com&utm_medium=referral&utm_content=sugi/wareki&utm_campaign=Badge_Grade)
|
7
8
|
|
8
9
|
## 概要
|
9
10
|
|
@@ -119,6 +120,8 @@ strftime が拡張されるので、 `config/locale/ja.yml` にそのままフ
|
|
119
120
|
|
120
121
|
## 追加フォーマット文字列一覧
|
121
122
|
|
123
|
+
通常の strftime のフォーマット文字列に **加えて**、 以下が使用できます。これ以外のフォーマット文字列に関しては、そのまま strftime へ引き渡され、プラットフォーム依存で解決されます。
|
124
|
+
|
122
125
|
* %Jf: "%Je%Jg年%Js%Jl月%Jd日" の略 (例: 平成23年3月12日)
|
123
126
|
* %JF: "%Je%JGK年%JLk%JSk月%JDk日" の略 (例: 平成二十三年三月十二日)
|
124
127
|
* %Jy: "%Je%Jg" の略 (元号+半角数字年)
|
data/lib/wareki.rb
CHANGED
data/lib/wareki/common.rb
CHANGED
@@ -11,28 +11,57 @@ module Wareki
|
|
11
11
|
IMPERIAL_START_YEAR = -660
|
12
12
|
DATE_INFINITY = ::Date.new(280_000_000, 12, 31) # Use 280000000 for jruby limitation...
|
13
13
|
YEAR_BY_NUM = Hash[*YEAR_DEFS.map { |y| [y.year, y] }.flatten].freeze
|
14
|
-
|
14
|
+
KANJI_VARIANTS = {
|
15
|
+
'宝' => '寳',
|
16
|
+
'霊' => '靈',
|
17
|
+
'神' => '神',
|
18
|
+
'応' => '應',
|
19
|
+
'暦' => '曆',
|
20
|
+
'祥' => '祥',
|
21
|
+
'寿' => '壽',
|
22
|
+
'斎' => '斉',
|
23
|
+
'観' => '觀',
|
24
|
+
'寛' => '寬',
|
25
|
+
'徳' => '德',
|
26
|
+
'禄' => '祿',
|
27
|
+
'万' => '萬',
|
28
|
+
'福' => '福',
|
29
|
+
'禎' => '禎',
|
30
|
+
'国' => '國',
|
31
|
+
'亀' => '龜',
|
32
|
+
'令' => '令',
|
33
|
+
}.freeze
|
34
|
+
SQUARE_ERAS = {
|
35
|
+
'㍾' => '明治',
|
36
|
+
'㍽' => '大正',
|
37
|
+
'㍼' => '昭和',
|
38
|
+
'㍻' => '平成',
|
39
|
+
'㋿' => '令和',
|
40
|
+
}.freeze
|
41
|
+
NORMALIZE_KANJI_VARIANTS_REGEX = Regexp.union(*KANJI_VARIANTS.values)
|
42
|
+
NORMALIZE_KANJI_VARIANTS_HASH = KANJI_VARIANTS.each_with_object({}) { |(n, s), h| s.each_char { |c| h[c] = n } }
|
43
|
+
NORMALIZE_KANJI_VARIANTS = ->(str) { str.gsub(NORMALIZE_KANJI_VARIANTS_REGEX, NORMALIZE_KANJI_VARIANTS_HASH) }
|
44
|
+
ERA_BY_NAME = Hash[*(ERA_NORTH_DEFS + ERA_DEFS).flat_map { |g| [g.name, g] }]
|
15
45
|
ERA_BY_NAME['皇紀'] = ERA_BY_NAME['神武天皇即位紀元'] = Era.new('皇紀', -660, 1_480_041, DATE_INFINITY.jd)
|
16
46
|
ERA_BY_NAME['西暦'] = ERA_BY_NAME[''] = Era.new('西暦', 1, 1_721_424, DATE_INFINITY.jd)
|
17
|
-
ERA_BY_NAME.
|
18
|
-
alt_era_name = era_name.tr('宝霊神応暦祥寿斎観寛徳禄万福禎国亀令', '寳靈神應曆祥壽斉觀寬德祿萬福禎國龜令')
|
19
|
-
alt_era_name == era_name and next
|
20
|
-
ERA_BY_NAME[alt_era_name] = ERA_BY_NAME[era_name]
|
21
|
-
end
|
22
|
-
{'㍾' => '明治', '㍽' => '大正', '㍼' => '昭和', '㍻' => '平成', '㋿' => '令和'}.each do |short, canon|
|
23
|
-
ERA_BY_NAME[short] = ERA_BY_NAME[canon]
|
24
|
-
end
|
47
|
+
ERA_BY_NAME.default_proc = ->(hash, key) { hash.fetch(SQUARE_ERAS[key] || NORMALIZE_KANJI_VARIANTS[key], nil) }
|
25
48
|
ERA_BY_NAME.freeze
|
26
|
-
|
49
|
+
ERA_REGEX = Regexp.new(
|
50
|
+
Regexp.union(*ERA_BY_NAME.keys, *SQUARE_ERAS.keys).source.gsub(
|
51
|
+
Regexp.union(*KANJI_VARIANTS.keys),
|
52
|
+
KANJI_VARIANTS.each_with_object({}) { |(canon, variants), h| h[canon] = "[#{canon}#{variants}]" }
|
53
|
+
)
|
54
|
+
)
|
55
|
+
NUM_CHARS = '零壱壹弌弐貳貮参參弎肆伍陸漆質柒捌玖〇一二三四五六七八九十拾什卄廿卅丗卌百陌佰皕阡仟千万萬億兆京垓01234567890123456789'
|
27
56
|
ALT_MONTH_NAME = %w(睦月 如月 弥生 卯月 皐月 水無月 文月 葉月 長月 神無月 霜月 師走).freeze
|
28
|
-
REGEX = %r{
|
29
|
-
(?<era_name
|
30
|
-
|
57
|
+
REGEX = %r{
|
58
|
+
(?:(?<era_name>紀元前|#{ERA_REGEX})?
|
59
|
+
(?:(?<year>[元#{NUM_CHARS}]+)年))?
|
31
60
|
(?:(?<is_leap>閏|潤|うるう)?
|
32
61
|
(?:(?<month>[正#{NUM_CHARS}]+)月 |
|
33
62
|
(?<alt_month>#{ALT_MONTH_NAME.join('|')})))?
|
34
63
|
(?:(?<day>[元朔晦#{NUM_CHARS}]+)日|元旦)?
|
35
|
-
|
64
|
+
}x.freeze
|
36
65
|
|
37
66
|
class UnsupportedDateRange < StandardError; end
|
38
67
|
|
data/lib/wareki/date.rb
CHANGED
@@ -26,7 +26,8 @@ module Wareki
|
|
26
26
|
|
27
27
|
def self._parse(str)
|
28
28
|
str = str.to_s.gsub(/[[:space:]]/, '')
|
29
|
-
match =
|
29
|
+
match = REGEX.match(str)
|
30
|
+
match && !match[0].empty? or
|
30
31
|
raise ArgumentError, "Invaild Date: #{str}"
|
31
32
|
era = match[:era_name]
|
32
33
|
if (era.nil? || era == '') && match[:year].nil?
|
data/lib/wareki/std_ext.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'date'
|
2
4
|
require 'wareki/date'
|
3
5
|
module Wareki
|
@@ -24,10 +26,20 @@ class Date
|
|
24
26
|
|
25
27
|
class << self
|
26
28
|
alias _wareki_parse_orig parse
|
27
|
-
def parse(str, comp = true, start = ::Date::ITALY)
|
29
|
+
def parse(str = '-4712-01-01', comp = true, start = ::Date::ITALY)
|
28
30
|
Wareki::Date.parse(str).to_date(start)
|
29
31
|
rescue ArgumentError, Wareki::UnsupportedDateRange
|
30
32
|
::Date._wareki_parse_orig(str, comp, start)
|
31
33
|
end
|
34
|
+
|
35
|
+
alias _wareki__parse_orig _parse
|
36
|
+
def _parse(str, comp = true)
|
37
|
+
di = Wareki::Date._parse(str)
|
38
|
+
wdate = Wareki::Date.new(di[:era], di[:year], di[:month], di[:day], di[:is_leap])
|
39
|
+
rescue ArgumentError, Wareki::UnsupportedDateRange
|
40
|
+
::Date._wareki__parse_orig(str, comp)
|
41
|
+
else
|
42
|
+
::Date._wareki__parse_orig(str.sub(Wareki::REGEX, wdate.strftime('%F ')), comp)
|
43
|
+
end
|
32
44
|
end
|
33
45
|
end
|
data/lib/wareki/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wareki
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tatsuki Sugiura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-12-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ya_kansuji
|