narabi 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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +5 -0
- data/Rakefile +1 -0
- data/features/parser.feature +41 -0
- data/features/step_definitions/parser_steps.rb +38 -0
- data/features/support/env.rb +2 -0
- data/lib/narabi.rb +2 -0
- data/lib/narabi/parser.rb +22 -0
- data/lib/narabi/version.rb +3 -0
- data/narabi.gemspec +25 -0
- metadata +91 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "bundler/gem_tasks"
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# language: ja
|
|
2
|
+
|
|
3
|
+
フィーチャ: narabi の文字列を解析する
|
|
4
|
+
開発者として、
|
|
5
|
+
シーケンス図をみるために、
|
|
6
|
+
文字列からインスタンスとメッセージを取得したい。
|
|
7
|
+
|
|
8
|
+
シナリオアウトライン: 一行の解析に成功
|
|
9
|
+
前提 一行の文字列<入力値>を入力する
|
|
10
|
+
もし 一行の文字列を解析する
|
|
11
|
+
ならば 送信元は<送信元>となること
|
|
12
|
+
かつ 受信先は<受信先>となること
|
|
13
|
+
かつ 電文は<電文>となること
|
|
14
|
+
|
|
15
|
+
例:
|
|
16
|
+
| 入力値 | 送信元 | 受信先 | 電文 |
|
|
17
|
+
| "Foo->Bar: Some message" | "Foo" | "Bar" | " Some message" |
|
|
18
|
+
| "Bar-->Foo: Response" | "Bar" | "Foo" | " Response" |
|
|
19
|
+
| " A 1 -> B 1 : M1 " | " A 1 " | " B 1 " | " M1 " |
|
|
20
|
+
| "太郎->花子:" | "太郎" | "花子" | "" |
|
|
21
|
+
|
|
22
|
+
シナリオアウトライン: 呼び出しと応答
|
|
23
|
+
前提 一行の文字列<入力値>を入力する
|
|
24
|
+
もし 一行の文字列を解析する
|
|
25
|
+
ならば 種類は<種類>となること
|
|
26
|
+
|
|
27
|
+
例:
|
|
28
|
+
| 入力値 | 種類 |
|
|
29
|
+
| "Foo->Bar: Some message" | 呼び出し |
|
|
30
|
+
| "Bar-->Foo: Response" | 応答 |
|
|
31
|
+
|
|
32
|
+
シナリオアウトライン: 不正な行を解析
|
|
33
|
+
前提 一行の文字列<入力値>を入力する
|
|
34
|
+
もし 一行の文字列を解析する
|
|
35
|
+
ならば シーケンスは不正
|
|
36
|
+
|
|
37
|
+
例:
|
|
38
|
+
| 入力値 |
|
|
39
|
+
| "Foo->Bar" |
|
|
40
|
+
| "Foo-->Bar" |
|
|
41
|
+
| "" |
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# -*- encoding: UTF-8 -*-
|
|
2
|
+
|
|
3
|
+
CAPTURE_STRING = Transform /^.*?$/ do |str|
|
|
4
|
+
str
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
前提 /^一行の文字列"(#{CAPTURE_STRING})"を入力する$/ do |input|
|
|
8
|
+
@input = input
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
もし /^一行の文字列を解析する$/ do
|
|
12
|
+
@output = Narabi.parse_line(@input)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
ならば /^送信元は"(#{CAPTURE_STRING})"となること$/ do |expected_sender|
|
|
16
|
+
@output.sender.should == expected_sender
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
ならば /^受信先は"(#{CAPTURE_STRING})"となること$/ do |expected_receiver|
|
|
20
|
+
@output.receiver.should == expected_receiver
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
ならば /^電文は"(#{CAPTURE_STRING})"となること$/ do |expected_message|
|
|
24
|
+
@output.message.should == expected_message
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
ならば /^種類は呼び出しとなること$/ do
|
|
28
|
+
@output.is_normal == true
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
ならば /^種類は応答となること$/ do
|
|
32
|
+
@output.is_normal == false
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
ならば /^シーケンスは不正$/ do
|
|
36
|
+
@output.should == nil
|
|
37
|
+
end
|
|
38
|
+
|
data/lib/narabi.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Narabi
|
|
2
|
+
NORMAL_REGEXP = /^(.+)->(.+):(.*)/
|
|
3
|
+
RESPONSE_REGEXP = /^(.+)-->(.+):(.*)/
|
|
4
|
+
|
|
5
|
+
class Sequence
|
|
6
|
+
attr_reader :sender, :receiver, :message, :is_normal
|
|
7
|
+
|
|
8
|
+
def initialize(match, is_normal = true)
|
|
9
|
+
@sender, @receiver, @message = match.values_at(1..3)
|
|
10
|
+
@is_normal = is_normal
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.parse_line(src)
|
|
15
|
+
if match = RESPONSE_REGEXP.match(src)
|
|
16
|
+
return Sequence.new(match, false)
|
|
17
|
+
end
|
|
18
|
+
if match = NORMAL_REGEXP.match(src)
|
|
19
|
+
return Sequence.new(match)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
data/narabi.gemspec
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "narabi/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = "narabi"
|
|
7
|
+
s.version = Narabi::VERSION
|
|
8
|
+
s.authors = ["Yasuhiro Usutani"]
|
|
9
|
+
s.email = ["y_usutani@me.com"]
|
|
10
|
+
s.homepage = ""
|
|
11
|
+
s.summary = %q{Sequence text parser}
|
|
12
|
+
s.description = %q{Sequence text parser}
|
|
13
|
+
|
|
14
|
+
s.rubyforge_project = "narabi"
|
|
15
|
+
|
|
16
|
+
s.files = `git ls-files`.split("\n")
|
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
19
|
+
s.require_paths = ["lib"]
|
|
20
|
+
|
|
21
|
+
# specify any dependencies here; for example:
|
|
22
|
+
s.add_development_dependency "rspec"
|
|
23
|
+
# s.add_runtime_dependency "rest-client"
|
|
24
|
+
s.add_development_dependency "cucumber"
|
|
25
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: narabi
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Yasuhiro Usutani
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2012-05-31 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: rspec
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ! '>='
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '0'
|
|
22
|
+
type: :development
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ! '>='
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '0'
|
|
30
|
+
- !ruby/object:Gem::Dependency
|
|
31
|
+
name: cucumber
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
none: false
|
|
34
|
+
requirements:
|
|
35
|
+
- - ! '>='
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: '0'
|
|
38
|
+
type: :development
|
|
39
|
+
prerelease: false
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ! '>='
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '0'
|
|
46
|
+
description: Sequence text parser
|
|
47
|
+
email:
|
|
48
|
+
- y_usutani@me.com
|
|
49
|
+
executables: []
|
|
50
|
+
extensions: []
|
|
51
|
+
extra_rdoc_files: []
|
|
52
|
+
files:
|
|
53
|
+
- .gitignore
|
|
54
|
+
- Gemfile
|
|
55
|
+
- README.md
|
|
56
|
+
- Rakefile
|
|
57
|
+
- features/parser.feature
|
|
58
|
+
- features/step_definitions/parser_steps.rb
|
|
59
|
+
- features/support/env.rb
|
|
60
|
+
- lib/narabi.rb
|
|
61
|
+
- lib/narabi/parser.rb
|
|
62
|
+
- lib/narabi/version.rb
|
|
63
|
+
- narabi.gemspec
|
|
64
|
+
homepage: ''
|
|
65
|
+
licenses: []
|
|
66
|
+
post_install_message:
|
|
67
|
+
rdoc_options: []
|
|
68
|
+
require_paths:
|
|
69
|
+
- lib
|
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
71
|
+
none: false
|
|
72
|
+
requirements:
|
|
73
|
+
- - ! '>='
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
|
+
none: false
|
|
78
|
+
requirements:
|
|
79
|
+
- - ! '>='
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
82
|
+
requirements: []
|
|
83
|
+
rubyforge_project: narabi
|
|
84
|
+
rubygems_version: 1.8.24
|
|
85
|
+
signing_key:
|
|
86
|
+
specification_version: 3
|
|
87
|
+
summary: Sequence text parser
|
|
88
|
+
test_files:
|
|
89
|
+
- features/parser.feature
|
|
90
|
+
- features/step_definitions/parser_steps.rb
|
|
91
|
+
- features/support/env.rb
|