matsuya 0.4.0 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 809ff08e57a53e69ffe7368e581b28c33127b5fa3bb1ac8df608aefefe429464
4
- data.tar.gz: 74702d8b73494144eb422f4913d8d1e2b4f5836afc2c313061c89456afaef318
3
+ metadata.gz: 8f5e33196b50e272eccb688e82cdf5f662e09cf79b3bd23cc9f932d85be3f70f
4
+ data.tar.gz: 732d76c421ad0bc5a784f1288ec0c655b502b057606a3944685b357447d54504
5
5
  SHA512:
6
- metadata.gz: 5fedf355ad601e511313e1ab9966690630182c64ffdf9807be56fcc4d1c3f7495636e4248b664a1ccb7e1e71ed3a04557b6ff92aaa44accc6da63e102eae0612
7
- data.tar.gz: b8a3bd2b28b8192de70b24236e55c5586b1acfacd35b97bc3dce3a0c3457f8265f6f9f25f683bebb6e1decdabdba63608ac9fc840737ac6cba2603e98c03b7a9
6
+ metadata.gz: 3569bce0e331758aa4d4774f64219045e3f845c974bbd112fe2d4faa174eddc132e6cc3ed6658ddd58aa71422fe1462c5ce7468882989500d4b8e770774efa87
7
+ data.tar.gz: 10a185d0d0e8743118cc7d9d59e9871bd626f21f09f8a044b35f467c7d3a87120c81c099d9ad9fbf9895df70cc4e4ffa5edbc3396899ffb1893a63cdac896485
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
- require "matsuya/version"
3
- require 'egison'
2
+
3
+ require 'matsuya/version'
4
4
  require 'set'
5
5
 
6
6
  module Matsuya
@@ -10,66 +10,65 @@ module Matsuya
10
10
  # 松屋に実際にあるメニュー。
11
11
  # 牛めしのようにプレミアムとそうでないものがある場合は、プレミアムだけを書く
12
12
  # オリジナルカレギュウ(プレミアム牛肉使用)も、プレミアムとして扱い、プレミアム牛肉使用と書いていないほうは書かない
13
- Sample = Set.new([ Menu.new(%i[プレミアム 牛 めし], 380),
14
- Menu.new(%i[ネギ たっぷり プレミアム 旨 辛 ネギ 玉子 牛 めし], 490),
15
- Menu.new(%i[プレミアム おろし ポン酢 牛 めし], 480),
16
- Menu.new(%i[味噌漬け トンテキ 牛 めし (国産玉ねぎ使用) + キムチ], 730),
17
- Menu.new(%i[味噌漬け トンテキ 牛 めし (国産玉ねぎ使用) + 生野菜 + キムチ], 830),
18
- Menu.new(%i[味噌漬け トンテキ 牛 めし (国産玉ねぎ使用) + とろろ], 730),
19
- Menu.new(%i[味噌漬け トンテキ 牛 めし (国産玉ねぎ使用) + 生野菜 + とろろ], 830),
20
- Menu.new(%i[創業 牛 カレー], 490), # 創業ビーフカレー
21
- Menu.new(%i[創業 牛 カレー + 生野菜], 590),
22
- Menu.new(%i[創業 プレミアム 牛 カレー 牛], 720),
23
- Menu.new(%i[創業 牛 カレー 牛], 660),
24
- Menu.new(%i[創業 ハンバーグ 牛 カレー], 720),
25
- Menu.new(%i[味噌漬け トンテキ 丼 + キムチ], 730),
26
- Menu.new(%i[味噌漬け トンテキ 丼 + とろろ], 730),
27
- Menu.new(%i[味噌漬け トンテキ 丼 + 生野菜 + キムチ], 830),
28
- Menu.new(%i[味噌漬け トンテキ 丼 + 生野菜 + とろろ], 830),
29
- Menu.new(%i[豚 キムチ 丼], 650),
30
- Menu.new(%i[キムチ カルビ 丼], 500),
31
- Menu.new(%i[ネギ たっぷり ネギ 塩 豚 肩ロース 丼], 500),
32
- Menu.new(%i[ビビンバ 丼], 500),
33
- Menu.new(%i[まぐろ 丼 6枚盛], 730),
34
- Menu.new(%i[まぐろ 丼 大漁12枚盛], 1000),
35
- Menu.new(%i[海老 チリ ソース 定食], 730),
36
- Menu.new(%i[海老 チリ ソース 定食 + ポテトサラダ], 790),
37
- Menu.new(%i[豚 キムチ 定食], 730),
38
- Menu.new(%i[牛 焼肉 定食], 600),
39
- Menu.new(%i[カルビ 焼肉 定食], 660),
40
- Menu.new(%i[豚 肩ロース 豚 焼肉定食], 600),
41
- Menu.new(%i[豚 肩ロース 生姜焼 定食], 660),
42
- Menu.new(%i[ブラウン ソース ハンバーグ 定食], 600),
43
- Menu.new(%i[ブラウン ソース 玉子 ハンバーグ 定食], 680),
44
- Menu.new(%i[プレミアム 牛 皿 + 牛 焼肉], 730),
45
- Menu.new(%i[プレミアム 牛 皿 + 牛 焼肉 + 生野菜], 830),
46
- Menu.new(%i[プレミアム 牛 皿 + 豚 焼肉], 730),
47
- Menu.new(%i[プレミアム 牛 皿 + 豚 焼肉 + 生野菜], 830),
48
- Menu.new(%i[プレミアム 牛 皿 + ブラウン ソース ハンバーグ], 730),
49
- Menu.new(%i[プレミアム 牛 皿 + ブラウン ソース ハンバーグ + 生野菜], 830),
50
- Menu.new(%i[プレミアム 牛 皿 + 焼鮭], 730),
51
- Menu.new(%i[プレミアム 牛 皿 + 焼鮭 生野菜], 830),
52
- Menu.new(%i[プレミアム 牛 皿 + カルビ 焼肉], 790),
53
- Menu.new(%i[プレミアム 牛 皿 + カルビ 焼肉 + 生野菜], 890),
54
- Menu.new(%i[プレミアム 牛 皿 + 豚 生姜焼], 790),
55
- Menu.new(%i[プレミアム 牛 皿 + 豚 生姜焼 + 生野菜], 890),
56
- Menu.new(%i[おこさま プレミアム 牛 めし プレート], 390),
57
- Menu.new(%i[おこさま 牛 めし プレート], 390),
58
- Menu.new(%i[おこさま カレー プレート], 390),
59
- Menu.new(%i[+ おもちゃ], 200),
60
- Menu.new(%i[りんご ジュース], 100),
61
- Menu.new(%i[ぶっかけ うどん], 320),
62
- Menu.new(%i[ぶっかけ うどん + ミニ プレミアム 牛 めし], 620),
63
- Menu.new(%i[ぶっかけ うどん + ミニ 創業 カレー], 620),
64
- Menu.new(%i[ぶっかけ とろろ 玉子 うどん], 400),
65
- Menu.new(%i[ぶっかけ とろろ 玉子 うどん + ミニ プレミアム 牛 めし], 700),
66
- Menu.new(%i[ぶっかけ とろろ 玉子 うどん + ミニ 創業 カレー], 700),
67
- ])
13
+ Sample = Set.new([Menu.new(%i[プレミアム 牛 めし], 380),
14
+ Menu.new(%i[ネギ たっぷり プレミアム 旨 辛 ネギ 玉子 牛 めし], 490),
15
+ Menu.new(%i[プレミアム おろし ポン酢 牛 めし], 480),
16
+ Menu.new(%i[味噌漬け トンテキ 牛 めし (国産玉ねぎ使用) + キムチ], 730),
17
+ Menu.new(%i[味噌漬け トンテキ 牛 めし (国産玉ねぎ使用) + 生野菜 + キムチ], 830),
18
+ Menu.new(%i[味噌漬け トンテキ 牛 めし (国産玉ねぎ使用) + とろろ], 730),
19
+ Menu.new(%i[味噌漬け トンテキ 牛 めし (国産玉ねぎ使用) + 生野菜 + とろろ], 830),
20
+ Menu.new(%i[創業 牛 カレー], 490), # 創業ビーフカレー
21
+ Menu.new(%i[創業 牛 カレー + 生野菜], 590),
22
+ Menu.new(%i[創業 プレミアム 牛 カレー 牛], 720),
23
+ Menu.new(%i[創業 牛 カレー 牛], 660),
24
+ Menu.new(%i[創業 ハンバーグ 牛 カレー], 720),
25
+ Menu.new(%i[味噌漬け トンテキ 丼 + キムチ], 730),
26
+ Menu.new(%i[味噌漬け トンテキ 丼 + とろろ], 730),
27
+ Menu.new(%i[味噌漬け トンテキ 丼 + 生野菜 + キムチ], 830),
28
+ Menu.new(%i[味噌漬け トンテキ 丼 + 生野菜 + とろろ], 830),
29
+ Menu.new(%i[豚 キムチ 丼], 650),
30
+ Menu.new(%i[キムチ カルビ 丼], 500),
31
+ Menu.new(%i[ネギ たっぷり ネギ 塩 豚 肩ロース 丼], 500),
32
+ Menu.new(%i[ビビンバ 丼], 500),
33
+ Menu.new(%i[まぐろ 丼 6枚盛], 730),
34
+ Menu.new(%i[まぐろ 丼 大漁12枚盛], 1000),
35
+ Menu.new(%i[海老 チリ ソース 定食], 730),
36
+ Menu.new(%i[海老 チリ ソース 定食 + ポテトサラダ], 790),
37
+ Menu.new(%i[豚 キムチ 定食], 730),
38
+ Menu.new(%i[牛 焼肉 定食], 600),
39
+ Menu.new(%i[カルビ 焼肉 定食], 660),
40
+ Menu.new(%i[豚 肩ロース 豚 焼肉定食], 600),
41
+ Menu.new(%i[豚 肩ロース 生姜焼 定食], 660),
42
+ Menu.new(%i[ブラウン ソース ハンバーグ 定食], 600),
43
+ Menu.new(%i[ブラウン ソース 玉子 ハンバーグ 定食], 680),
44
+ Menu.new(%i[プレミアム 牛 皿 + 牛 焼肉], 730),
45
+ Menu.new(%i[プレミアム 牛 皿 + 牛 焼肉 + 生野菜], 830),
46
+ Menu.new(%i[プレミアム 牛 皿 + 豚 焼肉], 730),
47
+ Menu.new(%i[プレミアム 牛 皿 + 豚 焼肉 + 生野菜], 830),
48
+ Menu.new(%i[プレミアム 牛 皿 + ブラウン ソース ハンバーグ], 730),
49
+ Menu.new(%i[プレミアム 牛 皿 + ブラウン ソース ハンバーグ + 生野菜], 830),
50
+ Menu.new(%i[プレミアム 牛 皿 + 焼鮭], 730),
51
+ Menu.new(%i[プレミアム 牛 皿 + 焼鮭 生野菜], 830),
52
+ Menu.new(%i[プレミアム 牛 皿 + カルビ 焼肉], 790),
53
+ Menu.new(%i[プレミアム 牛 皿 + カルビ 焼肉 + 生野菜], 890),
54
+ Menu.new(%i[プレミアム 牛 皿 + 豚 生姜焼], 790),
55
+ Menu.new(%i[プレミアム 牛 皿 + 豚 生姜焼 + 生野菜], 890),
56
+ Menu.new(%i[おこさま プレミアム 牛 めし プレート], 390),
57
+ Menu.new(%i[おこさま 牛 めし プレート], 390),
58
+ Menu.new(%i[おこさま カレー プレート], 390),
59
+ Menu.new(%i[+ おもちゃ], 200),
60
+ Menu.new(%i[りんご ジュース], 100),
61
+ Menu.new(%i[ぶっかけ うどん], 320),
62
+ Menu.new(%i[ぶっかけ うどん + ミニ プレミアム 牛 めし], 620),
63
+ Menu.new(%i[ぶっかけ うどん + ミニ 創業 カレー], 620),
64
+ Menu.new(%i[ぶっかけ とろろ 玉子 うどん], 400),
65
+ Menu.new(%i[ぶっかけ とろろ 玉子 うどん + ミニ プレミアム 牛 めし], 700),
66
+ Menu.new(%i[ぶっかけ とろろ 玉子 うどん + ミニ 創業 カレー], 700)])
68
67
 
69
68
  # 松屋の朝定食
70
- Morning = Set.new([ %i[定番 朝 定食],
71
- %i[焼鮭 定食],
72
- %i[ソーセージ エッグ 定食]])
69
+ Morning = Set.new([%i[定番 朝 定食],
70
+ %i[焼鮭 定食],
71
+ %i[ソーセージ エッグ 定食]])
73
72
 
74
73
  # 松屋ネットワーク
75
74
  NetworkNode = Struct.new(:node, :follow) do
@@ -78,27 +77,24 @@ module Matsuya
78
77
  end
79
78
  end
80
79
 
81
- class << self
82
- # こんなことに使われるなんて可哀想なライブラリだな
83
- include Egison
84
-
85
- # 松屋ネットワークを構築し、始点を返す。
86
- # ==== Return
87
- # Matsuya::NetworkNode beginノード
88
- def network
89
- dic = {begin: NetworkNode.new(:begin, [])}
90
- Sample.each do |menu|
91
- [:begin, *menu.pattern, menu.price].each_cons(2) do |current, follow|
92
- node = dic[current] ||= NetworkNode.new(current, [])
93
- if follow.is_a? Symbol
94
- node.follow << dic[follow] ||= NetworkNode.new(follow, [])
95
- else
96
- node.follow << follow
97
- end
98
- end
99
- end
100
- dic.values
80
+ dic = { begin: NetworkNode.new(:begin, []) }
81
+ Sample.each do |menu|
82
+ [:begin, *menu.pattern, menu.price].each_cons(2) do |current, follow|
83
+ node = dic[current] ||= NetworkNode.new(current, [])
84
+ node.follow << if follow.is_a? Symbol
85
+ dic[follow] ||= NetworkNode.new(follow, [])
86
+ else
87
+ follow
88
+ end
101
89
  end
90
+ end
91
+
92
+ # 松屋ネットワークを構築し、始点を返す。
93
+ NETWORK = dic.values
94
+
95
+ class << self
96
+ # 互換性のため
97
+ def network = NETWORK
102
98
 
103
99
  # お客様に提供する商品を作る。私は接客は不得意なので、ランダムなものが出てくる。
104
100
  # おかの値が1に近づくほど狂った商品が出てくる。
@@ -109,11 +105,11 @@ module Matsuya
109
105
  # Matsuya::NetworkNode 再帰呼出し用。省略する。
110
106
  # ==== Return
111
107
  # Array 材料を並べた配列
112
- def generate(okano: 0.1, current: network.find{|n|n.node == :begin})
108
+ def generate(okano: 0.1, current: NETWORK.find { |n| n.node == :begin })
113
109
  if current.is_a? NetworkNode
114
110
  nex = current.follow.sample
115
- if nex.is_a?(NetworkNode) and rand < okano
116
- [current.node, *generate(okano: okano, current: network.sample)]
111
+ if nex.is_a?(NetworkNode) && (rand < okano)
112
+ [current.node, *generate(okano: okano, current: NETWORK.sample)]
117
113
  else
118
114
  [current.node, *generate(okano: okano, current: nex)]
119
115
  end
@@ -122,75 +118,46 @@ module Matsuya
122
118
 
123
119
  # 材料を選択したら釜に入れてぐーるぐーる。
124
120
  # キムカル丼のように、『キムチ+カルビ』がキムカルに変化するなど、松屋活用を考慮して
125
- # Matsuya.generate の戻り値をStringに変換する
121
+ # Matsuya.generate の戻り値を加工する
126
122
  # ==== Args
127
123
  # [dish] Array 現在の皿の状態
128
124
  # ==== Return
129
- # String できたー!どの特性を残そう?
125
+ # Array<String> できたー!どの特性を残そう?
130
126
  def preparation(dish)
131
- match(dish) do
132
- with(Egison::List.(*_head, :+, *_tail)) do
127
+ case dish
128
+ in *head, :+, *tail
133
129
  [head, :' ', tail, :セット]
134
- end
135
-
136
- with(Egison::List.(*_head, :キムチ, :カルビ, *_tail)) do
130
+ in *head, :キムチ, :カルビ, *tail
137
131
  [head, :キムカル, tail]
138
- end
139
-
140
- with(Egison::List.(*_head, :創業, :牛, *_tail)) do
132
+ in *head, :創業, :牛, *tail
141
133
  [head, :創業ビーフ, tail]
142
- end
143
-
144
- with(Egison::List.(*_head, :創業, :プレミアム, :牛, *_tail)) do
134
+ in *head, :創業, :プレミアム, :牛, *tail
145
135
  [head, :創業プレミアムビーフ, tail]
146
- end
147
-
148
- with(Egison::List.(*_head, :牛, :カレー, *_tail)) do
136
+ in *head, :牛, :カレー, *tail
149
137
  [head, :ビーフカレー, tail]
150
- end
151
-
152
- with(Egison::List.(*_head, :ビビンバ, :丼, *_tail)) do
138
+ in *head, :ビビンバ, :丼, *tail
153
139
  [head, :ビビン丼, tail]
154
- end
155
-
156
- with(Egison::List.(*_head, :海老, :チリ, *_tail)) do
140
+ in *head, :海老, :チリ, *tail
157
141
  [head, :海老のチリ, tail]
158
- end
159
-
160
- with(Egison::List.(*_head, *%i[豚 肩ロース 豚 焼肉定食], *_tail)) do
142
+ in *head, :豚, :肩ロース, :豚, :焼肉定食, *tail
161
143
  [head, :豚, :肩ロース, :の, :豚, :焼肉定食, tail]
162
- end
163
-
164
- with(Egison::List.(*_head, *%i[豚 肩ロース 生姜焼 定食], *_tail)) do
144
+ in *head, :豚, :肩ロース, :生姜焼, :定食, *tail
165
145
  [head, :豚, :肩ロース, :の, :生姜焼, :定食, tail]
166
- end
167
-
168
- with(Egison::List.(*_head, :玉子, :ハンバーグ, *_tail)) do
146
+ in *head, :玉子, :ハンバーグ, *tail
169
147
  [head, :エッグ, :ハンバーグ, tail]
170
- end
171
-
172
- with(Egison::List.(*_head, :ネギ, :玉子, *_tail)) do
148
+ in *head, :ネギ, :玉子, *tail
173
149
  [head, :ネギたま, tail]
174
- end
175
-
176
- with(Egison::List.(*_head, :とろろ, :玉子, *_tail)) do
150
+ in *head, :とろろ, :玉子, *tail
177
151
  [head, :とろたま, tail]
178
- end
179
-
180
- with(Egison::List.(*_head, :カレー, :牛, *_tail)) do
152
+ in *head, :カレー, :牛, *tail
181
153
  [head, :カレギュウ, tail]
182
- end
183
-
184
- with(Egison::List.(*_head, :ハンバーグ, :皿, *_tail)) do
154
+ in *head, :ハンバーグ, :皿, *tail
185
155
  [head, :バーグディッシュ, tail]
186
- end
187
-
188
- with(Egison::Multiset.(*_not_match)) do
189
- not_match
190
- end
156
+ else
157
+ dish
158
+ end.flat_map do |node|
159
+ if node.is_a? Array then preparation(node) else node end
191
160
  end
192
- .map{|node| if node.is_a? Array then preparation(node) else node end }
193
- .flatten
194
161
  end
195
162
 
196
163
  # 商品を注文し、商品を受け取る
@@ -200,7 +167,7 @@ module Matsuya
200
167
  # ==== Return
201
168
  # String 商品名
202
169
  def order(okano: 0.1)
203
- preparation(generate(okano: okano).reject{|x|x==:begin}).join
170
+ preparation(generate(okano: okano).reject { _1 == :begin }).join
204
171
  end
205
172
  end
206
173
  end
@@ -1,3 +1,3 @@
1
1
  module Matsuya
2
- VERSION = "0.4.0"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -18,9 +18,8 @@ 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.required_ruby_version = '>= 2.5'
21
+ spec.required_ruby_version = '>= 3.0'
22
22
 
23
- spec.add_development_dependency "bundler", "~> 2.1"
24
- spec.add_development_dependency "rake", "~> 10.4"
25
- spec.add_dependency "egison", "~> 1.0"
23
+ spec.add_development_dependency "bundler"
24
+ spec.add_development_dependency "rake"
26
25
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: matsuya
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toshiaki Asai
@@ -14,44 +14,30 @@ dependencies:
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.1'
19
+ version: '0'
20
20
  type: :development
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: '2.1'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.4'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.4'
41
- - !ruby/object:Gem::Dependency
42
- name: egison
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.0'
40
+ version: '0'
55
41
  description: Generate Okanic Matsuya food.
56
42
  email:
57
43
  - toshi.alternative@gmail.com
@@ -81,7 +67,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
81
67
  requirements:
82
68
  - - ">="
83
69
  - !ruby/object:Gem::Version
84
- version: '2.5'
70
+ version: '3.0'
85
71
  required_rubygems_version: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - ">="