aun 0.0.1
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 +7 -0
- data/.gitignore +14 -0
- data/.rspec +2 -0
- data/.rubocop.yml +1 -0
- data/.travis.yml +7 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +172 -0
- data/Rakefile +8 -0
- data/aun.gemspec +24 -0
- data/bin/aun +68 -0
- data/images/aun.gif +0 -0
- data/lib/aun/default_messages.rb +10 -0
- data/lib/aun/definition_manager.rb +33 -0
- data/lib/aun/finder.rb +30 -0
- data/lib/aun/message.rb +49 -0
- data/lib/aun/message_formatter.rb +28 -0
- data/lib/aun/version.rb +3 -0
- data/lib/aun_core.rb +9 -0
- data/rubocop-todo.yml +49 -0
- data/spec/aun/finder_spec.rb +315 -0
- data/spec/aun/message_formatter_spec.rb +183 -0
- data/spec/aun/message_spec.rb +273 -0
- data/spec/spec_helper.rb +16 -0
- metadata +114 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'aun/message'
|
2
|
+
|
3
|
+
module Aun
|
4
|
+
# MessageFormatter
|
5
|
+
class MessageFormatter
|
6
|
+
KEYS = %w(A Un Owner Origin UserDefined)
|
7
|
+
|
8
|
+
def self.csv_hearer
|
9
|
+
KEYS.join(',')
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.csv(message)
|
13
|
+
message.columns.join(',')
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.markdown_table_header
|
17
|
+
header = <<-EOS
|
18
|
+
|#{KEYS.join('|')}|
|
19
|
+
#{'|:--' * KEYS.size}|
|
20
|
+
EOS
|
21
|
+
header.chomp
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.markdown_table(message)
|
25
|
+
"|#{message.columns.join('|')}|"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/aun/version.rb
ADDED
data/lib/aun_core.rb
ADDED
data/rubocop-todo.yml
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# This configuration was generated by `rubocop --auto-gen-config`
|
2
|
+
# on 2014-10-04 01:37:28 +0900 using RuboCop version 0.21.0.
|
3
|
+
# The point is for the user to remove these configuration records
|
4
|
+
# one by one as the offenses are removed from the code base.
|
5
|
+
# Note that changes in the inspected code, or installation of new
|
6
|
+
# versions of RuboCop, may require this file to be generated again.
|
7
|
+
|
8
|
+
# Offense count: 1
|
9
|
+
AccessorMethodName:
|
10
|
+
Enabled: false
|
11
|
+
|
12
|
+
# Offense count: 3
|
13
|
+
AsciiComments:
|
14
|
+
Enabled: false
|
15
|
+
|
16
|
+
# Offense count: 5
|
17
|
+
Documentation:
|
18
|
+
Enabled: false
|
19
|
+
|
20
|
+
# Offense count: 1
|
21
|
+
EmptyLinesAroundAccessModifier:
|
22
|
+
Enabled: false
|
23
|
+
|
24
|
+
# Offense count: 6
|
25
|
+
LineLength:
|
26
|
+
Max: 99
|
27
|
+
|
28
|
+
# Offense count: 2
|
29
|
+
RegexpLiteral:
|
30
|
+
MaxSlashes: 0
|
31
|
+
|
32
|
+
# Offense count: 9
|
33
|
+
# Configuration parameters: EnforcedStyleForMultiline, SupportedStyles.
|
34
|
+
TrailingComma:
|
35
|
+
Enabled: false
|
36
|
+
|
37
|
+
# Offense count: 2
|
38
|
+
# Cop supports --auto-correct.
|
39
|
+
# Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, Whitelist.
|
40
|
+
TrivialAccessors:
|
41
|
+
Enabled: false
|
42
|
+
|
43
|
+
# Offense count: 32
|
44
|
+
UnusedMethodArgument:
|
45
|
+
Enabled: false
|
46
|
+
|
47
|
+
# Offense count: 1
|
48
|
+
UselessAssignment:
|
49
|
+
Enabled: false
|
@@ -0,0 +1,315 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'aun/finder'
|
4
|
+
require 'aun/default_messages'
|
5
|
+
|
6
|
+
describe Aun::Finder do
|
7
|
+
context :talk do
|
8
|
+
cases = [
|
9
|
+
{
|
10
|
+
case_no: 1,
|
11
|
+
case_title: 'valid key',
|
12
|
+
key: '君名前は?',
|
13
|
+
expected: '田原年彦'
|
14
|
+
},
|
15
|
+
{
|
16
|
+
case_no: 2,
|
17
|
+
case_title: 'not exist key',
|
18
|
+
key: '山んば',
|
19
|
+
expected: ''
|
20
|
+
}
|
21
|
+
]
|
22
|
+
|
23
|
+
cases.each do |c|
|
24
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
25
|
+
begin
|
26
|
+
case_before c
|
27
|
+
|
28
|
+
# -- given --
|
29
|
+
aun_message = Aun::Finder.new
|
30
|
+
|
31
|
+
# -- when --
|
32
|
+
actual = aun_message.talk(c[:key])
|
33
|
+
|
34
|
+
# -- then --
|
35
|
+
expect(actual).to eq(c[:expected])
|
36
|
+
ensure
|
37
|
+
case_after c
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def case_before(c)
|
42
|
+
# implement each case before
|
43
|
+
end
|
44
|
+
|
45
|
+
def case_after(c)
|
46
|
+
# implement each case after
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context :owner_talk do
|
52
|
+
cases = [
|
53
|
+
{
|
54
|
+
case_no: 1,
|
55
|
+
case_title: 'valid key',
|
56
|
+
key: '君名前は?',
|
57
|
+
expected: '田原年彦「田原年彦」'
|
58
|
+
},
|
59
|
+
{
|
60
|
+
case_no: 2,
|
61
|
+
case_title: 'not exist key',
|
62
|
+
key: '山んば',
|
63
|
+
expected: ''
|
64
|
+
}
|
65
|
+
]
|
66
|
+
|
67
|
+
cases.each do |c|
|
68
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
69
|
+
begin
|
70
|
+
case_before c
|
71
|
+
|
72
|
+
# -- given --
|
73
|
+
aun_message = Aun::Finder.new
|
74
|
+
|
75
|
+
# -- when --
|
76
|
+
actual = aun_message.owner_talk(c[:key])
|
77
|
+
|
78
|
+
# -- then --
|
79
|
+
expect(actual).to eq(c[:expected])
|
80
|
+
ensure
|
81
|
+
case_after c
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def case_before(c)
|
86
|
+
# implement each case before
|
87
|
+
end
|
88
|
+
|
89
|
+
def case_after(c)
|
90
|
+
# implement each case after
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context :talk_with_origin do
|
96
|
+
cases = [
|
97
|
+
{
|
98
|
+
case_no: 1,
|
99
|
+
case_title: 'valid key',
|
100
|
+
key: '君名前は?',
|
101
|
+
expected: '田原年彦「田原年彦」 from [行け!稲中卓球部]'
|
102
|
+
},
|
103
|
+
{
|
104
|
+
case_no: 2,
|
105
|
+
case_title: 'not exist key',
|
106
|
+
key: '山んば',
|
107
|
+
expected: ''
|
108
|
+
}
|
109
|
+
]
|
110
|
+
|
111
|
+
cases.each do |c|
|
112
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
113
|
+
begin
|
114
|
+
case_before c
|
115
|
+
|
116
|
+
# -- given --
|
117
|
+
aun_message = Aun::Finder.new
|
118
|
+
|
119
|
+
# -- when --
|
120
|
+
actual = aun_message.talk_with_origin(c[:key])
|
121
|
+
|
122
|
+
# -- then --
|
123
|
+
expect(actual).to eq(c[:expected])
|
124
|
+
ensure
|
125
|
+
case_after c
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def case_before(c)
|
130
|
+
# implement each case before
|
131
|
+
end
|
132
|
+
|
133
|
+
def case_after(c)
|
134
|
+
# implement each case after
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
context :inspect do
|
140
|
+
cases = [
|
141
|
+
{
|
142
|
+
case_no: 1,
|
143
|
+
case_title: 'valid key',
|
144
|
+
key: '君名前は?',
|
145
|
+
expected: "阿:君名前は?\t吽:田原年彦\t発言者:田原年彦\t原典:行け!稲中卓球部,\tユーザー定義:false"
|
146
|
+
},
|
147
|
+
{
|
148
|
+
case_no: 2,
|
149
|
+
case_title: 'not exist key',
|
150
|
+
key: '山んば',
|
151
|
+
expected: ''
|
152
|
+
}
|
153
|
+
]
|
154
|
+
|
155
|
+
cases.each do |c|
|
156
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
157
|
+
begin
|
158
|
+
case_before c
|
159
|
+
|
160
|
+
# -- given --
|
161
|
+
aun_message = Aun::Finder.new
|
162
|
+
|
163
|
+
# -- when --
|
164
|
+
actual = aun_message.inspect(c[:key])
|
165
|
+
|
166
|
+
# -- then --
|
167
|
+
expect(actual).to eq(c[:expected])
|
168
|
+
ensure
|
169
|
+
case_after c
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def case_before(c)
|
174
|
+
# implement each case before
|
175
|
+
end
|
176
|
+
|
177
|
+
def case_after(c)
|
178
|
+
# implement each case after
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
context :inspect_all do
|
184
|
+
cases = [
|
185
|
+
{
|
186
|
+
case_no: 1,
|
187
|
+
case_title: 'valid key',
|
188
|
+
expected: <<-EOS
|
189
|
+
阿:君名前は?\t吽:田原年彦\t発言者:田原年彦\t原典:行け!稲中卓球部,\tユーザー定義:false
|
190
|
+
阿:山\t吽:川\t発言者:unknown\t原典:unknown,\tユーザー定義:false
|
191
|
+
阿:ぬるぽ\t吽:ガッ\t発言者:unknown\t原典:unknown,\tユーザー定義:false
|
192
|
+
EOS
|
193
|
+
}
|
194
|
+
]
|
195
|
+
|
196
|
+
cases.each do |c|
|
197
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
198
|
+
begin
|
199
|
+
case_before c
|
200
|
+
|
201
|
+
# -- given --
|
202
|
+
aun_message = Aun::Finder.new
|
203
|
+
|
204
|
+
# -- when --
|
205
|
+
actual = aun_message.inspect_all
|
206
|
+
|
207
|
+
# -- then --
|
208
|
+
expect(actual).to eq(c[:expected].chomp)
|
209
|
+
ensure
|
210
|
+
case_after c
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
def case_before(c)
|
215
|
+
# implement each case before
|
216
|
+
end
|
217
|
+
|
218
|
+
def case_after(c)
|
219
|
+
# implement each case after
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
context :aun_definitions do
|
225
|
+
cases = [
|
226
|
+
{
|
227
|
+
case_no: 1,
|
228
|
+
case_title: 'valid case',
|
229
|
+
expected: Aun::DefaultMessages::MESSAGES
|
230
|
+
}
|
231
|
+
]
|
232
|
+
|
233
|
+
cases.each do |c|
|
234
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
235
|
+
begin
|
236
|
+
case_before c
|
237
|
+
|
238
|
+
# -- given --
|
239
|
+
aun_message = Aun::Finder.new
|
240
|
+
|
241
|
+
# -- when --
|
242
|
+
# TODO: implement execute code
|
243
|
+
actual = aun_message.aun_definitions
|
244
|
+
|
245
|
+
# -- then --
|
246
|
+
expect(actual).to eq(c[:expected])
|
247
|
+
ensure
|
248
|
+
case_after c
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
def case_before(c)
|
253
|
+
# implement each case before
|
254
|
+
end
|
255
|
+
|
256
|
+
def case_after(c)
|
257
|
+
# implement each case after
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
context :add_messages do
|
263
|
+
ADDITIONAL_MESSAGES = [
|
264
|
+
Aun::Message.new(
|
265
|
+
'んーばばんばんば',
|
266
|
+
'めらっさめらっさ',
|
267
|
+
owner: 'パプワくん',
|
268
|
+
origin: '南国少年パプワくん',
|
269
|
+
user_defined: true
|
270
|
+
),
|
271
|
+
Aun::Message.new(
|
272
|
+
'ツー',
|
273
|
+
'カー',
|
274
|
+
user_defined: true
|
275
|
+
)
|
276
|
+
]
|
277
|
+
|
278
|
+
cases = [
|
279
|
+
{
|
280
|
+
case_no: 1,
|
281
|
+
case_title: 'case_title',
|
282
|
+
messages: ADDITIONAL_MESSAGES,
|
283
|
+
expected: Aun::DefaultMessages::MESSAGES + ADDITIONAL_MESSAGES
|
284
|
+
},
|
285
|
+
]
|
286
|
+
|
287
|
+
cases.each do |c|
|
288
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
289
|
+
begin
|
290
|
+
case_before c
|
291
|
+
|
292
|
+
# -- given --
|
293
|
+
aun_message = Aun::Finder.new
|
294
|
+
|
295
|
+
# -- when --
|
296
|
+
aun_message.add_messages(c[:messages])
|
297
|
+
actual = aun_message.messages
|
298
|
+
|
299
|
+
# -- then --
|
300
|
+
expect(actual).to eq(c[:expected])
|
301
|
+
ensure
|
302
|
+
case_after c
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
def case_before(c)
|
307
|
+
# implement each case before
|
308
|
+
end
|
309
|
+
|
310
|
+
def case_after(c)
|
311
|
+
# implement each case after
|
312
|
+
end
|
313
|
+
end
|
314
|
+
end
|
315
|
+
end
|
@@ -0,0 +1,183 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'aun/message_formatter'
|
4
|
+
require 'aun/message'
|
5
|
+
|
6
|
+
describe Aun::MessageFormatter do
|
7
|
+
context :csv_hearer do
|
8
|
+
cases = [
|
9
|
+
{
|
10
|
+
case_no: 1,
|
11
|
+
case_title: 'valid case',
|
12
|
+
expected: 'A,Un,Owner,Origin,UserDefined'
|
13
|
+
}
|
14
|
+
]
|
15
|
+
|
16
|
+
cases.each do |c|
|
17
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
18
|
+
begin
|
19
|
+
case_before c
|
20
|
+
|
21
|
+
# -- given --
|
22
|
+
# nothing
|
23
|
+
|
24
|
+
# -- when --
|
25
|
+
actual = Aun::MessageFormatter.csv_hearer
|
26
|
+
|
27
|
+
# -- then --
|
28
|
+
expect(actual).to eq(c[:expected])
|
29
|
+
ensure
|
30
|
+
case_after c
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def case_before(c)
|
35
|
+
# implement each case before
|
36
|
+
end
|
37
|
+
|
38
|
+
def case_after(c)
|
39
|
+
# implement each case after
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context :csv do
|
45
|
+
cases = [
|
46
|
+
{
|
47
|
+
case_no: 1,
|
48
|
+
case_title: 'all columns case',
|
49
|
+
message: Aun::Message.new(
|
50
|
+
'んーばばんばんば',
|
51
|
+
'めらっさめらっさ',
|
52
|
+
owner: 'パプワくん',
|
53
|
+
origin: '南国少年パプワくん',
|
54
|
+
user_defined: true
|
55
|
+
),
|
56
|
+
expected: 'んーばばんばんば,めらっさめらっさ,パプワくん,南国少年パプワくん,true'
|
57
|
+
},
|
58
|
+
{
|
59
|
+
case_no: 2,
|
60
|
+
case_title: 'part columns case',
|
61
|
+
message: Aun::Message.new('ツー', 'カー', user_defined: true),
|
62
|
+
expected: 'ツー,カー,unknown,unknown,true'
|
63
|
+
}
|
64
|
+
]
|
65
|
+
|
66
|
+
cases.each do |c|
|
67
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
68
|
+
begin
|
69
|
+
case_before c
|
70
|
+
|
71
|
+
# -- given --
|
72
|
+
# nothing
|
73
|
+
|
74
|
+
# -- when --
|
75
|
+
actual = Aun::MessageFormatter.csv(c[:message])
|
76
|
+
|
77
|
+
# -- then --
|
78
|
+
expect(actual).to eq(c[:expected])
|
79
|
+
ensure
|
80
|
+
case_after c
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def case_before(c)
|
85
|
+
# implement each case before
|
86
|
+
end
|
87
|
+
|
88
|
+
def case_after(c)
|
89
|
+
# implement each case after
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
context :markdown_table_header do
|
95
|
+
cases = [
|
96
|
+
{
|
97
|
+
case_no: 1,
|
98
|
+
case_title: 'valid case',
|
99
|
+
expected: <<-EOS
|
100
|
+
|A|Un|Owner|Origin|UserDefined|
|
101
|
+
|:--|:--|:--|:--|:--|
|
102
|
+
EOS
|
103
|
+
},
|
104
|
+
]
|
105
|
+
|
106
|
+
cases.each do |c|
|
107
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
108
|
+
begin
|
109
|
+
case_before c
|
110
|
+
|
111
|
+
# -- given --
|
112
|
+
# nothing
|
113
|
+
|
114
|
+
# -- when --
|
115
|
+
actual = Aun::MessageFormatter.markdown_table_header
|
116
|
+
|
117
|
+
# -- then --
|
118
|
+
expect(actual).to eq(c[:expected].chomp)
|
119
|
+
ensure
|
120
|
+
case_after c
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def case_before(c)
|
125
|
+
# implement each case before
|
126
|
+
end
|
127
|
+
|
128
|
+
def case_after(c)
|
129
|
+
# implement each case after
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context :markdown_table do
|
135
|
+
cases = [
|
136
|
+
{
|
137
|
+
case_no: 1,
|
138
|
+
case_title: 'all columns case',
|
139
|
+
message: Aun::Message.new(
|
140
|
+
'んーばばんばんば',
|
141
|
+
'めらっさめらっさ',
|
142
|
+
owner: 'パプワくん',
|
143
|
+
origin: '南国少年パプワくん',
|
144
|
+
user_defined: true
|
145
|
+
),
|
146
|
+
expected: '|んーばばんばんば|めらっさめらっさ|パプワくん|南国少年パプワくん|true|'
|
147
|
+
},
|
148
|
+
{
|
149
|
+
case_no: 2,
|
150
|
+
case_title: 'part columns case',
|
151
|
+
message: Aun::Message.new('ツー', 'カー', user_defined: true),
|
152
|
+
expected: '|ツー|カー|unknown|unknown|true|'
|
153
|
+
}
|
154
|
+
]
|
155
|
+
|
156
|
+
cases.each do |c|
|
157
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
158
|
+
begin
|
159
|
+
case_before c
|
160
|
+
|
161
|
+
# -- given --
|
162
|
+
# nothing
|
163
|
+
|
164
|
+
# -- when --
|
165
|
+
actual = Aun::MessageFormatter.markdown_table(c[:message])
|
166
|
+
|
167
|
+
# -- then --
|
168
|
+
expect(actual).to eq(c[:expected])
|
169
|
+
ensure
|
170
|
+
case_after c
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def case_before(c)
|
175
|
+
# implement each case before
|
176
|
+
end
|
177
|
+
|
178
|
+
def case_after(c)
|
179
|
+
# implement each case after
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|