rambo_ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +2 -0
  3. data/.simplecov +7 -0
  4. data/.travis.yml +17 -0
  5. data/Gemfile +5 -0
  6. data/ISSUE_TEMPLATE.md +45 -0
  7. data/LICENSE +21 -0
  8. data/README.md +50 -0
  9. data/Rakefile +10 -0
  10. data/assets/logo.txt +5 -0
  11. data/bin/rambo +23 -0
  12. data/features/create_files.feature +16 -0
  13. data/features/error_modes.feature +13 -0
  14. data/features/generate_post_specs.feature +10 -0
  15. data/features/generate_simple_api_specs.feature +13 -0
  16. data/features/modify_spec_helper.feature +4 -0
  17. data/features/step_definitions/file_steps.rb +25 -0
  18. data/features/support/cucumber_helper.rb +13 -0
  19. data/features/support/env.rb +8 -0
  20. data/features/support/examples/json/basic_raml_with_example_response.json +16 -0
  21. data/features/support/examples/json/basic_raml_with_post_route_response.json +15 -0
  22. data/features/support/examples/json/basic_raml_with_schema_response.json +10 -0
  23. data/features/support/examples/raml/basic_raml_with_example.raml +30 -0
  24. data/features/support/examples/raml/basic_raml_with_post_route.raml +43 -0
  25. data/features/support/examples/raml/basic_raml_with_schema.raml +24 -0
  26. data/features/support/examples/raml/empty_raml.raml +5 -0
  27. data/features/support/examples/raml/multiple_routes.raml +15 -0
  28. data/features/support/examples/raml/post_with_request_headers.raml +45 -0
  29. data/features/support/examples/rspec/empty_spec.rb.example +5 -0
  30. data/features/support/examples/rspec/simple_spec_file_with_example.rb.example +31 -0
  31. data/features/support/examples/rspec/simple_spec_file_with_post_route.rb.example +35 -0
  32. data/features/support/examples/rspec/simple_spec_file_with_schema.rb.example +31 -0
  33. data/features/support/examples/rspec/spec_file_with_request_headers.rb.example +52 -0
  34. data/features/support/examples/rspec/spec_helper_json_added.rb.example +11 -0
  35. data/features/support/examples/rspec/spec_helper_only_json.rb.example +10 -0
  36. data/features/support/examples/rspec/spec_helper_only_rack_test.rb.example +9 -0
  37. data/features/support/examples/rspec/spec_helper_rack_test_added.rb.example +10 -0
  38. data/features/support/foobar.raml +30 -0
  39. data/lib/cli.rb +65 -0
  40. data/lib/document_generator.rb +49 -0
  41. data/lib/raml_models/api.rb +19 -0
  42. data/lib/raml_models/body.rb +33 -0
  43. data/lib/raml_models/headers.rb +21 -0
  44. data/lib/raml_models/method.rb +37 -0
  45. data/lib/raml_models/resource.rb +22 -0
  46. data/lib/raml_models/response.rb +19 -0
  47. data/lib/raml_models.rb +1 -0
  48. data/lib/rspec/example_group.rb +53 -0
  49. data/lib/rspec/examples.rb +32 -0
  50. data/lib/rspec/helper_file.rb +30 -0
  51. data/lib/rspec/spec_file.rb +31 -0
  52. data/lib/rspec/templates/example_group_template.erb +39 -0
  53. data/lib/rspec/templates/matcher_file_template.erb +8 -0
  54. data/lib/rspec/templates/rambo_helper_file_template.erb +3 -0
  55. data/lib/rspec/templates/spec_file_template.erb +15 -0
  56. data/lib/rspec.rb +1 -0
  57. data/lib/version.rb +9 -0
  58. data/rambo_ruby.gemspec +38 -0
  59. data/spec/lib/cli_spec.rb +71 -0
  60. data/spec/lib/document_generator_spec.rb +74 -0
  61. data/spec/lib/raml_models/api_spec.rb +23 -0
  62. data/spec/lib/raml_models/body_spec.rb +32 -0
  63. data/spec/lib/raml_models/headers_spec.rb +17 -0
  64. data/spec/lib/raml_models/method_spec.rb +32 -0
  65. data/spec/lib/raml_models/resource_spec.rb +30 -0
  66. data/spec/lib/raml_models/response_spec.rb +20 -0
  67. data/spec/lib/rspec/example_group_spec.rb +87 -0
  68. data/spec/lib/rspec/examples_spec.rb +38 -0
  69. data/spec/lib/rspec/helper_file_spec.rb +18 -0
  70. data/spec/lib/rspec/spec_file_spec.rb +58 -0
  71. data/spec/spec_helper.rb +26 -0
  72. data/spec/support/basic_raml_with_post_route.raml +43 -0
  73. data/spec/support/foo.raml +43 -0
  74. data/spec/support/foobar.raml +30 -0
  75. data/spec/support/foobar.yml +3 -0
  76. data/spec/support/multiple_resources.raml +56 -0
  77. data/spec/support/post_with_request_headers.raml +45 -0
  78. metadata +321 -0
@@ -0,0 +1,52 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "e-BookMobile API", type: :request do
4
+
5
+ describe "/authors" do
6
+ let(:route) { "/authors" }
7
+
8
+ describe "POST" do
9
+ let(:headers) do
10
+ {
11
+ "Content-Type" => "application/json"
12
+ }
13
+ end
14
+
15
+ let(:request_body) do
16
+ {
17
+ "first_name" => "asgaakh",
18
+ "last_name" => "sjdhhgu",
19
+ "year_of_birth" => 3333
20
+ }.to_json
21
+ end
22
+
23
+ let(:response_body) do
24
+ {
25
+ "author" => {
26
+ "id" => 1,
27
+ "first_name" => "asgaakh",
28
+ "last_name" => "sjdhhgu",
29
+ "year_of_birth" => 3333
30
+ }
31
+ }.to_json
32
+ end
33
+
34
+ let(:output_file) do
35
+ "spec/contract/output/authors_get_response.json"
36
+ end
37
+
38
+ it "retrieve a list of authors" do
39
+ get route
40
+
41
+ File.open(output_file, "w+") {|file| file.puts JSON.pretty_generate(JSON.parse(response.body)) }
42
+
43
+ expect(response.body).to eql response_body
44
+ end
45
+
46
+ it "returns status 200" do
47
+ get route
48
+ expect(response.status).to eql 200
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,11 @@
1
+ require "rspec"
2
+ require "rspec/core"
3
+ require "rspec/matchers"
4
+ require "rspec/expectations"
5
+ require "raml-rb"
6
+ require "rack/test"
7
+ require "json"
8
+
9
+ path = File.expand_path('../../lib', __FILE__)
10
+
11
+ Dir.foreach(path) {|f| require f if f.match(/.*\.rb\z/) }
@@ -0,0 +1,10 @@
1
+ require "rspec"
2
+ require "rspec/core"
3
+ require "rspec/matchers"
4
+ require "rspec/expectations"
5
+ require "raml-rb"
6
+ require "json"
7
+
8
+ path = File.expand_path('../../lib', __FILE__)
9
+
10
+ Dir.foreach(path) {|f| require f if f.match(/.*\.rb\z/) }
@@ -0,0 +1,9 @@
1
+ require "rspec"
2
+ require "rspec/core"
3
+ require "rspec/matchers"
4
+ require "rspec/expectations"
5
+ require "raml-rb"
6
+
7
+ path = File.expand_path('../../lib', __FILE__)
8
+
9
+ Dir.foreach(path) {|f| require f if f.match(/.*\.rb\z/) }
@@ -0,0 +1,10 @@
1
+ require "rspec"
2
+ require "rspec/core"
3
+ require "rspec/matchers"
4
+ require "rspec/expectations"
5
+ require "raml-rb"
6
+ require "json"
7
+
8
+ path = File.expand_path('../../lib', __FILE__)
9
+
10
+ Dir.foreach(path) {|f| require f if f.match(/.*\.rb\z/) }
@@ -0,0 +1,30 @@
1
+ #%RAML 0.8
2
+ ---
3
+ title: e-BookMobile API
4
+ baseUri: http://api.e-bookmobile.com/{version}
5
+ version: v1
6
+
7
+ /authors:
8
+ get:
9
+ description: Retrieve a list of authors
10
+ responses:
11
+ 200:
12
+ body:
13
+ application/json:
14
+ example: |
15
+ {
16
+ "data": [
17
+ {
18
+ "id": 1,
19
+ "first_name": "Hermann",
20
+ "last_name": "Hesse"
21
+ },
22
+ {
23
+ "id": 2,
24
+ "first_name": "Charles",
25
+ "last_name": "Dickens"
26
+ }
27
+ ],
28
+ "success": true,
29
+ "status": 200
30
+ }
data/lib/cli.rb ADDED
@@ -0,0 +1,65 @@
1
+ require "colorize"
2
+ require "document_generator"
3
+
4
+ module Rambo
5
+ class CLI
6
+ def initialize(raml_file=nil, opts={}, stdout=STDOUT, stderr=STDERR)
7
+ @stdout = stdout
8
+ @stderr = stderr
9
+ @file = raml_file
10
+ @options = opts
11
+
12
+ validate!
13
+
14
+ @generator = Rambo::DocumentGenerator.new(file, options)
15
+ end
16
+
17
+ def run!
18
+ print_logo
19
+ generator.generate_spec_dir!
20
+ generator.generate_rambo_helper!
21
+ generator.generate_matcher_dir!
22
+ generator.generate_examples!
23
+ generator.generate_matchers!
24
+
25
+ stdout.puts("Generating contract tests...")
26
+ sleep 0.4
27
+
28
+ begin
29
+ generator.generate_spec_file!
30
+ stdout.puts("Done!".green)
31
+ rescue NoMethodError => e
32
+ stderr.puts("Error: #{e.message}".red)
33
+ stderr.puts "\t#{e.backtrace.join("\n\t")}"
34
+ end
35
+ end
36
+
37
+ def validate!
38
+ exit_for_missing_file unless file
39
+ exit_for_invalid_file_format unless file.match(/\.raml$/)
40
+ end
41
+
42
+ private
43
+
44
+ attr_accessor :file, :stdout, :stderr, :generator, :options
45
+
46
+ def print_logo
47
+ stdout.puts logo.colorize(color: String.colors.sample)
48
+ sleep 0.4
49
+ end
50
+
51
+ def exit_for_missing_file
52
+ stdout.puts "USAGE: rambo [FILE]"
53
+ exit 1
54
+ end
55
+
56
+ def exit_for_invalid_file_format
57
+ stdout.puts "Unsupported file format. Please choose a RAML file."
58
+ exit 1
59
+ end
60
+
61
+ def logo
62
+ File.read(File.expand_path("../../assets/logo.txt", __FILE__))
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,49 @@
1
+ require "fileutils"
2
+ require "raml-rb"
3
+
4
+ require "rspec/spec_file"
5
+ require "rspec/helper_file"
6
+
7
+ module Rambo
8
+ class DocumentGenerator
9
+ attr_accessor :file, :raml, :options
10
+
11
+ def initialize(file, options={})
12
+ @file = file
13
+ @raml = Raml::Parser.parse_file(file)
14
+ @options = options
15
+ end
16
+
17
+ def generate_spec_dir!
18
+ FileUtils.mkdir_p("spec/contract/output")
19
+ end
20
+
21
+ def generate_examples!
22
+ FileUtils.mkdir_p("spec/support/examples")
23
+ end
24
+
25
+ def generate_spec_file!
26
+ spec_file_name = file.match(/[^\/]*\.raml$/).to_s.gsub(/\.raml$/, "_spec.rb")
27
+ contents = Rambo::RSpec::SpecFile.new(raml, options).render
28
+ File.write("spec/contract/#{spec_file_name}", contents)
29
+ end
30
+
31
+ def generate_rambo_helper!
32
+ Rambo::RSpec::HelperFile.new(
33
+ template_path: File.expand_path("../rspec/templates/rambo_helper_file_template.erb", __FILE__),
34
+ file_path: "spec/rambo_helper.rb"
35
+ ).generate
36
+ end
37
+
38
+ def generate_matcher_dir!
39
+ FileUtils.mkdir_p("spec/support/matchers")
40
+ end
41
+
42
+ def generate_matchers!
43
+ Rambo::RSpec::HelperFile.new(
44
+ template_path: File.expand_path("../rspec/templates/matcher_file_template.erb", __FILE__),
45
+ file_path: "spec/support/matchers/rambo_matchers.rb"
46
+ ).generate
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,19 @@
1
+ module Rambo
2
+ module RamlModels
3
+ class Api
4
+ attr_reader :schema
5
+
6
+ def initialize(parsed_raml)
7
+ @schema = parsed_raml
8
+ end
9
+
10
+ def resources
11
+ @resources ||= schema.resources.map {|resource| Rambo::RamlModels::Resource.new(resource) }
12
+ end
13
+
14
+ def title
15
+ @title ||= schema.title
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,33 @@
1
+ require "json_test_data"
2
+
3
+ module Rambo
4
+ module RamlModels
5
+ class Body
6
+
7
+ attr_reader :body, :type
8
+
9
+ def initialize(raml)
10
+ @body = raml
11
+ end
12
+
13
+ def content_type
14
+ body.content_type
15
+ end
16
+
17
+ def example
18
+ @example ||= body.example || generate_from_schema || {}.to_json
19
+ end
20
+
21
+ def schema
22
+ @schema ||= body.schema
23
+ end
24
+
25
+ private
26
+
27
+ def generate_from_schema
28
+ return nil unless body.schema
29
+ JSON.pretty_generate(JsonTestData.generate!(body.schema, ruby: true))
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ module Rambo
2
+ module RamlModels
3
+ class Headers
4
+ attr_accessor :headers
5
+
6
+ def initialize(headers)
7
+ @headers = headers
8
+ end
9
+
10
+ def pretty
11
+ beginning, ending = "{\n", "}"
12
+
13
+ contents = headers.map {|key, value|
14
+ "\t\"#{key}\" => \"#{value}\"\n"
15
+ }
16
+
17
+ "#{beginning}#{contents.join}#{ending}"
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,37 @@
1
+ module Rambo
2
+ module RamlModels
3
+ class Method
4
+ attr_reader :schema
5
+
6
+ def initialize(raml_method)
7
+ @schema = raml_method
8
+ end
9
+
10
+ def method
11
+ schema.method
12
+ end
13
+
14
+ def request_body
15
+ Rambo::RamlModels::Body.new(schema.bodies.first) if has_request_body?
16
+ end
17
+
18
+ def description
19
+ @description ||= schema.description
20
+ end
21
+
22
+ def headers
23
+ @headers ||= Rambo::RamlModels::Headers.new(schema.headers) if schema.headers
24
+ end
25
+
26
+ def responses
27
+ @responses ||= schema.responses.map {|resp| Rambo::RamlModels::Response.new(resp) }
28
+ end
29
+
30
+ private
31
+
32
+ def has_request_body?
33
+ !!schema.bodies.first
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,22 @@
1
+ module Rambo
2
+ module RamlModels
3
+ class Resource
4
+
5
+ attr_reader :schema
6
+
7
+ def initialize(raml_resource)
8
+ @schema = raml_resource
9
+ end
10
+
11
+ def uri_partial
12
+ schema.uri_partial
13
+ end
14
+
15
+ alias_method :to_s, :uri_partial
16
+
17
+ def http_methods
18
+ @http_methods ||= schema.methods.map {|method| Rambo::RamlModels::Method.new(method) }
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ module Rambo
2
+ module RamlModels
3
+ class Response
4
+ attr_reader :schema
5
+
6
+ def initialize(raml)
7
+ @schema = raml
8
+ end
9
+
10
+ def status_code
11
+ schema.code
12
+ end
13
+
14
+ def bodies
15
+ @bodies ||= schema.bodies.map {|body| Rambo::RamlModels::Body.new(body) }
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1 @@
1
+ Dir["#{File.dirname(__FILE__)}/raml_models/**/*.rb"].each {|file| require file }
@@ -0,0 +1,53 @@
1
+ module Rambo
2
+ module RSpec
3
+ class ExampleGroup
4
+
5
+ TEMPLATE_PATH = File.expand_path("../templates/example_group_template.erb", __FILE__)
6
+
7
+ attr_reader :resource
8
+
9
+ def initialize(resource, options={})
10
+ @resource = resource
11
+ @options = options
12
+ end
13
+
14
+ def template
15
+ @template ||= File.read(TEMPLATE_PATH)
16
+ end
17
+
18
+ def create_fixture_files
19
+ resource.http_methods.each do |method|
20
+ if method.request_body
21
+ path = File.expand_path("spec/support/examples/#{@resource.to_s.gsub(/\//, "")}_#{method.method}_request_body.json")
22
+ File.write(path, method.request_body.example)
23
+ end
24
+
25
+ method.responses.each do |resp|
26
+ resp.bodies.each do |body|
27
+ path = body.schema ? response_schema_fixture_path(method) : response_body_fixture_path(method)
28
+ contents = body.schema ? body.schema : body.example
29
+ File.write(path, contents)
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ def render
36
+ create_fixture_files
37
+ b = binding
38
+ ERB.new(template, 0, "-", "@result").result(resource.instance_eval { b })
39
+ @result
40
+ end
41
+
42
+ private
43
+
44
+ def response_schema_fixture_path(method)
45
+ File.expand_path("spec/support/examples/#{@resource.to_s.gsub(/\//, "")}_#{method.method}_response_schema.json")
46
+ end
47
+
48
+ def response_body_fixture_path(method)
49
+ File.expand_path("spec/support/examples/#{@resource.to_s.gsub(/\//, "")}_#{method.method}_response_body.json")
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,32 @@
1
+ require "rspec/example_group"
2
+
3
+ module Rambo
4
+ module RSpec
5
+ class Examples
6
+ attr_reader :raml, :resources, :examples, :options
7
+
8
+ def initialize(raml, options={})
9
+ @raml = raml
10
+ @options = options
11
+ end
12
+
13
+ def compose
14
+ return '' unless examples
15
+
16
+ examples.join("\n\n")
17
+ end
18
+
19
+ def resources
20
+ @resources ||= raml.resources
21
+ end
22
+
23
+ def example_groups
24
+ @example_groups ||= resources.map {|r| ExampleGroup.new(r, options) }
25
+ end
26
+
27
+ def generate!
28
+ @examples = example_groups.map(&:render)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,30 @@
1
+ module Rambo
2
+ module RSpec
3
+ class HelperFile
4
+ def initialize(template_path:, file_path:)
5
+ @template_path = template_path
6
+ @file_path = file_path
7
+ end
8
+
9
+ def generate
10
+ write_to_file(template) unless file_already_exists?
11
+ end
12
+
13
+ private
14
+
15
+ attr_reader :template_path, :file_path
16
+
17
+ def file_already_exists?
18
+ File.exist?(file_path)
19
+ end
20
+
21
+ def write_to_file(template)
22
+ File.write(file_path, template)
23
+ end
24
+
25
+ def template
26
+ @template ||= File.read(template_path)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,31 @@
1
+ require 'erb'
2
+ require 'raml'
3
+
4
+ require "rspec/examples"
5
+ require "raml_models"
6
+
7
+ module Rambo
8
+ module RSpec
9
+ class SpecFile
10
+ attr_reader :raml, :examples, :options
11
+
12
+ TEMPLATE_PATH = File.expand_path('../templates/spec_file_template.erb', __FILE__)
13
+
14
+ def initialize(raml, options={})
15
+ @raml = Rambo::RamlModels::Api.new(raml)
16
+ @options = options
17
+ @examples = Examples.new(@raml, @options)
18
+ end
19
+
20
+ def template
21
+ @template ||= File.read(TEMPLATE_PATH)
22
+ end
23
+
24
+ def render
25
+ b = binding
26
+ ERB.new(template, 0, "-", "@result").result(raml.instance_eval { b })
27
+ @result
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,39 @@
1
+ describe "<%= @resource.to_s %>" do
2
+ let(:route) { "<%= @resource.to_s %>" }
3
+ <%- @resource.http_methods.each do |method| %>
4
+ describe "<%= method.method.upcase %>" do
5
+ <% if method.headers %>let(:headers) do <% headers = method.headers.pretty.split("\n")[1..-2] %>
6
+ {
7
+ <%= headers.join(",\n ") %>
8
+ }
9
+ end<% end %><% if method.request_body %>
10
+
11
+ let(:request_body) do
12
+ File.read("<%= "spec/support/examples/#{@resource.to_s.gsub("/", "")}_#{method.method}_request_body.json" %>")
13
+ end<% end %><% if has_schema = method.responses.first.bodies.first.schema %>
14
+
15
+ let(:response_schema) do
16
+ File.read("<%= "spec/support/examples/#{@resource.to_s.gsub("/", "")}_#{method.method}_response_schema.json" %>")
17
+ end<% else %>
18
+ let(:response_body) do<% body = method.responses.first.bodies.first.example.split("\n") %>
19
+ File.read("<%= "spec/support/examples/#{@resource.to_s.gsub("/", "")}_#{method.method}_response_body.json" %>")
20
+ end<% end %>
21
+
22
+ let(:output_file) do
23
+ "<%= "spec/contract/output/#{@resource.to_s.gsub("/", "")}_#{method.method}_response.json" %>"
24
+ end
25
+ <% resp_method = @options[:rails] ? "response" : "last_response" %>
26
+ it "<%= method.description && method.description.downcase || "#{method.method}s the resource" %>" do
27
+ <%= method.method %> route<% if method.request_body %>, request_body<% end %><% if method.headers %>, headers<% end %>
28
+
29
+ File.open(output_file, "w+") {|file| file.puts JSON.pretty_generate(JSON.parse(<%= resp_method %>.body)) }
30
+
31
+ expect(<%= resp_method %>.body).to <%= has_schema ? "match_schema response_schema" : "eql response_body" %>
32
+ end
33
+
34
+ it "returns status <%= method.responses.first.status_code %>" do
35
+ <%= method.method %> route<% if method.request_body %>, request_body<% end %><% if method.headers %>, headers<% end %>
36
+ expect(<%= resp_method %>.status).to eql <%= method.responses.first.status_code %>
37
+ end
38
+ end<%- end %>
39
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec/expectations"
2
+ require "json-schema"
3
+
4
+ RSpec::Matchers.define :match_schema do |expected|
5
+ match do |actual|
6
+ JSON::Validator.validate(expected, actual)
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ require "spec_helper"
2
+
3
+ require_relative "./support/matchers/rambo_matchers"
@@ -0,0 +1,15 @@
1
+ require "rambo_helper"
2
+
3
+ RSpec.describe "<%= @raml.title %>", type: :request do
4
+
5
+ # Delete output files from previous test run prior to running tests again
6
+ before(:all) do
7
+ Dir.foreach("spec/contract/output") do |file|
8
+ next unless file.match(/\.json$/)
9
+
10
+ File.delete(File.join("spec/contract/output", file))
11
+ end
12
+ end
13
+ <%- if @examples.generate! && @examples.compose.size > 0 %>
14
+ <%= @examples.compose.chomp %><%- end %>
15
+ end
data/lib/rspec.rb ADDED
@@ -0,0 +1 @@
1
+ Dir["#{File.dirname(__FILE__)}/rspec/**/*.rb"].each {|file| require file }
data/lib/version.rb ADDED
@@ -0,0 +1,9 @@
1
+ module Rambo
2
+ MAJOR = '0'
3
+ MINOR = '1'
4
+ PATCH = '0'
5
+
6
+ def self.version
7
+ [Rambo::MAJOR, Rambo::MINOR, Rambo::PATCH].join('.')
8
+ end
9
+ end
@@ -0,0 +1,38 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "version"
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "rambo_ruby"
8
+ s.version = Rambo.version
9
+ s.authors = ["Dana Scheider"]
10
+ s.description = "RAML in, RSpec out"
11
+ s.summary = "rambo_ruby-#{s.version}"
12
+ s.email = "dana.scheider@gmail.com"
13
+ s.license = "MIT"
14
+ s.platform = Gem::Platform::RUBY
15
+ s.required_ruby_version = ">= 2.1.0"
16
+
17
+ s.add_dependency "rspec", "~> 3.4"
18
+ s.add_dependency "raml-rb", "~> 0.0.6"
19
+ s.add_dependency "rack-test", "~> 0.6"
20
+ s.add_dependency "colorize", "~> 0.7"
21
+ s.add_dependency "json_test_data", "~> 1.0"
22
+ s.add_dependency "json-schema", "~> 2.6"
23
+
24
+ s.add_development_dependency "cucumber", "~> 2.1"
25
+ s.add_development_dependency "json", "~> 1.7"
26
+ s.add_development_dependency "rake", "~> 11.0"
27
+ s.add_development_dependency "coveralls", "~> 0.7"
28
+ s.add_development_dependency "aruba", "~> 0.13"
29
+
30
+ s.executables = "rambo"
31
+ s.default_executable = "rambo"
32
+
33
+ s.rubygems_version = ">= 1.6.1"
34
+ s.files = `git ls-files`.split("\n").reject {|path| path =~ /\.gitignore$/ }
35
+ s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
36
+ s.rdoc_options = ["--charset=UTF-8"]
37
+ s.require_path = "lib"
38
+ end