zakuro 0.0.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.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +9 -0
  3. data/.gitignore +69 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +14 -0
  6. data/.travis.yml +6 -0
  7. data/Gemfile +19 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +44 -0
  10. data/Rakefile +20 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/images/12/346/234/210/344/273/245/351/231/215/343/201/256/345/205/245/345/256/232/346/260/227.png +0 -0
  14. data/images/12/346/234/210/344/273/245/351/231/215/343/201/256/346/234/210/343/201/256/351/200/262/351/200/200.png +0 -0
  15. data/images/source/description.numbers +0 -0
  16. data/images//345/205/245/345/256/232/346/260/227/343/201/256/350/265/267/347/256/227.png +0 -0
  17. data/images//345/220/204/346/234/210/343/201/256/346/261/202/343/202/201/346/226/271.png +0 -0
  18. data/images//345/244/252/351/231/275/343/201/250/346/234/210.png +0 -0
  19. data/lib/zakuro.rb +9 -0
  20. data/lib/zakuro/condition.rb +239 -0
  21. data/lib/zakuro/cycle/abstract_remainder.rb +457 -0
  22. data/lib/zakuro/cycle/zodiac.rb +103 -0
  23. data/lib/zakuro/era/gengou/set-001-until-south.yaml +375 -0
  24. data/lib/zakuro/era/gengou/set-002-from-north.yaml +166 -0
  25. data/lib/zakuro/era/gengou/set-003-modern.yaml +12 -0
  26. data/lib/zakuro/era/japan.rb +630 -0
  27. data/lib/zakuro/era/western.rb +412 -0
  28. data/lib/zakuro/merchant.rb +57 -0
  29. data/lib/zakuro/output/error.rb +10 -0
  30. data/lib/zakuro/output/logger.rb +64 -0
  31. data/lib/zakuro/output/response.rb +170 -0
  32. data/lib/zakuro/output/result.rb +219 -0
  33. data/lib/zakuro/output/stringifier.rb +62 -0
  34. data/lib/zakuro/version.rb +7 -0
  35. data/lib/zakuro/version/abstract_version.rb +29 -0
  36. data/lib/zakuro/version/genka/genka.rb +19 -0
  37. data/lib/zakuro/version/gihou/gihou.rb +19 -0
  38. data/lib/zakuro/version/gregorio/gregorio.rb +19 -0
  39. data/lib/zakuro/version/houryaku/houryaku.rb +19 -0
  40. data/lib/zakuro/version/joukyou/joukyou.rb +19 -0
  41. data/lib/zakuro/version/kansei/kansei.rb +19 -0
  42. data/lib/zakuro/version/senmyou/README.md +586 -0
  43. data/lib/zakuro/version/senmyou/base/era.rb +81 -0
  44. data/lib/zakuro/version/senmyou/base/gengou.rb +210 -0
  45. data/lib/zakuro/version/senmyou/base/remainder.rb +60 -0
  46. data/lib/zakuro/version/senmyou/base/solar_term.rb +66 -0
  47. data/lib/zakuro/version/senmyou/base/year.rb +58 -0
  48. data/lib/zakuro/version/senmyou/monthly/lunar_phase.rb +220 -0
  49. data/lib/zakuro/version/senmyou/monthly/month.rb +112 -0
  50. data/lib/zakuro/version/senmyou/senmyou.rb +34 -0
  51. data/lib/zakuro/version/senmyou/stella/lunar_orbit.rb +332 -0
  52. data/lib/zakuro/version/senmyou/stella/solar_average.rb +192 -0
  53. data/lib/zakuro/version/senmyou/stella/solar_orbit.rb +398 -0
  54. data/lib/zakuro/version/senmyou/stella/winter_solstice.rb +106 -0
  55. data/lib/zakuro/version/senmyou/summary/annual_data.rb +186 -0
  56. data/lib/zakuro/version/senmyou/summary/gengou_data.rb +294 -0
  57. data/lib/zakuro/version/taien/taien.rb +19 -0
  58. data/lib/zakuro/version/tenpou/tenpou.rb +19 -0
  59. data/lib/zakuro/version_factory.rb +59 -0
  60. data/zakuro.gemspec +31 -0
  61. metadata +106 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d9e107ac002193a5088e0032f75db259107f4cd760dadde20e673df6c8570f25
4
+ data.tar.gz: 45c517c9fba696f0a6cb28f0122b6e61d5ce5c530ac1a0f86cd7cd0846b223c9
5
+ SHA512:
6
+ metadata.gz: 411685cb4aecbef4a5a202367dec76077ae8f08b0d8a960673a6b42e1bdb5b762d2061c8235ab30a1382a59562e12a3b5b1de6c61bfb4d0fba048b554724c32b
7
+ data.tar.gz: 6c81db37443b42bb747a1943b32bf52a0c94893ad642eef4157c7d10aefb1b06ca17829abafe23302d9c01d8ae1e8f34b1720dfa6cc1d61557fbdf78e593c71f
@@ -0,0 +1,9 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ end_of_line = lf
6
+ insert_final_newline = true
7
+ indent_size = 2
8
+ indent_style = space
9
+ trim_trailing_whitespace = true
@@ -0,0 +1,69 @@
1
+ ### https://raw.github.com/github/gitignore/baf13553d070d1d85d6c873235eb529077c35aaf/Ruby.gitignore
2
+
3
+ *.gem
4
+ *.rbc
5
+ /.config
6
+ /coverage/
7
+ /InstalledFiles
8
+ /pkg/
9
+ /spec/reports/
10
+ /spec/examples.txt
11
+ /test/tmp/
12
+ /test/version_tmp/
13
+ /tmp/
14
+
15
+ # Used by dotenv library to load environment variables.
16
+ # .env
17
+
18
+ # Ignore Byebug command history file.
19
+ .byebug_history
20
+
21
+ ## Specific to RubyMotion:
22
+ .dat*
23
+ .repl_history
24
+ build/
25
+ *.bridgesupport
26
+ build-iPhoneOS/
27
+ build-iPhoneSimulator/
28
+
29
+ ## Specific to RubyMotion (use of CocoaPods):
30
+ #
31
+ # We recommend against adding the Pods directory to your .gitignore. However
32
+ # you should judge for yourself, the pros and cons are mentioned at:
33
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
34
+ #
35
+ # vendor/Pods/
36
+
37
+ ## Documentation cache and generated files:
38
+ /.yardoc/
39
+ /_yardoc/
40
+ /doc/
41
+ /rdoc/
42
+
43
+ ## Environment normalization:
44
+ /.bundle/
45
+ /vendor/bundle
46
+ /lib/bundler/man/
47
+
48
+ # for a library or gem, you might want to ignore these files since the code is
49
+ # intended to run in multiple environments; otherwise, check them in:
50
+ # Gemfile.lock
51
+ # .ruby-version
52
+ # .ruby-gemset
53
+
54
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
55
+ .rvmrc
56
+
57
+ # Used by RuboCop. Remote config files pulled in from inherit_from directive.
58
+ # .rubocop-https?--*
59
+
60
+ *.log
61
+
62
+ # Visual Studio Code setting
63
+ .solargraph.yml
64
+
65
+ # unlocked gem version
66
+ Gemfile.lock
67
+
68
+ # Mac
69
+ .DS_Store
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,14 @@
1
+ # 日本語でのコメントを許可
2
+ Style/AsciiComments:
3
+ Enabled: false
4
+
5
+ # Windows対応
6
+ Layout/EndOfLine:
7
+ EnforcedStyle: lf
8
+
9
+ Metrics/MethodLength:
10
+ Max: 15
11
+
12
+ # https://lkml.org/lkml/2020/5/29/1038
13
+ Layout/LineLength:
14
+ Max: 100
@@ -0,0 +1,6 @@
1
+ ---
2
+ language: ruby
3
+ cache: bundler
4
+ rvm:
5
+ - 2.6.6
6
+ before_install: gem install bundler -v 2.1.4
data/Gemfile ADDED
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in zakuro.gemspec
6
+ gemspec
7
+
8
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
9
+
10
+ group :test do
11
+ gem 'rspec'
12
+ end
13
+
14
+ group :development do
15
+ gem 'reek'
16
+ gem 'rubocop-performance'
17
+ gem 'solargraph'
18
+ gem 'yard'
19
+ end
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2020 ty
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,44 @@
1
+ # Zakuro - 石榴
2
+ zakuro は日本の暦を扱う暦算ライブラリです
3
+
4
+ # 前掲
5
+ 石榴(ざくろ)は古来より珍重され、シルクロードを通じて洋の東西に広く伝播した落葉小高木です。
6
+
7
+ すなわち、中華世界においては太陰太陽暦、地中海世界においては太陽暦のもとで育ち、これら東西の暦はシルクロードの東端たる日本に深い影響を与えております。
8
+
9
+ 日本の暦は中国に端を発しますが、江戸時代以降は西洋の文物からも深く学び、日本人は暦算を自らのものとしました。
10
+
11
+ 石榴はただ伝来しただけでなく、日本の地に根づいております。これを日本の暦になぞらえ、和名の「ざくろ」を冠することと致します。
12
+
13
+ ## 導入
14
+
15
+ Add this line to your application's Gemfile:
16
+
17
+ ```ruby
18
+ gem 'zakuro'
19
+ ```
20
+
21
+ And then execute:
22
+
23
+ $ bundle install
24
+
25
+ Or install it yourself as:
26
+
27
+ $ gem install zakuro
28
+
29
+ # 使用方法
30
+
31
+ TODO: sample
32
+
33
+ # 準拠
34
+ 『日本暦日原典』を範とします。
35
+
36
+ # 暦算
37
+
38
+ [宣明暦](./lib/zakuro/version/senmyou/README.md) のみ記載しています
39
+
40
+ # 進捗
41
+
42
+ 開発途中です。
43
+
44
+ 現時点では宣明暦の暦日の1日検索のみ対応しております。
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+
5
+ require 'rspec/core/rake_task'
6
+ require 'yard'
7
+ require 'yard/rake/yardoc_task'
8
+
9
+ # rake spec
10
+ RSpec::Core::RakeTask.new('spec')
11
+ task default: :spec
12
+
13
+ # rake yard
14
+ YARD::Rake::YardocTask.new do |t|
15
+ t.files = %w[
16
+ lib/**/*.rb
17
+ ]
18
+ t.options = []
19
+ # t.options = %w[--debug --verbose] if $trace
20
+ end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "zakuro"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './zakuro/merchant'
4
+
5
+ #
6
+ # top level module
7
+ #
8
+ module Zakuro
9
+ end
@@ -0,0 +1,239 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+
5
+ # :nodoc:
6
+ module Zakuro
7
+ #
8
+ # Catalog 目録
9
+ #
10
+ module Catalog
11
+ #
12
+ # BasisDate 基準日
13
+ #
14
+ class BasisDate
15
+ # @return [Date] 西暦日
16
+ attr_reader :date
17
+
18
+ #
19
+ # 初期化
20
+ #
21
+ # @param [Date] date 西暦日
22
+ #
23
+ def initialize(date:)
24
+ # TODO: 和暦日(String)から西暦日(Date)への変換
25
+ @date = date
26
+ end
27
+
28
+ # :reek:NilCheck
29
+
30
+ #
31
+ # 検証する
32
+ #
33
+ # @param [Date] date 日付
34
+ #
35
+ # @return [Array<String>] エラーメッセージ
36
+ #
37
+ def self.validate(date:)
38
+ failed = []
39
+ return failed if date.nil? || date.is_a?(Date) || date.is_a?(String)
40
+
41
+ failed.push("invalid date: #{date}")
42
+ failed
43
+ end
44
+ end
45
+
46
+ #
47
+ # Range 範囲(開始日-終了日)
48
+ #
49
+ class Range
50
+ # @return [Date] 開始日
51
+ attr_reader :start
52
+ # @return [Date] 終了日
53
+ attr_reader :last
54
+
55
+ #
56
+ # 初期化
57
+ #
58
+ # @param [Hash<Symbol>] hash パラメータ
59
+ # @option hash [Symbol] :start 開始日
60
+ # @option hash [Symbol] :start 終了日
61
+ #
62
+ def initialize(hash: {})
63
+ @start = hash[:start]
64
+ @last = hash[:last]
65
+ end
66
+
67
+ # :reek:TooManyStatements { max_statements: 7 } and :reek:NilCheck
68
+
69
+ #
70
+ # 検証する
71
+ #
72
+ # @param [Hash<Symbol>] hash パラメータ
73
+ #
74
+ # @return [Array<String>] エラーメッセージ
75
+ #
76
+ def self.validate(hash:)
77
+ failed = []
78
+ return failed if hash.nil?
79
+
80
+ unless hash.is_a?(Hash)
81
+ failed.push("invalid range type. #{hash}. should be hash")
82
+ return failed
83
+ end
84
+
85
+ failed.concat(BasisDate.validate(date: hash[:start]))
86
+ failed.concat(BasisDate.validate(date: hash[:last]))
87
+
88
+ failed
89
+ end
90
+ end
91
+
92
+ #
93
+ # Columns 特定の列(フィールド)
94
+ # @note 指定された列のみ出力する
95
+ #
96
+ class Columns
97
+ # @return [Array<String>] 列
98
+ attr_reader :columns
99
+
100
+ #
101
+ # 初期化
102
+ #
103
+ # @param [Array<String>] columns 列
104
+ #
105
+ def initialize(columns: [])
106
+ @columns = columns
107
+ end
108
+
109
+ # :reek:NilCheck
110
+
111
+ #
112
+ # 検証する
113
+ #
114
+ # @param [Array<String>] columns 列
115
+ #
116
+ # @return [Array<String>] エラーメッセージ
117
+ #
118
+ def self.validate(columns:)
119
+ # TODO: 列内容のバリデーション
120
+ failed = []
121
+ return failed if columns.nil? || columns.is_a?(Array)
122
+
123
+ failed.push("invalid columns type. #{columns}. should be array")
124
+
125
+ failed
126
+ end
127
+ end
128
+
129
+ #
130
+ # Options オプション
131
+ # 取得内容を変更する
132
+ #
133
+ # * unit: 年/月/日
134
+ # * lost_days: 没日あり
135
+ # * seasons: 四季あり
136
+ #
137
+ class Options
138
+ # @return [Array<String>] オプション
139
+ attr_reader :options
140
+ #
141
+ # 初期化
142
+ #
143
+ # @param [Array<String>] options オプション
144
+ #
145
+ def initialize(options: [])
146
+ @options = options
147
+ end
148
+
149
+ # TODO: オプションキーのバリデーション
150
+ # :reek:NilCheck
151
+
152
+ #
153
+ # 検証する
154
+ #
155
+ # @param [Array<String>] options オプション
156
+ #
157
+ # @return [Array<String>] エラーメッセージ
158
+ #
159
+ def self.validate(options:)
160
+ failed = []
161
+ return failed if options.nil? || options.is_a?(Hash)
162
+
163
+ failed.push("invalid options type. #{options}. should be hash")
164
+
165
+ failed
166
+ end
167
+ end
168
+ end
169
+
170
+ #
171
+ # Condition 条件
172
+ #
173
+ class Condition
174
+ # @return [Date] 基準日
175
+ attr_reader :date
176
+ # @return [Hash<Symbol>] 範囲
177
+ attr_reader :range
178
+ # @return [Array<String>] 列
179
+ attr_reader :columns
180
+ # @return [Array<String>] オプション
181
+ attr_reader :options
182
+
183
+ #
184
+ # 初期化
185
+ #
186
+ # @param [Hash<Symbol, Object>] hash パラメータ
187
+ # @option hash [Date] :date 基準日
188
+ # @option hash [Hash<Symbol>] :range 範囲
189
+ # @option hash [Array<String>] :columns 列
190
+ # @option hash [Array<String>] :options オプション
191
+ #
192
+ def initialize(hash: {})
193
+ @date = hash[:date]
194
+ @range = hash[:range]
195
+ @columns = hash[:columns]
196
+ @options = hash[:options]
197
+ end
198
+
199
+ # :reek:TooManyStatements { max_statements: 8 }
200
+
201
+ #
202
+ # 検証する
203
+ #
204
+ # @param [Hash<Symbol, Object>] hash パラメータ
205
+ #
206
+ # @return [Array<String>] エラーメッセージ
207
+ #
208
+ def self.validate(hash:)
209
+ failed = []
210
+
211
+ unless hash.is_a?(Hash)
212
+ failed.push("invalid condition type. #{hash}. should be hash")
213
+ return failed
214
+ end
215
+
216
+ failed.concat(Catalog::BasisDate.validate(date: hash[:date]))
217
+ failed.concat(Catalog::Range.validate(hash: hash[:range]))
218
+ failed.concat(Catalog::Columns.validate(columns: hash[:columns]))
219
+ failed.concat(Catalog::Options.validate(options: hash[:options]))
220
+
221
+ failed
222
+ end
223
+
224
+ # :reek:NilCheck
225
+
226
+ #
227
+ # 上書きする
228
+ #
229
+ # @param [Hash<Symbol, Object>] hash パラメータ
230
+ #
231
+ def rewrite(hash: {})
232
+ instance_variables.each do |var|
233
+ key = var.to_s.delete('@')
234
+ val = hash[key.intern]
235
+ instance_variable_set(var, val) unless val.nil?
236
+ end
237
+ end
238
+ end
239
+ end