matsuya 0.2.1 → 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
- SHA1:
3
- metadata.gz: c2f3202a7c45c1105a6435522dfff7ce2f80392b
4
- data.tar.gz: 4a3afa2b038e48f148f0c88b6da279ab27db09e7
2
+ SHA256:
3
+ metadata.gz: 8f5e33196b50e272eccb688e82cdf5f662e09cf79b3bd23cc9f932d85be3f70f
4
+ data.tar.gz: 732d76c421ad0bc5a784f1288ec0c655b502b057606a3944685b357447d54504
5
5
  SHA512:
6
- metadata.gz: c9cc0625f3ae4ce41306d9779748eedaf98235b8b1ab33fe748ef5b71e600171f34d271449f59e4bc9cfd91920d5b0c30536fe457168e529a74fcaf8ff16007b
7
- data.tar.gz: ea93f65c5cabec99711fe1a9d89a9d06cc03ca46aa0a8326829bea5397263e9130a3e4ab0745fbc30d4d75cea4ff78d52ffe5a96a1fc4d63a1170db5e9985393
6
+ metadata.gz: 3569bce0e331758aa4d4774f64219045e3f845c974bbd112fe2d4faa174eddc132e6cc3ed6658ddd58aa71422fe1462c5ce7468882989500d4b8e770774efa87
7
+ data.tar.gz: 10a185d0d0e8743118cc7d9d59e9871bd626f21f09f8a044b35f467c7d3a87120c81c099d9ad9fbf9895df70cc4e4ffa5edbc3396899ffb1893a63cdac896485
data/Rakefile CHANGED
@@ -1,2 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
+ task :graph do
4
+ require 'matsuya'
5
+ puts 'digraph matsuya {'
6
+ #puts Matsuya::Sample.map{|m| 'begin -> ' + m.pattern.join(' -> ') + ' -> end;' }.join("\n")
7
+ puts Matsuya::Sample.map{|m| [:begin, *m.pattern, :end].each_cons(2).map{|a,b| " \"#{a}\" -> \"#{b}\";" } }.flatten.uniq.join("\n")
8
+ puts '}'
9
+ end
@@ -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,28 +10,65 @@ module Matsuya
10
10
  # 松屋に実際にあるメニュー。
11
11
  # 牛めしのようにプレミアムとそうでないものがある場合は、プレミアムだけを書く
12
12
  # オリジナルカレギュウ(プレミアム牛肉使用)も、プレミアムとして扱い、プレミアム牛肉使用と書いていないほうは書かない
13
- Sample = Set.new([ Menu.new(%i[プレミアム 牛 めし], 380),
14
- Menu.new(%i[プレミアム 旨辛 ネギ たま 牛 めし], 480),
15
- Menu.new(%i[プレミアム おろし ポン酢 牛めし], 480),
16
- Menu.new(%i[プレミアム キムチ 牛 めし], 480),
17
- Menu.new(%i[オリジナル カレー], 330),
18
- Menu.new(%i[オリジナル カレギュウ (プレミアム牛肉使用)], 500),
19
- Menu.new(%i[オリジナル カレギュウ], 490),
20
- Menu.new(%i[オリジナル ハンバーグ カレー], 590),
21
- Menu.new(%i[ネギ たっぷり ネギ 豚 カルビ 丼], 450),
22
- Menu.new(%i[ビビンバ ], 450),
23
- Menu.new(%i[キムチ カルビ ], 490),
24
- Menu.new(%i[ テキ 定食], 690),
25
- Menu.new(%i[シャンピニオン ソース ハンバーグ 定食], 650),
26
- Menu.new(%i[ 焼肉 定食], 590),
27
- Menu.new(%i[カルビ 焼肉 定食], 630),
28
- Menu.new(%i[ バラ 焼肉 定食], 550),
29
- Menu.new(%i[スタミナ バラ 生姜焼 定食], 590),
30
- Menu.new(%i[ チリ ソース 定食], 630),
31
- Menu.new(%i[ブラウン ソース ハンバーグ 定食], 630),
32
- Menu.new(%i[豆腐 キムチ チゲ 膳 (プレミアム牛肉使用)], 530),
33
- Menu.new(%i[チゲ カルビ 焼肉 膳 (プレミアム牛肉使用)], 720),
34
- ])
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
+
68
+ # 松屋の朝定食
69
+ Morning = Set.new([%i[定番 朝 定食],
70
+ %i[焼鮭 定食],
71
+ %i[ソーセージ エッグ 定食]])
35
72
 
36
73
  # 松屋ネットワーク
37
74
  NetworkNode = Struct.new(:node, :follow) do
@@ -40,27 +77,24 @@ module Matsuya
40
77
  end
41
78
  end
42
79
 
43
- class << self
44
- # こんなことに使われるなんて可哀想なライブラリだな
45
- include Egison
46
-
47
- # 松屋ネットワークを構築し、始点を返す。
48
- # ==== Return
49
- # Matsuya::NetworkNode beginノード
50
- def network
51
- dic = {begin: NetworkNode.new(:begin, [])}
52
- Sample.each do |menu|
53
- [:begin, *menu.pattern, menu.price].each_cons(2) do |current, follow|
54
- node = dic[current] ||= NetworkNode.new(current, [])
55
- if follow.is_a? Symbol
56
- node.follow << dic[follow] ||= NetworkNode.new(follow, [])
57
- else
58
- node.follow << follow
59
- end
60
- end
61
- end
62
- 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
63
89
  end
90
+ end
91
+
92
+ # 松屋ネットワークを構築し、始点を返す。
93
+ NETWORK = dic.values
94
+
95
+ class << self
96
+ # 互換性のため
97
+ def network = NETWORK
64
98
 
65
99
  # お客様に提供する商品を作る。私は接客は不得意なので、ランダムなものが出てくる。
66
100
  # おかの値が1に近づくほど狂った商品が出てくる。
@@ -71,11 +105,11 @@ module Matsuya
71
105
  # Matsuya::NetworkNode 再帰呼出し用。省略する。
72
106
  # ==== Return
73
107
  # Array 材料を並べた配列
74
- 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 })
75
109
  if current.is_a? NetworkNode
76
110
  nex = current.follow.sample
77
- if nex.is_a?(NetworkNode) and rand < okano
78
- [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)]
79
113
  else
80
114
  [current.node, *generate(okano: okano, current: nex)]
81
115
  end
@@ -84,43 +118,46 @@ module Matsuya
84
118
 
85
119
  # 材料を選択したら釜に入れてぐーるぐーる。
86
120
  # キムカル丼のように、『キムチ+カルビ』がキムカルに変化するなど、松屋活用を考慮して
87
- # Matsuya.generate の戻り値をStringに変換する
121
+ # Matsuya.generate の戻り値を加工する
88
122
  # ==== Args
89
123
  # [dish] Array 現在の皿の状態
90
124
  # ==== Return
91
- # String できたー!どの特性を残そう?
125
+ # Array<String> できたー!どの特性を残そう?
92
126
  def preparation(dish)
93
- match(dish) do
94
- with(Egison::List.(*_head, :キムチ, :カルビ, *_tail)) do
127
+ case dish
128
+ in *head, :+, *tail
129
+ [head, :' ', tail, :セット]
130
+ in *head, :キムチ, :カルビ, *tail
95
131
  [head, :キムカル, tail]
96
- end
97
-
98
- with(Egison::List.(*_head, :ビビンバ, :丼, *_tail)) do
132
+ in *head, :創業, :牛, *tail
133
+ [head, :創業ビーフ, tail]
134
+ in *head, :創業, :プレミアム, :牛, *tail
135
+ [head, :創業プレミアムビーフ, tail]
136
+ in *head, :牛, :カレー, *tail
137
+ [head, :ビーフカレー, tail]
138
+ in *head, :ビビンバ, :丼, *tail
99
139
  [head, :ビビン丼, tail]
100
- end
101
-
102
- with(Egison::List.(*_head, :鶏, :チリ, *_tail)) do
103
- [head, :鶏のチリ, tail]
104
- end
105
-
106
- with(Egison::List.(*_head, :カルビ, :焼肉, *_tail)) do
107
- [head, :カルビ焼, tail]
108
- end
109
-
110
- with(Egison::List.(*_head, :プレミアム, *_center, :(プレミアム牛肉使用), *_tail)) do
111
- [head, :プレミアム, center + tail]
112
- end
113
-
114
- with(Egison::List.(*_head, :牛, :めし, *_center, :(プレミアム牛肉使用), *_tail)) do
115
- [:プレミアム, head, :牛, :めし, center + tail]
116
- end
117
-
118
- with(Egison::Multiset.(*_not_match)) do
119
- not_match
120
- end
140
+ in *head, :海老, :チリ, *tail
141
+ [head, :海老のチリ, tail]
142
+ in *head, :豚, :肩ロース, :豚, :焼肉定食, *tail
143
+ [head, :豚, :肩ロース, :の, :豚, :焼肉定食, tail]
144
+ in *head, :豚, :肩ロース, :生姜焼, :定食, *tail
145
+ [head, :豚, :肩ロース, :の, :生姜焼, :定食, tail]
146
+ in *head, :玉子, :ハンバーグ, *tail
147
+ [head, :エッグ, :ハンバーグ, tail]
148
+ in *head, :ネギ, :玉子, *tail
149
+ [head, :ネギたま, tail]
150
+ in *head, :とろろ, :玉子, *tail
151
+ [head, :とろたま, tail]
152
+ in *head, :カレー, :牛, *tail
153
+ [head, :カレギュウ, tail]
154
+ in *head, :ハンバーグ, :皿, *tail
155
+ [head, :バーグディッシュ, tail]
156
+ else
157
+ dish
158
+ end.flat_map do |node|
159
+ if node.is_a? Array then preparation(node) else node end
121
160
  end
122
- .map{|node| if node.is_a? Array then preparation(node) else node end }
123
- .flatten
124
161
  end
125
162
 
126
163
  # 商品を注文し、商品を受け取る
@@ -129,8 +166,8 @@ module Matsuya
129
166
  # Float おかの値。おかの値が高いと商品が変異する確率が上がる。0-1の範囲の値。
130
167
  # ==== Return
131
168
  # String 商品名
132
- def order(okano=0.1) # !> shadowing outer local variable - ys2
133
- preparation(generate.reject{|x|x==:begin}).join
169
+ def order(okano: 0.1)
170
+ preparation(generate(okano: okano).reject { _1 == :begin }).join
134
171
  end
135
172
  end
136
173
  end
@@ -1,3 +1,3 @@
1
1
  module Matsuya
2
- VERSION = "0.2.1"
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.0'
21
+ spec.required_ruby_version = '>= 3.0'
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.7"
24
- spec.add_development_dependency "rake", "~> 10.0"
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,57 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: matsuya
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toshiaki Asai
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-06 00:00:00.000000000 Z
11
+ date: 2021-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
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: '1.7'
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.0'
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.0'
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
@@ -73,24 +59,23 @@ homepage: https://github.com/toshia/matsuya-generator-ruby
73
59
  licenses:
74
60
  - MIT
75
61
  metadata: {}
76
- post_install_message:
62
+ post_install_message:
77
63
  rdoc_options: []
78
64
  require_paths:
79
65
  - lib
80
66
  required_ruby_version: !ruby/object:Gem::Requirement
81
67
  requirements:
82
- - - "~>"
68
+ - - ">="
83
69
  - !ruby/object:Gem::Version
84
- version: '2.0'
70
+ version: '3.0'
85
71
  required_rubygems_version: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - ">="
88
74
  - !ruby/object:Gem::Version
89
75
  version: '0'
90
76
  requirements: []
91
- rubyforge_project:
92
- rubygems_version: 2.4.5.1
93
- signing_key:
77
+ rubygems_version: 3.2.3
78
+ signing_key:
94
79
  specification_version: 4
95
80
  summary: I'm hungry. gyu-meshi! gyu-meshi!
96
81
  test_files: []