matter_compiler 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,84 @@
1
+ require 'minitest/autorun'
2
+ require 'matter_compiler/blueprint'
3
+
4
+ class ParametersTest < Minitest::Unit::TestCase
5
+ AST_HASH = {
6
+ :id => {
7
+ :description => "Lorem\nIpsum\n",
8
+ :type => "number",
9
+ :required => false,
10
+ :default => "42",
11
+ :example => "1000",
12
+ :values => [ "42", "1000", "1AM4646" ]
13
+ }
14
+ }
15
+
16
+ AST_HASH_MANY = {
17
+ :id => {
18
+ :description => "Lorem",
19
+ :type => nil,
20
+ :required => true,
21
+ :default => nil,
22
+ :example => nil,
23
+ :values => nil
24
+ },
25
+ :search => {
26
+ :description => "Ipsum",
27
+ :type => nil,
28
+ :required => true,
29
+ :default => nil,
30
+ :example => nil,
31
+ :values => nil
32
+ }
33
+ }
34
+
35
+ BLUEPRINT = \
36
+ %Q{+ Parameters
37
+ + id = `42` (number, optional, `1000`)
38
+
39
+ Lorem
40
+ Ipsum
41
+
42
+ + Values
43
+ + `42`
44
+ + `1000`
45
+ + `1AM4646`
46
+
47
+ }
48
+
49
+ BLUEPRINT_MANY = \
50
+ %Q{+ Parameters
51
+ + id ... Lorem
52
+ + search ... Ipsum
53
+
54
+ }
55
+
56
+ def test_from_ast_hash
57
+ parameters = MatterCompiler::Parameters.new(ParametersTest::AST_HASH)
58
+ assert_instance_of Array, parameters.collection
59
+ assert_equal 1, parameters.collection.length
60
+ assert_instance_of MatterCompiler::Parameter, parameters.collection[0]
61
+
62
+ parameter = parameters.collection[0]
63
+ assert_equal :id.to_s, parameter.name
64
+ assert_equal ParametersTest::AST_HASH[:id][:description], parameter.description
65
+ assert_equal ParametersTest::AST_HASH[:id][:type], parameter.type
66
+ assert_equal :optional, parameter.use
67
+ assert_equal ParametersTest::AST_HASH[:id][:default], parameter.default_value
68
+ assert_equal ParametersTest::AST_HASH[:id][:example], parameter.example_value
69
+
70
+ assert_instance_of Array, parameter.values
71
+ assert_equal ParametersTest::AST_HASH[:id][:values].length, parameter.values.length
72
+ assert_equal ParametersTest::AST_HASH[:id][:values][0], parameter.values[0]
73
+ assert_equal ParametersTest::AST_HASH[:id][:values][1], parameter.values[1]
74
+ assert_equal ParametersTest::AST_HASH[:id][:values][2], parameter.values[2]
75
+ end
76
+
77
+ def test_serialize
78
+ parameters = MatterCompiler::Parameters.new(ParametersTest::AST_HASH)
79
+ assert_equal ParametersTest::BLUEPRINT, parameters.serialize
80
+
81
+ parameters = MatterCompiler::Parameters.new(ParametersTest::AST_HASH_MANY)
82
+ assert_equal ParametersTest::BLUEPRINT_MANY, parameters.serialize
83
+ end
84
+ end
@@ -0,0 +1,166 @@
1
+ require 'minitest/autorun'
2
+ require 'matter_compiler/blueprint'
3
+ require_relative 'headers_test'
4
+
5
+ #
6
+ # Payload test consists of testing Model, Request and Response
7
+ # with model test used as an archetype for payload.
8
+ #
9
+
10
+ class ModelTest < Minitest::Unit::TestCase
11
+ AST_HASH = {
12
+ :name => "My Resource",
13
+ :description => "Lorem ipsum dolor sit amet.\n",
14
+ :parameters => nil,
15
+ :headers => nil,
16
+ :body => "{ \"message\": \"Hello World\" }\n",
17
+ :schema => "{ \"$schema\": \"http://json-schema.org/draft-03/schema\" }\n"
18
+ }
19
+
20
+ BLUEPRINT = \
21
+ %Q{+ Model
22
+
23
+ Lorem ipsum dolor sit amet.
24
+
25
+ + Body
26
+
27
+ { \"message\": \"Hello World\" }
28
+
29
+ + Schema
30
+
31
+ { \"$schema\": \"http://json-schema.org/draft-03/schema\" }
32
+
33
+ }
34
+
35
+ def test_from_ast_hash
36
+ model = MatterCompiler::Model.new(ModelTest::AST_HASH)
37
+ assert_equal ModelTest::AST_HASH[:name], model.name
38
+ assert_equal ModelTest::AST_HASH[:description], model.description
39
+ assert_equal nil, model.parameters
40
+ assert_equal nil, model.headers
41
+ assert_equal ModelTest::AST_HASH[:body], model.body
42
+ assert_equal ModelTest::AST_HASH[:schema], model.schema
43
+ end
44
+
45
+ def test_serialize
46
+ model = MatterCompiler::Model.new(ModelTest::AST_HASH)
47
+ assert_equal ModelTest::BLUEPRINT, model.serialize
48
+ end
49
+ end
50
+
51
+ class RequestTest < Minitest::Unit::TestCase
52
+ AST_HASH = {
53
+ :name => "Name",
54
+ :description => "Lorem\nIpsum\n",
55
+ :parameters => nil,
56
+ :headers => nil,
57
+ :body => "Hello World!\n",
58
+ :schema => nil
59
+ }
60
+
61
+ BLUEPRINT = \
62
+ %Q{+ Request Name
63
+
64
+ Lorem
65
+ Ipsum
66
+
67
+ + Body
68
+
69
+ Hello World!
70
+
71
+ }
72
+
73
+ def test_from_ast_hash
74
+ request = MatterCompiler::Request.new(RequestTest::AST_HASH)
75
+ assert_equal RequestTest::AST_HASH[:name], request.name
76
+ assert_equal RequestTest::AST_HASH[:description], request.description
77
+ assert_equal nil, request.parameters
78
+ assert_equal nil, request.headers
79
+ assert_equal RequestTest::AST_HASH[:body], request.body
80
+ assert_equal RequestTest::AST_HASH[:schema], request.schema
81
+ end
82
+
83
+ def test_serialize
84
+ request = MatterCompiler::Request.new(RequestTest::AST_HASH)
85
+ assert_equal RequestTest::BLUEPRINT, request.serialize
86
+ end
87
+ end
88
+
89
+ class ResponseTest < Minitest::Unit::TestCase
90
+ AST_HASH = {
91
+ :name => "200",
92
+ :description => nil,
93
+ :parameters => nil,
94
+ :headers => HeadersTest::AST_HASH,
95
+ :body => "Hello\nWorld!\n",
96
+ :schema => nil
97
+ }
98
+
99
+ AST_HASH_ABBREV = {
100
+ :name => "200",
101
+ :description => nil,
102
+ :parameters => nil,
103
+ :headers => HeadersTest::AST_HASH_CONTENT_ONLY,
104
+ :body => "Hello\nWorld!\n",
105
+ :schema => nil
106
+ }
107
+
108
+ AST_HASH_EMPTY = {
109
+ :name => "204",
110
+ :description => nil,
111
+ :parameters => nil,
112
+ :headers => nil,
113
+ :body => nil,
114
+ :schema => nil
115
+ }
116
+
117
+ BLUEPRINT = \
118
+ %Q{+ Response 200 (text/plain)
119
+ #{HeadersTest::BLUEPRINT_NESTED_IGNORE_CONTENT} + Body
120
+
121
+ Hello
122
+ World!
123
+
124
+ }
125
+
126
+ BLUEPRINT_ABBREV = \
127
+ %Q{+ Response 200 (text/plain)
128
+
129
+ Hello
130
+ World!
131
+
132
+ }
133
+
134
+ BLUEPRINT_EMPTY = \
135
+ %Q{+ Response 204
136
+
137
+ }
138
+
139
+ def test_from_ast_hash
140
+ response = MatterCompiler::Response.new(ResponseTest::AST_HASH)
141
+ assert_equal ResponseTest::AST_HASH[:name], response.name
142
+ assert_equal ResponseTest::AST_HASH[:description], response.description
143
+ assert_equal nil, response.parameters
144
+
145
+ assert_instance_of MatterCompiler::Headers, response.headers
146
+ assert_instance_of Array, response.headers.collection
147
+ assert_equal HeadersTest::AST_HASH.keys.length, response.headers.collection.length
148
+
149
+ assert_equal ResponseTest::AST_HASH[:body], response.body
150
+ assert_equal ResponseTest::AST_HASH[:schema], response.schema
151
+ end
152
+
153
+ def test_serialize
154
+ # Full syntax
155
+ response = MatterCompiler::Response.new(ResponseTest::AST_HASH)
156
+ assert_equal ResponseTest::BLUEPRINT, response.serialize
157
+
158
+ # Abbreviated syntax
159
+ response = MatterCompiler::Response.new(ResponseTest::AST_HASH_ABBREV)
160
+ assert_equal ResponseTest::BLUEPRINT_ABBREV, response.serialize
161
+
162
+ # Empty response
163
+ response = MatterCompiler::Response.new(ResponseTest::AST_HASH_EMPTY)
164
+ assert_equal ResponseTest::BLUEPRINT_EMPTY, response.serialize
165
+ end
166
+ end
@@ -0,0 +1,32 @@
1
+ require 'minitest/autorun'
2
+ require 'matter_compiler/blueprint'
3
+ require_relative 'resource_test'
4
+
5
+ class ResourceGroupTest < Minitest::Unit::TestCase
6
+ AST_HASH = {
7
+ :name => "My Resource Group",
8
+ :description => "Lorem Ipsum at [Apiary](http://apiary.io)\n\n",
9
+ :resources => [ ResourceTest::AST_HASH ]
10
+ }
11
+
12
+ BLUEPRINT = \
13
+ %Q{# Group My Resource Group
14
+ Lorem Ipsum at [Apiary](http://apiary.io)
15
+
16
+ #{ResourceTest::BLUEPRINT}}
17
+
18
+ def test_from_ast_hash
19
+ resource_group = MatterCompiler::ResourceGroup.new(ResourceGroupTest::AST_HASH)
20
+ assert_equal ResourceGroupTest::AST_HASH[:name], resource_group.name
21
+ assert_equal ResourceGroupTest::AST_HASH[:description], resource_group.description
22
+
23
+ assert_instance_of Array, resource_group.resources
24
+ assert_equal ResourceGroupTest::AST_HASH[:resources].length, resource_group.resources.length
25
+ assert_equal ResourceTest::AST_HASH[:name], resource_group.resources[0].name
26
+ end
27
+
28
+ def test_serialize
29
+ resource_group = MatterCompiler::ResourceGroup.new(ResourceGroupTest::AST_HASH)
30
+ assert_equal BLUEPRINT, resource_group.serialize
31
+ end
32
+ end
@@ -0,0 +1,53 @@
1
+ require 'minitest/autorun'
2
+ require 'matter_compiler/blueprint'
3
+ require_relative 'action_test'
4
+ require_relative 'payload_test'
5
+ require_relative 'parameters_test'
6
+ require_relative 'headers_test'
7
+
8
+ class ResourceTest < Minitest::Unit::TestCase
9
+ AST_HASH = {
10
+ :name => "My Resource",
11
+ :description => "Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\n",
12
+ :uriTemplate => "/my-resource/{id}",
13
+ :model => ModelTest::AST_HASH,
14
+ :parameters => ParametersTest::AST_HASH,
15
+ :headers => HeadersTest::AST_HASH,
16
+ :actions => [ActionTest::AST_HASH]
17
+ }
18
+
19
+ BLUEPRINT = \
20
+ %Q{## My Resource [/my-resource/{id}]
21
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
22
+
23
+ #{ModelTest::BLUEPRINT}#{ParametersTest::BLUEPRINT}#{HeadersTest::BLUEPRINT}#{ActionTest::BLUEPRINT}}
24
+
25
+ def test_from_ast_hash
26
+ resource = MatterCompiler::Resource.new(ResourceTest::AST_HASH)
27
+ assert_equal ResourceTest::AST_HASH[:name], resource.name
28
+ assert_equal ResourceTest::AST_HASH[:description], resource.description
29
+ assert_equal ResourceTest::AST_HASH[:uriTemplate], resource.uri_template
30
+
31
+ assert_instance_of MatterCompiler::Model, resource.model
32
+ assert_equal ModelTest::AST_HASH[:name], resource.model.name
33
+
34
+ assert_instance_of MatterCompiler::Parameters, resource.parameters
35
+ assert_instance_of Array, resource.parameters.collection
36
+ assert_equal ParametersTest::AST_HASH.keys.length, resource.parameters.collection.length
37
+
38
+ assert_instance_of MatterCompiler::Headers, resource.headers
39
+ assert_instance_of Array, resource.headers.collection
40
+ assert_equal HeadersTest::AST_HASH.keys.length, resource.headers.collection.length
41
+
42
+ assert_instance_of Array, resource.actions
43
+ assert_equal ResourceTest::AST_HASH[:actions].length, resource.actions.length
44
+ assert ResourceTest::AST_HASH[:actions].length > 0
45
+ assert_instance_of MatterCompiler::Action, resource.actions[0]
46
+ assert_equal ActionTest::AST_HASH[:name], resource.actions[0].name
47
+ end
48
+
49
+ def test_serialize
50
+ resource = MatterCompiler::Resource.new(ResourceTest::AST_HASH)
51
+ assert_equal ResourceTest::BLUEPRINT, resource.serialize
52
+ end
53
+ end
@@ -0,0 +1,38 @@
1
+ require 'minitest/autorun'
2
+ require 'matter_compiler/blueprint'
3
+ require_relative 'payload_test'
4
+
5
+ class TransactionExampleTest < Minitest::Unit::TestCase
6
+ AST_HASH = {
7
+ :name => "",
8
+ :description => "",
9
+ :requests => [RequestTest::AST_HASH],
10
+ :responses => [ResponseTest::AST_HASH]
11
+ }
12
+
13
+ BLUEPRINT = \
14
+ %Q{#{RequestTest::BLUEPRINT}#{ResponseTest::BLUEPRINT}}
15
+
16
+ def test_from_ast_hash
17
+ transaction_example = MatterCompiler::TransactionExample.new(TransactionExampleTest::AST_HASH)
18
+ assert_equal TransactionExampleTest::AST_HASH[:name], transaction_example.name
19
+ assert_equal TransactionExampleTest::AST_HASH[:description], transaction_example.description
20
+
21
+ assert_instance_of Array, transaction_example.requests
22
+ assert_equal TransactionExampleTest::AST_HASH[:requests].length, transaction_example.requests.length
23
+ assert transaction_example.requests.length > 0
24
+ assert_instance_of MatterCompiler::Request, transaction_example.requests[0]
25
+ assert_equal RequestTest::AST_HASH[:name], transaction_example.requests[0].name
26
+
27
+ assert_instance_of Array, transaction_example.responses
28
+ assert_equal TransactionExampleTest::AST_HASH[:responses].length, transaction_example.responses.length
29
+ assert transaction_example.responses.length > 0
30
+ assert_instance_of MatterCompiler::Response, transaction_example.responses[0]
31
+ assert_equal ResponseTest::AST_HASH[:name], transaction_example.responses[0].name
32
+ end
33
+
34
+ def test_serialize
35
+ action = MatterCompiler::TransactionExample.new(TransactionExampleTest::AST_HASH)
36
+ assert_equal TransactionExampleTest::BLUEPRINT, action.serialize
37
+ end
38
+ end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: matter_compiler
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Zdenek Nemec
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: cucumber
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Matter Compiler is a API Blueprint AST Media Types to API Blueprint conversion
70
+ tool. It composes an API blueprint from its serialzed AST media-type.
71
+ email:
72
+ - z@apiary.io
73
+ executables:
74
+ - matter_compiler
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - ".gitignore"
79
+ - ".travis.yml"
80
+ - Gemfile
81
+ - Gemfile.lock
82
+ - LICENSE
83
+ - README.md
84
+ - Rakefile
85
+ - bin/matter_compiler
86
+ - features/compose.feature
87
+ - features/step_definitions/file_content_step.rb
88
+ - features/support/setup.rb
89
+ - lib/matter_compiler.rb
90
+ - lib/matter_compiler/blueprint.rb
91
+ - lib/matter_compiler/cli.rb
92
+ - lib/matter_compiler/composer.rb
93
+ - lib/matter_compiler/version.rb
94
+ - lib/object.rb
95
+ - matter_compiler.gemspec
96
+ - test/action_test.rb
97
+ - test/blueprint_test.rb
98
+ - test/composer_test.rb
99
+ - test/headers_test.rb
100
+ - test/metadata_test.rb
101
+ - test/parameters_test.rb
102
+ - test/payload_test.rb
103
+ - test/resource_group_test.rb
104
+ - test/resource_test.rb
105
+ - test/transaction_example_test.rb
106
+ homepage: ''
107
+ licenses:
108
+ - MIT
109
+ metadata: {}
110
+ post_install_message:
111
+ rdoc_options: []
112
+ require_paths:
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ requirements: []
125
+ rubyforge_project:
126
+ rubygems_version: 2.2.0
127
+ signing_key:
128
+ specification_version: 4
129
+ summary: API Blueprint AST to API Blueprint convertor
130
+ test_files:
131
+ - features/compose.feature
132
+ - features/step_definitions/file_content_step.rb
133
+ - features/support/setup.rb
134
+ - test/action_test.rb
135
+ - test/blueprint_test.rb
136
+ - test/composer_test.rb
137
+ - test/headers_test.rb
138
+ - test/metadata_test.rb
139
+ - test/parameters_test.rb
140
+ - test/payload_test.rb
141
+ - test/resource_group_test.rb
142
+ - test/resource_test.rb
143
+ - test/transaction_example_test.rb