zakuro 0.0.3 → 0.1.4

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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +102 -42
  3. data/doc/operation.md +25 -0
  4. data/doc/operation/csv/month.csv +202 -0
  5. data/doc/operation/operation.xlsx +0 -0
  6. data/doc/operation/transfer.rb +77 -0
  7. data/lib/zakuro/calculation/base/multi_gengou.rb +101 -0
  8. data/lib/zakuro/calculation/base/multi_gengou_roller.rb +218 -0
  9. data/lib/zakuro/calculation/base/year.rb +107 -0
  10. data/lib/zakuro/calculation/cycle/abstract_remainder.rb +459 -0
  11. data/lib/zakuro/calculation/cycle/abstract_solar_term.rb +173 -0
  12. data/lib/zakuro/calculation/cycle/zodiac.rb +106 -0
  13. data/lib/zakuro/calculation/monthly/first_day.rb +45 -0
  14. data/lib/zakuro/calculation/monthly/initialized_month.rb +125 -0
  15. data/lib/zakuro/calculation/monthly/month.rb +187 -0
  16. data/lib/zakuro/calculation/monthly/month_label.rb +88 -0
  17. data/lib/zakuro/calculation/monthly/operated_month.rb +209 -0
  18. data/lib/zakuro/calculation/range/full_range.rb +210 -0
  19. data/lib/zakuro/calculation/range/operated_range.rb +144 -0
  20. data/lib/zakuro/calculation/range/operated_solar_terms.rb +201 -0
  21. data/lib/zakuro/calculation/range/transfer/western_date_allocation.rb +82 -0
  22. data/lib/zakuro/calculation/range/transfer/year_boundary.rb +146 -0
  23. data/lib/zakuro/calculation/specifier/single_day.rb +109 -0
  24. data/lib/zakuro/calculation/summary/single.rb +129 -0
  25. data/lib/zakuro/condition.rb +16 -13
  26. data/lib/zakuro/era/japan/gengou.rb +106 -0
  27. data/lib/zakuro/era/japan/gengou/parser.rb +167 -0
  28. data/lib/zakuro/era/japan/gengou/type.rb +178 -0
  29. data/lib/zakuro/era/japan/gengou/validator.rb +236 -0
  30. data/lib/zakuro/era/japan/reki.rb +91 -0
  31. data/lib/zakuro/era/{gengou → japan/yaml}/set-001-until-south.yaml +0 -0
  32. data/lib/zakuro/era/{gengou → japan/yaml}/set-002-from-north.yaml +0 -0
  33. data/lib/zakuro/era/{gengou → japan/yaml}/set-003-modern.yaml +0 -0
  34. data/lib/zakuro/era/western.rb +1 -1
  35. data/lib/zakuro/merchant.rb +2 -2
  36. data/lib/zakuro/operation/month/parser.rb +373 -0
  37. data/lib/zakuro/operation/month/type.rb +453 -0
  38. data/lib/zakuro/operation/month/validator.rb +802 -0
  39. data/lib/zakuro/operation/operation.rb +66 -0
  40. data/lib/zakuro/operation/yaml/month.yaml +6452 -0
  41. data/lib/zakuro/output/error.rb +7 -4
  42. data/lib/zakuro/output/logger.rb +50 -47
  43. data/lib/zakuro/output/response.rb +146 -143
  44. data/lib/zakuro/result/core.rb +52 -0
  45. data/lib/zakuro/result/data.rb +187 -0
  46. data/lib/zakuro/result/operation.rb +114 -0
  47. data/lib/zakuro/result/result.rb +37 -0
  48. data/lib/zakuro/{output → tools}/stringifier.rb +16 -9
  49. data/lib/zakuro/tools/typeof.rb +33 -0
  50. data/lib/zakuro/version.rb +1 -1
  51. data/lib/zakuro/version/abstract_version.rb +1 -1
  52. data/lib/zakuro/version/context.rb +23 -0
  53. data/lib/zakuro/version/senmyou/cycle/remainder.rb +63 -0
  54. data/lib/zakuro/version/senmyou/cycle/solar_term.rb +31 -0
  55. data/lib/zakuro/version/senmyou/monthly/lunar_phase.rb +186 -182
  56. data/lib/zakuro/version/senmyou/range/annual_range.rb +167 -0
  57. data/lib/zakuro/version/senmyou/senmyou.rb +10 -4
  58. data/lib/zakuro/version/senmyou/stella/lunar_orbit.rb +6 -6
  59. data/lib/zakuro/version/senmyou/stella/solar_average.rb +103 -152
  60. data/lib/zakuro/version/senmyou/stella/solar_location.rb +213 -0
  61. data/lib/zakuro/version/senmyou/stella/solar_orbit.rb +3 -184
  62. data/lib/zakuro/version/senmyou/stella/winter_solstice.rb +4 -4
  63. data/lib/zakuro/version/version_class_resolver.rb +62 -0
  64. data/lib/zakuro/version_factory.rb +3 -3
  65. metadata +53 -24
  66. data/lib/zakuro/cycle/abstract_remainder.rb +0 -456
  67. data/lib/zakuro/cycle/zodiac.rb +0 -103
  68. data/lib/zakuro/era/japan.rb +0 -664
  69. data/lib/zakuro/output/result.rb +0 -225
  70. data/lib/zakuro/version/senmyou/base/era.rb +0 -83
  71. data/lib/zakuro/version/senmyou/base/multi_gengou.rb +0 -98
  72. data/lib/zakuro/version/senmyou/base/multi_gengou_roller.rb +0 -205
  73. data/lib/zakuro/version/senmyou/base/remainder.rb +0 -60
  74. data/lib/zakuro/version/senmyou/base/solar_term.rb +0 -66
  75. data/lib/zakuro/version/senmyou/base/year.rb +0 -104
  76. data/lib/zakuro/version/senmyou/monthly/month.rb +0 -122
  77. data/lib/zakuro/version/senmyou/summary/annual_range.rb +0 -187
  78. data/lib/zakuro/version/senmyou/summary/full_range.rb +0 -224
  79. data/lib/zakuro/version/senmyou/summary/specifier.rb +0 -100
@@ -0,0 +1,187 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './core'
4
+
5
+ # :nodoc:
6
+ module Zakuro
7
+ #
8
+ # Result 演算結果
9
+ #
10
+ module Result
11
+ #
12
+ # データ部
13
+ #
14
+ module Data
15
+ #
16
+ # SingleDay 1日
17
+ #
18
+ class SingleDay < Core
19
+ # @return [Year] 年
20
+ attr_reader :year
21
+ # @return [Month] 月
22
+ attr_reader :month
23
+ # @return [Day] 日
24
+ attr_reader :day
25
+
26
+ #
27
+ # 初期化
28
+ #
29
+ # @param [Year] year 年
30
+ # @param [Month] month 月
31
+ # @param [Day] day 日
32
+ #
33
+ def initialize(year:, month:, day:)
34
+ super
35
+ @year = year
36
+ @month = month
37
+ @day = day
38
+ end
39
+ end
40
+
41
+ #
42
+ # Gengou 元号
43
+ #
44
+ class Gengou
45
+ # @return [String] 元号名
46
+ attr_reader :name
47
+ # @return [Integer] 元号年
48
+ attr_reader :number
49
+
50
+ #
51
+ # 初期化
52
+ #
53
+ # @param [String] name 元号名
54
+ # @param [Integer] number 元号年
55
+ #
56
+ def initialize(name: '', number: -1)
57
+ @name = name
58
+ @number = number
59
+ end
60
+ end
61
+
62
+ #
63
+ # Year 年
64
+ #
65
+ class Year
66
+ # @return [Gengou] 元号(1行目)
67
+ attr_reader :first_gengou
68
+ # @return [Gengou] 元号(2行目)
69
+ attr_reader :second_gengou
70
+ # @return [String] 十干十二支
71
+ attr_reader :zodiac_name
72
+ # @return [Integer] 日数
73
+ attr_reader :total_days
74
+
75
+ #
76
+ # 初期化
77
+ #
78
+ # @param [Gengou] first_gengou 元号(1行目)
79
+ # @param [Gengou] second_gengou 元号(2行目)
80
+ # @param [String] zodiac_name 十干十二支
81
+ # @param [Integer] total_days 日数
82
+ #
83
+ def initialize(first_gengou:, second_gengou:, zodiac_name:, total_days:)
84
+ @first_gengou = first_gengou
85
+ @second_gengou = second_gengou
86
+ @zodiac_name = zodiac_name
87
+ @total_days = total_days
88
+ end
89
+ end
90
+
91
+ #
92
+ # SolarTerm 二十四節気
93
+ #
94
+ class SolarTerm
95
+ # @return [Integer] 連番
96
+ attr_reader :index
97
+ # @return [String] 大余小余
98
+ attr_reader :remainder
99
+
100
+ #
101
+ # 初期化
102
+ #
103
+ # @param [Integer] index 連番
104
+ # @param [String] remainder 大余小余
105
+ #
106
+ def initialize(index:, remainder:)
107
+ @index = index
108
+ @remainder = remainder
109
+ end
110
+ end
111
+
112
+ # :reek:TooManyInstanceVariables { max_instance_variables: 6 }
113
+
114
+ #
115
+ # Month 月
116
+ #
117
+ class Month
118
+ # @return [Integer] 月順(1-12)
119
+ attr_reader :number
120
+ # @return [True] 閏月
121
+ # @return [False] 平月
122
+ attr_reader :leaped
123
+ # @return [String] 月の大小
124
+ attr_reader :days_name
125
+ # @return [Day] 月初日データ
126
+ attr_reader :first_day
127
+ # @return [SolarTerm] 二十四節気(節気)
128
+ attr_reader :odd_solar_terms
129
+ # @return [SolarTerm] 二十四節気(中気)
130
+ attr_reader :even_solar_terms
131
+
132
+ # rubocop:disable Metrics/ParameterLists
133
+ # :reek:LongParameterList { max_params: 6 }
134
+
135
+ #
136
+ # 初期化
137
+ #
138
+ # @param [Integer] number 月順(1-12)
139
+ # @param [True, False] leaped 閏月/平月
140
+ # @param [String] days_name 月の大小
141
+ # @param [Day] first_day 月初日データ
142
+ # @param [SolarTerm] odd_solar_terms 二十四節気(節気)
143
+ # @param [SolarTerm] even_solar_terms 二十四節気(中気)
144
+ #
145
+ def initialize(number:, leaped:, days_name:, first_day:,
146
+ odd_solar_terms:, even_solar_terms:)
147
+ @number = number
148
+ @leaped = leaped
149
+ @days_name = days_name
150
+ @first_day = first_day
151
+ @odd_solar_terms = odd_solar_terms
152
+ @even_solar_terms = even_solar_terms
153
+ end
154
+ # rubocop:enable Metrics/ParameterLists
155
+ end
156
+
157
+ #
158
+ # Day 日
159
+ #
160
+ class Day
161
+ # @return [Integer] 月初日から数えた日(M月d日のdに相当)
162
+ attr_reader :number
163
+ # @return [String] 十干十二支
164
+ attr_reader :zodiac_name
165
+ # @return [String] 大余小余
166
+ attr_reader :remainder
167
+ # @return [String] 年月日
168
+ attr_reader :western_date
169
+
170
+ #
171
+ # 初期化
172
+ #
173
+ # @param [Integer] number 月初日から数えた日(M月d日のdに相当)
174
+ # @param [String] zodiac_name 十干十二支
175
+ # @param [String] remainder 大余小余
176
+ # @param [String] western_date 年月日
177
+ #
178
+ def initialize(number:, zodiac_name:, remainder:, western_date:)
179
+ @number = number
180
+ @zodiac_name = zodiac_name
181
+ @remainder = remainder
182
+ @western_date = western_date
183
+ end
184
+ end
185
+ end
186
+ end
187
+ end
@@ -0,0 +1,114 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :nodoc:
4
+ module Zakuro
5
+ #
6
+ # Result 演算結果
7
+ #
8
+ module Result
9
+ #
10
+ # 運用情報
11
+ #
12
+ module Operation
13
+ #
14
+ # Bundle 運用情報
15
+ #
16
+ class Bundle
17
+ # @return [True] 運用あり
18
+ # @return [False] 運用なし
19
+ attr_reader :operated
20
+ # @return [Month::Bundle] 月別履歴情報
21
+ attr_reader :month
22
+ # @return [Data::SingleDay] 計算値
23
+ attr_reader :original
24
+
25
+ #
26
+ # 初期化
27
+ #
28
+ # @param [True, False] operated 運用有無
29
+ # @param [Month::Bundle] month 月別履歴情報
30
+ # @param [Data::SingleDay] original 計算値
31
+ #
32
+ def initialize(operated:, month:, original:)
33
+ @operated = operated
34
+ @month = month
35
+ @original = original
36
+ end
37
+ end
38
+
39
+ #
40
+ # Month 運用情報(月)
41
+ #
42
+ module Month
43
+ #
44
+ # Bundle 月履歴集約情報
45
+ #
46
+ class Bundle
47
+ # @return [History] 月別履歴情報(当月)
48
+ attr_reader :current
49
+ # @return [History] 月別履歴情報(影響を与えた月)
50
+ attr_reader :parent
51
+
52
+ def initialize(current: History.new, parent: History.new)
53
+ @current = current
54
+ @parent = parent
55
+ end
56
+ end
57
+
58
+ #
59
+ # History 月別履歴情報
60
+ #
61
+ class History
62
+ # @return [String] ID
63
+ attr_reader :id
64
+ # @return [String] 月初日の西暦日
65
+ attr_reader :western_date
66
+ # @return [Integer] 原文頁数
67
+ attr_reader :page
68
+ # @return [Integer] 原文注釈番号
69
+ attr_reader :number
70
+ # @return [Array<Zakuro::Result::Operation::Annotation>] 注釈
71
+ attr_reader :annotations
72
+
73
+ #
74
+ # 初期化
75
+ #
76
+ # @param [String] id ID
77
+ # @param [String] western_date 月初日の西暦日
78
+ # @param [Integer] page 原文頁数
79
+ # @param [Integer] number 原文注釈番号
80
+ # @param [Array<Annotation>] annotations 注釈
81
+ #
82
+ def initialize(id: '', western_date: '', page: -1, number: -1, annotations: [])
83
+ @id = id
84
+ @western_date = western_date
85
+ @page = page
86
+ @number = number
87
+ @annotations = annotations
88
+ end
89
+ end
90
+
91
+ #
92
+ # Annotation 注釈
93
+ #
94
+ class Annotation
95
+ # @return [String] 注釈内容
96
+ attr_reader :description
97
+ # @return [String] 注釈補記
98
+ attr_reader :note
99
+
100
+ #
101
+ # 初期化
102
+ #
103
+ # @param [String] description 注釈内容
104
+ # @param [<Type>] note 注釈補記
105
+ #
106
+ def initialize(description:, note:)
107
+ @description = description
108
+ @note = note
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ require_relative './core'
6
+ require_relative './data'
7
+ require_relative './operation'
8
+
9
+ # :nodoc:
10
+ module Zakuro
11
+ #
12
+ # Result 演算結果
13
+ #
14
+ module Result
15
+ #
16
+ # Single 1日検索結果
17
+ #
18
+ class Single < Core
19
+ # @return [Data::SingleDay] 1日
20
+ attr_reader :data
21
+ # @return [Operation::Bundle] 運用情報
22
+ attr_reader :operation
23
+
24
+ #
25
+ # 初期化
26
+ #
27
+ # @param [Data::SingleDay] data 1日
28
+ # @param [Operation::Bundle] operation 運用情報
29
+ #
30
+ def initialize(data:, operation:)
31
+ super
32
+ @data = data
33
+ @operation = operation
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,11 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative './typeof'
4
+
3
5
  # :nodoc:
4
6
  module Zakuro
5
7
  #
6
- # Result 演算結果
8
+ # Tools 汎用メソッド群
7
9
  #
8
- module Result
10
+ module Tools
9
11
  #
10
12
  # Stringifier 文字列処理
11
13
  #
@@ -18,16 +20,18 @@ module Zakuro
18
20
  #
19
21
  # @return [Hash<String, Objcet>] ハッシュ
20
22
  #
21
- def self.to_h(obj:, class_prefix:)
23
+ def self.to_h(obj:, class_prefix:, formatted: true)
22
24
  hash = {}
23
25
  obj.instance_variables.each do |var|
24
26
  key = var.to_s.delete('@')
25
- hash[key] = value_to_hash(obj: obj.instance_variable_get(var), class_prefix: class_prefix)
27
+ hash[key] = value_to_hash(
28
+ obj: obj.instance_variable_get(var), class_prefix: class_prefix, formatted: formatted
29
+ )
26
30
  end
27
31
  hash
28
32
  end
29
33
 
30
- # :reek:TooManyStatements { max_statements: 7 } and :reek:NilCheck
34
+ # :reek:TooManyStatements { max_statements: 7 }
31
35
 
32
36
  #
33
37
  # 対象インスタンスをハッシュ化する(再帰処理)
@@ -37,19 +41,22 @@ module Zakuro
37
41
  #
38
42
  # @return [Hash<String, Objcet>] ハッシュ
39
43
  #
40
- def self.value_to_hash(obj:, class_prefix:)
41
- return obj if obj.nil?
44
+ def self.value_to_hash(obj:, class_prefix:, formatted:)
45
+ return obj unless obj
46
+
47
+ # 日付をフォーマットする
48
+ return obj.format if formatted && Tools::Typeof.time?(obj: obj)
42
49
 
43
50
  # 同じモジュール内のオブジェクトは再帰する
44
51
  if obj.class.name.start_with?(class_prefix)
45
- return to_h(obj: obj, class_prefix: class_prefix)
52
+ return to_h(obj: obj, class_prefix: class_prefix, formatted: formatted)
46
53
  end
47
54
 
48
55
  # 配列は要素一つずつで再帰する
49
56
  if obj.is_a?(Array)
50
57
  arr = []
51
58
  obj.each do |item|
52
- arr.push(to_h(obj: item, class_prefix: class_prefix))
59
+ arr.push(to_h(obj: item, class_prefix: class_prefix, formatted: formatted))
53
60
  end
54
61
  return arr
55
62
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../calculation/cycle/abstract_remainder'
4
+ require_relative '../era/western'
5
+
6
+ # :nodoc:
7
+ module Zakuro
8
+ #
9
+ # Tools 汎用メソッド群
10
+ #
11
+ module Tools
12
+ #
13
+ # Typeof 型判定
14
+ #
15
+ module Typeof
16
+ #
17
+ # 時間を表す型か
18
+ #
19
+ # @param [Object] obj 引数
20
+ #
21
+ # @return [True] 時間型である
22
+ # @return [False] 時間型ではない
23
+ #
24
+ def self.time?(obj:)
25
+ return true if obj.is_a?(Western::Calendar)
26
+
27
+ return true if obj.is_a?(Calculation::Cycle::AbstractRemainder)
28
+
29
+ false
30
+ end
31
+ end
32
+ end
33
+ end
@@ -3,5 +3,5 @@
3
3
  # :nodoc:
4
4
  module Zakuro
5
5
  # @return [String] library version
6
- VERSION = '0.0.3'
6
+ VERSION = '0.1.4'
7
7
  end