diesel-api-dsl 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +12 -3
- data/lib/diesel/api_builder.rb +7 -0
- data/lib/diesel/middleware/auth/oauth2.rb +24 -0
- data/lib/diesel/swagger/data_type_field.rb +1 -1
- data/lib/diesel/swagger/definition.rb +8 -0
- data/lib/diesel/swagger/node.rb +5 -0
- data/lib/diesel/swagger/operation.rb +8 -0
- data/lib/diesel/swagger/parser.rb +17 -7
- data/lib/diesel/swagger/path.rb +18 -8
- data/lib/diesel/swagger/property.rb +7 -0
- data/lib/diesel/swagger/security.rb +21 -0
- data/lib/diesel/swagger/security_definition.rb +7 -0
- data/lib/diesel/swagger/specification.rb +2 -1
- data/lib/diesel/version.rb +1 -1
- data/spec/diesel/swagger/parser_spec.rb +19 -6
- data/spec/diesel/swagger/specification_spec.rb +19 -0
- data/spec/diesel_spec.rb +34 -0
- data/spec/files/slack.json +88 -0
- data/spec/fixtures/vcr_cassettes/slack.yml +43 -0
- metadata +11 -5
- data/apis/slack.rb +0 -36
- data/examples/post_slack_message.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5205a50b3bdbd62a8a5dd19471fe81656a943b82
|
4
|
+
data.tar.gz: 45e98aae757b989153b9323ec7d670234a14ed83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ade33fbdca31713aba34eb525aa4ba89825875b0b9e6a0d073bf58b38762734f886cfe3f2818f80b7efb317440106c148af5cf930c8b9f70744fde7004697717
|
7
|
+
data.tar.gz: 1d89e1a7bafc5ab3f8ffd4ab3e754ad9a50adcf50e6ca6e757ac6a3c25069363445caa64442b803d711289aa4fc95df11d7a6f58001d28a932b7709798c28035
|
data/README.md
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# Diesel
|
2
2
|
|
3
|
-
Create API Clients
|
3
|
+
Create API Clients from Swagger specifications
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
|
-
gem 'diesel'
|
9
|
+
gem 'diesel-api-dsl'
|
10
10
|
|
11
11
|
And then execute:
|
12
12
|
|
@@ -18,7 +18,16 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
```ruby
|
22
|
+
PivotalTracker = Diesel.load_path("pivotal_tracker.json")
|
23
|
+
client = PivotalTracker.new(api_token: 'afaketoken')
|
24
|
+
client.create_story(
|
25
|
+
project_id: '1234567',
|
26
|
+
story: {
|
27
|
+
name: 'Testing Pivotal API',
|
28
|
+
story_type: :chore
|
29
|
+
})
|
30
|
+
```
|
22
31
|
|
23
32
|
## Contributing
|
24
33
|
|
data/lib/diesel/api_builder.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'diesel/version'
|
1
2
|
require 'diesel/api_error'
|
2
3
|
require 'diesel/utils/inflections'
|
3
4
|
require 'diesel/api_base'
|
@@ -73,6 +74,8 @@ module Diesel
|
|
73
74
|
endpoint.config_middleware do
|
74
75
|
use Diesel::Middleware::Debug
|
75
76
|
|
77
|
+
use Diesel::Middleware::SetHeader, 'User-Agent' => "diesel-rb/#{Diesel::VERSION}"
|
78
|
+
|
76
79
|
if spec.produces.any?
|
77
80
|
use Diesel::Middleware::SetHeader, 'Content-Type' => spec.produces.first
|
78
81
|
end
|
@@ -85,6 +88,10 @@ module Diesel
|
|
85
88
|
id: Diesel::Utils::Inflections.underscore(name).to_sym,
|
86
89
|
in: security_def.in,
|
87
90
|
name: security_def.name
|
91
|
+
when 'oauth2'
|
92
|
+
require 'diesel/middleware/auth/oauth2'
|
93
|
+
use Diesel::Middleware::Auth::OAuth2,
|
94
|
+
id: Diesel::Utils::Inflections.underscore(name).to_sym
|
88
95
|
else
|
89
96
|
raise APIError, "Unsupported security definition: #{security_def.type}"
|
90
97
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Diesel
|
2
|
+
module Middleware
|
3
|
+
module Auth
|
4
|
+
class OAuth2
|
5
|
+
|
6
|
+
AUTHORIZATION_HEADER = 'Authorization'
|
7
|
+
AUTHORIZATION_HEADER_FORMAT = 'Bearer %s'
|
8
|
+
|
9
|
+
def initialize(app, options)
|
10
|
+
@app = app
|
11
|
+
@id = options[:id]
|
12
|
+
end
|
13
|
+
|
14
|
+
def call(env)
|
15
|
+
context = env[:context]
|
16
|
+
auth_options = context.options[@id]
|
17
|
+
env[:request_headers][AUTHORIZATION_HEADER] = AUTHORIZATION_HEADER_FORMAT % auth_options[:token]
|
18
|
+
@app.call(env)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -4,9 +4,17 @@ require 'diesel/swagger/property'
|
|
4
4
|
module Diesel
|
5
5
|
module Swagger
|
6
6
|
class Definition < Node
|
7
|
+
attr_reader :id
|
8
|
+
|
7
9
|
attribute :required
|
8
10
|
attribute :discriminator
|
11
|
+
|
9
12
|
hash :properties
|
13
|
+
|
14
|
+
def initialize(id)
|
15
|
+
super()
|
16
|
+
@id = id
|
17
|
+
end
|
10
18
|
end
|
11
19
|
end
|
12
20
|
end
|
data/lib/diesel/swagger/node.rb
CHANGED
@@ -4,6 +4,9 @@ require 'diesel/swagger/parameter'
|
|
4
4
|
module Diesel
|
5
5
|
module Swagger
|
6
6
|
class Operation < Node
|
7
|
+
attr_reader :id
|
8
|
+
alias :method_name :id
|
9
|
+
|
7
10
|
attribute :summary
|
8
11
|
attribute :description
|
9
12
|
attribute :external_docs, validate: true
|
@@ -17,6 +20,11 @@ module Diesel
|
|
17
20
|
list :responses, validate: true
|
18
21
|
list :schemes
|
19
22
|
list :security, validate: true
|
23
|
+
|
24
|
+
def initialize(id)
|
25
|
+
super()
|
26
|
+
@id = id
|
27
|
+
end
|
20
28
|
end
|
21
29
|
end
|
22
30
|
end
|
@@ -18,20 +18,26 @@ module Diesel
|
|
18
18
|
specification.external_docs = build_node(ExternalDocs, json['externalDocs'])
|
19
19
|
specification.schemes = json['schemes']
|
20
20
|
specification.produces = json['produces'] || []
|
21
|
-
specification.security_definitions = build_node_hash(
|
21
|
+
specification.security_definitions = build_node_hash(SecurityDefinition, json, 'securityDefinitions')
|
22
|
+
specification.security = (json['security'] || {}).reduce({}) do |memo, (k,v)|
|
23
|
+
memo[k] = security = Security.new(k)
|
24
|
+
security.scopes = v
|
25
|
+
memo
|
26
|
+
end
|
22
27
|
specification.paths = build_node_hash(Path, json, 'paths') do |path, path_json|
|
23
28
|
[:get, :put, :post, :delete, :options, :head, :patch].each do |method|
|
24
29
|
if op_json = path_json[method.to_s]
|
25
|
-
op = build_node(Operation, op_json)
|
30
|
+
op = build_node(Operation, op_json, constructor_args: [method])
|
26
31
|
op.external_docs = build_node(ExternalDocs, op_json['externalDocs'])
|
27
32
|
op.parameters = build_node_list(Parameter, op_json, 'parameters')
|
28
33
|
path.send("#{method}=".to_sym, op)
|
29
34
|
end
|
30
35
|
end
|
31
36
|
end
|
32
|
-
specification.definitions = build_node_hash(
|
33
|
-
definition.properties = build_node_hash(
|
37
|
+
specification.definitions = build_node_hash(Definition, json, 'definitions') do |definition, def_json|
|
38
|
+
definition.properties = build_node_hash(Property, def_json, 'properties') do |prop, prop_json|
|
34
39
|
prop.enum = prop_json['enum']
|
40
|
+
prop.items = prop_json['items']
|
35
41
|
end
|
36
42
|
end
|
37
43
|
specification
|
@@ -39,9 +45,13 @@ module Diesel
|
|
39
45
|
|
40
46
|
protected
|
41
47
|
|
42
|
-
def build_node(model_class, json)
|
48
|
+
def build_node(model_class, json, options = {})
|
43
49
|
if json
|
44
|
-
model =
|
50
|
+
model = if constructor_args = options[:constructor_args]
|
51
|
+
model_class.new(*constructor_args)
|
52
|
+
else
|
53
|
+
model_class.new
|
54
|
+
end
|
45
55
|
model_class.attribute_names.each do |att|
|
46
56
|
model.send("#{att}=".to_sym, json[camelize(att.to_s, false)])
|
47
57
|
end
|
@@ -59,7 +69,7 @@ module Diesel
|
|
59
69
|
|
60
70
|
def build_node_hash(model_class, json, json_hash_key)
|
61
71
|
(json[json_hash_key] || {}).reduce({}) do |m, (k, v)|
|
62
|
-
m[k] = node = build_node(model_class, v)
|
72
|
+
m[k] = node = build_node(model_class, v, constructor_args: [k])
|
63
73
|
yield(node, v) if block_given?
|
64
74
|
m
|
65
75
|
end
|
data/lib/diesel/swagger/path.rb
CHANGED
@@ -4,18 +4,28 @@ require 'diesel/swagger/operation'
|
|
4
4
|
module Diesel
|
5
5
|
module Swagger
|
6
6
|
class Path < Node
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
attr_reader :id
|
8
|
+
alias :path_name :id
|
9
|
+
|
10
|
+
REQUEST_METHODS = [:get, :put, :post, :delete, :options, :head, :patch]
|
11
|
+
|
12
|
+
REQUEST_METHODS.each do |m|
|
13
|
+
attribute m, validate: true
|
14
|
+
end
|
14
15
|
|
15
16
|
list :parameters, validate: true
|
16
17
|
|
18
|
+
def initialize(id)
|
19
|
+
super()
|
20
|
+
@id = id
|
21
|
+
end
|
22
|
+
|
23
|
+
def operations
|
24
|
+
REQUEST_METHODS.map { |m| __send__(m) }.compact
|
25
|
+
end
|
26
|
+
|
17
27
|
def operations_map
|
18
|
-
|
28
|
+
REQUEST_METHODS.reduce({}) do |m, method|
|
19
29
|
if op = __send__(method)
|
20
30
|
m[method] = op
|
21
31
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'diesel/swagger/node'
|
2
|
+
|
3
|
+
module Diesel
|
4
|
+
module Swagger
|
5
|
+
class Security < Node
|
6
|
+
attr_reader :id
|
7
|
+
|
8
|
+
attribute :scopes
|
9
|
+
|
10
|
+
def initialize(id)
|
11
|
+
super()
|
12
|
+
@id = id
|
13
|
+
end
|
14
|
+
|
15
|
+
def serializable_hash
|
16
|
+
scopes || []
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -3,6 +3,8 @@ require 'diesel/swagger/node'
|
|
3
3
|
module Diesel
|
4
4
|
module Swagger
|
5
5
|
class SecurityDefinition < Node
|
6
|
+
attr_reader :id
|
7
|
+
|
6
8
|
attribute :type
|
7
9
|
attribute :description
|
8
10
|
attribute :name
|
@@ -10,6 +12,11 @@ module Diesel
|
|
10
12
|
attribute :flow
|
11
13
|
attribute :authorization_url
|
12
14
|
attribute :token_url
|
15
|
+
|
16
|
+
def initialize(id)
|
17
|
+
super()
|
18
|
+
@id = id
|
19
|
+
end
|
13
20
|
end
|
14
21
|
end
|
15
22
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'diesel/swagger/info'
|
2
2
|
require 'diesel/swagger/external_docs'
|
3
|
+
require 'diesel/swagger/security'
|
3
4
|
require 'diesel/swagger/security_definition'
|
4
5
|
require 'diesel/swagger/path'
|
5
6
|
require 'diesel/swagger/definition'
|
@@ -24,7 +25,7 @@ module Diesel
|
|
24
25
|
hash :parameters, validate: true
|
25
26
|
hash :responses, validate: true
|
26
27
|
hash :security_definitions, validate: true
|
27
|
-
hash :security
|
28
|
+
hash :security, validate: true
|
28
29
|
end
|
29
30
|
end
|
30
31
|
end
|
data/lib/diesel/version.rb
CHANGED
@@ -4,12 +4,12 @@ require 'diesel/swagger/parser'
|
|
4
4
|
describe Diesel::Swagger::Parser do
|
5
5
|
subject { Diesel::Swagger::Parser }
|
6
6
|
|
7
|
-
|
8
|
-
File.read(File.join(File.dirname(__FILE__), '..', '..', 'files',
|
7
|
+
def load_spec(name)
|
8
|
+
File.read(File.join(File.dirname(__FILE__), '..', '..', 'files', "#{name}.json"))
|
9
9
|
end
|
10
10
|
|
11
|
-
it "should parse a
|
12
|
-
specification = Diesel::Swagger::Parser.new.parse(
|
11
|
+
it "should parse a swagger specification" do
|
12
|
+
specification = Diesel::Swagger::Parser.new.parse(load_spec('pivotal_tracker'))
|
13
13
|
expect(specification).to_not be_nil
|
14
14
|
|
15
15
|
expect(specification.host).to eq "www.pivotaltracker.com"
|
@@ -23,9 +23,12 @@ describe Diesel::Swagger::Parser do
|
|
23
23
|
api_token = specification.security_definitions['apiToken']
|
24
24
|
expect(api_token).to_not be_nil
|
25
25
|
expect(api_token.type).to eq "apiKey"
|
26
|
-
expect(api_token.in).to eq
|
26
|
+
expect(api_token.in).to eq :header
|
27
27
|
expect(api_token.name).to eq "X-TrackerToken"
|
28
28
|
|
29
|
+
security = specification.security['apiToken']
|
30
|
+
expect(security).to_not be_nil
|
31
|
+
|
29
32
|
expect(specification.produces).to include "application/json"
|
30
33
|
|
31
34
|
expect(specification.paths.count).to eq 1
|
@@ -48,7 +51,7 @@ describe Diesel::Swagger::Parser do
|
|
48
51
|
param2 = path.post.parameters[1]
|
49
52
|
expect(param2).to_not be_nil
|
50
53
|
expect(param2.in).to eq :body
|
51
|
-
expect(param2.name).to eq "
|
54
|
+
expect(param2.name).to eq "story"
|
52
55
|
expect(param2).to be_required
|
53
56
|
expect(param2.schema).to eq "NewStory"
|
54
57
|
|
@@ -77,4 +80,14 @@ describe Diesel::Swagger::Parser do
|
|
77
80
|
"unscheduled"
|
78
81
|
]
|
79
82
|
end
|
83
|
+
|
84
|
+
it "should parse a swagger specification with an array of schema objects" do
|
85
|
+
specification = Diesel::Swagger::Parser.new.parse(load_spec('slack'))
|
86
|
+
payload = specification.definitions["Payload"]
|
87
|
+
|
88
|
+
attachments_prop = payload.properties['attachments']
|
89
|
+
expect(attachments_prop.type).to eq :array
|
90
|
+
expect(attachments_prop.items.count).to eq 1
|
91
|
+
expect(attachments_prop.items["$ref"]).to eq '#/definitions/Attachment'
|
92
|
+
end
|
80
93
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'diesel/swagger/specification'
|
3
|
+
|
4
|
+
describe Diesel::Swagger::Specification do
|
5
|
+
|
6
|
+
it "should serialize security node as key and scopes" do
|
7
|
+
spec = described_class.new
|
8
|
+
|
9
|
+
security = Diesel::Swagger::Security.new('oauth')
|
10
|
+
security.scopes = ['email']
|
11
|
+
spec.security = { 'oauth' => security }
|
12
|
+
|
13
|
+
hash = spec.serializable_hash
|
14
|
+
security_hash = hash['security']
|
15
|
+
expect(security_hash).to_not be_nil
|
16
|
+
scopes = security_hash['oauth']
|
17
|
+
expect(scopes).to eq ['email']
|
18
|
+
end
|
19
|
+
end
|
data/spec/diesel_spec.rb
CHANGED
@@ -40,4 +40,38 @@ describe Diesel do
|
|
40
40
|
expect(results.response.code).to eq "200"
|
41
41
|
end
|
42
42
|
end
|
43
|
+
|
44
|
+
it "should be able to build a Slack API client" do
|
45
|
+
Slack = load_api('slack')
|
46
|
+
client = Slack.new
|
47
|
+
client.logger = Logger.new(STDOUT)
|
48
|
+
client.logger.level = Logger::DEBUG
|
49
|
+
|
50
|
+
VCR.use_cassette('slack') do
|
51
|
+
results = client.post_message(path: 'abcd/efgh/ijkl',
|
52
|
+
payload: {
|
53
|
+
text: 'Testing',
|
54
|
+
username: 'TestBot',
|
55
|
+
attachments: [
|
56
|
+
{
|
57
|
+
fallback: "test fallback text",
|
58
|
+
text: "test text",
|
59
|
+
pretext: "test pretext",
|
60
|
+
fields: [
|
61
|
+
{
|
62
|
+
title: "test field 1",
|
63
|
+
value: "test value 1"
|
64
|
+
},
|
65
|
+
{
|
66
|
+
title: "test field 2",
|
67
|
+
value: "test value 2"
|
68
|
+
}
|
69
|
+
]
|
70
|
+
}
|
71
|
+
]
|
72
|
+
})
|
73
|
+
expect(results.response.code).to eq "200"
|
74
|
+
expect(results.parsed_response).to eq "ok"
|
75
|
+
end
|
76
|
+
end
|
43
77
|
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
{
|
2
|
+
"swagger": "2.0",
|
3
|
+
|
4
|
+
"info": {
|
5
|
+
"title": "Slack",
|
6
|
+
"description": "Slack Incoming Webhook",
|
7
|
+
"version": "1"
|
8
|
+
},
|
9
|
+
|
10
|
+
"host": "hooks.slack.com",
|
11
|
+
|
12
|
+
"basePath": "/services",
|
13
|
+
|
14
|
+
"schemes": ["https"],
|
15
|
+
|
16
|
+
"produces": ["application/json"],
|
17
|
+
|
18
|
+
"paths": {
|
19
|
+
"/{path}": {
|
20
|
+
"post": {
|
21
|
+
"summary": "Post message into Slack",
|
22
|
+
"operationId": "postMessage",
|
23
|
+
"parameters": [
|
24
|
+
{
|
25
|
+
"name": "path",
|
26
|
+
"in": "path",
|
27
|
+
"required": true,
|
28
|
+
"type": "string"
|
29
|
+
},
|
30
|
+
{
|
31
|
+
"name": "payload",
|
32
|
+
"in": "body",
|
33
|
+
"required": true,
|
34
|
+
"schema": "Payload"
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
38
|
+
}
|
39
|
+
},
|
40
|
+
|
41
|
+
"definitions": {
|
42
|
+
"Payload": {
|
43
|
+
"title": "Payload",
|
44
|
+
"type": "object",
|
45
|
+
"required": [ "text" ],
|
46
|
+
"properties": {
|
47
|
+
"text": { "type": "string" },
|
48
|
+
"username": { "type": "string" },
|
49
|
+
"icon_url": { "type": "string" },
|
50
|
+
"icon_emoji": { "type": "string" },
|
51
|
+
"channel": { "type": "string" },
|
52
|
+
"attachments": {
|
53
|
+
"type": "array",
|
54
|
+
"items": {
|
55
|
+
"$ref": "#/definitions/Attachment"
|
56
|
+
}
|
57
|
+
}
|
58
|
+
}
|
59
|
+
},
|
60
|
+
"Attachment": {
|
61
|
+
"title": "Attachment",
|
62
|
+
"type": "object",
|
63
|
+
"required": ["fallback"],
|
64
|
+
"properties": {
|
65
|
+
"fallback": { "type": "string" },
|
66
|
+
"text": { "type": "string" },
|
67
|
+
"pretext": { "type": "string" },
|
68
|
+
"color": { "type": "string" },
|
69
|
+
"fields": {
|
70
|
+
"type": "array",
|
71
|
+
"items": {
|
72
|
+
"$ref": "#/definitions/AttachmentField"
|
73
|
+
}
|
74
|
+
}
|
75
|
+
},
|
76
|
+
"AttachmentField": {
|
77
|
+
"title": "Attachment Field",
|
78
|
+
"type": "object",
|
79
|
+
"required": ["title"],
|
80
|
+
"properties": {
|
81
|
+
"title": { "type": "string" },
|
82
|
+
"value": { "type": "string" },
|
83
|
+
"short": { "type": "boolean" }
|
84
|
+
}
|
85
|
+
}
|
86
|
+
}
|
87
|
+
}
|
88
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://hooks.slack.com/services/abcd/efgh/ijkl
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"text":"Testing","username":"TestBot","attachments":[{"fallback":"test
|
9
|
+
fallback text","text":"test text","pretext":"test pretext","fields":[{"title":"test
|
10
|
+
field 1","value":"test value 1"},{"title":"test field 2","value":"test value
|
11
|
+
2"}]}]}'
|
12
|
+
headers:
|
13
|
+
Content-Type:
|
14
|
+
- application/json
|
15
|
+
response:
|
16
|
+
status:
|
17
|
+
code: 200
|
18
|
+
message: OK
|
19
|
+
headers:
|
20
|
+
Access-Control-Allow-Origin:
|
21
|
+
- "*"
|
22
|
+
Content-Type:
|
23
|
+
- text/html
|
24
|
+
Date:
|
25
|
+
- Sun, 04 Jan 2015 21:21:29 GMT
|
26
|
+
Server:
|
27
|
+
- Apache
|
28
|
+
Strict-Transport-Security:
|
29
|
+
- max-age=31536000; includeSubDomains; preload
|
30
|
+
Vary:
|
31
|
+
- Accept-Encoding
|
32
|
+
X-Frame-Options:
|
33
|
+
- SAMEORIGIN
|
34
|
+
Content-Length:
|
35
|
+
- '2'
|
36
|
+
Connection:
|
37
|
+
- keep-alive
|
38
|
+
body:
|
39
|
+
encoding: UTF-8
|
40
|
+
string: ok
|
41
|
+
http_version:
|
42
|
+
recorded_at: Sun, 04 Jan 2015 21:21:29 GMT
|
43
|
+
recorded_with: VCR 2.9.3
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: diesel-api-dsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Calvin Yu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -120,9 +120,7 @@ files:
|
|
120
120
|
- LICENSE
|
121
121
|
- README.md
|
122
122
|
- Rakefile
|
123
|
-
- apis/slack.rb
|
124
123
|
- diesel.gemspec
|
125
|
-
- examples/post_slack_message.rb
|
126
124
|
- lib/diesel.rb
|
127
125
|
- lib/diesel/api_base.rb
|
128
126
|
- lib/diesel/api_builder.rb
|
@@ -131,6 +129,7 @@ files:
|
|
131
129
|
- lib/diesel/data_model.rb
|
132
130
|
- lib/diesel/endpoint.rb
|
133
131
|
- lib/diesel/middleware/auth/api_key.rb
|
132
|
+
- lib/diesel/middleware/auth/oauth2.rb
|
134
133
|
- lib/diesel/middleware/debug.rb
|
135
134
|
- lib/diesel/middleware/set_body_parameter.rb
|
136
135
|
- lib/diesel/middleware/set_header.rb
|
@@ -150,17 +149,21 @@ files:
|
|
150
149
|
- lib/diesel/swagger/parser.rb
|
151
150
|
- lib/diesel/swagger/path.rb
|
152
151
|
- lib/diesel/swagger/property.rb
|
152
|
+
- lib/diesel/swagger/security.rb
|
153
153
|
- lib/diesel/swagger/security_definition.rb
|
154
154
|
- lib/diesel/swagger/specification.rb
|
155
155
|
- lib/diesel/utils/inflections.rb
|
156
156
|
- lib/diesel/version.rb
|
157
157
|
- spec/diesel/api_builder_spec.rb
|
158
158
|
- spec/diesel/swagger/parser_spec.rb
|
159
|
+
- spec/diesel/swagger/specification_spec.rb
|
159
160
|
- spec/diesel_spec.rb
|
160
161
|
- spec/files/honeybadger.json
|
161
162
|
- spec/files/pivotal_tracker.json
|
163
|
+
- spec/files/slack.json
|
162
164
|
- spec/fixtures/vcr_cassettes/honeybadger.yml
|
163
165
|
- spec/fixtures/vcr_cassettes/pivotal_tracker_create_story.yml
|
166
|
+
- spec/fixtures/vcr_cassettes/slack.yml
|
164
167
|
- spec/spec_helper.rb
|
165
168
|
homepage: http://github.com/cyu/diesel
|
166
169
|
licenses:
|
@@ -182,16 +185,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
182
185
|
version: '0'
|
183
186
|
requirements: []
|
184
187
|
rubyforge_project:
|
185
|
-
rubygems_version: 2.
|
188
|
+
rubygems_version: 2.4.5
|
186
189
|
signing_key:
|
187
190
|
specification_version: 4
|
188
191
|
summary: Create API Clients From an DSL
|
189
192
|
test_files:
|
190
193
|
- spec/diesel/api_builder_spec.rb
|
191
194
|
- spec/diesel/swagger/parser_spec.rb
|
195
|
+
- spec/diesel/swagger/specification_spec.rb
|
192
196
|
- spec/diesel_spec.rb
|
193
197
|
- spec/files/honeybadger.json
|
194
198
|
- spec/files/pivotal_tracker.json
|
199
|
+
- spec/files/slack.json
|
195
200
|
- spec/fixtures/vcr_cassettes/honeybadger.yml
|
196
201
|
- spec/fixtures/vcr_cassettes/pivotal_tracker_create_story.yml
|
202
|
+
- spec/fixtures/vcr_cassettes/slack.yml
|
197
203
|
- spec/spec_helper.rb
|
data/apis/slack.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
apis do
|
2
|
-
description "Slack"
|
3
|
-
api_version "1"
|
4
|
-
base_path "https://scoutmob.slack.com/services/hooks"
|
5
|
-
|
6
|
-
api_key "token" do
|
7
|
-
nickname :api_token
|
8
|
-
pass_as :query_parameter
|
9
|
-
end
|
10
|
-
|
11
|
-
header "Content-Type" => "application/json"
|
12
|
-
|
13
|
-
resource "incoming-webhook" do
|
14
|
-
description "Incoming Webhook"
|
15
|
-
|
16
|
-
operation :send_message do
|
17
|
-
reference_url "https://my.slack.com/services/new/incoming-webhook"
|
18
|
-
method :post
|
19
|
-
|
20
|
-
body "payload" do
|
21
|
-
data_type "Payload"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
complex_type "Payload" do
|
27
|
-
required :text
|
28
|
-
property :text
|
29
|
-
property :channel
|
30
|
-
property :username
|
31
|
-
property :icon_url
|
32
|
-
property :icon_emoji
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
|