sk_api_schema 0.0.16 → 0.0.17
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/json/v1.0/company.json +4 -4
- data/json/v1.0/sub.json +59 -0
- data/lib/sk_api_schema.rb +27 -5
- data/sk_api_schema.gemspec +3 -2
- data/spec/sk_api_schema_spec.rb +8 -2
- metadata +5 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.17
|
data/json/v1.0/company.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
{"type":"object",
|
1
|
+
{ "type":"object",
|
2
2
|
"title": "company",
|
3
|
-
"description": "A company is the main entity
|
3
|
+
"description": "A company is the main entity, so any data belongs to a company, identified by the current subdomain.",
|
4
4
|
"properties": {
|
5
5
|
"id": {
|
6
6
|
"identity":true,
|
@@ -101,8 +101,8 @@
|
|
101
101
|
},
|
102
102
|
|
103
103
|
"links":[
|
104
|
-
{ "rel": "
|
105
|
-
"href": "companies"
|
104
|
+
{ "rel": "current",
|
105
|
+
"href": "companies/current"
|
106
106
|
}
|
107
107
|
]
|
108
108
|
}
|
data/json/v1.0/sub.json
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
{"type":"object",
|
2
|
+
"title": "sub",
|
3
|
+
"description": "Subscribe to push notifications(webhooks) about object livecycle events like new, update or delete. Only returns subscription for the current app, so you MUST be using oAuth. When a user removes your app its subs are also deleted. <br/>To register you must supply <br/>- callback_url: receives the object in it's latest state, the user_id & subdomain, company_id, hmac-signed with your app secret.<br/>- channel: defining the event, made up of the SINGULAR object name and the action: invoice.delete, payment.new<br/> - register auth_permissions: An app MUST request non-api permissions f.ex.: clients:create. Perms(on company,app,user,team) are checked before any publishing, so if a user cannot create clients in the interface, his apps will not receive any callbacks.",
|
4
|
+
"properties": {
|
5
|
+
"id": {
|
6
|
+
"identity":true,
|
7
|
+
"readonly":true,
|
8
|
+
"type":"string"
|
9
|
+
},
|
10
|
+
"channel": {
|
11
|
+
"description": "The channel to which to subscribe. See available at subs/channels.",
|
12
|
+
"required":true,
|
13
|
+
"type":"string"
|
14
|
+
},
|
15
|
+
"callback_url": {
|
16
|
+
"description": "An url receiving the notification. The url MUST be within the url of the current app",
|
17
|
+
"type":"string",
|
18
|
+
"required":true
|
19
|
+
},
|
20
|
+
"method": {
|
21
|
+
"description": "HTTP method used for the request, defaults to POST",
|
22
|
+
"type":"string",
|
23
|
+
"default":"POST",
|
24
|
+
"enum":["POST","GET", "DELETE", "PUT"]
|
25
|
+
},
|
26
|
+
"created_at": {
|
27
|
+
"description": "Date the record was created in SK. Never changes afterwards.",
|
28
|
+
"format":"date-time",
|
29
|
+
"readonly":true,
|
30
|
+
"type":"string"
|
31
|
+
},
|
32
|
+
"updated_at": {
|
33
|
+
"description": "Last date when the record was edited.",
|
34
|
+
"format":"date-time",
|
35
|
+
"readonly":true,
|
36
|
+
"type":"string"
|
37
|
+
}
|
38
|
+
},
|
39
|
+
|
40
|
+
"links":[
|
41
|
+
{ "rel": "self",
|
42
|
+
"href": "{id}"
|
43
|
+
},
|
44
|
+
{ "rel": "instances",
|
45
|
+
"href": "subs/"
|
46
|
+
},
|
47
|
+
{ "rel": "destroy",
|
48
|
+
"href": "subs/{id}",
|
49
|
+
"method": "DELETE"
|
50
|
+
},
|
51
|
+
{ "rel": "update",
|
52
|
+
"href": "subs/{id}",
|
53
|
+
"method": "PUT"
|
54
|
+
},
|
55
|
+
{ "rel": "subs/channels",
|
56
|
+
"href": "subs/channels"
|
57
|
+
}
|
58
|
+
]
|
59
|
+
}
|
data/lib/sk_api_schema.rb
CHANGED
@@ -5,6 +5,19 @@ module SK
|
|
5
5
|
class Schema
|
6
6
|
|
7
7
|
class << self
|
8
|
+
|
9
|
+
# class var remembering already read-in schema's
|
10
|
+
# {
|
11
|
+
# 'v1.0'=>{
|
12
|
+
# 'invoice'=>{schema}
|
13
|
+
# 'credit_note'=>{schema}
|
14
|
+
# }
|
15
|
+
# }
|
16
|
+
# === Return
|
17
|
+
#<Hash>::
|
18
|
+
def registry
|
19
|
+
@registry ||={}
|
20
|
+
end
|
8
21
|
# Read a schema with a given version and return it as hash
|
9
22
|
# See ../json folder for available schema's and versions
|
10
23
|
# === Parameter
|
@@ -13,11 +26,15 @@ module SK
|
|
13
26
|
# === Return
|
14
27
|
# <HashWithIndifferentAccess>:: schema as hash
|
15
28
|
def read(schema, version)
|
29
|
+
return registry[version][schema] if registry[version] && registry[version][schema]
|
16
30
|
# prefix version with v1.0 of v is not present
|
17
31
|
v = (version =~ /^v/) ? version : "v#{version}"
|
32
|
+
registry[v] = {} unless registry[v]
|
33
|
+
# read schema from file
|
18
34
|
file_path = File.join(File.dirname(__FILE__), '../json', v, "#{schema}.json")
|
19
35
|
plain_data = File.open(file_path, 'r'){|f| f.read}
|
20
|
-
|
36
|
+
# remember
|
37
|
+
registry[v][schema] = ActiveSupport::JSON.decode(plain_data).with_indifferent_access
|
21
38
|
end
|
22
39
|
|
23
40
|
# Read all available schemas from a given version(folder) and return
|
@@ -83,21 +100,26 @@ module SK
|
|
83
100
|
data[field] = obj.send(field) if obj.respond_to?(field.to_sym)
|
84
101
|
end
|
85
102
|
end
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
103
|
+
hsh = { obj_class_name => data }
|
104
|
+
#add links if present
|
105
|
+
links = parse_links(obj, schema)
|
106
|
+
links && hsh['links'] = links
|
107
|
+
# return hash
|
108
|
+
hsh
|
90
109
|
end
|
91
110
|
|
92
111
|
# Parse the link section of the schema by replacing {id} in urls
|
93
112
|
# === Returns
|
94
113
|
# <Array[Hash{String=>String}]>::
|
114
|
+
# <nil>:: no links present
|
95
115
|
def parse_links(obj, schema)
|
96
116
|
links = []
|
97
117
|
schema['links'] && schema['links'].each do |link|
|
98
118
|
links << { 'rel' => link['rel'], 'href' => link['href'].gsub(/\{id\}/, obj.id) }
|
99
119
|
end
|
100
120
|
links.uniq
|
121
|
+
# return links only if not empty
|
122
|
+
links.empty? ? nil : links
|
101
123
|
end
|
102
124
|
|
103
125
|
end # class methods
|
data/sk_api_schema.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sk_api_schema}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.17"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Georg Leciejewski"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-03-10}
|
13
13
|
s.description = %q{SalesKing API JSON schema and utility methods}
|
14
14
|
s.email = %q{gl@salesking.eu}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -38,6 +38,7 @@ Gem::Specification.new do |s|
|
|
38
38
|
"json/v1.0/payment_reminder.json",
|
39
39
|
"json/v1.0/product.json",
|
40
40
|
"json/v1.0/recurring.json",
|
41
|
+
"json/v1.0/sub.json",
|
41
42
|
"json/v1.0/text_template.json",
|
42
43
|
"json/v1.0/user.json",
|
43
44
|
"lib/sk_api_schema.rb",
|
data/spec/sk_api_schema_spec.rb
CHANGED
@@ -38,6 +38,12 @@ describe SK::Api::Schema do
|
|
38
38
|
}.should raise_error
|
39
39
|
end
|
40
40
|
|
41
|
+
it "should add schema to registry" do
|
42
|
+
SK::Api::Schema.read(:credit_note, 'v1.0')
|
43
|
+
File.should_not_receive(:open)
|
44
|
+
SK::Api::Schema.read(:credit_note, 'v1.0')
|
45
|
+
end
|
46
|
+
|
41
47
|
end
|
42
48
|
|
43
49
|
describe SK::Api::Schema, 'object parsing' do
|
@@ -76,8 +82,8 @@ describe SK::Api::Schema, 'object parsing' do
|
|
76
82
|
@invoice.client = @client
|
77
83
|
obj_hash = SK::Api::Schema.to_hash_from_schema(@invoice, 'v1.0')
|
78
84
|
obj_hash["invoice"]['client']['client'].should == {"number"=>"911", "addresses"=>[], "id"=>"some-uuid", "organisation"=>"Dirty Food Inc.", "last_name"=>nil}
|
79
|
-
obj_hash["invoice"]["client"]['links'].
|
80
|
-
obj_hash["invoice"]["line_items"].should == [ {
|
85
|
+
obj_hash["invoice"]["client"]['links'].should_not be_nil
|
86
|
+
obj_hash["invoice"]["line_items"].should == [ {"line_item"=>{"name"=>"Pork Chops", "position"=>1, \
|
81
87
|
"id"=>"some-uuid", "description"=>"Yummi Pork chopped by mexian emigrants", "price_single"=>0.99}}]
|
82
88
|
end
|
83
89
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sk_api_schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 61
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 17
|
10
|
+
version: 0.0.17
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Georg Leciejewski
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-03-10 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -77,6 +77,7 @@ files:
|
|
77
77
|
- json/v1.0/payment_reminder.json
|
78
78
|
- json/v1.0/product.json
|
79
79
|
- json/v1.0/recurring.json
|
80
|
+
- json/v1.0/sub.json
|
80
81
|
- json/v1.0/text_template.json
|
81
82
|
- json/v1.0/user.json
|
82
83
|
- lib/sk_api_schema.rb
|