simple_api_client 0.0.2 → 0.0.3

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: ae96344d08b465b56f54620eb75714d3e61a81e8
4
- data.tar.gz: 3a0153a20f2d6ef263f159aa2a1e07e0ce0ed5b2
3
+ metadata.gz: dbaa7daaea726e1e71511f35cf5fc9496529b16d
4
+ data.tar.gz: 361842e92d99a384508af44552cec9c64265c196
5
5
  SHA512:
6
- metadata.gz: 24f3de8ea72890c464e226bcf1135ee44c713d3ca634cca91da41b0a8938c7c56f98db599cc5e5f8978843fbc4e897a55375217ec3f39f200d5c1e05fb0b8c4c
7
- data.tar.gz: a2873988e18cbd74008d26b9d85a86210072847996d82919e45f5ddbe066e12683645eb2265a95eb616ed119c71583930c75d5881dd835b27797361f723b99e5
6
+ metadata.gz: 17d035a89fcf28f82e5fb11cad80cd68459385e43ee32b6b3e2ba116270663e800809aaca4eeba811d147373d8d51394e2a5b5e666b74da4292cd472895537b5
7
+ data.tar.gz: 91e7f9f9506078ff332b3d1bc9413376904b906e5df2d4112cbc7ff3e1d848cec7c7aec96dd5de1176c6505d4bdc68b9c1f5f3224b10362bf26d3bb8d70500b2
data/README.md CHANGED
@@ -18,28 +18,7 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
-
22
-
23
- ```ruby
24
- require 'simple_api_client'
25
-
26
- class YourClientClass
27
-
28
- include SimpleApiClient
29
-
30
- #including SimpleApiClient gives you a base initialize method that accepts two parameters.
31
- #param1: excepts a URI object (which is used to set the Scheme, Host, Port etc, of your api.
32
- #param2: is an object that responses to a call method which needs to accept a hash of options.
33
-
34
- #Define your own endpoints
35
-
36
- def client_info(client_id, payload)
37
- call(method: :get, uri: uri('/client_info')
38
- end
39
-
40
-
41
- end
42
- ```
21
+ See: [simple_api_client.rb documentation](https://github.com/dvallance/simple_api_client/blob/master/lib/simple_api_client.rb).
43
22
 
44
23
  ## Contributing
45
24
 
@@ -4,6 +4,88 @@ require 'simple_api_client/http_caller/net_http'
4
4
  require 'simple_api_client/http_caller/response'
5
5
  require 'active_support/core_ext/module/delegation'
6
6
 
7
+ # This module provides some simple basic methods to help create an HTTP based
8
+ # API client with minimum effort.
9
+ #
10
+ # If you have an HTTP based API endpoint that accepts and delivers its payloads
11
+ # via JSON or XML this gem is designed to quickly create the calling client. It
12
+ # does this by providing an #initialize method that handles setting your HTTP
13
+ # servers HOST, PORT, and SCHEME. These are set with a URI object or a URI
14
+ # parse-able string. This allows you to declare any endpoints paths relative to
15
+ # the provided URI.
16
+ #
17
+ # The second part of the equation is the Http client that actually makes the
18
+ # call to the server. One is provided in this gem, +HttpCaller::NetHttp+, which
19
+ # is just a wrapper around rubys Net::HTTP client. If your looking for something
20
+ # more performant you can use the +http_caller-curb+ gem which provides a
21
+ # wrapper around Curb (Libcurl bindings for Ruby). The HttpCaller is simply a
22
+ # class that implements a +#call+ method that accepts an options hash.
23
+ #
24
+ # ==HttpCallers
25
+ #
26
+ # +HttpCaller::NetHttp+ (provided with this gem) and +HttpCaller::Curb+
27
+ # (requires the http_caller-curb gem) are both very simple wrappers around
28
+ # existing HTTP clients and they both understand the following options.
29
+ # * :method - [:get, :post, :put] allows the caller to determine the type of
30
+ # call to perform.
31
+ # * :uri - the *absolute* url address for the endpoint. There is a convienence
32
+ # method #uri which will turn a relative path into the absolute path based on
33
+ # the initial URI passed to the initializer.
34
+ # * :payload - a :post or :put can accept a payload.
35
+ # * :accept - tells the server what format the payload will be [:json (default)
36
+ # or :xml].
37
+ # * :content_type - if your server api can respond in :json or :xml you can tell
38
+ # it which you prefer (:json is the default).
39
+ #
40
+ # The HttpCallers I've provided both wrap exceptions in a common format.
41
+ # * Errno::ECONNREFUSED - if the server is unresponsive
42
+ # * Errno::ECONNRESET - the remote host reset the connection request
43
+ # * Errno::ETIMEDOUT - timed out
44
+ #
45
+ # You can of course roll your own HttpCaller and if thats the case you can
46
+ # change up the option names and respond to anything you want.
47
+ #
48
+ # ==Usage
49
+ # This simplest usage would be to include the *SimpleApiClient* module in your
50
+ # intended client and provide some basic endpoints.
51
+ # require 'simple_api_client'
52
+ #
53
+ # class MyApiClient
54
+ # include SimpleApiClient
55
+ #
56
+ # def get_address(user_id)
57
+ # # note the use of the #uri method to create an absolute uri
58
+ # path = uri("/users/#{user_id}/address")
59
+ #
60
+ # # call is delegated to the provided HttpCaller object.
61
+ # call(uri: path, method: :get)
62
+ # end
63
+ #
64
+ # # a post example could look like this
65
+ # def post_address(user_id, payload)
66
+ # path = uri("/users/#{user_id}/address")
67
+ # call(uri: path, method: :post, payload: payload)
68
+ # end
69
+ # end
70
+ #
71
+ # my_client = MyApiClient.new('https://myserver:7788', HttpCaller::NetHttp.new)
72
+ #
73
+ # #result is an HttpCaller::Response object which has a response code and body.
74
+ # result = my_client.get_address(1)
75
+ #
76
+ # puts result.code
77
+ # # => 200
78
+ #
79
+ # puts result.body #server specific, but the request will ask for json by default.
80
+ # # => "{\"street address\":\"897 someroad\"}"
81
+ #
82
+ # The code behind the scenes is vary simple and there is just an un-enforced
83
+ # contract between the client class and the provided HttpCaller class. Your
84
+ # defined endpoints simply pass the options to the HttpCaller and expect it to
85
+ # respond. In my provided code that response is an HttpCaller::Response object
86
+ # but this can be anything you want if you provide your own.
87
+ #
88
+ # @author David Vallance
7
89
  module SimpleApiClient
8
90
 
9
91
  ARGUMENT_ERROR_MESSAGE_HOST_MISSING = 'First argument must be a URI object or a URI string that provides a host. (i.e //myhost or http://myhost). Note: Scheme defaults to http if not provided.'
@@ -13,6 +95,15 @@ module SimpleApiClient
13
95
  delegate :call, to: :@caller
14
96
  attr_reader :caller
15
97
 
98
+ # Provides an default initializer for your class along with validation
99
+ # checking on the accepted params. An ArgumentError will be raised if the
100
+ # parameters do not satisfy expectations.
101
+ #
102
+ # @param uri [URI::HTTP, String] a URI object or a URI parse-able string.
103
+ # @param api_caller [#call] an object that responds to a #call method.
104
+ # HttpCaller::NetHttp is provided with this simple_api_client gem. See gem
105
+ # [http_caller-curb] for an optional HttpCaller::Curb implimentation using
106
+ # curb.
16
107
  def initialize uri, api_caller
17
108
  @uri = URI(uri)
18
109
  raise ArgumentError.new(ARGUMENT_ERROR_MESSAGE_HOST_MISSING) if @uri.host.nil?
@@ -1,3 +1,3 @@
1
1
  module SimpleApiClient
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -53,3 +53,27 @@ describe TestClient do
53
53
  end
54
54
 
55
55
  end
56
+
57
+ class TestClientWithOwnInitializer
58
+ include SimpleApiClient
59
+
60
+ attr_accessor :my_string
61
+
62
+ def initialize string
63
+ super('http://127.0.0.1:9393', TestCaller.new)
64
+ self.my_string = string
65
+ end
66
+
67
+ end
68
+
69
+ describe TestClientWithOwnInitializer do
70
+ it '#initializes properly' do
71
+ client = TestClientWithOwnInitializer.new('something')
72
+ client.scheme.must_equal 'http'
73
+ client.host.must_equal '127.0.0.1'
74
+ client.port.must_equal 9393
75
+ client.caller.class.must_equal TestCaller
76
+ client.my_string.must_equal 'something'
77
+ end
78
+
79
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Vallance
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-10 00:00:00.000000000 Z
11
+ date: 2014-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport