matsuya 0.4.0 → 1.0.0

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: 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
  - - ">="