matter_compiler 0.1.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.
@@ -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