served 0.1.6 → 0.1.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 18d0b5a5d6bc54eed0cc6d6ff0485342c9487863
4
- data.tar.gz: e4cd8e832643622713b0aa8d5343ebd451609b40
3
+ metadata.gz: 9fc33f665810efb0338be77783f46f28a79604a3
4
+ data.tar.gz: 9141fc737d07f6d9d8fdf235cbb3ac6dfd335a89
5
5
  SHA512:
6
- metadata.gz: 42193c7f1e6d2356244fd48894a9a254680cbeb3ffdd0a587346a223d013619dd85a9a40dcde6bac091e881fd004ea7ad74d5d33a44d0a6dcb7a4c96ac1d750b
7
- data.tar.gz: 338753924c4f965a38d45db21b225439d70dac94092442e36ed66b05514a3518fe087c3fa95919b911c2847deb0a637c555cb1f16d134a8038d848bcf4b0ad52
6
+ metadata.gz: f38dae786e45652389e082659118258eb77d6bbccf34fe9f358321bfca0b2e416a7f7080c4523a6ccfa927fed2503e9aceb0d80b61755475c015eb71ed215658
7
+ data.tar.gz: 15ac1e21e7e1557b53de03862cb3a622e3b0fa33618c010d64c0fa3545e3e9b3a7fdf809db0369bca22a1302c8755352691ff375145c16dd5e8296c0aafde22e
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Served
2
2
  [![Build Status](https://travis-ci.org/optoro/served.svg)](https://travis-ci.org/optoro/served)
3
+ [![Gem Version](https://badge.fury.io/rb/served.svg)](https://badge.fury.io/rb/served)
3
4
 
4
5
  Served is a gem in the vein of [ActiveResource](https://github.com/rails/activeresource) designed to facilitate
5
- communication between distributed Rails services.
6
+ communication between distributed services and APIs.
6
7
 
7
8
  # Installation
8
9
 
@@ -10,58 +11,55 @@ Add the following to your Gemfile:
10
11
 
11
12
  ```gem 'served'```
12
13
 
13
-
14
- # Usage
15
- A service model can be created by declaring a class inheriting from ```Service::Resource::Base```.
14
+ # Configuration
15
+ Served is configured by passing a block to ```Served::configure```.
16
16
 
17
17
  ```ruby
18
- class SomeService::SomeResource < Served::Resource::Base
19
-
20
- attribute :name
21
- attribute :date
22
- attribute :phone_number, default: '555-555-5555'
23
-
18
+ Served.configure do |config|
19
+ config.hosts = {
20
+ 'some_service' => 'http://localhost:3000'
21
+ }
22
+
23
+ config.timeout = 100
24
24
  end
25
25
  ```
26
26
 
27
- ## Saving a resource
28
- Served follows resourceful standards. When a resource is initially saved a **POST** request will be sent
29
- to the service. When the resource already exists, a **PUT** request will be sent. Served determines if
30
- a resource is new or not based on the presence of an id.
27
+ ## Hosts
28
+ Served models derive their hostname by mapping their parent module to the ```Served::hosts``` configuration hash. For
29
+ example, ```SomeService::SomeResource``` would look up its host configuration at
30
+ ```Served.config.hosts['some_service']```.
31
31
 
32
- # Configuration
32
+ The host configuration accepts an (Addressable)[https://github.com/sporkmonger/addressable] template mapping
33
+ ```resource``` as the resource name (derived from the model name) and ```query``` as the params. For example:
33
34
 
34
- Served is configured using ```Served.config```.
35
+ ```
36
+ http://localhost:3000/{resource}{?query*}
37
+ ```
35
38
 
36
- ## Configuration Options
39
+ For more on building Addressable templates view the addressable documentation. If the host configuration is not an
40
+ Addressable template, a default template will be applied (```{resource}.json{?query*}```). This is the current
41
+ maintained for backwards compatibility, however the extension will likely be removed for the 0.2 release.
37
42
 
38
- ### Hosts (required)
43
+ ## Timeout
44
+ Sets the request timeout in milliseconds.
39
45
 
40
- Served uses the adjacent namespace of the resource to determine the the url for that service. For example given this
41
- configuration:
42
46
 
43
- ```ruby
44
- Served.configure do |c|
45
- c.hosts = {
46
- some_service: 'http://localhost:3000',
47
- some_other_service: 'http://localhost:3001'
48
- }
49
- ```
50
-
51
- and given this resource
47
+ # Usage
48
+ A service model can be created by declaring a class inheriting from ```Service::Resource::Base```.
52
49
 
53
50
  ```ruby
54
51
  class SomeService::SomeResource < Served::Resource::Base
55
52
 
56
53
  attribute :name
57
54
  attribute :date
58
- attribute :phone_number
55
+ attribute :phone_number, default: '555-555-5555'
59
56
 
60
57
  end
61
58
  ```
62
59
 
63
- ```SomeService::SomeResource``` would map back to http://localhost:3000/some_resources.
60
+ ## Saving a resource
61
+ Served follows resourceful standards. When a resource is initially saved a **POST** request will be sent
62
+ to the service. When the resource already exists, a **PUT** request will be sent. Served determines if
63
+ a resource is new or not based on the presence of an id.
64
64
 
65
- ### Timeout
66
65
 
67
- Sets the request time out.
@@ -1,35 +1,35 @@
1
+ require 'addressable/template'
1
2
  module Served
2
3
  # Provides an interface between HTTParty and the models. Most of the crap in here is self explanatory
3
4
  class HTTPClient
4
5
  HEADERS = { 'Content-type' => 'application/json', 'Accept' => 'application/json' }
6
+ DEFAULT_TEMPLATE = '{resource}.json{?query*}'
5
7
 
6
8
  def initialize(host)
7
- @host = host
9
+ unless host =~ /{.+}/
10
+ host = "#{host}/#{DEFAULT_TEMPLATE}"
11
+ end
12
+ @template = Addressable::Template.new(host)
8
13
  end
9
14
 
10
15
  def get(endpoint, params={})
11
- HTTParty.get("#{@host}/#{endpoint}",
12
- query: params,
16
+ HTTParty.get(@template.expand(query: params, resource: endpoint).to_s,
13
17
  headers: HEADERS,
14
18
  timeout: Served.config.timeout
15
19
  )
16
20
  end
17
21
 
18
22
  def put(endpoint, body, params={})
19
- HTTParty.put(
20
- "#{@host}/#{endpoint}",
23
+ HTTParty.put(@template.expand(query: params, resource: endpoint).to_s,
21
24
  body: body,
22
- query: params,
23
25
  headers: HEADERS,
24
26
  timeout: Served.config.timeout
25
27
  )
26
28
  end
27
29
 
28
30
  def post(endpoint, body, params={})
29
- HTTParty.post(
30
- "#{@host}/#{endpoint}",
31
+ HTTParty.post(@template.expand(query: params, resource: endpoint).to_s,
31
32
  body: body,
32
- query: params,
33
33
  headers: HEADERS,
34
34
  timeout: Served.config.timeout
35
35
  )
@@ -45,16 +45,16 @@ module Served
45
45
  name.split('::').last.tableize
46
46
  end
47
47
 
48
- # @return [String] the configured host.
48
+ # @return [String] or [Hash] the configured host.
49
49
  # @see Services::Configuration
50
- def host
50
+ def host_config
51
51
  Served.config[:hosts][parent.name.underscore.split('/')[-1]]
52
52
  end
53
53
 
54
54
  # @return [Served::HTTPClient] The connection instance to the service host. Note this is not an active
55
55
  # connection but a passive one.
56
56
  def client
57
- @connection ||= Served::HTTPClient.new(host)
57
+ @connection ||= Served::HTTPClient.new(host_config)
58
58
  end
59
59
 
60
60
  private
@@ -121,17 +121,17 @@ module Served
121
121
  private
122
122
 
123
123
  def get(params={})
124
- handle_response(client.get("/#{resource_name}/#{id}.json", params))
124
+ handle_response(client.get("#{resource_name}/#{id}", params))
125
125
  end
126
126
 
127
127
  def put(params={})
128
128
  body = to_json
129
- handle_response(client.put("/#{resource_name}/#{id}.json", body, params))
129
+ handle_response(client.put("#{resource_name}/#{id}", body, params))
130
130
  end
131
131
 
132
132
  def post(params={})
133
133
  body = to_json
134
- handle_response(client.post("/#{resource_name}.json", body, params))
134
+ handle_response(client.post("#{resource_name}", body, params))
135
135
  end
136
136
 
137
137
  def handle_response(response)
@@ -1,3 +1,3 @@
1
1
  module Served
2
- VERSION = '0.1.6'
2
+ VERSION = '0.1.7'
3
3
  end
data/served.gemspec CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_dependency 'httparty'
23
23
  spec.add_dependency 'activesupport', '>= 3.2'
24
+ spec.add_dependency 'addressable', '>= 2.4.0'
24
25
 
25
26
  spec.add_development_dependency 'bundler', '~> 1.10'
26
27
  spec.add_development_dependency 'rake', '~> 10.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: served
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jarod Reid
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-10 00:00:00.000000000 Z
11
+ date: 2015-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: addressable
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 2.4.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 2.4.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement