apiaryio 0.0.5 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ Gemfile.lock
1
2
  .bundle
2
3
  .rvmrc
3
4
  .tags
data/.travis.yml CHANGED
@@ -11,7 +11,8 @@ rvm:
11
11
  notifications:
12
12
  email:
13
13
  recipients:
14
- - lukas@apiary.io
14
+ - lukas@apiary.io
15
+ - adam@apiary.io
15
16
  on_success: change
16
17
  on_failure: always
17
18
  hipchat:
data/README.md CHANGED
@@ -1,7 +1,9 @@
1
1
  apiaryio
2
2
  =============
3
3
 
4
- Apiary.io CLI
4
+ Apiary.io CLI
5
+
6
+ [![Build Status](https://travis-ci.org/apiaryio/apiary-client.png?branch=travis)](https://travis-ci.org/apiaryio/apiary-client)
5
7
 
6
8
 
7
9
  ## Install
@@ -13,7 +15,7 @@ gem install apiaryio
13
15
 
14
16
  ## Description
15
17
 
16
- Apiaryio gem provides a way to test and display your API documentation on your local
18
+ Apiaryio gem provides a way to display your API documentation on your local
17
19
  machine, either using static files or using a standalone web server...
18
20
 
19
21
  ## Usage
@@ -31,7 +33,6 @@ machine, either using static files or using a standalone web server...
31
33
  preview --api_host [HOST] Specify apiary host
32
34
  preview --server Start standalone web server on port 8080
33
35
  preview --server --port [PORT] Start standalone web server on specified port
34
- okapi help Show okapi testing tool help
35
36
  help Show help
36
37
 
37
38
  version Show version
data/apiary.gemspec CHANGED
@@ -18,7 +18,6 @@ Gem::Specification.new do |gem|
18
18
 
19
19
  gem.add_dependency "rest-client", "~> 1.6.7"
20
20
  gem.add_dependency "rack", "~> 1.4.1"
21
- gem.add_dependency "json"
22
21
  gem.add_dependency "rake"
23
22
 
24
23
  gem.add_development_dependency "rspec", "~> 2.11.0"
data/bin/apiary CHANGED
@@ -1,12 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..','lib')))
3
3
  require 'apiary'
4
- require 'okapi'
5
4
 
6
- trap(:INT) { abort "" }
7
- if ARGV[0] == 'okapi' || ARGV[0] == 'test'
8
- ARGV.delete_at(0)
9
- Apiary::Okapi::CLI.new(ARGV)
10
- else
11
- Apiary::CLI.new(ARGV)
12
- end
5
+ Apiary::CLI.new(ARGV)
6
+
data/lib/apiary/cli.rb CHANGED
@@ -24,6 +24,10 @@ module Apiary
24
24
  options[:path] = path
25
25
  end
26
26
 
27
+ opts.on("--output [PATH]") do |path|
28
+ options[:output] = path
29
+ end
30
+
27
31
  opts.on("--api_host API_HOST") do |api_host|
28
32
  options[:api_host] = api_host
29
33
  end
@@ -23,7 +23,6 @@ module Apiary
23
23
  puts "\tpreview --server Start standalone web server on port 8080"
24
24
  puts "\tpreview --server --port [PORT] Start standalone web server on specified port"
25
25
  puts "\tpublish --api-name [API_NAME] Publish apiary.apib on docs.API_NAME.apiary.io"
26
- puts "\tokapi help Show okapi testing tool help"
27
26
  puts "\n"
28
27
  puts "\thelp Show this help"
29
28
  puts "\n"
@@ -81,10 +81,16 @@ module Apiary
81
81
  exec "open #{browser_options} #{path}"
82
82
  end
83
83
 
84
+ def write_generated_path(path, outfile)
85
+ File.open(outfile, 'w') do |file|
86
+ file.write(File.open(path, 'r').read)
87
+ end
88
+ end
89
+
84
90
  def generate_static(path)
85
91
  File.open(preview_path(path), "w") do |file|
86
92
  file.write(query_apiary(@options.api_host, path))
87
- open_generated_page(file.path)
93
+ @options.output ? write_generated_path(file.path, @options.output) : open_generated_page(file.path)
88
94
  end
89
95
  end
90
96
 
@@ -59,7 +59,7 @@ module Apiary
59
59
  }
60
60
  response = RestClient.post url, data, @options.headers
61
61
 
62
- unless response.code == 201
62
+ unless (200..299).include? response.code
63
63
  abort "Request failed with code #{response.code}"
64
64
  end
65
65
  end
@@ -1,3 +1,3 @@
1
1
  module Apiary
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.7"
3
3
  end
metadata CHANGED
@@ -1,125 +1,115 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: apiaryio
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.5
3
+ version: !ruby/object:Gem::Version
4
+ hash: 17
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 7
10
+ version: 0.0.7
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Apiary Ltd.
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2013-07-18 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2013-10-03 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: rest-client
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: 1.6.7
22
- type: :runtime
23
22
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
- requirements:
25
+ requirements:
27
26
  - - ~>
28
- - !ruby/object:Gem::Version
27
+ - !ruby/object:Gem::Version
28
+ hash: 1
29
+ segments:
30
+ - 1
31
+ - 6
32
+ - 7
29
33
  version: 1.6.7
30
- - !ruby/object:Gem::Dependency
31
- name: rack
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
36
- - !ruby/object:Gem::Version
37
- version: 1.4.1
38
34
  type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: rack
39
38
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
41
40
  none: false
42
- requirements:
41
+ requirements:
43
42
  - - ~>
44
- - !ruby/object:Gem::Version
43
+ - !ruby/object:Gem::Version
44
+ hash: 5
45
+ segments:
46
+ - 1
47
+ - 4
48
+ - 1
45
49
  version: 1.4.1
46
- - !ruby/object:Gem::Dependency
47
- name: json
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
50
  type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
63
53
  name: rake
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :runtime
71
54
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
55
+ requirement: &id003 !ruby/object:Gem::Requirement
73
56
  none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 3
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ type: :runtime
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
79
67
  name: rspec
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ~>
84
- - !ruby/object:Gem::Version
85
- version: 2.11.0
86
- type: :development
87
68
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
69
+ requirement: &id004 !ruby/object:Gem::Requirement
89
70
  none: false
90
- requirements:
71
+ requirements:
91
72
  - - ~>
92
- - !ruby/object:Gem::Version
73
+ - !ruby/object:Gem::Version
74
+ hash: 35
75
+ segments:
76
+ - 2
77
+ - 11
78
+ - 0
93
79
  version: 2.11.0
94
- - !ruby/object:Gem::Dependency
95
- name: yard
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ~>
100
- - !ruby/object:Gem::Version
101
- version: 0.8.2.1
102
80
  type: :development
81
+ version_requirements: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ name: yard
103
84
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
85
+ requirement: &id005 !ruby/object:Gem::Requirement
105
86
  none: false
106
- requirements:
87
+ requirements:
107
88
  - - ~>
108
- - !ruby/object:Gem::Version
89
+ - !ruby/object:Gem::Version
90
+ hash: 5
91
+ segments:
92
+ - 0
93
+ - 8
94
+ - 2
95
+ - 1
109
96
  version: 0.8.2.1
97
+ type: :development
98
+ version_requirements: *id005
110
99
  description: Apiary.io CLI
111
- email:
100
+ email:
112
101
  - team@apiary.io
113
- executables:
102
+ executables:
114
103
  - apiary
115
104
  extensions: []
105
+
116
106
  extra_rdoc_files: []
117
- files:
107
+
108
+ files:
118
109
  - .gitignore
119
110
  - .rspec
120
111
  - .travis.yml
121
112
  - Gemfile
122
- - Gemfile.lock
123
113
  - LICENSE
124
114
  - README.md
125
115
  - Rakefile
@@ -154,51 +144,41 @@ files:
154
144
  - lib/apiary/command/runner.rb
155
145
  - lib/apiary/command/version.rb
156
146
  - lib/apiary/version.rb
157
- - lib/okapi.rb
158
- - lib/okapi/apiary_connector.rb
159
- - lib/okapi/cli.rb
160
- - lib/okapi/config.rb
161
- - lib/okapi/examples/apiary.apib
162
- - lib/okapi/examples/apiary.yaml
163
- - lib/okapi/examples/tests.spec
164
- - lib/okapi/examples/tests2.spec
165
- - lib/okapi/exceptions.rb
166
- - lib/okapi/help.rb
167
- - lib/okapi/okapi
168
- - lib/okapi/output.rb
169
- - lib/okapi/outputs/base.rb
170
- - lib/okapi/outputs/tap.rb
171
- - lib/okapi/resources.rb
172
- - lib/okapi/spec_parser.rb
173
- - lib/okapi/test.rb
174
147
  - spec/cli_spec.rb
175
148
  - spec/spec_helper.rb
176
149
  homepage: http://apiary.io
177
- licenses:
150
+ licenses:
178
151
  - MIT
179
152
  post_install_message:
180
153
  rdoc_options: []
181
- require_paths:
154
+
155
+ require_paths:
182
156
  - lib
183
- required_ruby_version: !ruby/object:Gem::Requirement
157
+ required_ruby_version: !ruby/object:Gem::Requirement
184
158
  none: false
185
- requirements:
186
- - - ! '>='
187
- - !ruby/object:Gem::Version
188
- version: '0'
189
- required_rubygems_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ hash: 3
163
+ segments:
164
+ - 0
165
+ version: "0"
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
190
167
  none: false
191
- requirements:
192
- - - ! '>='
193
- - !ruby/object:Gem::Version
194
- version: '0'
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ hash: 3
172
+ segments:
173
+ - 0
174
+ version: "0"
195
175
  requirements: []
176
+
196
177
  rubyforge_project:
197
- rubygems_version: 1.8.24
178
+ rubygems_version: 1.8.15
198
179
  signing_key:
199
180
  specification_version: 3
200
181
  summary: Apiary.io CLI
201
- test_files:
182
+ test_files:
202
183
  - spec/cli_spec.rb
203
184
  - spec/spec_helper.rb
204
- has_rdoc:
data/Gemfile.lock DELETED
@@ -1,32 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- apiaryio (0.0.1)
5
- rack (~> 1.4.1)
6
- rest-client (~> 1.6.7)
7
-
8
- GEM
9
- remote: https://rubygems.org/
10
- specs:
11
- diff-lcs (1.1.3)
12
- mime-types (1.19)
13
- rack (1.4.1)
14
- rest-client (1.6.7)
15
- mime-types (>= 1.16)
16
- rspec (2.11.0)
17
- rspec-core (~> 2.11.0)
18
- rspec-expectations (~> 2.11.0)
19
- rspec-mocks (~> 2.11.0)
20
- rspec-core (2.11.1)
21
- rspec-expectations (2.11.2)
22
- diff-lcs (~> 1.1.3)
23
- rspec-mocks (2.11.1)
24
- yard (0.8.2.1)
25
-
26
- PLATFORMS
27
- ruby
28
-
29
- DEPENDENCIES
30
- apiaryio!
31
- rspec (~> 2.11.0)
32
- yard (~> 0.8.2.1)
data/lib/okapi.rb DELETED
@@ -1,13 +0,0 @@
1
- # encoding: utf-8
2
- require 'rubygems'
3
- require "okapi/config"
4
- require "okapi/output"
5
- require "okapi/apiary_connector"
6
- require "okapi/resources"
7
- require "okapi/spec_parser"
8
- require "okapi/test"
9
- require "okapi/cli"
10
- require "okapi/help"
11
-
12
- module Okapi
13
- end
@@ -1,98 +0,0 @@
1
- # encoding: utf-8
2
- require 'rest_client'
3
- require 'json'
4
-
5
- module Apiary
6
- module Okapi
7
- class ApiaryConnector
8
- attr_reader :apiary_url, :blueprint
9
-
10
- def initialize(apiary_url, req_path, res_path)
11
- @apiary_url = apiary_url
12
- @req_path = req_path
13
- @res_path = res_path
14
- end
15
-
16
- def get_response(raw_resp, json_data, error, code)
17
- { :resp => raw_resp,
18
- :data => json_data ? json_data['requests'] : nil,
19
- :status => json_data ? json_data['status'] : nil ,
20
- :error => json_data ? json_data['error'] || error : error,
21
- :code => code
22
- }
23
- end
24
-
25
- def get_requests(resources, blueprint, all_resources = false, global_vars = {})
26
- resources_list = []
27
-
28
- resources.each() do |res|
29
- resources_list << {
30
- :resource => res['resource'],
31
- :method => res['method'],
32
- :params => res['params']
33
- }
34
- end
35
-
36
- data = {
37
- :resources => resources_list,
38
- :blueprint => blueprint,
39
- :all_resources => all_resources,
40
- :global_vars => global_vars
41
- }.to_json()
42
-
43
- begin
44
- response = RestClient.post @apiary_url + @req_path, data, :content_type => :json, :accept => :json
45
- get_response(response, JSON.parse(response.to_str), nil, response.code.to_i)
46
- rescue RestClient::BadRequest, RestClient::InternalServerError => e
47
- begin
48
- data = JSON.parse(e.http_body)
49
- get_response(nil, JSON.parse(e.http_body), data['error'], e.http_code.to_i)
50
- rescue
51
- get_response(nil, nil, e.to_s, e.http_code.to_i)
52
- end
53
- rescue Exception => e
54
- get_response(nil, nil, e.to_s, nil)
55
- end
56
-
57
- end
58
-
59
- def get_results(resources, blueprint)
60
- resources_list = []
61
- resources.each() do |res|
62
- resources_list << {
63
- :request => {
64
- :uri => res.uri,
65
- :expandedUri => res.expanded_uri,
66
- :method => res.method,
67
- :headers => res.headers,
68
- :body => res.body,
69
- },
70
- :response => {
71
- :status => res.response.status,
72
- :headers => res.response.headers ,
73
- :body => res.response.body
74
- }
75
- }
76
- end
77
-
78
- data = {
79
- :resources => resources_list,
80
- :blueprint => blueprint
81
- }.to_json()
82
-
83
- begin
84
- response = RestClient.post @apiary_url + @res_path, data, :content_type => :json, :accept => :json
85
- get_response(response, JSON.parse(response.to_str), nil, response.code.to_i)
86
- rescue RestClient::BadRequest, RestClient::InternalServerError => e
87
- begin
88
- get_response(nil, JSON.parse(e.http_body), data['error'], e.http_code.to_i)
89
- rescue
90
- get_response(nil, nil, e.to_s, e.http_code.to_i)
91
- end
92
- rescue Exception => e
93
- get_response(nil, nil, e.to_s, nil)
94
- end
95
- end
96
- end
97
- end
98
- end
data/lib/okapi/cli.rb DELETED
@@ -1,122 +0,0 @@
1
- # encoding: utf-8
2
- require 'optparse'
3
- require 'yaml'
4
-
5
- module Apiary
6
- module Okapi
7
- class CLI
8
-
9
- def initialize(args)
10
- case args.first
11
- when 'help'
12
- Apiary::Okapi::Help.show
13
- exit 0
14
- when 'okapi'
15
- Apiary::Okapi::Help.okapi
16
- exit 0
17
- else
18
- parse_options!(args)
19
- parse_config
20
- @options[:blueprint] ||= BLUEPRINT_PATH
21
- @options[:test_spec] ||= TEST_SPEC_PATHS
22
- @options[:output] ||= OUTPUT
23
- @options[:test_url] ||= TEST_URL
24
- @options[:apiary_url] ||= APIARY_URL
25
-
26
- @options[:test_spec] ||= TEST_SPEC_PATHS.gsub(' ','').split(',')
27
-
28
- if @options[:params]
29
- puts "running with :"
30
- p @options
31
- puts "\n"
32
- end
33
-
34
- exit run
35
- end
36
- end
37
-
38
- def run
39
- pass = true
40
- @options[:test_spec].each { |spec|
41
- pass = Apiary::Okapi::Test.new(@options[:blueprint], spec, @options[:test_url], @options[:output], @options[:apiary_url]).run()
42
- }
43
- if pass
44
- 0
45
- else
46
- 1
47
- end
48
- end
49
-
50
- def parse_config
51
- begin
52
- if tests = YAML.load_file(@options[:config_path])['tests']
53
- @options[:test_url] ||= tests['host'] if tests['host']
54
- @options[:test_spec] ||= tests['specs'] if tests['specs']
55
- end
56
- rescue Errno::ENOENT => e
57
- puts "Config file (#{@options[:config_path]}) not accessible ... skiping"
58
- puts "\n"
59
- rescue Exception => e
60
- puts "Config file (#{@options[:config_path]}) loading problem :#{e}"
61
- puts "\n"
62
- exit 1
63
- end
64
- end
65
-
66
- def parse_options!(args)
67
- @options = {}
68
- options_parser = OptionParser.new do |opts|
69
- opts.on("-c", "--config CONFIG",
70
- "path config file (default: " + CONFIG_PATH + " )") do |config|
71
- @options[:config_path] = config
72
- end
73
-
74
- opts.on("-b", "--blueprint BLUEPRINT",
75
- "path to the blueprint (default: " + BLUEPRINT_PATH + " )") do |blueprint|
76
- @options[:blueprint] = blueprint
77
- end
78
-
79
- opts.on("-t","--test_spec TEST_SPEC",
80
- "comma separated paths to the test specifications (default: " + TEST_SPEC_PATHS + " )") do |test_spec|
81
- @options[:test_spec] = test_spec
82
- end
83
-
84
- opts.on("-o","--output OUTPUT",
85
- "output format (default" + OUTPUT + ")") do |output|
86
- @options[:output] = output
87
- end
88
-
89
- opts.on("-u","--test_url TEST_URL",
90
- "url to test (default" + TEST_URL + ")") do |test_url|
91
- @options[:test_url] = test_url
92
- end
93
-
94
- opts.on("-a","--apiary APIARY",
95
- "apiary url (default" + APIARY_URL + ")") do |apiary|
96
- @options[:apiary_url] = apiary
97
- end
98
-
99
- opts.on("-p","--params [PARAMS]",
100
- "show parameters" ) do |params|
101
- @options[:params] = true
102
- end
103
- end
104
-
105
- options_parser.parse!
106
-
107
- @options[:config_path] ||= CONFIG_PATH
108
- @options[:test_spec] = @options[:test_spec].gsub(' ','').split(',') if @options[:test_spec]
109
-
110
- @options
111
-
112
- rescue OptionParser::InvalidOption => e
113
- puts "\n"
114
- puts e
115
- Apiary::Okapi::Help.banner
116
- puts "\n"
117
- exit 1
118
- end
119
-
120
- end
121
- end
122
- end
data/lib/okapi/config.rb DELETED
@@ -1,13 +0,0 @@
1
- # encoding: utf-8
2
- module Apiary
3
- module Okapi
4
- CONFIG_PATH = "apiary.yaml"
5
- APIARY_URL = "https://api.apiary.io"
6
- GET_REQUESTS_PATH = "/tests/get-requests"
7
- GET_RESULTS_PATH = "/tests/get-test-results"
8
- BLUEPRINT_PATH = "apiary.apib"
9
- TEST_SPEC_PATHS = "tests.spec"
10
- TEST_URL = "http://127.0.0.1"
11
- OUTPUT = 'tap'
12
- end
13
- end
@@ -1,59 +0,0 @@
1
- HOST: http://www.google.com/
2
-
3
- --- test API ---
4
-
5
- ---
6
- Welcome to the our sample API documentation. All comments can be written in (support [Markdown](http://daringfireball.net/projects/markdown/syntax) syntax)
7
- ---
8
-
9
- --
10
- Shopping Cart Resources
11
- The following is a section of resources related to the shopping cart
12
- --
13
-
14
- List products added into your shopping-cart. (comment block again in Markdown)
15
- GET /shopping-cart/{id}
16
- < 200
17
- < Content-Type: application/json
18
- { "items": [
19
- { "url": "/shopping-cart/1", "product":"2ZY48XPZ", "quantity": 1, "name": "New socks", "price": 1.25 }
20
- ] }
21
-
22
- Save new products in your shopping cart
23
- POST /shopping-cart/{id2}
24
- > Content-Type: application/json
25
- > CCC: aaa
26
- { "product":"1AB23ORM", "quantity": 2 }
27
- < 201
28
- < Content-Type: application/json
29
- < CCC: aaa
30
- { "status": "created", "url": "/shopping-cart/2" }
31
-
32
- -- Payment Resources --
33
-
34
- This resource allows you to submit payment information to process your *shopping cart* items
35
- POST /payment
36
- { "cc": "12345678900", "cvc": "123", "expiry": "0112" }
37
- < 200
38
- { "receipt": "/payment/receipt/1" }
39
-
40
- -- JSON Schema Validations --
41
-
42
- POST /shopping-cart/{id2}
43
- {"request":
44
- { "type": "object",
45
- "properties": {
46
- "product": { "type": "string","format": "alphanumeric" },
47
- "quantity": { "type": "integer" }
48
- }
49
- }
50
- ,
51
- "response":
52
- { "type": "object",
53
- "properties": {
54
- "product": { "type": "string","format": "alphanumeric" },
55
- "status": { "type": "integer" }
56
- }
57
- }
58
- }
59
-
@@ -1,5 +0,0 @@
1
- tests:
2
- host: http://aptest.apiary.io
3
- specs:
4
- - tests.spec
5
- - tests2.spec
@@ -1,6 +0,0 @@
1
- VARS {"id2": "eee", "id": "5"}
2
- POST /shopping-cart/{id2} {"id2": "eee2"}
3
- POST
4
- CONTINUE
5
-
6
-
@@ -1,3 +0,0 @@
1
- POST /shopping-cart/{id2} {"id2": "eee2"}
2
- POST /payment
3
-
File without changes
data/lib/okapi/help.rb DELETED
@@ -1,36 +0,0 @@
1
- # encoding: utf-8
2
- module Apiary
3
- module Okapi
4
- class Help
5
-
6
- def self.show
7
- banner
8
- options
9
- end
10
-
11
- def self.banner
12
- puts "\nUsage: okapi [options]"
13
- puts "Try 'okapi help' for more information."
14
- end
15
-
16
- def self.options
17
- puts "\nCurrently available okapi options are:\n\n"
18
-
19
- puts "\t-b, --blueprint path to the blueprint (default: " + BLUEPRINT_PATH + " )"
20
- puts "\t-t, --test_spec path to the test specification (default: " + TEST_SPEC_PATHS + " )"
21
- #puts "\t-o, --output output format (default: " + OUTPUT + ")"
22
- puts "\t-u, --test_url url to test (default: " + TEST_URL + ")"
23
- puts "\t-a, --apiary apiary url (default: " + APIARY_URL + ")"
24
- puts "\t-s, --config config file (default: " + CONFIG_PATH + ")"
25
- puts "\t-p, --params prints used parameters"
26
- puts "\n"
27
- puts "\thelp Show this help"
28
- puts "\n"
29
- end
30
-
31
- def self.okapi
32
- puts File.read(File.dirname(__FILE__) + '/okapi')
33
- end
34
- end
35
- end
36
- end
data/lib/okapi/okapi DELETED
@@ -1,43 +0,0 @@
1
-
2
- ,#.@:
3
- @;#@@#
4
- #+#@#@;
5
- :+#;#'+@#@#`
6
- @@##@+@;; ``` ,` ;,;@@@+',`
7
- ;@###@@. ,+#@@@@@@@@#@@@@@@@@@@#``
8
- #@@: `,@@#@#@#@@##@@@@@@@'#`+:+:`
9
- .#@` #+ ` ::` :`,.+;#`,``'`@.##:#`+`##;` `
10
- '@# ` , #+@#@+':@###@+;+.#@,@#`+`+#@@@#:.
11
- +@@` + `;#;++`'@@###@@+ @@,@@`#;@@#@#@@@#;+'
12
- :@@@@. `; ';#+@,##@####@;,@+,@#`:#':#+'@##@@#'@+`
13
- `@@@@###; ` ' @;+#@@#@#.@@'@@@``.'` +#:@'@@#@#@#;
14
- `,`#+`,#` `:;#;@#@;.#+;@@#:'`++ ` #.@@@:@,@@@#
15
- `:;##@##@:##@.'+:@#,#`.@#@:@@;@##+`
16
- #,#@+@@@##@##@#+:`#@@#@`+#;##++
17
- @@@@@@@@@@;'@+@#`#.'@@@@``,.,:#,
18
- ####@@@##'`#@'@@`#'#,@@@# `@#
19
- ;#@@+@@#'+@'@+@#`#@+@@@@@## #,#
20
- #@@##@#+##:@#@@,'@.@@@` :: ;#;
21
- '#,#`#@#.'.#@@#+,####` ` `'#
22
- + +:;+@@#@#.##@@#.@. `+`,
23
- ' `#+###@@@@@#@@@+`.:` .'#
24
- @` ##@#####@:@@##`` #,@
25
- @#'` #@@##@#,'### ` @'#
26
- ###' @ :##`#;;#, @.,
27
- ,+,+ .. ` +#+': . ``++,
28
- :':'@; +; `,,, `;
29
- #; `: @;#'`; :+``
30
-
31
- +` ` '+;' : .#`
32
- @@,@+ .+. ; +##;
33
- ;#,#@ ',+. `@##
34
- :#:#
35
- `+ .
36
- ##.#` + #
37
- #+,@. @ +
38
- #+ .` # `
39
- :; '`` `
40
- +## ###
41
- `@@: .##`
42
- '## ##:
43
- `# `
data/lib/okapi/output.rb DELETED
@@ -1,14 +0,0 @@
1
- # encoding: utf-8
2
- Dir["#{File.dirname(__FILE__)}/outputs/*.rb"].each { |f| require(f) }
3
-
4
- module Apiary
5
- module Okapi
6
- class Output
7
- def self.get(output,resources, error)
8
- output = Apiary::Okapi::Outputs.const_get(output.to_s.capitalize).send(:new, resources, error)
9
- output.get()
10
- output.status
11
- end
12
- end
13
- end
14
- end
@@ -1,91 +0,0 @@
1
- module Apiary
2
- module Okapi
3
- module Outputs
4
- class BaseOutput
5
- attr_reader :status
6
-
7
- def initialize(resources, error)
8
- @resources = resources
9
- @error = error
10
- @results = {
11
- :count => 0,
12
- :give_up => false,
13
- }
14
- @status = true
15
- get_results
16
- end
17
-
18
- def get
19
- p @results[:count].to_s + ' tests'
20
- p @results[:give_up][:error].to_s if @results[:give_up]
21
- @results[:tests].each { |test|
22
- p '-------------------------------------------------'
23
- p test[:test_no]
24
- p test[:description]
25
- if test[:pass]
26
- p 'OK'
27
- else
28
- p "FAILED"
29
- p test[:exp]
30
- end
31
- }
32
- end
33
-
34
- def get_results
35
- @results[:count] = @resources.count
36
- @results[:tests] = []
37
-
38
- if @error
39
- @results[:give_up] = {:error => @error}
40
- @status = false
41
- else
42
- counter = 0
43
- @resources.each { |res|
44
- counter += 1
45
- test_res = {
46
- :test_no=> counter,
47
- :pass => (res.validation_result.status and res.response.validation_result.status),
48
- :description => (res.method + ' ' + res.uri) + ((res.expanded_uri and res.uri != res.expanded_uri['url']) ? " (#{res.expanded_uri['url']}) " : '')
49
- }
50
- if not test_res[:pass]
51
- test_res[:exp] = {:request => {:pass => false}, :response => {:pass => false}}
52
- if res.validation_result.status
53
- test_res[:exp][:request][:pass] = true
54
- else
55
- test_res[:exp][:request][:reasons] = get_fail_result(res.validation_result)
56
- @status = false
57
- end
58
-
59
- if res.response.validation_result.status
60
- test_res[:exp][:response][:pass] = true
61
- else
62
- test_res[:exp][:response][:reasons] = get_fail_result(res.response.validation_result)
63
- @status = false
64
- end
65
- end
66
- @results[:tests] << test_res
67
- }
68
- end
69
- end
70
-
71
- def get_fail_result(result)
72
- res = []
73
-
74
- if result.schema
75
- result.schema_res["errors"]["length"].times {|i|
76
- res << result.schema_res["errors"][i.to_s]["message"]
77
- }
78
- else
79
- if not result.body_pass
80
- res << 'Body does not match'
81
- end
82
- end
83
- if not result.header_pass
84
- res << 'Headers does not match'
85
- end
86
- res
87
- end
88
- end
89
- end
90
- end
91
- end
@@ -1,44 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/base.rb"
2
- require 'yaml'
3
-
4
- module Apiary
5
- module Okapi
6
- module Outputs
7
- class Tap < Apiary::Okapi::Outputs::BaseOutput
8
-
9
- def get
10
- get_int
11
- puts "\n\n"
12
- end
13
-
14
- def get_int
15
- puts "TAP version 13"
16
- puts "1..#{@results[:count].to_s}"
17
- if @results[:give_up]
18
- puts "Bail out! #{@results[:give_up][:error].to_s.tr("\n"," ")}"
19
- return
20
- end
21
- @results[:tests].each { |test|
22
- if test[:pass]
23
- o = 'ok '
24
- else
25
- o = 'not ok '
26
- end
27
- puts o + test[:test_no].to_s + ' ' + test[:description]
28
- if not test[:pass]
29
- error_block(test)
30
- end
31
- }
32
- end
33
-
34
- def error_block(test)
35
- test[:exp].to_yaml.split(/\n/).each { |line|
36
- puts " #{line}"
37
- }
38
- puts " ..."
39
-
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,53 +0,0 @@
1
- # encoding: utf-8
2
- module Apiary
3
- module Okapi
4
- class Resource
5
- attr_accessor :uri, :method, :params, :expanded_uri, :headers, :body, :response, :validation_result
6
-
7
- def initialize(uri, method, params, expanded_uri = nil, headers = nil, body = nil, response = nil, validation_result = nil)
8
- #p uri, method, params
9
- @uri = uri
10
- @method = method
11
- @params = params
12
- @expanded_uri = expanded_uri
13
- @headers = headers
14
- @body = body
15
- @response = response
16
- @validation_result = validation_result
17
- end
18
- end
19
-
20
- class Response
21
- attr_accessor :status, :headers, :body, :error, :validation_result
22
-
23
- def initialize(status = nil, headers = nil, body = nil, error = nil, validation_result = nil)
24
- @headers = headers
25
- @body = body
26
- @status = status
27
- @error = error
28
- @validation_result = validation_result
29
- end
30
- end
31
-
32
- class ValidationResult
33
- attr_accessor :status, :error, :schema_res , :body_pass, :body_diff, :header_pass, :header_diff
34
-
35
- def status
36
- @status ||= get_status
37
- end
38
-
39
- def get_status
40
- return true if not @error and @header_pass and ((schema and schema_pass) or (not schema and @body_pass))
41
- return false
42
- end
43
-
44
- def schema
45
- !(@schema_res == false)
46
- end
47
-
48
- def schema_pass
49
- not schema or schema and @schema_res and not @schema_res['errors']
50
- end
51
- end
52
- end
53
- end
@@ -1,82 +0,0 @@
1
- # encoding: utf-8
2
- require 'json'
3
-
4
- module Apiary
5
- module Okapi
6
- class Parser
7
- attr_reader :data, :resources, :proces_all_bp_resources, :global_vars
8
-
9
- def initialize(spec_path)
10
- if not File.exist? spec_path
11
- raise Exception, "Test spec. file '#{spec_path}' not found"
12
- end
13
- @data = read_file(spec_path)
14
- @proces_all_bp_resources = false
15
- end
16
-
17
- def resources
18
- @resources ||= parse_data
19
- end
20
-
21
- def read_file(path)
22
- @data = []
23
- File.open(path).each do |line|
24
- @data << line if line.strip != ""
25
- end
26
- @data
27
- end
28
-
29
- def substituite_vars(local, global)
30
- tmp = {}
31
- global.each {|k,v|
32
- tmp[k] = v
33
- }
34
- local.each {|k,v|
35
- tmp[k] = v
36
- }
37
- tmp
38
- end
39
-
40
- def parse_data
41
- global_vars = {}
42
- resources = []
43
- @data.each { |res|
44
- if res.index('CONTINUE') == 0
45
- @proces_all_bp_resources = true
46
- next
47
- end
48
-
49
- if res.index('VARS') == 0
50
- splited = res.split(' ',2)
51
- begin
52
- global_vars = JSON.parse splited[1] if splited[1] and splited[1] != ''
53
- rescue Exception => e
54
- raise Exception, "can not parse global parameters (#{e})"
55
- end
56
- next
57
- end
58
-
59
- splited = res.split(' ',3)
60
-
61
- begin
62
- splited[2] = JSON.parse splited[2] if splited[2] and splited[2] != ''
63
- rescue Exception => e
64
- raise Exception, 'can not parse parameters for resource:' + res + "(#{e})"
65
- end
66
-
67
- if splited[1] and splited[1] != '' and splited[0] and splited[0] != ''
68
- out = {
69
- 'resource' => splited[1],
70
- 'method' => splited[0],
71
- 'params' => substituite_vars(splited[2] || {}, global_vars)
72
- }
73
- resources << out
74
- end
75
- }
76
-
77
- @global_vars = global_vars
78
- resources
79
- end
80
- end
81
- end
82
- end
data/lib/okapi/test.rb DELETED
@@ -1,141 +0,0 @@
1
- # encoding: utf-8
2
- require 'rest_client'
3
-
4
- module Apiary
5
- module Okapi
6
- class Test
7
- def initialize(blueprint_path, test_spec_path, test_url, output, apiary_url)
8
- @blueprint_path = blueprint_path
9
- @test_spec_path = test_spec_path
10
- @test_url = test_url
11
- @output_format = output
12
- @apiary_url = apiary_url
13
- @req_path = GET_REQUESTS_PATH
14
- @res_path = GET_RESULTS_PATH
15
- @connector = Apiary::Okapi::ApiaryConnector.new(@apiary_url, @req_path, @res_path)
16
- @proces_all_bp_resources = false
17
- @output = []
18
- @resources = []
19
- @error = nil
20
- end
21
-
22
- def run
23
- begin
24
- test()
25
- rescue Exception => e
26
- @resources = []
27
- @error = e
28
- end
29
- Apiary::Okapi::Output.get(@output_format, @resources, @error)
30
- end
31
-
32
- def test
33
- prepare()
34
- if not @resources.empty?
35
- get_responses
36
- evaluate
37
- else
38
- raise Exception, 'No resources provided'
39
- end
40
- end
41
-
42
- def prepare
43
- @resources = []
44
- parser = get_test_spec_parser(@test_spec_path)
45
- resources = parser.resources
46
- counter = 0
47
-
48
- resources.each { |res|
49
- counter += 1
50
- raise Exception, "Rresource not defined for item #{counter.to_d} in #{@test_spec_path}" unless res["resource"]
51
- raise Exception, "Method not defined for resource #{res["resource"].to_s} in #{@test_spec_path}" unless res["method"]
52
- }
53
-
54
- @proces_all_bp_resources = parser.proces_all_bp_resources
55
- data = get_requests_spec(resources, parser.global_vars)
56
-
57
- if data[:error] or data[:code] != 200
58
- raise Exception, 'Can not get request data from Apiary: ' + data[:error] ? data[:error] : ''
59
- end
60
-
61
- data[:data].each do |res|
62
- raise Exception, 'Resource error "' + res['error'] + '" for resource "' + res["method"] + ' ' + res["uri"] + '"' if res['error']
63
- @resources << Apiary::Okapi::Resource.new(res["uri"], res["method"], res["params"], res["expandedUri"], res["headers"], res["body"])
64
- end
65
-
66
- @resources
67
- end
68
-
69
- def blueprint
70
- @blueprint ||= parse_blueprint(@blueprint_path)
71
- end
72
-
73
- def get_responses
74
- @resources.each { |resource|
75
- params = {:method => resource.method, :url => @test_url + resource.expanded_uri['url'], :headers => resource.headers || {}, :payload=> resource.body}
76
- begin
77
- response = RestClient::Request.execute(params)
78
-
79
- raw_headers = response.raw_headers.inject({}) do |out, (key, value)|
80
- out[key] = %w{ set-cookie }.include?(key.downcase) ? value : value.first
81
- out
82
- end
83
-
84
- resource.response = Apiary::Okapi::Response.new(response.code, raw_headers, response.body)
85
- rescue Exception => e
86
- raise Exception, 'Can not get response for: ' + params.to_json + ' (' + e.to_s + ')'
87
- end
88
- }
89
-
90
- end
91
-
92
- def evaluate
93
-
94
- data = @connector.get_results(@resources, blueprint)
95
- if data[:error] or data[:code] != 200
96
- raise Exception, 'Can not get evaluation data from apiary: ' + data[:error] ? data[:error] : ''
97
- end
98
-
99
- data[:data].each { |validation|
100
- @resources.each { |resource|
101
- if validation['resource']['uri'] == resource.uri and validation['resource']['method'] == resource.method
102
- resource.validation_result = Apiary::Okapi::ValidationResult.new()
103
- resource.validation_result.error = validation['errors']
104
- resource.validation_result.schema_res = validation["validations"]['reqSchemaValidations']
105
- resource.validation_result.body_pass = !validation["validations"]['reqData']['body']['isDifferent']
106
- resource.validation_result.body_diff = validation["validations"]['reqData']['body']['diff']
107
- resource.validation_result.header_pass = !validation["validations"]['reqData']['headers']['isDifferent']
108
- resource.validation_result.header_diff = validation["validations"]['reqData']['headers']['diff']
109
-
110
- resource.response.validation_result = Apiary::Okapi::ValidationResult.new()
111
- resource.response.validation_result.error = validation['errors']
112
- resource.response.validation_result.schema_res = validation["validations"]['resSchemaValidations']
113
- resource.response.validation_result.body_pass = !validation["validations"]['resData']['body']['isDifferent']
114
- resource.response.validation_result.body_diff = validation["validations"]['resData']['body']['diff']
115
- resource.response.validation_result.header_pass = !validation["validations"]['resData']['headers']['isDifferent']
116
- resource.response.validation_result.header_diff = validation["validations"]['resData']['headers']['diff']
117
- end
118
-
119
- }
120
- }
121
- end
122
-
123
- def get_test_spec_parser(test_spec)
124
- Apiary::Okapi::Parser.new(test_spec)
125
- end
126
-
127
- def parse_blueprint(blueprint_path)
128
- if not File.exist? blueprint_path
129
- raise Exception, "Blueprint file '#{blueprint_path}' not found"
130
- end
131
- File.read(blueprint_path)
132
- end
133
-
134
- def get_requests_spec(resources, global_vars)
135
- @connector.get_requests(resources, blueprint, @proces_all_bp_resources, global_vars)
136
- end
137
-
138
- end
139
- end
140
- end
141
-