api_canon 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c187459fb3312f6a298e12416a51499ce9f5c60a
4
- data.tar.gz: 88a9d06fddf3b3f413dce2e93c93ce5922927fe8
3
+ metadata.gz: 7d498b5e331019ba5f31d82115085133721d4f36
4
+ data.tar.gz: 6c1c378ae8a3f3cdeaafa03cd8d5c373b5616021
5
5
  SHA512:
6
- metadata.gz: 1347370f6ee8ae03530a0c343100b3ea2cc5a92e6cd9b3ba2016744f735db4b6069c247ae254213051bb2e5559c7e44b08be4f1ff8ba16ea099009bd0e80874a
7
- data.tar.gz: de9d214e7053256806977ca2e73a4b3a89263fb59baf030b35cccf0a959e8d77078f66df2e3ca5af7f76155472a457312b23769bb2d30453c225aaa8ce6aa71f
6
+ metadata.gz: 1e9a3b40c35abee15e7cf22c876e71c2c95c9e790663701fb5bcaefcfa3355b73162d2c21b18ea6f79cb0e4b976a0bffff63931089f7e1f59a5580a78a3a188f
7
+ data.tar.gz: bb08a61bb7518a3e2790677eb63056e1a015a6219163892da508d975ee7d609be143add968997b8126f530c06abf016e54d028ad8b81a176526ee21e95131970
data/README.md CHANGED
@@ -134,12 +134,12 @@ Right now, api_canon is changing a lot. I plan to support the following feature
134
134
 
135
135
  1. Response codes - describe what you mean when you send back a 200, a 201, 403 etc.
136
136
  2. Support API tokens or other authentication to allow users to edit data live, with non-GET requests.
137
- 3. Swagger API output (optional)
138
137
  4. You will need to route the index action for each documented controller until such point as I provide an alternative means of getting at this documentation.
139
138
 
140
139
  ## Contributors
141
140
  [Cameron Walsh](http://github.com/cwalsh)
142
141
  [Leon Dewey](http://github.com/leondewey)
142
+ [Ben Tillman](http://github.com/warp)
143
143
 
144
144
  ## Contributions
145
145
  1. Fork project
@@ -13,6 +13,16 @@ module ApiCanon
13
13
  attributes :operations
14
14
 
15
15
  def path
16
+ url = URI.unescape url_for(url_params)
17
+
18
+ # This is required because we dont know if the params are
19
+ # path params or query params, this way we dont care.
20
+ url = url.split('?').first
21
+
22
+ "#{url}.{format}"
23
+ end
24
+
25
+ def url_params
16
26
  url_params = {
17
27
  :controller => object.controller_name,
18
28
  :action => object.action_name,
@@ -20,16 +30,10 @@ module ApiCanon
20
30
  }
21
31
 
22
32
  object.params.keys.each do |name|
23
- url_params[name] = '{name}' unless name == :format
33
+ url_params[name] = "{#{name}}" unless name == :format
24
34
  end
25
35
 
26
- url = URI.unescape url_for(url_params)
27
-
28
- # This is required because we dont know if the params are
29
- # path params or query params, this way we dont care.
30
- url = url.split('?').first
31
-
32
- "#{url}.{format}"
36
+ url_params
33
37
  end
34
38
 
35
39
  def operations
@@ -87,7 +91,7 @@ module ApiCanon
87
91
 
88
92
  def param_type
89
93
  # TODO: Tighten this up.
90
- if object.name == 'id'
94
+ if object.name.to_s == 'id'
91
95
  "path"
92
96
  elsif %(POST PUT).include?(object.documented_action.http_method)
93
97
  "form"
@@ -130,4 +134,4 @@ module ApiCanon
130
134
 
131
135
  end
132
136
  end
133
- end
137
+ end
@@ -1,3 +1,3 @@
1
1
  module ApiCanon
2
- VERSION = '0.4.3'
2
+ VERSION = '0.4.4'
3
3
  end
@@ -4,7 +4,7 @@ describe ApiCanon::DocumentedParam do
4
4
  let(:doc_opts) do
5
5
  {:type => 'string', :default => :json, :example_values => example_values}
6
6
  end
7
- let(:fake_form) { mock :form }
7
+ let(:fake_form) { double :form }
8
8
  let(:doco_prefix) { 'foo' }
9
9
  let(:documented_param) {ApiCanon::DocumentedParam.new :format, self, doc_opts}
10
10
  subject { documented_param }
@@ -1,23 +1,25 @@
1
1
  require 'spec_helper'
2
2
  describe ApiCanon::Swagger::ApiDeclaration do
3
3
 
4
+ let(:documented_action) {
5
+ documented_action = ApiCanon::DocumentedAction.new('action_name', 'controller_name')
6
+ documented_action.describe 'description'
7
+ documented_action.response_code '404', 'reason'
8
+ documented_action.param 'name', :description => 'description', :type => 'string', :values => (1..10)
9
+ documented_action
10
+ }
4
11
  let(:data) {
5
- documented_actions = ApiCanon::DocumentedAction.new('action_name', 'controller_name')
6
- documented_actions.describe 'description'
7
- documented_actions.response_code '404', 'reason'
8
- documented_actions.param 'name', :description => 'description', :type => 'string', :values => (1..10)
9
- mock :documented_actions => [ documented_actions ], :version => 'master'
12
+ double :documented_actions => [ documented_action ], :version => 'master'
10
13
  }
11
- subject { ApiCanon::Swagger::ApiDeclaration }
12
-
14
+ subject { described_class.new(data) }
13
15
 
14
16
  it 'should render the swagger api declaration' do
15
- subject.any_instance.stub :api_canon_test_url => 'http://example.com/api_canon/test'
16
- subject.any_instance.stub :api_canon_test_path => '/api_canon/test'
17
- subject.any_instance.stub :swagger_path => 'swagger_path'
17
+ described_class.any_instance.stub :api_canon_test_url => 'http://example.com/api_canon/test'
18
+ described_class.any_instance.stub :api_canon_test_path => '/api_canon/test'
19
+ described_class.any_instance.stub :swagger_path => 'swagger_path'
18
20
  ApiCanon::Swagger::ApiDeclaration::Api.any_instance.stub :url_for => 'url_for'
19
21
 
20
- JSON.parse(subject.new(data).to_json).should eql({
22
+ subject.to_json.should be_json_eql({
21
23
  "apiVersion" => "master",
22
24
  "basePath" => 'http://example.com/',
23
25
  "swaggerVersion" => 1.1,
@@ -34,7 +36,7 @@ describe ApiCanon::Swagger::ApiDeclaration do
34
36
  {
35
37
  "paramType" => "query",
36
38
  "dataType" => "string",
37
- "allowableValues"=>{"max"=>10, "min"=>1, "valueType"=>"RANGE"},
39
+ "allowableValues" => {"max"=>10, "min"=>1, "valueType"=>"RANGE"},
38
40
  "allowMultiple" => false,
39
41
  "name" => "name",
40
42
  "description" => 'description',
@@ -46,7 +48,17 @@ describe ApiCanon::Swagger::ApiDeclaration do
46
48
  ]
47
49
  }
48
50
  ]
49
- })
51
+ }.to_json)
50
52
  end
51
53
 
54
+ describe ApiCanon::Swagger::ApiDeclaration::Api do
55
+ subject { ApiCanon::Swagger::ApiDeclaration::Api.new(documented_action) }
56
+
57
+ describe '#url_params' do
58
+ it 'should return params with placeholder values' do
59
+ documented_action.param 'id', :type => 'string'
60
+ subject.url_params['id'].should eql("{id}")
61
+ end
62
+ end
63
+ end
52
64
  end
@@ -3,7 +3,7 @@ describe ApiCanon::Swagger::ResourceListing do
3
3
 
4
4
  let(:data) {
5
5
  {
6
- :controller => mock(
6
+ :controller => double(
7
7
  :version => 'master',
8
8
  :description => 'description'
9
9
  )
@@ -17,7 +17,7 @@ describe ApiCanon do
17
17
  end
18
18
 
19
19
  describe "document_method" do
20
- let(:api_document) { mock :api_document }
20
+ let(:api_document) { double :api_document }
21
21
  context "without a current controller doc" do
22
22
  it "creates and stores a new ApiCanon::Document and adds the documented action" do
23
23
  ApiCanon::Document.should_receive(:new).with('fake', 'fake').and_return(api_document)
data/spec/spec_helper.rb CHANGED
@@ -8,4 +8,10 @@ require 'combustion'
8
8
  require 'rspec'
9
9
  require 'rspec/rails'
10
10
  require 'api_canon'
11
- Combustion.initialize!
11
+
12
+ require 'json_spec'
13
+ RSpec.configure do |config|
14
+ config.include JsonSpec::Helpers
15
+ end
16
+
17
+ Combustion.initialize!
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_canon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cameron Walsh
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-12 00:00:00.000000000 Z
12
+ date: 2013-08-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -67,6 +67,20 @@ dependencies:
67
67
  - - '>='
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: json_spec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
70
84
  - !ruby/object:Gem::Dependency
71
85
  name: rake
72
86
  requirement: !ruby/object:Gem::Requirement