apiaryio 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -1,15 +1,21 @@
1
1
  language: ruby
2
2
  rvm:
3
- - "1.9.2"
4
3
  - "1.9.3"
5
4
  - "2.0.0"
6
- - "2.1.0"
7
5
  - "2.1.1"
8
6
  - "jruby-19mode" # JRuby in 1.9 mode
9
7
  - "rbx-2"
10
8
 
9
+ matrix:
10
+ allow_failures:
11
+ - rvm: rbx-2
12
+ cache: bundler
13
+ before_install:
14
+ - gem update bundler
15
+ matrix:
16
+ allow_failures:
17
+ - rvm: rbx-2
11
18
  cache: bundler
12
-
13
19
  notifications:
14
20
  email:
15
21
  recipients:
data/README.md CHANGED
@@ -47,7 +47,7 @@ machine, either using static files or using a standalone web server...
47
47
  publish --api-name [API_NAME] \
48
48
  --message [COMMIT_MESSAGE] Publish with custom commit message
49
49
  fetch --api-name [API_NAME] Fetch apiary.apib from API_NAME.apiary.io
50
-
50
+ --output [FILE] Write apiary.apib into specified file
51
51
  help Show this help
52
52
  version Show version
53
53
 
data/Rakefile CHANGED
@@ -4,6 +4,11 @@ require "rspec/core/rake_task"
4
4
  require 'yard'
5
5
  require 'cucumber'
6
6
  require 'cucumber/rake/task'
7
+ begin
8
+ require 'bundler/gem_tasks'
9
+ rescue LoadError
10
+ puts "Cannot load bundler/gem_tasks"
11
+ end
7
12
 
8
13
  Cucumber::Rake::Task.new(:features) do |t|
9
14
  t.cucumber_opts = "features --format pretty"
data/apiary.gemspec CHANGED
@@ -18,8 +18,11 @@ 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.0", "< 1.6.0"
21
- gem.add_dependency "rake"
22
- gem.add_dependency "thor"
21
+ gem.add_dependency "rake", "~> 10.3.2"
22
+ gem.add_dependency "thor", "~> 0.19.1"
23
+ gem.add_dependency "redsnow", "~> 0.2.0"
24
+
25
+ gem.add_runtime_dependency "json", "~> 1.8.1"
23
26
 
24
27
  gem.add_development_dependency "rspec", "~> 3.1.0"
25
28
  gem.add_development_dependency "webmock"
data/circle.yml CHANGED
@@ -1,3 +1,6 @@
1
+ dependencies:
2
+ pre:
3
+ - gem update bundler
1
4
  test:
2
5
  override:
3
6
  - bundle exec rake test
@@ -0,0 +1,48 @@
1
+ FORMAT: 1A
2
+
3
+ # Apiary Client Test
4
+
5
+ This document is used for testing apiary-client
6
+
7
+ # Group Notes
8
+ Notes related resources of the **Notes API**
9
+
10
+ ## Notes Collection [/notes
11
+ ### List all Notes [GET]
12
+ + Response 200 (application/json)
13
+
14
+ [{
15
+ "id": 1, "title": "Jogging in park"
16
+ }, {
17
+ "id": 2, "title": "Pick-up posters from post-office"
18
+ }]
19
+
20
+ ### Create a Note [POST
21
+
22
+ + Request
23
+
24
+ { "title": "Buy cheese and bread for breakfast." }
25
+
26
+ + Response 201 (application/json
27
+
28
+ { "id": 3, "title": "Buy cheese and bread for breakfast." }
29
+
30
+ ## Note [/notes/{id}]
31
+ A single Note object with all its details
32
+
33
+ + Parameters
34
+ + id (required, number, `1`) ... Numeric `id` of the Note to perform action with. Has example value.
35
+
36
+ ### Retrieve a Note [GET]
37
+ + Response 200 (application/json)
38
+
39
+ + Header
40
+
41
+ X-My-Header: The Value
42
+
43
+ + Body
44
+
45
+ { "id": 2, "title": "Pick-up posters from post-office" }
46
+
47
+ ### Remove a Note [DELETE]
48
+ + Response 204
data/lib/apiary.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
2
  require "apiary/version"
3
3
  require "apiary/cli"
4
+ require "apiary/common"
4
5
  Dir["#{File.dirname(__FILE__)}/apiary/command/*.rb"].each { |f| require(f) }
5
6
 
6
7
  module Apiary
data/lib/apiary/cli.rb CHANGED
@@ -9,6 +9,8 @@ module Apiary
9
9
 
10
10
  desc "fetch", "Fetch apiary.apib from API_NAME.apiary.io"
11
11
  method_option :api_name, :type => :string, :required => true, :default => ''
12
+ method_option :api_host, :type => :string, :banner => "HOST", :desc => "Specify apiary host"
13
+ method_option :output, :type => :string, :banner => "FILE", :desc => "Write apiary.apib into specified file"
12
14
 
13
15
  def fetch
14
16
  cmd = Apiary::Command::Fetch.new options
@@ -4,6 +4,8 @@ require 'rack'
4
4
  require 'ostruct'
5
5
  require 'json'
6
6
 
7
+ require "apiary/common"
8
+
7
9
  module Apiary
8
10
  module Command
9
11
  # Display preview of local blueprint file
@@ -17,9 +19,7 @@ module Apiary
17
19
 
18
20
  attr_reader :options
19
21
 
20
- # TODO: use OpenStruct to store @options
21
22
  def initialize(opts)
22
- puts opts
23
23
  @options = OpenStruct.new(opts)
24
24
  @options.path ||= "apiary.apib"
25
25
  @options.api_host ||= "api.apiary.io"
@@ -46,9 +46,8 @@ module Apiary
46
46
  end
47
47
 
48
48
  def validate_apib_file(apib_file)
49
- unless File.exist?(apib_file)
50
- abort "Apiary definition file hasn't been found: #{apib_file.inspect}"
51
- end
49
+ common = Apiary::Common.new
50
+ common.validate_apib_file(apib_file)
52
51
  end
53
52
 
54
53
  def path
@@ -80,25 +79,29 @@ module Apiary
80
79
 
81
80
  def query_apiary(host, path)
82
81
  url = "https://#{host}/blueprint/generate"
83
- begin
84
- data = File.read(path)
85
- rescue
86
- abort "File #{path} not found."
87
- end
88
-
89
- RestClient.proxy = @options.proxy
82
+ if validate_apib_file(path)
83
+ begin
84
+ data = File.read(path)
85
+ rescue
86
+ abort "File #{path} not found."
87
+ end
90
88
 
91
- begin
92
- RestClient.post(url, data, @options.headers)
93
- rescue RestClient::BadRequest => e
94
- err = JSON.parse e.response
95
- if err.has_key? 'parserError'
96
- abort "#{err['message']}: #{err['parserError']} (Line: #{err['line']}, Column: #{err['column']})"
97
- else
98
- abort "Apiary service responded with an error: #{err['message']}"
89
+ RestClient.proxy = @options.proxy
90
+
91
+ begin
92
+ RestClient.post(url, data, @options.headers)
93
+ rescue RestClient::BadRequest => e
94
+ err = JSON.parse e.response
95
+ if err.has_key? 'parserError'
96
+ abort "#{err['message']}: #{err['parserError']} (Line: #{err['line']}, Column: #{err['column']})"
97
+ else
98
+ abort "Apiary service responded with an error: #{err['message']}"
99
+ end
100
+ rescue RestClient::Exception => e
101
+ abort "Apiary service responded with an error: #{e.message}"
99
102
  end
100
- rescue RestClient::Exception => e
101
- abort "Apiary service responded with an error: #{e.message}"
103
+ else
104
+ abort "Sorry, Apiary can't display invalid blueprint."
102
105
  end
103
106
  end
104
107
 
@@ -108,9 +111,7 @@ module Apiary
108
111
  end
109
112
 
110
113
  def write_generated_path(path, outfile)
111
- File.open(outfile, 'w') do |file|
112
- file.write(File.open(path, 'r').read)
113
- end
114
+ File.write(outfile, File.read(path))
114
115
  end
115
116
 
116
117
  def generate_static(path)
@@ -3,6 +3,7 @@ require 'rest_client'
3
3
  require 'rack'
4
4
  require 'ostruct'
5
5
  require 'json'
6
+ require "apiary/common"
6
7
 
7
8
  module Apiary
8
9
  module Command
@@ -11,7 +12,6 @@ module Apiary
11
12
 
12
13
  attr_reader :options
13
14
 
14
- # TODO: use OpenStruct to store @options
15
15
  def initialize(opts)
16
16
  @options = OpenStruct.new(opts)
17
17
  @options.path ||= "apiary.apib"
@@ -46,9 +46,8 @@ module Apiary
46
46
  end
47
47
 
48
48
  def validate_apib_file(apib_file)
49
- unless File.exist?(apib_file)
50
- abort "Apiary definition file hasn't been found: #{apib_file.inspect}"
51
- end
49
+ common = Apiary::Common.new
50
+ common.validate_apib_file(apib_file)
52
51
  end
53
52
 
54
53
  def path
@@ -57,24 +56,25 @@ module Apiary
57
56
 
58
57
  def query_apiary(host, path)
59
58
  url = "https://#{host}/blueprint/publish/#{@options.api_name}"
60
- validate_apib_file path
61
- data = {
62
- :code => File.read(path),
63
- :messageToSave => @options.commit_message
64
- }
65
- RestClient.proxy = @options.proxy
59
+ if validate_apib_file path
60
+ data = {
61
+ :code => File.read(path),
62
+ :messageToSave => @options.commit_message
63
+ }
64
+ RestClient.proxy = @options.proxy
66
65
 
67
- begin
68
- RestClient.post url, data, @options.headers
69
- rescue RestClient::BadRequest => e
70
- err = JSON.parse e.response
71
- if err.has_key? 'parserError'
72
- abort "#{err['message']}: #{err['parserError']}"
73
- else
74
- abort "Apiary service responded with an error: #{err['message']}"
66
+ begin
67
+ RestClient.post url, data, @options.headers
68
+ rescue RestClient::BadRequest => e
69
+ err = JSON.parse e.response
70
+ if err.has_key? 'parserError'
71
+ abort "#{err['message']}: #{err['parserError']}"
72
+ else
73
+ abort "Apiary service responded with an error: #{err['message']}"
74
+ end
75
+ rescue RestClient::Exception => e
76
+ abort "Apiary service responded with an error: #{e.message}"
75
77
  end
76
- rescue RestClient::Exception => e
77
- abort "Apiary service responded with an error: #{e.message}"
78
78
  end
79
79
  end
80
80
 
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+ require 'redsnow'
3
+
4
+ module Apiary
5
+ # Common function used in commands
6
+ class Common
7
+
8
+ attr_accessor :error_message
9
+
10
+ def initialize()
11
+ end
12
+
13
+ def validate_blueprint(code)
14
+ result = RedSnow.parse(code)
15
+ if result.error[:code] == 0
16
+ @error_message = nil
17
+ return true
18
+ else
19
+ @error_message = result.error[:message]
20
+ puts "Blueprint validation error: #{@error_message}"
21
+ return false
22
+ end
23
+ end
24
+
25
+ def validate_apib_file(apib_file)
26
+ unless File.exist?(apib_file)
27
+ raise "Apiary definition file hasn't been found: #{apib_file.inspect}"
28
+ end
29
+ code = File.read(apib_file)
30
+ return validate_blueprint(code)
31
+ end
32
+
33
+ end
34
+ end
@@ -1,3 +1,3 @@
1
1
  module Apiary
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe Apiary::Common do
4
+
5
+ describe 'Validate apib files' do
6
+
7
+ it 'test existing file' do
8
+ common = Apiary::Common.new
9
+ expect(common.validate_apib_file('features/fixtures/apiary.apib')).to be_truthy
10
+ end
11
+
12
+ it 'test non existing file' do
13
+ common = Apiary::Common.new
14
+ expect {common.validate_apib_file('features/fixtures/apiary.xxx')}.to raise_error(/file hasn't been found/)
15
+ end
16
+
17
+ end
18
+
19
+ describe 'Validate blueprint' do
20
+
21
+ it 'test validate blueprint' do
22
+ common = Apiary::Common.new
23
+ expect(common.validate_blueprint('# API_NAME')).to be_truthy
24
+ end
25
+
26
+ it 'test invalidate blueprint' do
27
+ common = Apiary::Common.new
28
+ expect(common.validate_blueprint("\t# API_NAME\t\r\n## Group Name")).to be_falsey
29
+ end
30
+
31
+ end
32
+
33
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apiaryio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-09-29 00:00:00.000000000 Z
12
+ date: 2014-10-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -54,33 +54,65 @@ dependencies:
54
54
  requirement: !ruby/object:Gem::Requirement
55
55
  none: false
56
56
  requirements:
57
- - - ! '>='
57
+ - - ~>
58
58
  - !ruby/object:Gem::Version
59
- version: '0'
59
+ version: 10.3.2
60
60
  type: :runtime
61
61
  prerelease: false
62
62
  version_requirements: !ruby/object:Gem::Requirement
63
63
  none: false
64
64
  requirements:
65
- - - ! '>='
65
+ - - ~>
66
66
  - !ruby/object:Gem::Version
67
- version: '0'
67
+ version: 10.3.2
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: thor
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  none: false
72
72
  requirements:
73
- - - ! '>='
73
+ - - ~>
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 0.19.1
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  none: false
80
80
  requirements:
81
- - - ! '>='
81
+ - - ~>
82
82
  - !ruby/object:Gem::Version
83
- version: '0'
83
+ version: 0.19.1
84
+ - !ruby/object:Gem::Dependency
85
+ name: redsnow
86
+ requirement: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ version: 0.2.0
92
+ type: :runtime
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ~>
98
+ - !ruby/object:Gem::Version
99
+ version: 0.2.0
100
+ - !ruby/object:Gem::Dependency
101
+ name: json
102
+ requirement: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ~>
106
+ - !ruby/object:Gem::Version
107
+ version: 1.8.1
108
+ type: :runtime
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ~>
114
+ - !ruby/object:Gem::Version
115
+ version: 1.8.1
84
116
  - !ruby/object:Gem::Dependency
85
117
  name: rspec
86
118
  requirement: !ruby/object:Gem::Requirement
@@ -180,6 +212,7 @@ files:
180
212
  - bin/apiary
181
213
  - circle.yml
182
214
  - features/fetch.feature
215
+ - features/fixtures/apiary-invalid.apib
183
216
  - features/fixtures/apiary.apib
184
217
  - features/preview.feature
185
218
  - features/publish.feature
@@ -192,9 +225,11 @@ files:
192
225
  - lib/apiary/command/fetch.rb
193
226
  - lib/apiary/command/preview.rb
194
227
  - lib/apiary/command/publish.rb
228
+ - lib/apiary/common.rb
195
229
  - lib/apiary/version.rb
196
230
  - spec/cli_spec.rb
197
231
  - spec/command/fetch_spec.rb
232
+ - spec/common_spec.rb
198
233
  - spec/spec_helper.rb
199
234
  - spec/support/aruba.rb
200
235
  homepage: http://apiary.io
@@ -210,12 +245,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
210
245
  - - ! '>='
211
246
  - !ruby/object:Gem::Version
212
247
  version: '0'
248
+ segments:
249
+ - 0
250
+ hash: 1564942254574113745
213
251
  required_rubygems_version: !ruby/object:Gem::Requirement
214
252
  none: false
215
253
  requirements:
216
254
  - - ! '>='
217
255
  - !ruby/object:Gem::Version
218
256
  version: '0'
257
+ segments:
258
+ - 0
259
+ hash: 1564942254574113745
219
260
  requirements: []
220
261
  rubyforge_project:
221
262
  rubygems_version: 1.8.23
@@ -224,6 +265,7 @@ specification_version: 3
224
265
  summary: Apiary.io CLI
225
266
  test_files:
226
267
  - features/fetch.feature
268
+ - features/fixtures/apiary-invalid.apib
227
269
  - features/fixtures/apiary.apib
228
270
  - features/preview.feature
229
271
  - features/publish.feature
@@ -233,6 +275,7 @@ test_files:
233
275
  - features/version.feature
234
276
  - spec/cli_spec.rb
235
277
  - spec/command/fetch_spec.rb
278
+ - spec/common_spec.rb
236
279
  - spec/spec_helper.rb
237
280
  - spec/support/aruba.rb
238
281
  has_rdoc: