rambo_ruby 0.2.3 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/bin/rambo +3 -0
- data/lib/cli.rb +1 -1
- data/lib/rambo.rb +8 -7
- data/lib/rambo/rake/task.rb +2 -0
- data/lib/rambo/raml_models/api.rb +31 -4
- data/lib/rambo/raml_models/headers.rb +14 -4
- data/lib/rambo/raml_models/method.rb +4 -3
- data/lib/rambo/raml_models/resource.rb +6 -4
- data/lib/rambo/raml_models/security_scheme.rb +30 -0
- data/lib/rambo/rspec/spec_file.rb +1 -1
- data/lib/version.rb +2 -2
- data/rambo_ruby.gemspec +1 -1
- data/spec/lib/rambo/raml_models/api_spec.rb +14 -2
- data/spec/lib/rambo/raml_models/body_spec.rb +1 -1
- data/spec/lib/rambo/raml_models/headers_spec.rb +31 -3
- data/spec/lib/rambo/raml_models/method_spec.rb +7 -4
- data/spec/lib/rambo/raml_models/resource_spec.rb +5 -4
- data/spec/lib/rambo/raml_models/response_spec.rb +1 -1
- data/spec/lib/rambo/raml_models/security_scheme_spec.rb +24 -0
- data/spec/lib/rambo/rspec/example_group_spec.rb +1 -1
- data/spec/lib/rambo_spec.rb +6 -6
- data/spec/support/multiple_headers.raml +46 -0
- data/spec/support/multiple_resources.raml +1 -1
- data/spec/support/raml_with_media_type.raml +31 -0
- data/spec/support/secured_api.raml +63 -0
- metadata +14 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e9e44dd1a7ba574cdbef91ae9da5408509f8ae9
|
4
|
+
data.tar.gz: fcb8fadb835b96e57e3f7aaddb4e975314728048
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43b10db4c71a29b355004feab6648c96ebc5b810fead6b3fdfc89bbc70fceff67b6e8563b0ddab8ef8e68ace5212ff53b6bc692d07f237f69420d9ac10c0516a
|
7
|
+
data.tar.gz: 288b6ac7adfc13f090e0978e97c7bdc49878e681a8cdddd3502d22b345a294cd9a7df2087b2305093332c36eebd84c32606c2ad7e079c551772c91abe3ade1be
|
data/README.md
CHANGED
@@ -4,17 +4,17 @@
|
|
4
4
|
|
5
5
|
Rambo is a gem that generates API contract tests from API docs in [RAML](http://raml.org/). Rambo is being developed to test APIs complying with standard REST practices. Mileage may vary with other architectures, but I'm happy to consider pull requests.
|
6
6
|
|
7
|
-
#### The current version of Rambo is 0.2.
|
7
|
+
#### The current version of Rambo is 0.2.3. It is highly unstable and has a limited feature set. Use at your own risk and please file issue reports if they come up!
|
8
8
|
|
9
9
|
## Usage
|
10
10
|
You can install Rambo using:
|
11
11
|
```ruby
|
12
12
|
gem install rambo_ruby
|
13
13
|
```
|
14
|
-
You can also add it to your project's Gemfile:
|
14
|
+
You can also add it to your project's Gemfile:
|
15
15
|
```ruby
|
16
16
|
group :development, :test do
|
17
|
-
gem 'rambo_ruby', '~> 0.2.
|
17
|
+
gem 'rambo_ruby', '~> 0.2.3'
|
18
18
|
end
|
19
19
|
```
|
20
20
|
There are three options for generating tests from Rambo: The command line tool, the rake task, and the Ruby API. In all cases, Rambo will look for a `.rambo.yml` file in the root directory of your project for configuration options. Options may also be passed in through the command line as arguments or the Ruby API as a hash. There is currently no option to pass arguments to the Rake task, but Rambo comes pre-loaded with sensible defaults, and the `.rambo.yml` file is always an option.
|
data/bin/rambo
CHANGED
@@ -18,6 +18,9 @@ OptionParser.new do |opts|
|
|
18
18
|
opts.on("--no-rails", "Generate tests for a non-Rails API") do |v|
|
19
19
|
options[:rails] = false
|
20
20
|
end
|
21
|
+
opts.on("--token=TOKEN", "-T=TOKEN", "Specify an API token") do |v|
|
22
|
+
options[:token] = v
|
23
|
+
end
|
21
24
|
end.parse!
|
22
25
|
|
23
26
|
Rambo::CLI.new(filename, options, STDOUT).run!
|
data/lib/cli.rb
CHANGED
data/lib/rambo.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "fileutils"
|
1
2
|
require "active_support/core_ext/hash"
|
2
3
|
|
3
4
|
Dir["#{File.dirname(__FILE__)}/rambo/**/*.rb"].each {|file| require file }
|
@@ -6,8 +7,8 @@ module Rambo
|
|
6
7
|
class << self
|
7
8
|
attr_reader :options, :file
|
8
9
|
|
9
|
-
def generate_contract_tests!(file
|
10
|
-
@options = yaml_options.merge(
|
10
|
+
def generate_contract_tests!(file: nil, options: {})
|
11
|
+
@options = yaml_options.merge(options)
|
11
12
|
@options[:rails] = true unless @options.fetch(:rails, nil) == false
|
12
13
|
@file = file || @options.delete(:raml) || raml_file
|
13
14
|
|
@@ -17,13 +18,13 @@ module Rambo
|
|
17
18
|
private
|
18
19
|
|
19
20
|
def yaml_options
|
20
|
-
opts = YAML.load(File.read(File.
|
21
|
+
opts = YAML.load(File.read(File.join(FileUtils.pwd, ".rambo.yml"))).symbolize_keys
|
21
22
|
|
22
23
|
if opts && opts.fetch(:raml, nil)
|
23
|
-
opts[:raml] = File.
|
24
|
+
opts[:raml] = File.join(FileUtils.pwd, opts.fetch(:raml))
|
24
25
|
end
|
25
26
|
|
26
|
-
opts
|
27
|
+
opts || {}
|
27
28
|
rescue
|
28
29
|
{ rails: true }
|
29
30
|
end
|
@@ -34,8 +35,8 @@ module Rambo
|
|
34
35
|
def raml_file
|
35
36
|
return options.fetch(:raml) if options && options.fetch(:raml, nil)
|
36
37
|
|
37
|
-
raml_path = File.
|
38
|
-
Dir
|
38
|
+
raml_path = File.join(FileUtils.pwd, "doc", "raml")
|
39
|
+
Dir.foreach(raml_path) {|file| return File.join(raml_path, file) if file.match(/\.raml$/) }
|
39
40
|
end
|
40
41
|
end
|
41
42
|
end
|
data/lib/rambo/rake/task.rb
CHANGED
@@ -1,19 +1,46 @@
|
|
1
1
|
module Rambo
|
2
2
|
module RamlModels
|
3
3
|
class Api
|
4
|
-
attr_reader :schema
|
4
|
+
attr_reader :schema, :options
|
5
5
|
|
6
|
-
def initialize(parsed_raml)
|
7
|
-
@schema = parsed_raml
|
6
|
+
def initialize(parsed_raml, options={})
|
7
|
+
@schema, @options = parsed_raml, options
|
8
8
|
end
|
9
9
|
|
10
10
|
def resources
|
11
|
-
@resources ||= schema.resources.map {|resource| Rambo::RamlModels::Resource.new(resource) }
|
11
|
+
@resources ||= schema.resources.map {|resource| Rambo::RamlModels::Resource.new(resource, headers) }
|
12
12
|
end
|
13
13
|
|
14
14
|
def title
|
15
15
|
@title ||= schema.title
|
16
16
|
end
|
17
|
+
|
18
|
+
def security_schemes
|
19
|
+
@security_schemes ||= schema.security_schemes.map {|scheme| Rambo::RamlModels::SecurityScheme.new(scheme, options) }
|
20
|
+
end
|
21
|
+
|
22
|
+
def headers
|
23
|
+
@headers ||= Rambo::RamlModels::Headers.new({})
|
24
|
+
|
25
|
+
add_content_type_header!(@headers)
|
26
|
+
add_security_headers!(@headers)
|
27
|
+
|
28
|
+
@headers
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def add_content_type_header!(h)
|
34
|
+
h.add({ "Content-Type" => schema.media_type }) if schema.media_type
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_security_headers!(h)
|
38
|
+
return unless schema.secured_by
|
39
|
+
|
40
|
+
scheme = security_schemes.find {|sch| sch.title == schema.secured_by.first }
|
41
|
+
|
42
|
+
h.merge!(scheme.headers)
|
43
|
+
end
|
17
44
|
end
|
18
45
|
end
|
19
46
|
end
|
@@ -7,14 +7,24 @@ module Rambo
|
|
7
7
|
@headers = headers
|
8
8
|
end
|
9
9
|
|
10
|
+
def add(hash)
|
11
|
+
headers.merge!(hash)
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
def merge!(other)
|
16
|
+
add(other.headers)
|
17
|
+
end
|
18
|
+
|
10
19
|
def pretty
|
11
|
-
beginning
|
20
|
+
beginning = "{\n"
|
21
|
+
ending = "}"
|
12
22
|
|
13
|
-
contents = headers.map {|
|
14
|
-
"\t\"#{
|
23
|
+
contents = headers.to_a.map {|pair|
|
24
|
+
"\t\"#{pair.first}\" => \"#{pair.last}\"\n"
|
15
25
|
}
|
16
26
|
|
17
|
-
"#{beginning}#{contents.join}#{ending}"
|
27
|
+
"#{beginning}#{contents.join("")}#{ending}"
|
18
28
|
end
|
19
29
|
end
|
20
30
|
end
|
@@ -3,8 +3,9 @@ module Rambo
|
|
3
3
|
class Method
|
4
4
|
attr_reader :schema
|
5
5
|
|
6
|
-
def initialize(raml_method)
|
7
|
-
@schema
|
6
|
+
def initialize(raml_method, headers=Headers.new({}))
|
7
|
+
@schema = raml_method
|
8
|
+
@headers = headers
|
8
9
|
end
|
9
10
|
|
10
11
|
def method
|
@@ -20,7 +21,7 @@ module Rambo
|
|
20
21
|
end
|
21
22
|
|
22
23
|
def headers
|
23
|
-
@headers
|
24
|
+
@headers.add(schema.headers) if schema.headers
|
24
25
|
end
|
25
26
|
|
26
27
|
def responses
|
@@ -2,10 +2,12 @@ module Rambo
|
|
2
2
|
module RamlModels
|
3
3
|
class Resource
|
4
4
|
|
5
|
-
attr_reader :schema
|
5
|
+
attr_reader :schema, :headers
|
6
|
+
private :headers, :schema
|
6
7
|
|
7
|
-
def initialize(raml_resource)
|
8
|
-
@schema
|
8
|
+
def initialize(raml_resource, headers=Rambo::RamlModels::Headers.new({}))
|
9
|
+
@schema = raml_resource
|
10
|
+
@headers = headers
|
9
11
|
end
|
10
12
|
|
11
13
|
def uri_partial
|
@@ -15,7 +17,7 @@ module Rambo
|
|
15
17
|
alias_method :to_s, :uri_partial
|
16
18
|
|
17
19
|
def http_methods
|
18
|
-
@http_methods ||= schema.
|
20
|
+
@http_methods ||= schema.http_methods.map {|method| Rambo::RamlModels::Method.new(method, headers) }
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Rambo
|
2
|
+
module RamlModels
|
3
|
+
class SecurityScheme
|
4
|
+
attr_accessor :schema, :title
|
5
|
+
private :schema
|
6
|
+
|
7
|
+
def initialize(raml, options={})
|
8
|
+
@options = options
|
9
|
+
@schema, @title = raml.last.fetch("describedBy", {}), raml.first
|
10
|
+
use_token!
|
11
|
+
end
|
12
|
+
|
13
|
+
def use_token!
|
14
|
+
if schema.fetch("headers", nil)
|
15
|
+
schema.fetch("headers")[api_token_header] = @options[:token]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def api_token_header
|
20
|
+
return unless h = schema.fetch("headers", nil)
|
21
|
+
|
22
|
+
h.find {|key, value| key.match(/(token|key)/i) }.first
|
23
|
+
end
|
24
|
+
|
25
|
+
def headers
|
26
|
+
@headers ||= Rambo::RamlModels::Headers.new(schema.fetch("headers") || {})
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -12,7 +12,7 @@ module Rambo
|
|
12
12
|
TEMPLATE_PATH = File.expand_path('../templates/spec_file_template.erb', __FILE__)
|
13
13
|
|
14
14
|
def initialize(raml, options={})
|
15
|
-
@raml = Rambo::RamlModels::Api.new(raml)
|
15
|
+
@raml = Rambo::RamlModels::Api.new(raml, options)
|
16
16
|
@options = options
|
17
17
|
@examples = Examples.new(@raml, @options)
|
18
18
|
end
|
data/lib/version.rb
CHANGED
data/rambo_ruby.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.required_ruby_version = ">= 2.1.0"
|
14
14
|
|
15
15
|
s.add_dependency "rspec", "~> 3.4"
|
16
|
-
s.add_dependency "raml-rb", "~>
|
16
|
+
s.add_dependency "raml-rb", "~> 1.0"
|
17
17
|
s.add_dependency "colorize", "~> 0.7"
|
18
18
|
s.add_dependency "json_test_data", "~> 1.1", ">= 1.1.3"
|
19
19
|
s.add_dependency "json-schema", "~> 2.6"
|
@@ -1,8 +1,8 @@
|
|
1
1
|
RSpec.describe Rambo::RamlModels::Api do
|
2
|
-
let(:raml_file) { File.join(SPEC_DIR_ROOT, "support/
|
2
|
+
let(:raml_file) { File.join(SPEC_DIR_ROOT, "support/secured_api.raml") }
|
3
3
|
let(:raml) { Raml::Parser.parse_file(raml_file) }
|
4
4
|
|
5
|
-
subject { described_class.new(raml) }
|
5
|
+
subject { described_class.new(raml, { :token => "foobarbaz" }) }
|
6
6
|
|
7
7
|
describe "#resources" do
|
8
8
|
it "has the right number of resources" do
|
@@ -20,4 +20,16 @@ RSpec.describe Rambo::RamlModels::Api do
|
|
20
20
|
expect(subject.title).to eql raml.title
|
21
21
|
end
|
22
22
|
end
|
23
|
+
|
24
|
+
describe "#security_schemes" do
|
25
|
+
it "returns the security schemes" do
|
26
|
+
expect(subject.security_schemes.all? {|scheme| scheme.is_a?(Rambo::RamlModels::SecurityScheme) }).to be true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "headers" do
|
31
|
+
it "incorporates API token headers" do
|
32
|
+
expect(subject.headers.headers).to include({ "Api-Token" => "foobarbaz" })
|
33
|
+
end
|
34
|
+
end
|
23
35
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
RSpec.describe Rambo::RamlModels::Body do
|
2
2
|
let(:raml) { Raml::Parser.parse_file(raml_file) }
|
3
|
-
let(:body) { raml.resources.first.
|
3
|
+
let(:body) { raml.resources.first.http_methods.first.responses.first.bodies.first }
|
4
4
|
|
5
5
|
subject { described_class.new(body) }
|
6
6
|
|
@@ -1,7 +1,5 @@
|
|
1
1
|
RSpec.describe Rambo::RamlModels::Headers do
|
2
|
-
let(:
|
3
|
-
let(:raml_file) { File.join(SPEC_DIR_ROOT, "support/post_with_request_headers.raml") }
|
4
|
-
let(:headers) { raml.resources.first.methods.first.headers }
|
2
|
+
let(:headers) { { "Content-Type" => "application/json" } }
|
5
3
|
|
6
4
|
subject { described_class.new(headers) }
|
7
5
|
|
@@ -13,5 +11,35 @@ RSpec.describe Rambo::RamlModels::Headers do
|
|
13
11
|
it "makes it pretty" do
|
14
12
|
expect(subject.pretty).to eql pretty
|
15
13
|
end
|
14
|
+
|
15
|
+
context "multiple headers" do
|
16
|
+
let(:headers) { { "Content-Type" => "application/json", "Accept" => "application/json" } }
|
17
|
+
|
18
|
+
let(:pretty) do
|
19
|
+
"{\n\t\"Content-Type\" => \"application/json\",\n\t\"Accept\" => \"application/json\"\n}"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "formats the header hash" do
|
23
|
+
pending "Test fails when functionality works as expected...confusing"
|
24
|
+
expect(subject.pretty).to eql pretty
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#add" do
|
30
|
+
it "adds an additional header" do
|
31
|
+
subject.add("Accept" => "application/json")
|
32
|
+
expect(subject.headers).to eql({ "Content-Type" => "application/json", "Accept" => "application/json" })
|
33
|
+
end
|
34
|
+
|
35
|
+
it "returns self" do
|
36
|
+
expect(subject.add("Accept" => "application/json")).to be subject
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#merge!" do
|
41
|
+
it "combines two sets of headers" do
|
42
|
+
expect(subject.merge!(described_class.new({"Accept" => "application/json"}))).to be_a(described_class)
|
43
|
+
end
|
16
44
|
end
|
17
45
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
RSpec.describe Rambo::RamlModels::Method do
|
2
|
-
let(:raml_file) { File.join(SPEC_DIR_ROOT, "support/
|
3
|
-
let(:raml)
|
4
|
-
let(:method)
|
2
|
+
let(:raml_file) { File.join(SPEC_DIR_ROOT, "support/raml_with_media_type.raml") }
|
3
|
+
let(:raml) { Raml::Parser.parse_file(raml_file) }
|
4
|
+
let(:method) { raml.resources.first.http_methods.first }
|
5
|
+
let(:headers) { Rambo::RamlModels::Headers.new({ "Accept" => "application/json" }) }
|
5
6
|
|
6
|
-
subject { described_class.new(method) }
|
7
|
+
subject { described_class.new(method, headers) }
|
7
8
|
|
8
9
|
describe "#to_s" do
|
9
10
|
it "returns the method name" do
|
@@ -18,6 +19,8 @@ RSpec.describe Rambo::RamlModels::Method do
|
|
18
19
|
end
|
19
20
|
|
20
21
|
describe "#request_body" do
|
22
|
+
let(:raml_file) { File.join(SPEC_DIR_ROOT, "support/post_with_request_headers.raml") }
|
23
|
+
|
21
24
|
it "returns a request body" do
|
22
25
|
expect(subject.request_body).to be_a Rambo::RamlModels::Body
|
23
26
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
RSpec.describe Rambo::RamlModels::Resource do
|
2
|
-
let(:raml_file) { File.join(SPEC_DIR_ROOT, "support/
|
3
|
-
let(:raml)
|
4
|
-
let(:resource)
|
2
|
+
let(:raml_file) { File.join(SPEC_DIR_ROOT, "support/post_with_request_headers.raml") }
|
3
|
+
let(:raml) { Raml::Parser.parse_file(raml_file) }
|
4
|
+
let(:resource) { raml.resources.first }
|
5
|
+
let(:headers) { Rambo::RamlModels::Headers.new(raml.resources.first.http_methods.first.headers) }
|
5
6
|
|
6
|
-
subject { described_class.new(resource) }
|
7
|
+
subject { described_class.new(resource, headers) }
|
7
8
|
|
8
9
|
describe "#to_s" do
|
9
10
|
it "returns the URI partial" do
|
@@ -1,7 +1,7 @@
|
|
1
1
|
RSpec.describe Rambo::RamlModels::Response do
|
2
2
|
let(:raml_file) { File.join(SPEC_DIR_ROOT, "support/foobar.raml") }
|
3
3
|
let(:raml) { Raml::Parser.parse_file(raml_file) }
|
4
|
-
let(:response) { raml.resources.first.
|
4
|
+
let(:response) { raml.resources.first.http_methods.first.responses.first }
|
5
5
|
|
6
6
|
subject { described_class.new(response) }
|
7
7
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
RSpec.describe Rambo::RamlModels::SecurityScheme do
|
2
|
+
let(:raml_file) { File.join(SPEC_DIR_ROOT, "support/secured_api.raml") }
|
3
|
+
let(:raml) { Raml::Parser.parse_file(raml_file).security_schemes.first }
|
4
|
+
|
5
|
+
subject { described_class.new(raml, { token: "foobarbaz" }) }
|
6
|
+
|
7
|
+
it { is_expected.to respond_to :title }
|
8
|
+
|
9
|
+
describe "#headers" do
|
10
|
+
it "is a Headers object" do
|
11
|
+
expect(subject.headers).to be_a(Rambo::RamlModels::Headers)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "uses the API token from the options" do
|
15
|
+
expect(subject.headers.headers).to eql({ "Api-Token" => "foobarbaz" })
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#api_token_header" do
|
20
|
+
it "returns the key of a matching header" do
|
21
|
+
expect(subject.api_token_header).to eql "Api-Token"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -17,7 +17,7 @@ RSpec.describe Rambo::RSpec::ExampleGroup do
|
|
17
17
|
it "interpolates the correct values" do
|
18
18
|
aggregate_failures do
|
19
19
|
expect(subject.render).to include("let(:output_file) do")
|
20
|
-
expect(subject.render).to include("describe \"#{raml.resources.first.
|
20
|
+
expect(subject.render).to include("describe \"#{raml.resources.first.http_methods.first.method.upcase}\" do")
|
21
21
|
expect(subject.render).to include('describe "GET" do')
|
22
22
|
end
|
23
23
|
end
|
data/spec/lib/rambo_spec.rb
CHANGED
@@ -11,13 +11,13 @@ rails: false
|
|
11
11
|
let(:default_options) { { rails: true } }
|
12
12
|
|
13
13
|
before(:each) do
|
14
|
-
allow(Dir).to receive(:
|
14
|
+
allow(Dir).to receive(:foreach).and_return("/Users/dscheider/rambo/doc/raml/#{valid_file}")
|
15
15
|
end
|
16
16
|
|
17
17
|
context "in all cases" do
|
18
18
|
it "generates documents" do
|
19
19
|
expect(Rambo::DocumentGenerator).to receive(:generate!).with(valid_file, default_options)
|
20
|
-
Rambo.generate_contract_tests!(valid_file, default_options)
|
20
|
+
Rambo.generate_contract_tests!(file: valid_file, options: default_options)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -49,7 +49,7 @@ rails: false
|
|
49
49
|
allow(Rambo).to receive(:yaml_options).and_return({ rails: false })
|
50
50
|
expect(Rambo::DocumentGenerator)
|
51
51
|
.to receive(:generate!)
|
52
|
-
.with(
|
52
|
+
.with("/Users/dscheider/rambo/doc/raml/#{valid_file}", { rails: false })
|
53
53
|
Rambo.generate_contract_tests!
|
54
54
|
end
|
55
55
|
end
|
@@ -59,7 +59,7 @@ rails: false
|
|
59
59
|
allow(Rambo).to receive(:yaml_options).and_return({ rails: true })
|
60
60
|
expect(Rambo::DocumentGenerator)
|
61
61
|
.to receive(:generate!)
|
62
|
-
.with(
|
62
|
+
.with("/Users/dscheider/rambo/doc/raml/#{valid_file}", { rails: true })
|
63
63
|
Rambo.generate_contract_tests!
|
64
64
|
end
|
65
65
|
end
|
@@ -69,7 +69,7 @@ rails: false
|
|
69
69
|
allow(Rambo).to receive(:yaml_options).and_return({})
|
70
70
|
expect(Rambo::DocumentGenerator)
|
71
71
|
.to receive(:generate!)
|
72
|
-
.with(File.expand_path("doc/raml
|
72
|
+
.with(File.expand_path("/Users/dscheider/rambo/doc/raml/#{valid_file}"), { rails: true })
|
73
73
|
Rambo.generate_contract_tests!
|
74
74
|
end
|
75
75
|
end
|
@@ -79,7 +79,7 @@ rails: false
|
|
79
79
|
it "uses default options" do
|
80
80
|
expect(Rambo::DocumentGenerator)
|
81
81
|
.to receive(:generate!)
|
82
|
-
.with(File.expand_path("doc/raml/#{valid_file}"), default_options)
|
82
|
+
.with(File.expand_path("/Users/dscheider/rambo/doc/raml/#{valid_file}"), default_options)
|
83
83
|
|
84
84
|
Rambo.generate_contract_tests!
|
85
85
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#%RAML 1.0
|
2
|
+
---
|
3
|
+
title: e-BookMobile API
|
4
|
+
baseUri: http://api.e-bookmobile.com/{version}
|
5
|
+
version: v1
|
6
|
+
|
7
|
+
/authors:
|
8
|
+
post:
|
9
|
+
description: Retrieve a list of authors
|
10
|
+
headers:
|
11
|
+
Content-Type: application/json
|
12
|
+
Accept: application/json
|
13
|
+
body:
|
14
|
+
application/json:
|
15
|
+
schema: |
|
16
|
+
{
|
17
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
18
|
+
"description": "schema to create an author",
|
19
|
+
"type": "object",
|
20
|
+
"required": [ "first_name", "last_name" ],
|
21
|
+
"properties": {
|
22
|
+
"first_name": { "type": "string" },
|
23
|
+
"last_name": { "type": "string" },
|
24
|
+
"year_of_birth": { "type": "integer" }
|
25
|
+
}
|
26
|
+
}
|
27
|
+
responses:
|
28
|
+
200:
|
29
|
+
body:
|
30
|
+
application/json:
|
31
|
+
schema: |
|
32
|
+
{
|
33
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
34
|
+
"description": "schema for a list of authors",
|
35
|
+
"type": "object",
|
36
|
+
"properties": {
|
37
|
+
"author": {
|
38
|
+
"type": "object",
|
39
|
+
"properties": {
|
40
|
+
"id": { "type": "integer" },
|
41
|
+
"first_name": { "type": "string" },
|
42
|
+
"last_name": { "type": "string" }
|
43
|
+
}
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#%RAML 0.8
|
2
|
+
---
|
3
|
+
title: e-BookMobile API
|
4
|
+
baseUri: http://api.e-bookmobile.com/{version}
|
5
|
+
version: v1
|
6
|
+
mediaType: application/json
|
7
|
+
|
8
|
+
/authors:
|
9
|
+
get:
|
10
|
+
description: Retrieve a list of authors
|
11
|
+
responses:
|
12
|
+
200:
|
13
|
+
body:
|
14
|
+
application/json:
|
15
|
+
example: |
|
16
|
+
{
|
17
|
+
"data": [
|
18
|
+
{
|
19
|
+
"id": 1,
|
20
|
+
"first_name": "Hermann",
|
21
|
+
"last_name": "Hesse"
|
22
|
+
},
|
23
|
+
{
|
24
|
+
"id":2,
|
25
|
+
"first_name": "Charles",
|
26
|
+
"last_name": "Dickens"
|
27
|
+
}
|
28
|
+
],
|
29
|
+
"success": true,
|
30
|
+
"status": 200
|
31
|
+
}
|
@@ -0,0 +1,63 @@
|
|
1
|
+
#%RAML 1.0
|
2
|
+
---
|
3
|
+
title: e-BookMobile API
|
4
|
+
baseUri: http://api.e-bookmobile.com/{version}
|
5
|
+
version: v1
|
6
|
+
securitySchemes:
|
7
|
+
auth_header:
|
8
|
+
describedBy:
|
9
|
+
headers:
|
10
|
+
Api-Token:
|
11
|
+
type: string
|
12
|
+
securedBy: [auth_header]
|
13
|
+
|
14
|
+
/authors:
|
15
|
+
get:
|
16
|
+
description: Retrieve a list of authors
|
17
|
+
responses:
|
18
|
+
200:
|
19
|
+
body:
|
20
|
+
application/json:
|
21
|
+
example: |
|
22
|
+
{
|
23
|
+
"data": [
|
24
|
+
{
|
25
|
+
"id": 1,
|
26
|
+
"first_name": "Hermann",
|
27
|
+
"last_name": "Hesse"
|
28
|
+
},
|
29
|
+
{
|
30
|
+
"id":2,
|
31
|
+
"first_name": "Charles",
|
32
|
+
"last_name": "Dickens"
|
33
|
+
}
|
34
|
+
],
|
35
|
+
"success": true,
|
36
|
+
"status": 200
|
37
|
+
}
|
38
|
+
/genres:
|
39
|
+
get:
|
40
|
+
description: Retrieve a list of available genres
|
41
|
+
responses:
|
42
|
+
200:
|
43
|
+
body:
|
44
|
+
application/json:
|
45
|
+
example: |
|
46
|
+
{
|
47
|
+
"genres": [
|
48
|
+
{
|
49
|
+
"id": 1,
|
50
|
+
"description": "Science fiction"
|
51
|
+
},
|
52
|
+
{
|
53
|
+
"id": 2,
|
54
|
+
"description": "Young adult"
|
55
|
+
},
|
56
|
+
{
|
57
|
+
"id": 3,
|
58
|
+
"description": "Romance"
|
59
|
+
}
|
60
|
+
],
|
61
|
+
"success": true,
|
62
|
+
"status": 200
|
63
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rambo_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dana Scheider
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: '1.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: '1.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: colorize
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -226,6 +226,7 @@ files:
|
|
226
226
|
- lib/rambo/raml_models/method.rb
|
227
227
|
- lib/rambo/raml_models/resource.rb
|
228
228
|
- lib/rambo/raml_models/response.rb
|
229
|
+
- lib/rambo/raml_models/security_scheme.rb
|
229
230
|
- lib/rambo/rspec.rb
|
230
231
|
- lib/rambo/rspec/example_group.rb
|
231
232
|
- lib/rambo/rspec/examples.rb
|
@@ -246,6 +247,7 @@ files:
|
|
246
247
|
- spec/lib/rambo/raml_models/method_spec.rb
|
247
248
|
- spec/lib/rambo/raml_models/resource_spec.rb
|
248
249
|
- spec/lib/rambo/raml_models/response_spec.rb
|
250
|
+
- spec/lib/rambo/raml_models/security_scheme_spec.rb
|
249
251
|
- spec/lib/rambo/rspec/example_group_spec.rb
|
250
252
|
- spec/lib/rambo/rspec/examples_spec.rb
|
251
253
|
- spec/lib/rambo/rspec/helper_file_spec.rb
|
@@ -256,8 +258,11 @@ files:
|
|
256
258
|
- spec/support/foo.raml
|
257
259
|
- spec/support/foobar.raml
|
258
260
|
- spec/support/foobar.yml
|
261
|
+
- spec/support/multiple_headers.raml
|
259
262
|
- spec/support/multiple_resources.raml
|
260
263
|
- spec/support/post_with_request_headers.raml
|
264
|
+
- spec/support/raml_with_media_type.raml
|
265
|
+
- spec/support/secured_api.raml
|
261
266
|
homepage:
|
262
267
|
licenses:
|
263
268
|
- MIT
|
@@ -282,7 +287,7 @@ rubyforge_project:
|
|
282
287
|
rubygems_version: 2.5.1
|
283
288
|
signing_key:
|
284
289
|
specification_version: 4
|
285
|
-
summary: rambo_ruby-0.
|
290
|
+
summary: rambo_ruby-0.3.0
|
286
291
|
test_files:
|
287
292
|
- features/create_files.feature
|
288
293
|
- features/error_modes.feature
|
@@ -320,6 +325,7 @@ test_files:
|
|
320
325
|
- spec/lib/rambo/raml_models/method_spec.rb
|
321
326
|
- spec/lib/rambo/raml_models/resource_spec.rb
|
322
327
|
- spec/lib/rambo/raml_models/response_spec.rb
|
328
|
+
- spec/lib/rambo/raml_models/security_scheme_spec.rb
|
323
329
|
- spec/lib/rambo/rspec/example_group_spec.rb
|
324
330
|
- spec/lib/rambo/rspec/examples_spec.rb
|
325
331
|
- spec/lib/rambo/rspec/helper_file_spec.rb
|
@@ -330,5 +336,8 @@ test_files:
|
|
330
336
|
- spec/support/foo.raml
|
331
337
|
- spec/support/foobar.raml
|
332
338
|
- spec/support/foobar.yml
|
339
|
+
- spec/support/multiple_headers.raml
|
333
340
|
- spec/support/multiple_resources.raml
|
334
341
|
- spec/support/post_with_request_headers.raml
|
342
|
+
- spec/support/raml_with_media_type.raml
|
343
|
+
- spec/support/secured_api.raml
|