cureutils 0.1.4 → 0.1.5
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 +4 -4
- data/README.md +76 -31
- data/cureutils.gemspec +2 -2
- data/lib/cureutils/cli.rb +52 -196
- data/lib/cureutils/common.rb +38 -0
- data/lib/cureutils/cure_date_manager.rb +137 -0
- data/lib/cureutils/cure_echo_manager.rb +71 -0
- data/lib/cureutils/cure_grep_manager.rb +75 -0
- data/lib/cureutils/cure_janken_manager.rb +69 -0
- data/lib/cureutils/cure_translate_manager.rb +44 -0
- data/lib/cureutils/version.rb +1 -1
- metadata +10 -6
- data/lib/cureutils/cure_date_checker.rb +0 -81
- data/lib/cureutils/janken_controller.rb +0 -68
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 638a3b1f4eb73a02514eece933d1e92e6df5a407
|
4
|
+
data.tar.gz: 5c183b238f20bda184636daf26159568c80f6428
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4add95659a50a809e439fdd9b3aea5067a2e95ccfaaa32553dbd1e94db07bbac135a1e4593963dd611958dc6841a2352c77b7cd56d4a0f5e0c0ef7e9f811e711
|
7
|
+
data.tar.gz: 026b49dbdd0f189a5a2c5660704d7cec7152bcfdaf5debf735c21ef93324a558e3f29d24ea53260d01914600b6a5508b7d25cf76e8e7c471766f7d4977b39176
|
data/README.md
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
# Cureutils
|
6
6
|
[](https://badge.fury.io/rb/cureutils)
|
7
7
|
|
8
|
-
Useful command line tool for Japanese battle heroine
|
8
|
+
Useful command line tool for Japanese battle heroine Pretty Cure (Precure).
|
9
9
|
|
10
10
|
## Installation
|
11
11
|
|
12
|
-
Install
|
12
|
+
Install:
|
13
13
|
|
14
14
|
$ gem install cureutils
|
15
15
|
|
@@ -18,47 +18,90 @@ After that, `cure` command is available.
|
|
18
18
|
|
19
19
|
$ cure
|
20
20
|
|
21
|
-
|
21
|
+
# Usage
|
22
22
|
|
23
|
-
|
23
|
+
```
|
24
|
+
$ cure help
|
25
|
+
Commands:
|
26
|
+
cure date [OPTIONS] [+FORMAT] # Display date, time and Precure related events.
|
27
|
+
cure echo [OPTIONS] PATTERN # Print messages of Precure.
|
28
|
+
cure girls # Print girls' name
|
29
|
+
cure grep [OPTIONS] PATTERN # Print lines matching a pattern.
|
30
|
+
cure help [COMMAND] # Describe available commands or one specific command
|
31
|
+
cure humanize # Change precure_name to human_name.
|
32
|
+
cure janken # Let's play "Pikarin Janken" !
|
33
|
+
cure precures # Print Precure names
|
34
|
+
cure tr PATTERN REPLACE # Translate Precure related parameters.
|
35
|
+
cure transform # Change human_name to precure_name
|
36
|
+
```
|
37
|
+
|
38
|
+
## `cure date`
|
24
39
|
Display date, time and Precure related events.
|
25
40
|
|
41
|
+
```
|
42
|
+
cure date [OPTIONS] [+FORMAT]
|
43
|
+
```
|
44
|
+
|
26
45
|
```sh
|
27
46
|
$ cure date
|
28
47
|
2016-06-17 21:28:42 魔法つかいプリキュア!放映期間
|
29
48
|
```
|
30
49
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
50
|
+
### Output format
|
51
|
+
|
52
|
+
| Format specifier | Description | Example |
|
53
|
+
| --- | --- | --- |
|
54
|
+
| %Y | Year | 2016 |
|
55
|
+
| %m | Month | 12 |
|
56
|
+
| %d | Date | 31 |
|
57
|
+
| @P | Precure related events. | 魔法つかいプリキュア!放映期間 |
|
36
58
|
|
37
|
-
|
59
|
+
And other general date formats are usable.
|
60
|
+
|
61
|
+
### Options
|
38
62
|
|
39
63
|
| Option | Description |
|
40
64
|
| ------ | --------- |
|
41
65
|
| -d | cure date -d STRING: display time described by STRING |
|
42
66
|
|
43
|
-
|
44
67
|
```sh
|
45
68
|
$ cure date -d '3 years ago' '+%Y/%m @P'
|
46
69
|
2013/06 ドキドキ!プリキュア放映期間
|
47
70
|
```
|
48
71
|
|
49
|
-
|
50
|
-
### cure echo
|
72
|
+
## `cure echo`
|
51
73
|
Print messages of Precure.
|
52
74
|
|
75
|
+
```
|
76
|
+
cure echo [OPTIONS] PATTERN
|
77
|
+
```
|
78
|
+
|
53
79
|
```sh
|
54
80
|
$ cure echo
|
55
81
|
みんなの思いを守るために
|
56
82
|
心をひとつに!
|
57
83
|
思いよ届け!キュアエコー!
|
84
|
+
|
85
|
+
$ cure echo -p happy
|
86
|
+
(レディ?)
|
87
|
+
プリキュア・スマイルチャージ!
|
88
|
+
(ゴー!ゴー!レッツ・ゴー!ハッピー!!)
|
89
|
+
キラキラ輝く未来の光! キュアハッピー!
|
90
|
+
5つの光が導く未来!
|
91
|
+
輝け!スマイルプリキュア!
|
58
92
|
```
|
59
93
|
|
60
|
-
###
|
61
|
-
|
94
|
+
### Options
|
95
|
+
|
96
|
+
| Option | Description |
|
97
|
+
| ------ | ----------- |
|
98
|
+
| -a | Print attack message. |
|
99
|
+
| -q | Print messages immediately. |
|
100
|
+
| -p | Print the given PRECURE's message. |
|
101
|
+
|
102
|
+
|
103
|
+
## `cure girls`
|
104
|
+
Print girls' name.
|
62
105
|
|
63
106
|
```sh
|
64
107
|
$ cure girls
|
@@ -75,16 +118,23 @@ $ cure girls
|
|
75
118
|
...
|
76
119
|
```
|
77
120
|
|
78
|
-
|
121
|
+
## `cure grep`
|
79
122
|
Print lines matching a pattern.
|
80
123
|
|
124
|
+
```
|
125
|
+
cure grep [OPTIONS] PATTERN
|
126
|
+
```
|
127
|
+
|
81
128
|
```sh
|
82
129
|
$ echo キュア{レッド,ピンク,ブラック,ブルー,ホワイト}"\n" | cure grep
|
83
130
|
キュアブラック
|
84
131
|
キュアホワイト
|
132
|
+
|
133
|
+
$ echo "こんにちは、 私はキュアレモネードです。" | cure grep '私は[:precure_name:]です。'
|
134
|
+
こんにちは、 私はキュアレモネードです。
|
85
135
|
```
|
86
136
|
|
87
|
-
|
137
|
+
### Options
|
88
138
|
|
89
139
|
| Option | Description |
|
90
140
|
| ------ | ----------- |
|
@@ -92,7 +142,7 @@ $ echo キュア{レッド,ピンク,ブラック,ブルー,ホワイト}"\n" |
|
|
92
142
|
| -o | Print only the matched (non-empty) parts of a matching line, with each such part on a separate out. |
|
93
143
|
|
94
144
|
|
95
|
-
|
145
|
+
### Folloing "Precure bracket expression"can be used.
|
96
146
|
|
97
147
|
| Expression | Description |
|
98
148
|
| ---------- | -------------- |
|
@@ -103,12 +153,7 @@ $ echo キュア{レッド,ピンク,ブラック,ブルー,ホワイト}"\n" |
|
|
103
153
|
| [:precure_name:] | Precure name. |
|
104
154
|
|
105
155
|
|
106
|
-
|
107
|
-
$ cat txt | cure grep '私は[:precure_name:]です。'
|
108
|
-
こんにちは、 私はキュアレモネードです。
|
109
|
-
```
|
110
|
-
|
111
|
-
### cure tr
|
156
|
+
## `cure tr`
|
112
157
|
Translate Precure related parameters.
|
113
158
|
|
114
159
|
```sh
|
@@ -116,7 +161,7 @@ $ echo 相田マナ | cure tr '[:human_name:]' '[:cast_name:]'
|
|
116
161
|
生天目仁美
|
117
162
|
```
|
118
163
|
|
119
|
-
|
164
|
+
### Folloing "Precure bracket expression" are available.
|
120
165
|
|
121
166
|
| Expression | Description |
|
122
167
|
| ---------- | -------------- |
|
@@ -127,15 +172,15 @@ $ echo 相田マナ | cure tr '[:human_name:]' '[:cast_name:]'
|
|
127
172
|
| [:precure_name:] | Precure name. |
|
128
173
|
|
129
174
|
|
130
|
-
|
131
|
-
|
175
|
+
## `cure transform`
|
176
|
+
Change human_name to precure_name
|
132
177
|
|
133
178
|
```sh
|
134
179
|
$ echo '私の名前は十六夜リコです。' | cure transform
|
135
180
|
私の名前はキュアマジカルです。
|
136
181
|
```
|
137
182
|
|
138
|
-
|
183
|
+
## `cure humanize`
|
139
184
|
Change precure_name to human_name.
|
140
185
|
|
141
186
|
```sh
|
@@ -143,7 +188,7 @@ $ echo キュア{ハート,エース} | cure humanize
|
|
143
188
|
相田マナ 円亜久里
|
144
189
|
```
|
145
190
|
|
146
|
-
|
191
|
+
## `cure janken`
|
147
192
|
Let's play "Pikarin Janken" !
|
148
193
|
|
149
194
|
```sh
|
@@ -167,8 +212,8 @@ Exit status is changed depending on the result.
|
|
167
212
|
| You lose | 1 |
|
168
213
|
| Draw | 2 |
|
169
214
|
|
170
|
-
|
171
|
-
Print Precure names
|
215
|
+
## `cure precures`
|
216
|
+
Print Precure names.
|
172
217
|
|
173
218
|
```
|
174
219
|
$ cure precures
|
data/cureutils.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Cureutils::Version
|
9
9
|
spec.authors = ['Yamada, Yasuhiro']
|
10
10
|
spec.email = ['greengregson@gmail.com']
|
11
|
-
spec.summary = 'Useful commands for battle heroine
|
12
|
-
spec.description = '
|
11
|
+
spec.summary = 'Useful commands for battle heroine Pretty Cure (Precure).'
|
12
|
+
spec.description = 'Useful command line tool for Japanese battle heroine Pretty Cure (Precure).'
|
13
13
|
spec.homepage = 'https://github.com/greymd/cureutils'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
data/lib/cureutils/cli.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
require 'cureutils/version'
|
3
|
-
require 'cureutils/
|
4
|
-
require 'cureutils/
|
3
|
+
require 'cureutils/common'
|
4
|
+
require 'cureutils/cure_janken_manager'
|
5
|
+
require 'cureutils/cure_date_manager'
|
6
|
+
require 'cureutils/cure_grep_manager'
|
7
|
+
require 'cureutils/cure_echo_manager'
|
8
|
+
require 'cureutils/cure_translate_manager'
|
5
9
|
require 'active_support'
|
6
10
|
require 'active_support/time'
|
7
11
|
require 'time'
|
@@ -10,10 +14,6 @@ require 'rubicure'
|
|
10
14
|
require 'colorize'
|
11
15
|
|
12
16
|
module Cureutils
|
13
|
-
module EchoMode
|
14
|
-
TRANSFORM = 1
|
15
|
-
ATTACK = 2
|
16
|
-
end
|
17
17
|
#
|
18
18
|
# The class represents the cli interface
|
19
19
|
#
|
@@ -26,12 +26,18 @@ module Cureutils
|
|
26
26
|
|
27
27
|
desc 'transform', 'Change human_name to precure_name'
|
28
28
|
def transform
|
29
|
-
|
29
|
+
manager = CureTranslateManager.new
|
30
|
+
manager.translate_from_to('[:human_name:]', '[:precure_name:]')
|
31
|
+
manager.in = $stdin
|
32
|
+
exit(manager.print_results)
|
30
33
|
end
|
31
34
|
|
32
35
|
desc 'humanize', 'Change precure_name to human_name.'
|
33
36
|
def humanize
|
34
|
-
|
37
|
+
manager = CureTranslateManager.new
|
38
|
+
manager.translate_from_to('[:precure_name:]', '[:human_name:]')
|
39
|
+
manager.in = $stdin
|
40
|
+
exit(manager.print_results)
|
35
41
|
end
|
36
42
|
|
37
43
|
desc 'girls', "Print girls' name"
|
@@ -50,217 +56,67 @@ module Cureutils
|
|
50
56
|
|
51
57
|
desc 'grep [OPTIONS] PATTERN', 'Print lines matching a pattern.'
|
52
58
|
option 'extended-regexp', aliases: 'E',
|
53
|
-
|
54
|
-
|
59
|
+
type: :boolean,
|
60
|
+
desc: 'Disable Precure Bracket Expression.'
|
55
61
|
option 'only-matching', aliases: 'o',
|
56
|
-
|
57
|
-
|
62
|
+
type: :boolean,
|
63
|
+
desc: 'Print only the matched parts.'
|
58
64
|
def grep(default_pat = '[:precure_name:]', filename = nil)
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
@input.each do |line|
|
68
|
-
matched_strs = line.scan(/#{pat}/)
|
69
|
-
matched_strs.empty? || matched_strs.each do |str|
|
70
|
-
puts str
|
71
|
-
end
|
72
|
-
end
|
73
|
-
else
|
74
|
-
@input.each do |line|
|
75
|
-
matched_strs = line.scan(/#{pat}/)
|
76
|
-
matched_strs.empty? || matched_strs.each do |str|
|
77
|
-
puts str.red
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
else
|
82
|
-
if enable_color
|
83
|
-
@input.each do |line|
|
84
|
-
puts line.gsub(/#{pat}/, '\0') if line =~ /#{pat}/
|
85
|
-
end
|
86
|
-
else
|
87
|
-
@input.each do |line|
|
88
|
-
puts line.gsub(/#{pat}/, '\0'.red) if line =~ /#{pat}/
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
65
|
+
manager = CureGrepManager.new
|
66
|
+
manager.source_input(filename)
|
67
|
+
manager.pattern(default_pat.clone, options['extended-regexp'.to_sym])
|
68
|
+
# Check the file discriptor to check the pipe exists or not.
|
69
|
+
manager.option_colorize($stdout.isatty)
|
70
|
+
manager.option_only(options['only-matching'.to_sym])
|
71
|
+
# Print matched lines.
|
72
|
+
exit(manager.print_results)
|
92
73
|
end
|
93
74
|
|
94
75
|
desc 'tr PATTERN REPLACE', 'Translate Precure related parameters.'
|
95
76
|
def tr(pat_from = '[:precure_name:]', pat_to = '[:human_name:]')
|
96
|
-
|
97
|
-
|
98
|
-
|
77
|
+
manager = CureTranslateManager.new
|
78
|
+
manager.in = $stdin
|
79
|
+
manager.translate_from_to(pat_from, pat_to)
|
80
|
+
exit(manager.print_results)
|
99
81
|
end
|
100
82
|
|
101
|
-
desc 'echo PATTERN', 'Print messages of Precure.'
|
83
|
+
desc 'echo [OPTIONS] PATTERN', 'Print messages of Precure.'
|
102
84
|
option 'quick', aliases: 'q',
|
103
|
-
|
104
|
-
|
85
|
+
type: :boolean,
|
86
|
+
desc: 'Print messages immediately.'
|
105
87
|
option 'attack', aliases: 'a',
|
106
|
-
|
88
|
+
type: :boolean,
|
89
|
+
desc: 'Print attack message.'
|
107
90
|
option 'transform', aliases: 't',
|
108
|
-
|
91
|
+
type: :boolean,
|
92
|
+
desc: 'Print transform message.'
|
109
93
|
option 'precure', aliases: 'p',
|
110
|
-
|
94
|
+
type: :string,
|
95
|
+
desc: "Print the given PRECURE's message."
|
111
96
|
def echo
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
cure = Rubicure::Girl.config.find { |k, _v| k == cure_name.to_sym }
|
118
|
-
unless cure
|
119
|
-
$stderr.puts "No such precure #{cure_name}"
|
120
|
-
exit(1)
|
121
|
-
end
|
122
|
-
if message_mode == EchoMode::TRANSFORM
|
123
|
-
Cure.send(cure_name.to_sym).transform!
|
124
|
-
elsif message_mode == EchoMode::ATTACK
|
125
|
-
Cure.send(cure_name.to_sym).transform!
|
126
|
-
Cure.send(cure_name.to_sym).attack!
|
127
|
-
end
|
97
|
+
manager = CureEchoManager.new
|
98
|
+
manager.precure(options[:precure])
|
99
|
+
manager.msg_attack(options[:attack])
|
100
|
+
manager.nosleep(options[:quick])
|
101
|
+
exit(manager.print_results)
|
128
102
|
end
|
129
103
|
|
130
104
|
desc 'date [OPTIONS] [+FORMAT]',
|
131
|
-
|
105
|
+
'Display date, time and Precure related events.'
|
132
106
|
option 'date', aliases: 'd'
|
133
107
|
# Original date command's default is '+%a %b %e %H:%M:%S %Z %Y @P'
|
134
108
|
# However, I would like to adopt this setting.
|
135
109
|
def date(fmt = '+%F %H:%M:%S @P')
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
110
|
+
manager = CureDateManager.new
|
111
|
+
manager.datetime(options[:date])
|
112
|
+
manager.format = fmt
|
113
|
+
exit(manager.print_results)
|
140
114
|
end
|
141
115
|
|
142
|
-
desc 'janken', %
|
116
|
+
desc 'janken', %q(Let's play "Pikarin Janken" !)
|
143
117
|
def janken
|
144
|
-
|
145
|
-
exit(
|
146
|
-
end
|
147
|
-
|
148
|
-
private
|
149
|
-
|
150
|
-
def input_from(filename)
|
151
|
-
if filename.nil? || filename.empty?
|
152
|
-
output = $stdin
|
153
|
-
elsif filename =~ /^-$/
|
154
|
-
# If the file name is "-", use STDIN.
|
155
|
-
output = $stdin
|
156
|
-
else
|
157
|
-
begin
|
158
|
-
output = File.open(filename)
|
159
|
-
rescue SystemCallError => e
|
160
|
-
puts %(class=[#{e.class}] message=[#{e.message}])
|
161
|
-
rescue IOError => e
|
162
|
-
puts %(class=[#{e.class}] message=[#{e.message}])
|
163
|
-
end
|
164
|
-
end
|
165
|
-
output
|
166
|
-
end
|
167
|
-
|
168
|
-
def update_fmt(datetime, fmt)
|
169
|
-
# Find precure related events
|
170
|
-
date4check_event = time2date(datetime)
|
171
|
-
found_event = CureDateChecker.events(date4check_event)
|
172
|
-
checked_fmt = fmt
|
173
|
-
if fmt =~ /^\+(.*)$/
|
174
|
-
checked_fmt = Regexp.last_match(1)
|
175
|
-
else
|
176
|
-
puts "cure date: invalid date format '#{fmt}'"
|
177
|
-
exit 1
|
178
|
-
end
|
179
|
-
# Find precure related events
|
180
|
-
checked_fmt.gsub(/@P/, found_event)
|
181
|
-
end
|
182
|
-
|
183
|
-
def create_time_obj(time_str)
|
184
|
-
time_str ? natural_lang2time(time_str) : Time.now
|
185
|
-
end
|
186
|
-
|
187
|
-
def natural_lang2time(time_str)
|
188
|
-
updated_fmt = time_str.dup
|
189
|
-
updated_fmt.gsub!(/yesterday/, '1 day ago')
|
190
|
-
updated_fmt.gsub!(/tomorrow/, '-1 day ago')
|
191
|
-
units = 'second|minute|hour|day|week|month|year'
|
192
|
-
regulated_format = /(-?[0-9]+) *(#{units})s? *(ago)?/
|
193
|
-
if updated_fmt =~ regulated_format
|
194
|
-
diff_value = Regexp.last_match(1).to_i
|
195
|
-
unit = Regexp.last_match(2).to_sym
|
196
|
-
minus_flg = Regexp.last_match(3)
|
197
|
-
if minus_flg.nil?
|
198
|
-
Time.now + diff_value.send(unit)
|
199
|
-
else
|
200
|
-
Time.now - diff_value.send(unit)
|
201
|
-
end
|
202
|
-
else
|
203
|
-
Time.parse(updated_fmt)
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
# Convert string to precure regular expression
|
208
|
-
def pregex2regex(regex, br_flg = false)
|
209
|
-
this_regex = regex.dup
|
210
|
-
br_ex = br_flg ? '' : '?:'
|
211
|
-
%w(girl_name human_name precure_name cast_name color).each do |attr|
|
212
|
-
expression = '\[:' + attr + ':\]'
|
213
|
-
precures_ex = cure_list(attr.to_sym).join('|')
|
214
|
-
replaced = "(#{br_ex}#{precures_ex})"
|
215
|
-
this_regex.gsub!(/#{expression}/, replaced)
|
216
|
-
end
|
217
|
-
this_regex
|
218
|
-
end
|
219
|
-
|
220
|
-
def str2pregex(str)
|
221
|
-
'[:' + str + ':]'
|
222
|
-
end
|
223
|
-
|
224
|
-
def pregex2str(str)
|
225
|
-
str.gsub(/\[:(.*):\]/, '\1')
|
226
|
-
end
|
227
|
-
|
228
|
-
def cure_list(sym)
|
229
|
-
list = Precure.all_stars.map(&sym)
|
230
|
-
list << Cure.echo[sym]
|
231
|
-
# Regulate cure princes human name
|
232
|
-
list.map do |str|
|
233
|
-
str.gsub!(/\(.+?\)/, '')
|
234
|
-
str
|
235
|
-
end
|
236
|
-
list
|
237
|
-
end
|
238
|
-
|
239
|
-
def cure_table(to_sym, from_sym)
|
240
|
-
to_arr = cure_list(to_sym)
|
241
|
-
from_arr = cure_list(from_sym)
|
242
|
-
hash = Hash[[to_arr, from_arr].transpose]
|
243
|
-
hash
|
244
|
-
end
|
245
|
-
|
246
|
-
def time2date(timeObj)
|
247
|
-
Date.parse(timeObj.strftime('%Y-%m-%d'))
|
248
|
-
end
|
249
|
-
|
250
|
-
def print_converted_text(input, from_sym, to_sym)
|
251
|
-
# Create precure regular expression
|
252
|
-
regex_tag = str2pregex(from_sym.to_s)
|
253
|
-
# Get patterns
|
254
|
-
cure_pattern = pregex2regex(regex_tag, true)
|
255
|
-
# Get Key-Value
|
256
|
-
table = cure_table(from_sym, to_sym)
|
257
|
-
input.each do |line|
|
258
|
-
updated_line = line.dup
|
259
|
-
line.scan(/#{cure_pattern}/).each do |pat|
|
260
|
-
updated_line.gsub!(/#{pat[0]}/, table[pat[0]])
|
261
|
-
end
|
262
|
-
puts updated_line
|
263
|
-
end
|
118
|
+
manager = CureJankenManager.new
|
119
|
+
exit(manager.janken.to_i)
|
264
120
|
end
|
265
121
|
end
|
266
122
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
#
|
3
|
+
# Class includes common methos which are refered from multiple commands.
|
4
|
+
#
|
5
|
+
class Common
|
6
|
+
class << self
|
7
|
+
# Convert string to precure regular expression
|
8
|
+
def pregex2regex(regex, br_flg = false)
|
9
|
+
this_regex = regex.dup
|
10
|
+
br_ex = br_flg ? '' : '?:'
|
11
|
+
%w(girl_name human_name precure_name cast_name color).each do |attr|
|
12
|
+
expression = '\[:' + attr + ':\]'
|
13
|
+
precures_ex = cure_list(attr.to_sym).join('|')
|
14
|
+
replaced = "(#{br_ex}#{precures_ex})"
|
15
|
+
this_regex.gsub!(/#{expression}/, replaced)
|
16
|
+
end
|
17
|
+
this_regex
|
18
|
+
end
|
19
|
+
|
20
|
+
def cure_list(sym)
|
21
|
+
list = Precure.all_stars.map(&sym)
|
22
|
+
list << Cure.echo[sym]
|
23
|
+
# Regulate cure princes human name
|
24
|
+
list.map do |str|
|
25
|
+
str.gsub!(/\(.+?\)/, '')
|
26
|
+
str
|
27
|
+
end
|
28
|
+
list
|
29
|
+
end
|
30
|
+
|
31
|
+
def cure_table(to_sym, from_sym)
|
32
|
+
to_arr = cure_list(to_sym)
|
33
|
+
from_arr = cure_list(from_sym)
|
34
|
+
hash = Hash[[to_arr, from_arr].transpose]
|
35
|
+
hash
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
#
|
5
|
+
# Date class supports the precure format
|
6
|
+
#
|
7
|
+
class CureDateManager
|
8
|
+
def initialize
|
9
|
+
hashize_cure_date unless @birth_date || @created_date
|
10
|
+
hashize_movie_date unless @movie_started_date
|
11
|
+
@datetime = Time.now
|
12
|
+
@format = '+%F %H:%M:%S @P'
|
13
|
+
@out = $stdout
|
14
|
+
end
|
15
|
+
|
16
|
+
def source_output(output = $stdout)
|
17
|
+
@out = output
|
18
|
+
end
|
19
|
+
|
20
|
+
def datetime(datetime_str)
|
21
|
+
@datetime = datetime_str ? natural_lang2time(datetime_str) : Time.now
|
22
|
+
end
|
23
|
+
|
24
|
+
attr_writer :format
|
25
|
+
|
26
|
+
def print_results
|
27
|
+
updated_fmt = update_fmt(@datetime, @format)
|
28
|
+
@out.puts @datetime.strftime(updated_fmt)
|
29
|
+
0
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def natural_lang2time(time_str)
|
35
|
+
updated_fmt = time_str.dup
|
36
|
+
updated_fmt.gsub!(/yesterday/, '1 day ago')
|
37
|
+
updated_fmt.gsub!(/tomorrow/, '-1 day ago')
|
38
|
+
units = 'second|minute|hour|day|week|month|year'
|
39
|
+
regulated_format = /(-?[0-9]+) *(#{units})s? *(ago)?/
|
40
|
+
if updated_fmt =~ regulated_format
|
41
|
+
diff_value = Regexp.last_match(1).to_i
|
42
|
+
unit = Regexp.last_match(2).to_sym
|
43
|
+
minus_flg = Regexp.last_match(3)
|
44
|
+
if minus_flg.nil?
|
45
|
+
Time.now + diff_value.send(unit)
|
46
|
+
else
|
47
|
+
Time.now - diff_value.send(unit)
|
48
|
+
end
|
49
|
+
else
|
50
|
+
Time.parse(updated_fmt)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def update_fmt(datetime, fmt)
|
55
|
+
# Find precure related events
|
56
|
+
date4check_event = time2date(datetime)
|
57
|
+
found_event = events(date4check_event)
|
58
|
+
checked_fmt = fmt
|
59
|
+
if fmt =~ /^\+(.*)$/
|
60
|
+
checked_fmt = Regexp.last_match(1)
|
61
|
+
else
|
62
|
+
puts "cure date: invalid date format '#{fmt}'"
|
63
|
+
exit 1
|
64
|
+
end
|
65
|
+
# Find precure related events
|
66
|
+
checked_fmt.gsub(/@P/, found_event)
|
67
|
+
end
|
68
|
+
|
69
|
+
def events(date)
|
70
|
+
event_list = [birth_date?(date),
|
71
|
+
created_date?(date),
|
72
|
+
movie_date?(date),
|
73
|
+
series_between(date)].compact
|
74
|
+
event_list.join('/')
|
75
|
+
end
|
76
|
+
|
77
|
+
def time2date(time_obj)
|
78
|
+
Date.parse(time_obj.strftime('%Y-%m-%d'))
|
79
|
+
end
|
80
|
+
|
81
|
+
def birth_date?(date)
|
82
|
+
date_str = date.strftime('%m/%d')
|
83
|
+
result = @birth_date[date_str]
|
84
|
+
# format
|
85
|
+
result.nil? ? nil : "#{result[:human_name]}(#{result[:precure_name]})誕生日"
|
86
|
+
end
|
87
|
+
|
88
|
+
def created_date?(date)
|
89
|
+
date_str = date.strftime('%m/%d')
|
90
|
+
result = @created_date[date_str]
|
91
|
+
# format
|
92
|
+
result.nil? ? nil : "#{result[:precure_name]}初登場日"
|
93
|
+
end
|
94
|
+
|
95
|
+
def movie_date?(date)
|
96
|
+
result = @created_date[date]
|
97
|
+
# format
|
98
|
+
result.nil? ? nil : "#{result[:title]}映画公開日"
|
99
|
+
end
|
100
|
+
|
101
|
+
def series_between(date)
|
102
|
+
event_name = nil
|
103
|
+
Rubicure::Series.config.each do |_k, v|
|
104
|
+
if v[:started_date] == date
|
105
|
+
event_name = "#{v[:title]}初放映"
|
106
|
+
break
|
107
|
+
end
|
108
|
+
if v[:ended_date] == date
|
109
|
+
event_name = "#{v[:title]}最終回"
|
110
|
+
break
|
111
|
+
end
|
112
|
+
# Nobody expects the future. Precure series may be abolished today.
|
113
|
+
v[:ended_date] = Date.today + 1 if v[:ended_date].nil?
|
114
|
+
if v[:started_date] < date && date < v[:ended_date]
|
115
|
+
event_name = "#{v[:title]}放映期間"
|
116
|
+
break
|
117
|
+
end
|
118
|
+
end
|
119
|
+
event_name
|
120
|
+
end
|
121
|
+
|
122
|
+
def hashize_cure_date
|
123
|
+
@birth_date = {}
|
124
|
+
@created_date = {}
|
125
|
+
Rubicure::Girl.config.map do |_k, v|
|
126
|
+
v[:birthday].nil? || @birth_date[v[:birthday]] = v
|
127
|
+
v[:created_date].nil? || @created_date[v[:created_date]] = v
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def hashize_movie_date
|
132
|
+
@movie_started_date = {}
|
133
|
+
Rubicure::Movie.config.map do |_k, v|
|
134
|
+
v[:started_date].nil? || @movie_started_date[v[:started_date]] = v
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# Singleton class for cure echo
|
4
|
+
class CureEchoManager
|
5
|
+
module EchoMode
|
6
|
+
TRANSFORM = 1
|
7
|
+
ATTACK = 2
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@in = $stdin
|
12
|
+
@out = $stdout
|
13
|
+
@err = $stderr
|
14
|
+
@cure_name = 'echo'
|
15
|
+
@message_mode = EchoMode::TRANSFORM
|
16
|
+
end
|
17
|
+
|
18
|
+
def source_output(source = $stdout)
|
19
|
+
@out = source
|
20
|
+
end
|
21
|
+
|
22
|
+
def source_input(source = $stdin)
|
23
|
+
@in = source
|
24
|
+
end
|
25
|
+
|
26
|
+
def source_err(source = $stderr)
|
27
|
+
@err = source
|
28
|
+
end
|
29
|
+
|
30
|
+
def precure(cure_name = false)
|
31
|
+
@cure_name = cure_name || 'echo'
|
32
|
+
end
|
33
|
+
|
34
|
+
def msg_transform(flag = true)
|
35
|
+
@message_mode = EchoMode::TRANSFORM if flag
|
36
|
+
end
|
37
|
+
|
38
|
+
def msg_attack(flag = false)
|
39
|
+
@message_mode = EchoMode::ATTACK if flag
|
40
|
+
end
|
41
|
+
|
42
|
+
def nosleep(flag = true)
|
43
|
+
Rubicure::Girl.sleep_sec = 1
|
44
|
+
Rubicure::Girl.sleep_sec = 0 if flag
|
45
|
+
end
|
46
|
+
|
47
|
+
def print_results
|
48
|
+
return 1 unless existing_precure?
|
49
|
+
if @message_mode == EchoMode::TRANSFORM
|
50
|
+
Cure.send(@cure_name.to_sym).transform!
|
51
|
+
elsif @message_mode == EchoMode::ATTACK
|
52
|
+
Cure.send(@cure_name.to_sym).transform!
|
53
|
+
Cure.send(@cure_name.to_sym).attack!
|
54
|
+
end
|
55
|
+
0
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def existing_precure?
|
61
|
+
found_precure = Rubicure::Girl.config.find do |k, _v|
|
62
|
+
k == @cure_name.to_sym
|
63
|
+
end
|
64
|
+
if found_precure
|
65
|
+
true
|
66
|
+
else
|
67
|
+
@err.puts "No such precure #{@cure_name}"
|
68
|
+
false
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'colorize'
|
3
|
+
|
4
|
+
# Singleton class for cure grep
|
5
|
+
# Managing the method for matching and printing.
|
6
|
+
class CureGrepManager
|
7
|
+
module ColorMode
|
8
|
+
NONE = :to_s
|
9
|
+
RED = :red
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@in = $stdin
|
14
|
+
@out = $stdout
|
15
|
+
@err = $stderr
|
16
|
+
@match_method = 'match'
|
17
|
+
end
|
18
|
+
|
19
|
+
def option_only(only_flag)
|
20
|
+
@only_matched = only_flag
|
21
|
+
@match_method = (only_flag ? 'scan' : 'match')
|
22
|
+
end
|
23
|
+
|
24
|
+
def option_colorize(colorize)
|
25
|
+
@str_color = (colorize ? ColorMode::RED : ColorMode::NONE)
|
26
|
+
end
|
27
|
+
|
28
|
+
def source_output(source = $stdout)
|
29
|
+
@out = source
|
30
|
+
end
|
31
|
+
|
32
|
+
def source_input(source = nil)
|
33
|
+
if source.nil? || source.empty?
|
34
|
+
@in = $stdin
|
35
|
+
elsif source =~ /^-$/
|
36
|
+
# If the file name is "-", use STDIN.
|
37
|
+
@in = $stdin
|
38
|
+
else
|
39
|
+
file(source)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def pattern(pat, is_exregex = false)
|
44
|
+
if is_exregex
|
45
|
+
@pattern = /#{pat}/
|
46
|
+
return
|
47
|
+
end
|
48
|
+
@pattern = /#{Common.pregex2regex(pat)}/
|
49
|
+
end
|
50
|
+
|
51
|
+
def print_results
|
52
|
+
exit_status = 1
|
53
|
+
@in.each do |line|
|
54
|
+
matched_strs = line.send(@match_method, @pattern)
|
55
|
+
next unless matched_strs
|
56
|
+
exit_status = 0
|
57
|
+
if @only_matched
|
58
|
+
matched_strs.each { |str| @out.puts str.send(@str_color) }
|
59
|
+
else
|
60
|
+
@out.puts line.gsub(@pattern, '\0'.send(@str_color))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
exit_status
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def file(filename)
|
69
|
+
@in = File.open(filename)
|
70
|
+
rescue SystemCallError => e
|
71
|
+
puts %(class=[#{e.class}] message=[#{e.message}])
|
72
|
+
rescue IOError => e
|
73
|
+
puts %(class=[#{e.class}] message=[#{e.message}])
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
#
|
3
|
+
# Class of Pikarin Janken
|
4
|
+
#
|
5
|
+
class CureJankenManager
|
6
|
+
def initialize
|
7
|
+
# Set the sleep time 0
|
8
|
+
Rubicure::Girl.sleep_sec = 0
|
9
|
+
# 0: win, 1: lose, 2: aiko
|
10
|
+
@result_table = [[2, 0, 1, 1],
|
11
|
+
[1, 2, 0, 1],
|
12
|
+
[0, 1, 2, 1],
|
13
|
+
[0, 0, 0, 2]]
|
14
|
+
@result_idx = %w(あなたのかち あなたのまけ あいこ)
|
15
|
+
@te_idx = %w(グー チョキ パー グッチョッパー)
|
16
|
+
@te_hash = Hash[[@te_idx, (0..3).map(&:to_s)].transpose]
|
17
|
+
@buf = []
|
18
|
+
@out = $stdout
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_writer :io
|
22
|
+
|
23
|
+
def source_output(output = $stdout)
|
24
|
+
@out = output
|
25
|
+
end
|
26
|
+
|
27
|
+
def puts(input)
|
28
|
+
@buf << input
|
29
|
+
end
|
30
|
+
|
31
|
+
def janken
|
32
|
+
Cure.peace.io = self
|
33
|
+
Cure.peace.janken
|
34
|
+
@buf[0..1].each do |msg|
|
35
|
+
@out.puts msg
|
36
|
+
end
|
37
|
+
judge
|
38
|
+
end
|
39
|
+
|
40
|
+
def generated_te
|
41
|
+
@buf.last =~ /(#{@te_idx.join('|')})/
|
42
|
+
@te_hash[Regexp.last_match(1)].to_i
|
43
|
+
end
|
44
|
+
|
45
|
+
def input_te
|
46
|
+
@out.print("1...グー, 2...チョキ, 3...パー : ")
|
47
|
+
# TODO: Check input and raise the error.
|
48
|
+
player_te = $stdin.gets
|
49
|
+
player_te.to_i - 1
|
50
|
+
end
|
51
|
+
|
52
|
+
def judge
|
53
|
+
cure_te = generated_te
|
54
|
+
player_te = input_te
|
55
|
+
result_num = @result_table[player_te][cure_te]
|
56
|
+
result = @result_idx[result_num]
|
57
|
+
print_results(@te_idx[player_te], @te_idx[cure_te], result)
|
58
|
+
result_num
|
59
|
+
end
|
60
|
+
|
61
|
+
def print_results(player_te, cure_te, result)
|
62
|
+
@out.puts
|
63
|
+
@out.puts 'あなた: ' + player_te
|
64
|
+
@out.puts 'キュアピース: ' + cure_te
|
65
|
+
@out.puts
|
66
|
+
@out.puts '[結果]'
|
67
|
+
@out.puts result
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
#
|
3
|
+
# Class for managing cure tr (translate).
|
4
|
+
#
|
5
|
+
class CureTranslateManager
|
6
|
+
def initialize
|
7
|
+
@translate_from = :human_name
|
8
|
+
@translate_to = :precure_name
|
9
|
+
@out = $stdout
|
10
|
+
@in = $stdin
|
11
|
+
end
|
12
|
+
|
13
|
+
attr_writer :out, :in
|
14
|
+
|
15
|
+
def translate_from_to(from, to)
|
16
|
+
@translate_from = pregex2str(from).to_sym
|
17
|
+
@translate_to = pregex2str(to).to_sym
|
18
|
+
end
|
19
|
+
|
20
|
+
def str2pregex(str)
|
21
|
+
'[:' + str + ':]'
|
22
|
+
end
|
23
|
+
|
24
|
+
def pregex2str(str)
|
25
|
+
str.gsub(/\[:(.*):\]/, '\1')
|
26
|
+
end
|
27
|
+
|
28
|
+
def print_results
|
29
|
+
# Create precure regular expression
|
30
|
+
regex_tag = str2pregex(@translate_from.to_s)
|
31
|
+
# Get patterns
|
32
|
+
cure_pattern = Common.pregex2regex(regex_tag, true)
|
33
|
+
# Get Key-Value
|
34
|
+
table = Common.cure_table(@translate_from, @translate_to)
|
35
|
+
@in.each do |line|
|
36
|
+
updated_line = line.dup
|
37
|
+
line.scan(/#{cure_pattern}/).each do |pat|
|
38
|
+
updated_line.gsub!(/#{pat[0]}/, table[pat[0]])
|
39
|
+
end
|
40
|
+
puts updated_line
|
41
|
+
end
|
42
|
+
0
|
43
|
+
end
|
44
|
+
end
|
data/lib/cureutils/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cureutils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yamada, Yasuhiro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -114,7 +114,7 @@ dependencies:
|
|
114
114
|
- - "~>"
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: 4.2.6
|
117
|
-
description:
|
117
|
+
description: Useful command line tool for Japanese battle heroine Pretty Cure (Precure).
|
118
118
|
email:
|
119
119
|
- greengregson@gmail.com
|
120
120
|
executables:
|
@@ -137,8 +137,12 @@ files:
|
|
137
137
|
- img/cureutils_logo.png
|
138
138
|
- lib/cureutils.rb
|
139
139
|
- lib/cureutils/cli.rb
|
140
|
-
- lib/cureutils/
|
141
|
-
- lib/cureutils/
|
140
|
+
- lib/cureutils/common.rb
|
141
|
+
- lib/cureutils/cure_date_manager.rb
|
142
|
+
- lib/cureutils/cure_echo_manager.rb
|
143
|
+
- lib/cureutils/cure_grep_manager.rb
|
144
|
+
- lib/cureutils/cure_janken_manager.rb
|
145
|
+
- lib/cureutils/cure_translate_manager.rb
|
142
146
|
- lib/cureutils/version.rb
|
143
147
|
homepage: https://github.com/greymd/cureutils
|
144
148
|
licenses:
|
@@ -163,5 +167,5 @@ rubyforge_project:
|
|
163
167
|
rubygems_version: 2.4.5
|
164
168
|
signing_key:
|
165
169
|
specification_version: 4
|
166
|
-
summary: Useful commands for battle heroine
|
170
|
+
summary: Useful commands for battle heroine Pretty Cure (Precure).
|
167
171
|
test_files: []
|
@@ -1,81 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
require 'date'
|
3
|
-
#
|
4
|
-
# Date class supports the precure format
|
5
|
-
#
|
6
|
-
class CureDateChecker
|
7
|
-
class << self
|
8
|
-
def events(date)
|
9
|
-
create_hash
|
10
|
-
event_list = [birth_date?(date),
|
11
|
-
created_date?(date),
|
12
|
-
movie_date?(date),
|
13
|
-
series_between(date)].compact
|
14
|
-
event_list.join('/')
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def create_hash
|
20
|
-
hashize_cure_date unless @birth_date || @created_date
|
21
|
-
hashize_movie_date unless @movie_started_date
|
22
|
-
end
|
23
|
-
|
24
|
-
def birth_date?(date)
|
25
|
-
date_str = date.strftime('%m/%d')
|
26
|
-
result = @birth_date[date_str]
|
27
|
-
# format
|
28
|
-
result.nil? ? nil : "#{result[:human_name]}(#{result[:precure_name]})誕生日"
|
29
|
-
end
|
30
|
-
|
31
|
-
def created_date?(date)
|
32
|
-
date_str = date.strftime('%m/%d')
|
33
|
-
result = @created_date[date_str]
|
34
|
-
# format
|
35
|
-
result.nil? ? nil : "#{result[:precure_name]}初登場日"
|
36
|
-
end
|
37
|
-
|
38
|
-
def movie_date?(date)
|
39
|
-
result = @created_date[date]
|
40
|
-
# format
|
41
|
-
result.nil? ? nil : "#{result[:title]}映画公開日"
|
42
|
-
end
|
43
|
-
|
44
|
-
def series_between(date)
|
45
|
-
event_name = nil
|
46
|
-
Rubicure::Series.config.each do |_k, v|
|
47
|
-
if v[:started_date] == date
|
48
|
-
event_name = "#{v[:title]}初放映"
|
49
|
-
break
|
50
|
-
end
|
51
|
-
if v[:ended_date] == date
|
52
|
-
event_name = "#{v[:title]}最終回"
|
53
|
-
break
|
54
|
-
end
|
55
|
-
# Nobody expects the future. Precure series may be abolished today.
|
56
|
-
v[:ended_date] = Date.today + 1 if v[:ended_date].nil?
|
57
|
-
if v[:started_date] < date && date < v[:ended_date]
|
58
|
-
event_name = "#{v[:title]}放映期間"
|
59
|
-
break
|
60
|
-
end
|
61
|
-
end
|
62
|
-
event_name
|
63
|
-
end
|
64
|
-
|
65
|
-
def hashize_cure_date
|
66
|
-
@birth_date = {}
|
67
|
-
@created_date = {}
|
68
|
-
Rubicure::Girl.config.map do |_k, v|
|
69
|
-
v[:birthday].nil? || @birth_date[v[:birthday]] = v
|
70
|
-
v[:created_date].nil? || @created_date[v[:created_date]] = v
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def hashize_movie_date
|
75
|
-
@movie_started_date = {}
|
76
|
-
Rubicure::Movie.config.map do |_k, v|
|
77
|
-
v[:started_date].nil? || @movie_started_date[v[:started_date]] = v
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
#
|
3
|
-
# Wrapper class of Pikarin Janken
|
4
|
-
#
|
5
|
-
class JankenContoller
|
6
|
-
class << self
|
7
|
-
def initialize
|
8
|
-
# Set the sleep time 0
|
9
|
-
Rubicure::Girl.sleep_sec = 0
|
10
|
-
# 0: win, 1: lose, 2: aiko
|
11
|
-
@result_table = [[2, 0, 1, 1],
|
12
|
-
[1, 2, 0, 1],
|
13
|
-
[0, 1, 2, 1],
|
14
|
-
[0, 0, 0, 2]]
|
15
|
-
@result_idx = %w(あなたのかち あなたのまけ あいこ)
|
16
|
-
@te_idx = %w(グー チョキ パー グッチョッパー)
|
17
|
-
@te_hash = Hash[[@te_idx, (0..3).map(&:to_s)].transpose]
|
18
|
-
@buf = []
|
19
|
-
@io = $stdout
|
20
|
-
end
|
21
|
-
|
22
|
-
attr_writer :io
|
23
|
-
|
24
|
-
def puts(input)
|
25
|
-
@buf << input
|
26
|
-
end
|
27
|
-
|
28
|
-
def janken
|
29
|
-
initialize
|
30
|
-
Cure.peace.io = self
|
31
|
-
Cure.peace.janken
|
32
|
-
@buf[0..1].each do |msg|
|
33
|
-
@io.puts msg
|
34
|
-
end
|
35
|
-
judge
|
36
|
-
end
|
37
|
-
|
38
|
-
def generated_te
|
39
|
-
@buf.last =~ /(#{@te_idx.join('|')})/
|
40
|
-
@te_hash[Regexp.last_match(1)].to_i
|
41
|
-
end
|
42
|
-
|
43
|
-
def input_te
|
44
|
-
@io.print("1...グー, 2...チョキ, 3...パー : ")
|
45
|
-
# TODO: Check input and raise the error.
|
46
|
-
player_te = $stdin.gets
|
47
|
-
player_te.to_i - 1
|
48
|
-
end
|
49
|
-
|
50
|
-
def judge
|
51
|
-
cure_te = generated_te
|
52
|
-
player_te = input_te
|
53
|
-
result_num = @result_table[player_te][cure_te]
|
54
|
-
result = @result_idx[result_num]
|
55
|
-
print_results(@te_idx[player_te], @te_idx[cure_te], result)
|
56
|
-
result_num
|
57
|
-
end
|
58
|
-
|
59
|
-
def print_results(player_te, cure_te, result)
|
60
|
-
@io.puts
|
61
|
-
@io.puts 'あなた: ' + player_te
|
62
|
-
@io.puts 'キュアピース: ' + cure_te
|
63
|
-
@io.puts
|
64
|
-
@io.puts '[結果]'
|
65
|
-
@io.puts result
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|