freemle 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +13 -6
- data/freemle-client.gemspec +3 -3
- data/lib/freemle.rb +16 -0
- data/lib/freemle/client.rb +18 -7
- data/lib/freemle/client/resource.rb +102 -0
- data/lib/freemle/client/version.rb +1 -1
- data/spec/freemle/client_spec.rb +2 -2
- data/spec/freemle/resource_spec.rb +2 -2
- data/spec/freemle_spec.rb +8 -0
- data/spec/spec_helper.rb +3 -3
- metadata +10 -7
- data/lib/freemle/resource.rb +0 -100
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8d1398668ee673aa3e885194ced4026c9472c61
|
4
|
+
data.tar.gz: b08a0aaf67a699b12ebda89854e21cfc80963bb5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc3db1cf169ede87cc73b975e284280709d1fa8de29f6b049aadcc2cb1e52547ae66265fb262b69dcd9f02933371598fcd975e9a3cde134aceb1736b4a7e04c5
|
7
|
+
data.tar.gz: b835d9a78081dc6350297cfbff9a43742deb42c5ad534a9c477e4accc8d859e49d8fa85a3d23c4a608e76e8fd92a321b5f67ef97a47b6ab5efcf4866eafbb133
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@ A Ruby interface to the [Freemle](https://www.freemle.com/) REST API.
|
|
10
10
|
|
11
11
|
To create a freemle client:
|
12
12
|
```ruby
|
13
|
-
freemle = Freemle
|
13
|
+
freemle = Freemle.client(
|
14
14
|
app_name: "application-name-as-chosen-on-freemle.com",
|
15
15
|
api_key: "api-key-as-provided-by-freemle.com"
|
16
16
|
)
|
@@ -18,9 +18,8 @@ freemle = Freemle::Client.new(
|
|
18
18
|
|
19
19
|
### Customers
|
20
20
|
|
21
|
-
Accessing customers:
|
21
|
+
Accessing customers (`freemle.customers.search('Freemle')`) returns:
|
22
22
|
```ruby
|
23
|
-
freemle.customers.search('Freemle')
|
24
23
|
[{
|
25
24
|
company_name: 'Freemle',
|
26
25
|
address: {
|
@@ -40,8 +39,10 @@ freemle.customers.search('Freemle')
|
|
40
39
|
|
41
40
|
Adding customers:
|
42
41
|
```ruby
|
43
|
-
customers.create(
|
42
|
+
freemle.customers.create(
|
44
43
|
company_name: "Zilverline B.V.",
|
44
|
+
attn: "Vibiemme", # Optional
|
45
|
+
extra_information: "The best cofee maker!", # Optional
|
45
46
|
address: {
|
46
47
|
street: "Cruquiusweg 109 F",
|
47
48
|
postal_code: "1019 AG",
|
@@ -55,10 +56,16 @@ customers.create(
|
|
55
56
|
|
56
57
|
Adding invoices:
|
57
58
|
```ruby
|
58
|
-
invoices.create(
|
59
|
-
customer_id: "123456789",
|
59
|
+
freemle.invoices.create(
|
60
|
+
customer_id: "123456789", # Optional
|
61
|
+
delivery_period: "31-12-1234", # Optional
|
62
|
+
reference: "my-reference", # Optional
|
63
|
+
line_items: [
|
64
|
+
{vat: 21, amount: 1359.50, quantity: 1, description: "Scrum Training"}
|
65
|
+
]
|
60
66
|
)
|
61
67
|
```
|
68
|
+
|
62
69
|
## Documentation
|
63
70
|
|
64
71
|
Check https://www.freemle.com/api-documentatie for more info.
|
data/freemle-client.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Freemle::Client::VERSION
|
9
9
|
spec.authors = ['Bob Forma', 'Steven Weller']
|
10
10
|
spec.email = %w(bforma@zilverline.com suweller@zilverline.com)
|
11
|
-
spec.summary =
|
11
|
+
spec.summary = 'Freemle.com REST API client'
|
12
12
|
spec.homepage = 'https://www.freemle.com/api-documentatie'
|
13
13
|
spec.license = 'MIT'
|
14
14
|
|
@@ -19,9 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_runtime_dependency 'rest-client', '~> 1.6'
|
21
21
|
|
22
|
-
spec.add_development_dependency 'bundler', '~> 1.
|
22
|
+
spec.add_development_dependency 'bundler', '~> 1.0'
|
23
23
|
spec.add_development_dependency 'coveralls', '~> 0.7'
|
24
|
-
spec.add_development_dependency 'rake', '~> 10.
|
24
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
25
25
|
spec.add_development_dependency 'rspec', '~> 2.14'
|
26
26
|
spec.add_development_dependency 'webmock', '~> 1.17'
|
27
27
|
end
|
data/lib/freemle.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'freemle/client'
|
2
|
+
require 'freemle/client/version'
|
3
|
+
|
4
|
+
module Freemle
|
5
|
+
|
6
|
+
# Convenient way to initialize a freemle client.
|
7
|
+
#
|
8
|
+
# @see {Freemle::Client.initialize}
|
9
|
+
#
|
10
|
+
# @since 1.0.1
|
11
|
+
def client(*args)
|
12
|
+
Freemle::Client.new(*args)
|
13
|
+
end
|
14
|
+
module_function :client
|
15
|
+
|
16
|
+
end
|
data/lib/freemle/client.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
require
|
2
|
-
require "freemle/resource"
|
1
|
+
require 'freemle/client/resource'
|
3
2
|
|
4
3
|
module Freemle
|
4
|
+
|
5
5
|
class Client
|
6
|
-
BASE_URL =
|
6
|
+
BASE_URL = 'https://www.freemle.com/api'
|
7
7
|
|
8
8
|
attr_accessor :base_url, :app_name, :api_key
|
9
9
|
|
@@ -32,11 +32,11 @@ module Freemle
|
|
32
32
|
# @example
|
33
33
|
# client.customers
|
34
34
|
#
|
35
|
-
# @return [ Freemle::Resource ] entry to the customer resource.
|
35
|
+
# @return [ Freemle::Client::Resource ] entry to the customer resource.
|
36
36
|
#
|
37
37
|
# @since 1.0.0
|
38
38
|
def customers
|
39
|
-
@customers ||=
|
39
|
+
@customers ||= new_resource(self, :customer, :customers)
|
40
40
|
end
|
41
41
|
|
42
42
|
# Access the invoice resource.
|
@@ -44,11 +44,22 @@ module Freemle
|
|
44
44
|
# @example
|
45
45
|
# client.invoices
|
46
46
|
#
|
47
|
-
# @return [ Freemle::Resource ] entry to the invoice resource.
|
47
|
+
# @return [ Freemle::Client::Resource ] entry to the invoice resource.
|
48
48
|
#
|
49
49
|
# @since 1.0.0
|
50
50
|
def invoices
|
51
|
-
@invoices ||=
|
51
|
+
@invoices ||= new_resource(self, :invoice, :invoices)
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
# Creates a freemle client resource based on the passed configuration
|
57
|
+
#
|
58
|
+
# @return [ Freemle::Client::Resource ] entry to a resource.
|
59
|
+
#
|
60
|
+
# @since 1.0.1
|
61
|
+
def new_resource(*args)
|
62
|
+
Freemle::Client::Resource.new(*args)
|
52
63
|
end
|
53
64
|
|
54
65
|
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
|
3
|
+
module Freemle
|
4
|
+
class Client
|
5
|
+
class Resource < Struct.new(:config, :singular, :plural)
|
6
|
+
|
7
|
+
# Performs a search on this resource, given a query.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# customers.search('Zilverline')
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# customers.search('Zilverline') do |response|
|
14
|
+
# # Roll your own response handler
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# @param [ Hash ] query A hash containing the fields to search for.
|
18
|
+
# @param [ Proc ] block A custom response handler.
|
19
|
+
#
|
20
|
+
# @return [ Array<Hash> ] By default, a JSON parsed response body.
|
21
|
+
#
|
22
|
+
# @since 1.0.0
|
23
|
+
def search(query, &block)
|
24
|
+
block = default_handler unless block_given?
|
25
|
+
request.get(params: {query: query}, &block)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Persists a resource on freemle.com, given a payload.
|
29
|
+
#
|
30
|
+
# @example
|
31
|
+
# customers.create(
|
32
|
+
# company_name: "Zilverline B.V.",
|
33
|
+
# address: {
|
34
|
+
# street: "Cruquiusweg 109 F",
|
35
|
+
# postal_code: "1019 AG",
|
36
|
+
# city: "Amsterdam",
|
37
|
+
# country_code: "NL"
|
38
|
+
# }
|
39
|
+
# )
|
40
|
+
#
|
41
|
+
# @example
|
42
|
+
# customers.create(
|
43
|
+
# company_name: "Zilverline B.V.",
|
44
|
+
# address: {
|
45
|
+
# street: "Cruquiusweg 109 F",
|
46
|
+
# postal_code: "1019 AG",
|
47
|
+
# city: "Amsterdam",
|
48
|
+
# country_code: "NL"
|
49
|
+
# }
|
50
|
+
# ) do |response|
|
51
|
+
# # Roll your own response handler
|
52
|
+
# end
|
53
|
+
#
|
54
|
+
# @param [ Hash ] payload A hash containing the fields to set.
|
55
|
+
# @param [ Proc ] block A custom response handler.
|
56
|
+
#
|
57
|
+
# @return [ Hash ] By default, a JSON parsed response body.
|
58
|
+
#
|
59
|
+
# @since 1.0.0
|
60
|
+
def create(payload, &block)
|
61
|
+
block = default_handler unless block_given?
|
62
|
+
request.post(json.generate({singular => payload}), &block)
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
# Returns a response handler, which parses the response body as JSON.
|
68
|
+
#
|
69
|
+
# @return [ Proc ] Default response handler.
|
70
|
+
#
|
71
|
+
# @since 1.0.0
|
72
|
+
def default_handler
|
73
|
+
Proc.new { |response| json.parse(response.body) }
|
74
|
+
end
|
75
|
+
|
76
|
+
# Returns a new request handler for this resource.
|
77
|
+
#
|
78
|
+
# @return [ RestClient::Resource ] A request handler.
|
79
|
+
#
|
80
|
+
# @since 1.0.0
|
81
|
+
def request
|
82
|
+
RestClient::Resource.new(
|
83
|
+
"#{config.base_url}/#{plural}",
|
84
|
+
user: config.app_name,
|
85
|
+
password: config.api_key
|
86
|
+
)
|
87
|
+
end
|
88
|
+
|
89
|
+
# Returns the JSON library used in request and default response handling.
|
90
|
+
#
|
91
|
+
# @return [ Class ] A JSON library.
|
92
|
+
#
|
93
|
+
# @since 1.0.0
|
94
|
+
def json
|
95
|
+
return @json if @json
|
96
|
+
require 'json'
|
97
|
+
@json = JSON
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
data/spec/freemle/client_spec.rb
CHANGED
@@ -29,7 +29,7 @@ describe Freemle::Client do
|
|
29
29
|
describe "#customers" do
|
30
30
|
subject { client.customers }
|
31
31
|
|
32
|
-
it { should be_instance_of(Freemle::Resource) }
|
32
|
+
it { should be_instance_of(Freemle::Client::Resource) }
|
33
33
|
its(:singular) { should eq(:customer) }
|
34
34
|
its(:plural) { should eq(:customers) }
|
35
35
|
end
|
@@ -37,7 +37,7 @@ describe Freemle::Client do
|
|
37
37
|
describe "#invoices" do
|
38
38
|
subject { client.invoices }
|
39
39
|
|
40
|
-
it { should be_instance_of(Freemle::Resource) }
|
40
|
+
it { should be_instance_of(Freemle::Client::Resource) }
|
41
41
|
its(:singular) { should eq(:invoice) }
|
42
42
|
its(:plural) { should eq(:invoices) }
|
43
43
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe Freemle::Resource do
|
3
|
+
describe Freemle::Client::Resource do
|
4
4
|
let(:client) do
|
5
5
|
double("client", base_url: "foo", app_name: "app", api_key: "secret")
|
6
6
|
end
|
7
|
-
let(:resource) { Freemle::Resource.new(client, :customer, :customers) }
|
7
|
+
let(:resource) { Freemle::Client::Resource.new(client, :customer, :customers) }
|
8
8
|
|
9
9
|
describe "#search" do
|
10
10
|
subject { resource.search("terms") }
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: freemle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bob Forma
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '1.
|
34
|
+
version: '1.0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '1.
|
41
|
+
version: '1.0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: coveralls
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,14 +59,14 @@ dependencies:
|
|
59
59
|
requirements:
|
60
60
|
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '10.
|
62
|
+
version: '10.0'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '10.
|
69
|
+
version: '10.0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rspec
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -111,11 +111,13 @@ files:
|
|
111
111
|
- README.md
|
112
112
|
- Rakefile
|
113
113
|
- freemle-client.gemspec
|
114
|
+
- lib/freemle.rb
|
114
115
|
- lib/freemle/client.rb
|
116
|
+
- lib/freemle/client/resource.rb
|
115
117
|
- lib/freemle/client/version.rb
|
116
|
-
- lib/freemle/resource.rb
|
117
118
|
- spec/freemle/client_spec.rb
|
118
119
|
- spec/freemle/resource_spec.rb
|
120
|
+
- spec/freemle_spec.rb
|
119
121
|
- spec/spec_helper.rb
|
120
122
|
homepage: https://www.freemle.com/api-documentatie
|
121
123
|
licenses:
|
@@ -140,8 +142,9 @@ rubyforge_project:
|
|
140
142
|
rubygems_version: 2.2.0
|
141
143
|
signing_key:
|
142
144
|
specification_version: 4
|
143
|
-
summary:
|
145
|
+
summary: Freemle.com REST API client
|
144
146
|
test_files:
|
145
147
|
- spec/freemle/client_spec.rb
|
146
148
|
- spec/freemle/resource_spec.rb
|
149
|
+
- spec/freemle_spec.rb
|
147
150
|
- spec/spec_helper.rb
|
data/lib/freemle/resource.rb
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
require 'rest-client'
|
2
|
-
|
3
|
-
module Freemle
|
4
|
-
class Resource < Struct.new(:config, :singular, :plural)
|
5
|
-
|
6
|
-
# Performs a search on this resource, given a query.
|
7
|
-
#
|
8
|
-
# @example
|
9
|
-
# customers.search('Zilverline')
|
10
|
-
#
|
11
|
-
# @example
|
12
|
-
# customers.search('Zilverline') do |response|
|
13
|
-
# # Roll your own response handler
|
14
|
-
# end
|
15
|
-
#
|
16
|
-
# @param [ Hash ] query A hash containing the fields to search for.
|
17
|
-
# @param [ Proc ] block A custom response handler.
|
18
|
-
#
|
19
|
-
# @return [ Array<Hash> ] By default, a JSON parsed response body.
|
20
|
-
#
|
21
|
-
# @since 1.0.0
|
22
|
-
def search(query, &block)
|
23
|
-
block = default_handler unless block_given?
|
24
|
-
request.get(params: {query: query}, &block)
|
25
|
-
end
|
26
|
-
|
27
|
-
# Persists a resource on freemle.com, given a payload.
|
28
|
-
#
|
29
|
-
# @example
|
30
|
-
# customers.create(
|
31
|
-
# company_name: "Zilverline B.V.",
|
32
|
-
# address: {
|
33
|
-
# street: "Cruquiusweg 109 F",
|
34
|
-
# postal_code: "1019 AG",
|
35
|
-
# city: "Amsterdam",
|
36
|
-
# country_code: "NL"
|
37
|
-
# }
|
38
|
-
# )
|
39
|
-
#
|
40
|
-
# @example
|
41
|
-
# customers.create(
|
42
|
-
# company_name: "Zilverline B.V.",
|
43
|
-
# address: {
|
44
|
-
# street: "Cruquiusweg 109 F",
|
45
|
-
# postal_code: "1019 AG",
|
46
|
-
# city: "Amsterdam",
|
47
|
-
# country_code: "NL"
|
48
|
-
# }
|
49
|
-
# ) do |response|
|
50
|
-
# # Roll your own response handler
|
51
|
-
# end
|
52
|
-
#
|
53
|
-
# @param [ Hash ] payload A hash containing the fields to set.
|
54
|
-
# @param [ Proc ] block A custom response handler.
|
55
|
-
#
|
56
|
-
# @return [ Hash ] By default, a JSON parsed response body.
|
57
|
-
#
|
58
|
-
# @since 1.0.0
|
59
|
-
def create(payload, &block)
|
60
|
-
block = default_handler unless block_given?
|
61
|
-
request.post(json.generate({singular => payload}), &block)
|
62
|
-
end
|
63
|
-
|
64
|
-
private
|
65
|
-
|
66
|
-
# Returns a response handler, which parses the response body as JSON.
|
67
|
-
#
|
68
|
-
# @return [ Proc ] Default response handler.
|
69
|
-
#
|
70
|
-
# @since 1.0.0
|
71
|
-
def default_handler
|
72
|
-
Proc.new { |response| json.parse(response.body) }
|
73
|
-
end
|
74
|
-
|
75
|
-
# Returns a new request handler for this resource.
|
76
|
-
#
|
77
|
-
# @return [ RestClient::Resource ] A request handler.
|
78
|
-
#
|
79
|
-
# @since 1.0.0
|
80
|
-
def request
|
81
|
-
RestClient::Resource.new(
|
82
|
-
"#{config.base_url}/#{plural}",
|
83
|
-
user: config.app_name,
|
84
|
-
password: config.api_key
|
85
|
-
)
|
86
|
-
end
|
87
|
-
|
88
|
-
# Returns the JSON library used in request and default response handling.
|
89
|
-
#
|
90
|
-
# @return [ Class ] A JSON library.
|
91
|
-
#
|
92
|
-
# @since 1.0.0
|
93
|
-
def json
|
94
|
-
return @json if @json
|
95
|
-
require 'json'
|
96
|
-
@json = JSON
|
97
|
-
end
|
98
|
-
|
99
|
-
end
|
100
|
-
end
|