ya_kansuji 0.1.0.pre.1 → 0.1.0.pre.3

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
  SHA256:
3
- metadata.gz: 8cda61967cf509cb1681946b6ff0c7c82afa4f48fd307311f5a274a2e33dcc7a
4
- data.tar.gz: 222c8e0a384159879eb9590ab25b6977daadc7f612ad42011368f920349d1960
3
+ metadata.gz: 1e5a2d3c5ef4a6e85650ee610c2229d4a38bc6cc3de114dbfd72ee6b45a56193
4
+ data.tar.gz: c2149b79c9bf353a65a114f0b8ff956507d8af4be218513a1231a2b8f302e43f
5
5
  SHA512:
6
- metadata.gz: b69375378cb7bba1ba645714dee0798d9173d0cbbee8a5316088321f358b33990715a6812a0772a49bde7f48be5e354cdc3759d7c178187ac626e2c0471e97ad
7
- data.tar.gz: 045e09e2fb3646791414a80453554745efaab69474f0ffd6644d3fd70e3545e77c10b2630daa2fd5cfd789fb521ccc184b55f44b766fbbc1e77a93d12b050de0
6
+ metadata.gz: d7d64bc09467ec751d93a46b48d5713eba82487dfdeecfd670b101bb0c9894c93e62b94e14a1d5807de244c9854357bf763a346d30d947851f9d944005a6119d
7
+ data.tar.gz: 450015e6531cbc12abe862bc3c15bab180d5a0ad24c60f18301b9b03fe9119569ea45174695b71281520ea26b4653cdf26a770b02e3aac47125c41f81ec090c2
data/README.md CHANGED
@@ -1,27 +1,31 @@
1
- # TODO: THIS GEM IS ALPHA VERSION, NOW.
1
+ # TODO: THIS GEM IS STILL ALPHA VERSION.
2
2
 
3
3
  # YaKansuji - もう一つの (やりすぎ) ruby 漢数字ライブラリ
4
4
 
5
+ [<img src="https://badge.fury.io/rb/ya_kansuji.svg" alt="Gem Version" />](https://badge.fury.io/rb/ya_kansuji)
6
+ [<img src="https://travis-ci.org/sugi/ya_kansuji.svg?branch=master" alt="Build Status" />](https://travis-ci.org/sugi/ya_kansuji)
7
+ [<img src="https://coveralls.io/repos/sugi/ya_kansuji/badge.svg?branch=master&service=github" alt="Coverage Status" />](https://coveralls.io/github/sugi/ya_kansuji?branch=master)
8
+ [![Maintainability](https://api.codeclimate.com/v1/badges/007f79c6f7f6e82daa20/maintainability)](https://codeclimate.com/github/sugi/ya_kansuji/maintainability)
9
+
5
10
  Yet another (ultimate) Japanese Kansuji library for ruby.
6
11
 
7
- YaKansuji は ruby 用の日本語の漢数字ライブラリです。 和暦ライブラリの [wareki](https://github.com/sugi/wareki) から派生していますが、アラビア数字混じりの漢数字表記など、かなり多彩な表現を数値と相互変換することができます。
12
+ YaKansuji は ruby 用の日本語の漢数字ライブラリです。 和暦ライブラリの [wareki](https://github.com/sugi/wareki) から派生していますが、アラビア数字混じりの漢数字表記など、もう少し多彩な表現を数値と相互変換することができます。
8
13
 
9
14
  日本語以外の漢数字に関しては一切サポートしていません。
10
15
 
11
16
  ## 機能 / Features
12
17
 
13
18
  * 読み取り: 以下の混在したテキストを数値に変換出来ます
14
- * 漢数字
15
- * 全角数字 ()
16
- * 単位なし (
17
- * ゼロ ()
18
- * 位取り (2億0010万, 千〇〇二)
19
- * 大字 (
20
- * カンマ表現
19
+ * 漢数字 (二万三千五百六十七)
20
+ * 全角数字 (1234)
21
+ * 単位なし / ゼロ (一六九〇)
22
+ * 位取り (2億0010万 / 千〇〇二)
23
+ * 大字 (千皕卅肆)
24
+ * カンマ表現 (12,345 / 5億3,456万 / 二万、五十 )
21
25
  * 数値から漢数字, 漢字混じり数値文字列フォーマット
22
26
  * 複数のビルトインフォーマッタ
23
27
  * フォーマッタプラグイン機構
24
- * 標準の String, Number クラスの拡張 (必要があれば)
28
+ * (オプション) 標準の String, Interger クラスの拡張
25
29
 
26
30
  ## インストール / Installation
27
31
 
@@ -35,30 +39,93 @@ gem 'ya_kansuji'
35
39
 
36
40
  $ gem install ya_kansuji
37
41
 
38
- ## 使い方 / Usage
42
+ ## 使い方
43
+
44
+ ### 読み取り (漢数字 → 数値)
39
45
 
40
- ### ビルトインクラス拡張
46
+ `YaKansuji#to_i` に文字を渡すと数値に変換できます。読み取りに関してはオプションはありません。
41
47
 
42
- 標準ではビルトインクラスの拡張をしません。
48
+ ```ruby
49
+ YaKansuji.to_i("一〇二四") # => 1024
50
+ ```
43
51
 
44
- bundle でない場合は
52
+ ### フォーマット (数値 → 漢数字)
53
+
54
+ `YaKansuji#to_kan` に数値を渡すことで、漢数字や漢字混じりの文字列に変換します。
45
55
 
46
56
  ```ruby
57
+ YaKansuji.to_kan(12345) # => 一万二千三百四十五
58
+ ```
59
+
60
+ このさい、2つめの引数にシンボルを渡すことにより、フォーマッタを切り替えることができます(TODO: 予定)。
47
61
 
62
+ ```ruby
63
+ YaKansuji.to_kan(12340005, :simple) # => "千二百三十四万五"
64
+ YaKansuji.to_kan(12340005, :gov) # => "1234万, 5"
65
+ YaKansuji.to_kan(12340005, :lawyer) # => "1,234万5"
66
+ YaKansuji.to_kan(12340005, :judic_v) # => "一二三四万〇〇〇五"
67
+ YaKansuji.to_kan(12340005, :judic_h) # => "1234万0005"
48
68
  ```
49
69
 
70
+ 現在あるフォーマッタは以下のとおりです。
71
+
72
+ * simple - 標準 (例: 千二百三十四万五)
73
+ * TODO ~~gov - 「公用文作成の要領」方式 (100億, 30万円 / 5,000)~~
74
+ * TODO ~~lawyer - 行政司法協会方式 (1,200億 / 2億58万6,300)~~
75
+ * TOD ~~judic_v - 裁判判例縦書き方式 (一二万〇〇五六)~~
76
+ * TODO ~~judic_h - 最高裁判例横書き方式 (5万0539)~~
77
+
78
+ #### 独自フォーマッタ
79
+
80
+ `YaKansuji#register_formatter` を使うと独自のフォーマッタを登録できます。
81
+ `call` を持つオブジェクトなら何でも渡せます。第1引数に数字、第2引数にオプションが渡ります。
82
+
83
+ ```ruby
84
+ YaKansuji.register_formatter :hoge, -> (num, opts = {}) {
85
+ if num == 0; ""
86
+ elsif num == 1; "いち"
87
+ elsif num == 2; "に"
88
+ else; "たくさん"
89
+ end
90
+ }
91
+ YaKansuji.to_kan(2, :hoge) # => "に"
92
+ YaKansuji.to_kan(123, :hoge) # => "たくさん"
93
+ ```
50
94
 
51
- ### 読み取り (漢数字 → 数値) / Parse kansuji
95
+ ### 標準クラス拡張
52
96
 
53
- TODO: Write usage instructions here
97
+ 標準では YaKansuji のクラスメソッドを直接呼ぶことで使用できますが、短く書く場合、必要応じてビルトインクラス (String, Integer) の拡張を使うことができます。
54
98
 
55
- ### フォーマット (数値 漢数字) /
99
+ クラス拡張では `String#to_i` を置き換え、 `Integer#to_kan` を追加します。
100
+ このさい、Refinements と直接拡張の好きな方を選択できます。
56
101
 
57
- ## Development
102
+ #### Refinements による拡張
58
103
 
59
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
104
+ `YaKansuji::CoreRefine` using すると、 `String#to_i` を置き換え、 `Integer#to_kan` を追加します。
60
105
 
61
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
106
+ ```ruby
107
+ puts "二万".to_i # => 0
108
+
109
+ using YaKansuji::CoreRefine
110
+
111
+ puts "二万".to_i # => 20000
112
+ puts 20000.to_kan #= > "二万"
113
+ ```
114
+
115
+ #### メソッド上書き
116
+
117
+ Refinements をいちいち使わずに、全域でビルトインクラスを上書きしたい場合は `ya_kansuji/core_ext` を読み込んでください。
118
+ 上書きや提供されるメソッドは Refinements と同じです。
119
+
120
+ ```ruby
121
+ require 'ya_kansuji/core_ext'
122
+ ```
123
+
124
+ bundler を使っている場合は、 `Gemfile` 中で以下のようにできます。
125
+
126
+ ```ruby
127
+ gem 'ya_kansuji', require: 'ya_kansuji/core_ext'
128
+ ```
62
129
 
63
130
  ## Contributing
64
131
 
@@ -71,3 +138,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
71
138
  ## Author
72
139
 
73
140
  Tatsuki Sugiura <sugi@nemui.org>
141
+ \\
@@ -1,22 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'ya_kansuji'
2
4
 
3
5
  # Core extension by kansuji
4
6
  class String
5
- def to_number
6
- YaKansuji.to_i self
7
- end
7
+ alias _to_i_ya_kansuji_orig to_i unless defined?(_to_i_ya_kansuji_orig)
8
8
 
9
- def to_num
10
- YaKansuji.to_i self
9
+ def to_i(base = nil)
10
+ if base.nil? || base == :kan
11
+ YaKansuji.to_i self
12
+ else
13
+ _to_i_ya_kansuji_orig(base)
14
+ end
11
15
  end
12
16
  end
13
17
 
14
18
  # Core extension by kansuji
15
19
  class Integer
16
- def to_kansuji
17
- YaKansuji.to_kan self
18
- end
19
-
20
20
  def to_kan
21
21
  YaKansuji.to_kan self
22
22
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ya_kansuji'
4
+
5
+ # String and Integer refinements with YaKansuji
6
+ module YaKansuji
7
+ module CoreRefine
8
+ refine String do
9
+ alias_method :_to_i_ya_kansuji_orig, :to_i unless defined?(_to_i_ya_kansuji_orig)
10
+ def to_i(base = nil)
11
+ if base.nil? || base == :kan || base == :kansuji
12
+ YaKansuji.to_i self
13
+ else
14
+ _to_i_ya_kansuji_orig base
15
+ end
16
+ end
17
+ end
18
+
19
+ refine Integer do
20
+ def to_kan(formatter = :simple)
21
+ YaKansuji.to_kan self, formatter
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module YaKansuji
2
- VERSION = '0.1.0.pre.1'.freeze
2
+ VERSION = '0.1.0.pre.3'.freeze
3
3
  end
data/lib/ya_kansuji.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'ya_kansuji/version'
4
+ require 'ya_kansuji/core_refine'
4
5
 
5
6
  # Yet another Kansuji library for ruby.
6
7
  module YaKansuji
@@ -22,10 +23,17 @@ module YaKansuji
22
23
  module_function
23
24
 
24
25
  def to_i(str)
25
- matched = REGEXP.match(str.to_s.tr(NUM_ALT_CHARS, NUM_NORMALIZED_CHARS)) or return 0
26
+ str = str.to_s.tr(NUM_ALT_CHARS, NUM_NORMALIZED_CHARS)
27
+ str.gsub!(/[,,、:space:]/, '')
28
+ matched = REGEXP.match(str) or return 0
26
29
  ret3 = 0
27
30
  ret4 = 0
28
31
  curnum = nil
32
+ if str.respond_to? :_to_i_ya_kansuji_orig
33
+ to_i_meth = :_to_i_ya_kansuji_orig
34
+ else
35
+ to_i_meth = :to_i
36
+ end
29
37
  matched[0].scan(REGEXP_PART).each do |c|
30
38
  case c
31
39
  when '1', '2', '3', '4', '5', '6', '7', '8', '9'
@@ -34,7 +42,7 @@ module YaKansuji
34
42
  else
35
43
  curnum = 0
36
44
  end
37
- curnum += c.to_i
45
+ curnum += c.public_send(to_i_meth)
38
46
  when '0'
39
47
  curnum and curnum *= 10
40
48
  when '卄', '廿'
@@ -72,16 +80,16 @@ module YaKansuji
72
80
 
73
81
  def register_formatter(sym, proc = nil, &block)
74
82
  if block_given?
75
- @@formatters[sym.to_sym] = block
83
+ @@formatters[sym] = block
76
84
  elsif proc.respond_to? :call
77
- @@formatters[sym.to_sym] = proc
85
+ @@formatters[sym] = proc
78
86
  else
79
87
  raise ArgumentError, 'Registering invalid formatter.'
80
88
  end
81
89
  end
82
90
 
83
91
  def formatter(sym)
84
- @@formatters[sym.to_sym]
92
+ @@formatters[sym]
85
93
  end
86
94
 
87
95
  def formatters
@@ -89,11 +97,11 @@ module YaKansuji
89
97
  end
90
98
 
91
99
  def to_kan(num, formatter = :simple, options = {})
92
- num = num.to_i
100
+ num = num.respond_to?(:_to_i_ya_kansuji_orig) ? num._to_i_ya_kansuji_orig : num.to_i
93
101
  if formatter.respond_to? :call
94
102
  formatter.call num, options
95
- elsif @@formatters[formatter.to_sym]
96
- @@formatters[formatter.to_sym].call num, options
103
+ elsif @@formatters[formatter]
104
+ @@formatters[formatter].call num, options
97
105
  else
98
106
  raise ArgumentError, "Unable to find formatter #{formatter}"
99
107
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ya_kansuji
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre.1
4
+ version: 0.1.0.pre.3
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-04-12 00:00:00.000000000 Z
11
+ date: 2019-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,7 @@ files:
66
66
  - README.md
67
67
  - lib/ya_kansuji.rb
68
68
  - lib/ya_kansuji/core_ext.rb
69
+ - lib/ya_kansuji/core_refine.rb
69
70
  - lib/ya_kansuji/formatter/simple.rb
70
71
  - lib/ya_kansuji/version.rb
71
72
  homepage: https://github.com/sugi/ya_kansuji