narabi 0.1.0 → 0.2.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.
- data/README.md +0 -5
- data/features/parser.feature +23 -0
- data/features/step_definitions/parser_steps.rb +34 -1
- data/lib/narabi/parser.rb +59 -16
- data/lib/narabi/version.rb +1 -1
- metadata +3 -2
data/README.md
CHANGED
@@ -2,11 +2,6 @@
|
|
2
2
|
|
3
3
|
[](https://gemnasium.com/usutani/narabi-gem)
|
4
4
|
|
5
|
-
## TODO
|
6
|
-
|
7
|
-
- Support instance alias
|
8
|
-
- Support title
|
9
|
-
|
10
5
|
## Copyright
|
11
6
|
|
12
7
|
Copyright (c) 2012 Technical Group Laboratory, Inc. See LICENSE for details.
|
data/features/parser.feature
CHANGED
@@ -78,3 +78,26 @@
|
|
78
78
|
| 入力値 | タイトル |
|
79
79
|
| "title title #1" | "title #1" |
|
80
80
|
| "title タイトル #1" | "タイトル #1" |
|
81
|
+
|
82
|
+
シナリオ: エイリアスの解析に成功
|
83
|
+
前提 次のエイリアスを含むテキストを入力する:
|
84
|
+
"""
|
85
|
+
title w/ instance alias
|
86
|
+
|
87
|
+
instance User as U
|
88
|
+
instance System
|
89
|
+
|
90
|
+
note U: This is a note.
|
91
|
+
U->System: Login request
|
92
|
+
System-->User: Response
|
93
|
+
"""
|
94
|
+
もし エイリアスを含むテキストを解析する
|
95
|
+
ならば 次のハッシュの配列となる:
|
96
|
+
"""
|
97
|
+
{:title=>"w/ instance alias"}
|
98
|
+
{:name=>"User", :alias=>"U"}
|
99
|
+
{:name=>"System"}
|
100
|
+
{:from=>"User", :to=>"User", :body=>"This is a note.", :is_note=>true}
|
101
|
+
{:from=>"User", :to=>"System", :body=>"Login request"}
|
102
|
+
{:from=>"System", :to=>"User", :body=>"Response", :is_return=>true}
|
103
|
+
"""
|
@@ -9,7 +9,7 @@ end
|
|
9
9
|
end
|
10
10
|
|
11
11
|
もし /^一行の文字列を解析する$/ do
|
12
|
-
@output = Narabi.parse_line(@input)
|
12
|
+
@output = Narabi::Message.parse_line(@input)
|
13
13
|
end
|
14
14
|
|
15
15
|
ならば /^送信元は"(#{CAPTURE_STRING})"となること$/ do |expected_from|
|
@@ -61,3 +61,36 @@ end
|
|
61
61
|
ならば /^タイトルは"(#{CAPTURE_STRING})"となること$/ do |expected_title|
|
62
62
|
@output[:title].should == expected_title
|
63
63
|
end
|
64
|
+
|
65
|
+
前提 /^次のエイリアスを含むテキストを入力する:$/ do |text|
|
66
|
+
@input = text
|
67
|
+
@output = []
|
68
|
+
end
|
69
|
+
|
70
|
+
もし /^エイリアスを含むテキストを解析する$/ do
|
71
|
+
Narabi::Alias.scope do |parser|
|
72
|
+
@input.each_line do |line|
|
73
|
+
next if line.empty?
|
74
|
+
|
75
|
+
if ret = parser.parse_line_for_instance(line)
|
76
|
+
@output << ret
|
77
|
+
next
|
78
|
+
end
|
79
|
+
if ret = parser.parse_line_for_message(line)
|
80
|
+
@output << ret
|
81
|
+
next
|
82
|
+
end
|
83
|
+
if ret = parser.parse_line_for_diagram(line)
|
84
|
+
@output << ret
|
85
|
+
next
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
ならば /^次のハッシュの配列となる:$/ do |expected_lines|
|
92
|
+
lines = []
|
93
|
+
expected_lines.each_line { |l| lines << eval(l.strip) }
|
94
|
+
@output.size.should == lines.size
|
95
|
+
@output.each { |h| h.should == lines.shift }
|
96
|
+
end
|
data/lib/narabi/parser.rb
CHANGED
@@ -3,6 +3,7 @@ module Narabi
|
|
3
3
|
RESPONSE_REGEXP = /^(?<from>.+)-->(?<to>.+):\s?(?<body>.*)/
|
4
4
|
NOTE_REGEXP = /^note\s(?<from>(\s|\b|\d|\w|\W|^:)+):\s?(?<body>.*)/
|
5
5
|
INSTANCE_REGEXP = /^instance\s?(?<name>.+)/
|
6
|
+
INSTANCE_ALIAS_REGEXP = /^instance\s?(?<name>.+).*\sas\s(?<alias>.+)/
|
6
7
|
TITLE_REGEXP = /^title\s(?<title>.+)/
|
7
8
|
|
8
9
|
class Base
|
@@ -18,25 +19,33 @@ module Narabi
|
|
18
19
|
end
|
19
20
|
|
20
21
|
class Message
|
22
|
+
def self.parse_line(src)
|
23
|
+
if msg = Message.create_return(src)
|
24
|
+
return msg
|
25
|
+
end
|
26
|
+
if msg = Message.create_normal(src)
|
27
|
+
return msg
|
28
|
+
end
|
29
|
+
if msg = Message.create_note(src)
|
30
|
+
return msg
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
21
36
|
def self.create_normal(src)
|
22
|
-
|
23
|
-
#msg[:is_return] = false if msg
|
24
|
-
#msg[:is_note] = false if msg
|
25
|
-
msg
|
37
|
+
Base.try_to_create(NORMAL_REGEXP, src)
|
26
38
|
end
|
27
39
|
|
28
40
|
def self.create_return(src)
|
29
41
|
msg = Base.try_to_create(RESPONSE_REGEXP, src)
|
30
42
|
msg[:is_return] = true if msg
|
31
|
-
#msg[:is_note] = false if msg
|
32
43
|
msg
|
33
44
|
end
|
34
45
|
|
35
46
|
def self.create_note(src)
|
36
47
|
msg = Base.try_to_create(NOTE_REGEXP, src)
|
37
48
|
msg[:to] = msg[:from] if msg
|
38
|
-
#msg[:is_return] = false if msg
|
39
|
-
#msg[:to] = "" if msg
|
40
49
|
msg[:is_note] = true if msg
|
41
50
|
msg
|
42
51
|
end
|
@@ -44,25 +53,59 @@ module Narabi
|
|
44
53
|
|
45
54
|
class Instance
|
46
55
|
def self.parse_line(src)
|
47
|
-
|
56
|
+
if ins = Base.try_to_create(INSTANCE_ALIAS_REGEXP, src)
|
57
|
+
return ins
|
58
|
+
end
|
59
|
+
if ins = Base.try_to_create(INSTANCE_REGEXP, src)
|
60
|
+
return ins
|
61
|
+
end
|
48
62
|
end
|
49
63
|
end
|
50
64
|
|
51
65
|
class Diagram
|
52
66
|
def self.parse_line(src)
|
53
|
-
|
67
|
+
Base.try_to_create(TITLE_REGEXP, src)
|
54
68
|
end
|
55
69
|
end
|
56
70
|
|
57
|
-
|
58
|
-
|
59
|
-
|
71
|
+
class Alias
|
72
|
+
def initialize
|
73
|
+
@aliases = {}
|
74
|
+
end
|
75
|
+
|
76
|
+
def parse_line_for_instance(src)
|
77
|
+
if hash = Instance.parse_line(src)
|
78
|
+
define_alias(hash)
|
79
|
+
end
|
80
|
+
hash
|
81
|
+
end
|
82
|
+
|
83
|
+
def parse_line_for_message(src)
|
84
|
+
if hash = Message.parse_line(src)
|
85
|
+
return replace_alias(hash, [:from, :to])
|
86
|
+
end
|
60
87
|
end
|
61
|
-
|
62
|
-
|
88
|
+
|
89
|
+
def parse_line_for_diagram(src)
|
90
|
+
Diagram.parse_line(src)
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.scope
|
94
|
+
yield Narabi::Alias.new
|
63
95
|
end
|
64
|
-
|
65
|
-
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
def define_alias(hash)
|
100
|
+
@aliases[hash[:alias]] = hash[:name]
|
101
|
+
end
|
102
|
+
|
103
|
+
def replace_alias(hash, keys)
|
104
|
+
keys.each do |key|
|
105
|
+
next unless @aliases[hash[key]]
|
106
|
+
hash[key] = @aliases[hash[key]]
|
107
|
+
end
|
108
|
+
hash
|
66
109
|
end
|
67
110
|
end
|
68
111
|
end
|
data/lib/narabi/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: narabi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -91,3 +91,4 @@ test_files:
|
|
91
91
|
- features/parser.feature
|
92
92
|
- features/step_definitions/parser_steps.rb
|
93
93
|
- features/support/env.rb
|
94
|
+
has_rdoc:
|