json_client 0.2.2 → 1.0.0
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 +20 -19
- data/Rakefile +2 -4
- data/json_client.gemspec +18 -17
- data/lib/json_client.rb +18 -6
- data/lib/json_client/base.rb +48 -47
- data/lib/json_client/base_serializer.rb +6 -3
- data/lib/json_client/create.rb +9 -0
- data/lib/json_client/destroy.rb +11 -0
- data/lib/json_client/dsl.rb +2 -2
- data/lib/json_client/dsl/on_use_collector.rb +3 -0
- data/lib/json_client/dsl/requests_collector.rb +0 -1
- data/lib/json_client/dsl/serializers_collector.rb +0 -1
- data/lib/json_client/empty_serializer.rb +2 -3
- data/lib/json_client/index.rb +9 -0
- data/lib/json_client/model_serializer.rb +4 -0
- data/lib/json_client/request.rb +48 -0
- data/lib/json_client/request_with_body.rb +30 -0
- data/lib/json_client/request_without_body.rb +17 -0
- data/lib/json_client/requests.rb +58 -16
- data/lib/json_client/response.rb +23 -0
- data/lib/json_client/show.rb +9 -0
- data/lib/json_client/update.rb +15 -0
- data/lib/json_client/uri_builder.rb +34 -0
- data/lib/json_client/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/all_success.yml +15 -15
- data/spec/fixtures/vcr_cassettes/create_success.yml +19 -20
- data/spec/fixtures/vcr_cassettes/destroy_success.yml +35 -36
- data/spec/fixtures/vcr_cassettes/show_success.yml +17 -16
- data/spec/fixtures/vcr_cassettes/update_success.yml +38 -40
- data/spec/json_client/base_responses/response_spec.rb +8 -4
- data/spec/json_client/base_spec.rb +32 -19
- data/spec/json_client/dsl_spec.rb +10 -12
- data/spec/json_client/model_serializer_spec.rb +14 -4
- data/spec/json_client/{pather_spec.rb → uri_builder_spec.rb} +26 -4
- data/spec/json_client_spec.rb +22 -8
- data/spec/spec_helper.rb +0 -1
- metadata +47 -46
- data/lib/json_client/base_requests/create.rb +0 -16
- data/lib/json_client/base_requests/destroy.rb +0 -13
- data/lib/json_client/base_requests/index.rb +0 -11
- data/lib/json_client/base_requests/request.rb +0 -12
- data/lib/json_client/base_requests/show.rb +0 -11
- data/lib/json_client/base_requests/update.rb +0 -16
- data/lib/json_client/base_responses/create.rb +0 -8
- data/lib/json_client/base_responses/destroy.rb +0 -8
- data/lib/json_client/base_responses/index.rb +0 -8
- data/lib/json_client/base_responses/response.rb +0 -25
- data/lib/json_client/base_responses/show.rb +0 -8
- data/lib/json_client/base_responses/update.rb +0 -8
- data/lib/json_client/pather.rb +0 -20
- data/lib/json_client/resource_handler.rb +0 -9
- data/lib/json_client/responses.rb +0 -29
- data/spec/fixtures/vcr_cassettes/authenticate_success.yml +0 -58
- data/spec/json_client/base_requests/request_spec.rb +0 -14
- data/spec/json_client/requests_spec.rb +0 -43
- data/spec/json_client/responses_spec.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c939e92cf7be2e4d0e73ccc904c392b50d85f779
|
4
|
+
data.tar.gz: 96ebf0b99e4bf9c39ad8cfc5909945b08191a3a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c53e5204fe5d49fd3a0c065d52777f0783dcebc7806ecda9f9650fcb1d1ba0e0cbb230883997c65cd404e86a5ab8e6dd8b2eb2f581dd4154491094c43bd4aed2
|
7
|
+
data.tar.gz: ccb9e2796015af82fe7cf32bed3cd06b0abfcf24b8e86bc9e139c72672347af2ca32c8d2d685f43099c7792cfcceb56074d6ea480a57931e9695333d0ed1446a
|
data/README.md
CHANGED
@@ -27,10 +27,6 @@ Or install it yourself as:
|
|
27
27
|
|
28
28
|
## Usage
|
29
29
|
|
30
|
-
I've avoided using a DSL in favor of good engineering principals. I am
|
31
|
-
hoping the DSL will come after.
|
32
|
-
|
33
|
-
|
34
30
|
```
|
35
31
|
require 'json_client'
|
36
32
|
|
@@ -41,40 +37,45 @@ class Client < JsonClient::Base
|
|
41
37
|
|
42
38
|
def pather
|
43
39
|
@pather ||=
|
44
|
-
JsonClient::
|
40
|
+
JsonClient::UriBuilder.new(
|
45
41
|
'https://example.host.com',
|
46
42
|
'api/v1',
|
47
|
-
'objects'
|
43
|
+
'objects',
|
44
|
+
'80'
|
48
45
|
)
|
49
46
|
end
|
50
47
|
end
|
51
48
|
|
52
49
|
config = {
|
53
|
-
|
54
|
-
|
50
|
+
client_id: '1',
|
51
|
+
secret_key: 'dummmy_key',
|
52
|
+
host: '127.0.0.1',
|
53
|
+
port: '3000'
|
55
54
|
}
|
56
55
|
|
57
56
|
client = Client.new(config)
|
58
57
|
|
59
|
-
# GET
|
58
|
+
# GET http://example.host.com:80/api/v2/objects/2
|
59
|
+
# Headers:
|
60
|
+
# Content-Type: application/json
|
61
|
+
# Accept: application/json
|
62
|
+
# Authorization: APIAuth 1:oh3o3h00312h320u530s=
|
60
63
|
client.index.json
|
61
64
|
=> { 'server_json' : 'is_parsed_here' }
|
62
65
|
|
63
|
-
# GET
|
66
|
+
# GET http://example.host.com:80/api/v2/objects
|
67
|
+
# Headers:
|
68
|
+
# Content-Type: application/json
|
69
|
+
# Accept: application/json
|
70
|
+
# Authorization: APIAuth 1:oh3o3h00312h320u530s=
|
64
71
|
client.show(2).json
|
65
72
|
=> { 'object_json' : 'is_parsed_here' }
|
66
73
|
```
|
67
74
|
|
68
75
|
## Best Guide
|
69
76
|
|
70
|
-
|
71
|
-
|
72
|
-
Sorry non rspec people
|
77
|
+
Use [this test](https://github.com/johnmcconnell/json_client/blob/master/spec/json_client/base_spec.rb)
|
78
|
+
as a guide.
|
73
79
|
|
74
80
|
## Contributing
|
75
|
-
|
76
|
-
1. Fork it ( https://github.com/johnmcconnell/json_client/fork )
|
77
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
78
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
79
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
80
|
-
5. Create a new Pull Request
|
81
|
+
Contributions Welcome
|
data/Rakefile
CHANGED
data/json_client.gemspec
CHANGED
@@ -4,28 +4,29 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'json_client/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'json_client'
|
8
8
|
spec.version = JsonClient::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
-
spec.summary =
|
12
|
-
spec.description =
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
9
|
+
spec.authors = ['johnmcconnell']
|
10
|
+
spec.email = ['johnnyillinois@gmail.com']
|
11
|
+
spec.summary = "crud json client to make creating services easy'"
|
12
|
+
spec.description = "crud json client to make creating services easy'"
|
13
|
+
spec.homepage = ''
|
14
|
+
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_dependency '
|
22
|
-
spec.add_dependency '
|
21
|
+
spec.add_dependency 'attr_init'
|
22
|
+
spec.add_dependency 'api-auth'
|
23
23
|
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency
|
27
|
-
spec.add_development_dependency
|
28
|
-
spec.add_development_dependency
|
29
|
-
spec.add_development_dependency
|
30
|
-
spec.add_development_dependency
|
24
|
+
spec.add_development_dependency 'simplecov'
|
25
|
+
spec.add_development_dependency 'coveralls'
|
26
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
27
|
+
spec.add_development_dependency 'rspec'
|
28
|
+
spec.add_development_dependency 'rspec-collection_matchers'
|
29
|
+
spec.add_development_dependency 'vcr'
|
30
|
+
spec.add_development_dependency 'pry'
|
31
|
+
spec.add_development_dependency 'webmock'
|
31
32
|
end
|
data/lib/json_client.rb
CHANGED
@@ -1,10 +1,22 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require 'json_client/version'
|
2
|
+
require 'json_client/base'
|
3
|
+
require 'json_client/model_serializer'
|
4
|
+
require 'json_client/uri_builder'
|
5
|
+
|
6
|
+
require 'digest'
|
5
7
|
|
6
8
|
module JsonClient
|
7
|
-
|
8
|
-
|
9
|
+
class << self
|
10
|
+
def new(uri_builder, config)
|
11
|
+
Base.new(uri_builder, config)
|
12
|
+
end
|
13
|
+
|
14
|
+
def md5_base64_digest(string)
|
15
|
+
Digest::MD5.base64digest(string)
|
16
|
+
end
|
17
|
+
|
18
|
+
def b64_encode(string)
|
19
|
+
Base64.strict_encode64(string)
|
20
|
+
end
|
9
21
|
end
|
10
22
|
end
|
data/lib/json_client/base.rb
CHANGED
@@ -1,52 +1,43 @@
|
|
1
|
-
require 'rest_client'
|
2
|
-
|
3
|
-
require 'json_client/dsl'
|
4
|
-
require 'json_client/responses'
|
5
1
|
require 'json_client/requests'
|
6
|
-
require 'json_client/
|
2
|
+
require 'json_client/response'
|
7
3
|
require 'json_client/base_serializer'
|
8
4
|
require 'json_client/empty_serializer'
|
9
|
-
require 'json_client/
|
10
|
-
require '
|
11
|
-
require 'json_client/base_requests/create'
|
12
|
-
require 'json_client/base_requests/update'
|
13
|
-
require 'json_client/base_requests/destroy'
|
14
|
-
require 'json_client/base_responses/index'
|
15
|
-
require 'json_client/base_responses/show'
|
16
|
-
require 'json_client/base_responses/create'
|
17
|
-
require 'json_client/base_responses/update'
|
18
|
-
require 'json_client/base_responses/destroy'
|
5
|
+
require 'json_client/dsl'
|
6
|
+
require 'pry'
|
19
7
|
|
20
8
|
module JsonClient
|
21
9
|
class Base
|
22
10
|
extend DSL
|
23
|
-
attr_reader :
|
11
|
+
attr_reader :secret_key, :client_id, :uri_builder
|
12
|
+
|
13
|
+
J = ::JsonClient
|
14
|
+
RS = J::Requests
|
24
15
|
|
25
16
|
requests do |r|
|
26
|
-
r.on :index, use:
|
27
|
-
r.on :show, use:
|
28
|
-
r.on :create, use:
|
29
|
-
r.on :update, use:
|
30
|
-
r.on :destroy, use:
|
17
|
+
r.on :index, use: RS::Index
|
18
|
+
r.on :show, use: RS::Show
|
19
|
+
r.on :create, use: RS::Create
|
20
|
+
r.on :update, use: RS::Update
|
21
|
+
r.on :destroy, use: RS::Destroy
|
31
22
|
end
|
32
23
|
|
33
24
|
responses do |r|
|
34
|
-
r.on :index, use:
|
35
|
-
r.on :show, use:
|
36
|
-
r.on :create, use:
|
37
|
-
r.on :update, use:
|
38
|
-
r.on :destroy, use:
|
25
|
+
r.on :index, use: J::Response
|
26
|
+
r.on :show, use: J::Response
|
27
|
+
r.on :create, use: J::Response
|
28
|
+
r.on :update, use: J::Response
|
29
|
+
r.on :destroy, use: J::Response
|
39
30
|
end
|
40
31
|
|
41
32
|
serializers do |s|
|
42
|
-
s.on :create, :update, :destroy, use: BaseSerializer.new
|
43
|
-
s.on :index, :show, use: EmptySerializer.new
|
33
|
+
s.on :create, :update, :destroy, use: J::BaseSerializer.new
|
34
|
+
s.on :index, :show, use: J::EmptySerializer.new
|
44
35
|
end
|
45
36
|
|
46
|
-
def initialize(
|
47
|
-
@
|
48
|
-
@
|
49
|
-
@
|
37
|
+
def initialize(uri_builder, config)
|
38
|
+
@client_id = config[:client_id]
|
39
|
+
@secret_key = config[:secret_key]
|
40
|
+
@uri_builder = uri_builder
|
50
41
|
validate_variables
|
51
42
|
end
|
52
43
|
|
@@ -72,36 +63,46 @@ module JsonClient
|
|
72
63
|
|
73
64
|
protected
|
74
65
|
|
75
|
-
def result(
|
76
|
-
|
77
|
-
|
66
|
+
def result(protocol, model, id = nil)
|
67
|
+
responder = responders.for(protocol)
|
68
|
+
|
69
|
+
## Fetch the response for protocol
|
70
|
+
response = fetch_response(protocol, model, id)
|
71
|
+
|
72
|
+
## Create new response
|
73
|
+
responder.new(response)
|
78
74
|
end
|
79
75
|
|
80
|
-
def
|
81
|
-
|
82
|
-
|
83
|
-
|
76
|
+
def build_request(protocol, model, id = nil)
|
77
|
+
## Get URL path
|
78
|
+
uri = uri_builder.uri(id)
|
79
|
+
requester = requestors.for(protocol)
|
80
|
+
|
81
|
+
## Find serializer for model
|
82
|
+
serializer = serializers.for(protocol)
|
84
83
|
params = serializer.serialize(model)
|
85
|
-
|
84
|
+
|
85
|
+
## Build the request object
|
86
|
+
requester.new(uri, auth_params, params)
|
86
87
|
end
|
87
88
|
|
88
|
-
def
|
89
|
-
|
89
|
+
def fetch_response(protocol, model, id = nil)
|
90
|
+
build_request(protocol, model, id).fetch
|
90
91
|
end
|
91
92
|
|
92
93
|
def auth_params
|
93
94
|
{
|
94
|
-
|
95
|
-
|
95
|
+
client_id: client_id,
|
96
|
+
secret_key: secret_key
|
96
97
|
}
|
97
98
|
end
|
98
99
|
|
99
100
|
private
|
100
101
|
|
101
102
|
def validate_variables
|
102
|
-
|
103
|
-
|
104
|
-
|
103
|
+
%w(uri_builder client_id secret_key).each do |name|
|
104
|
+
fail "#{name} must be set" if (send name).nil?
|
105
|
+
end
|
105
106
|
end
|
106
107
|
end
|
107
108
|
end
|
data/lib/json_client/dsl.rb
CHANGED
@@ -27,7 +27,7 @@ module JsonClient
|
|
27
27
|
|
28
28
|
yield collector
|
29
29
|
|
30
|
-
define_method :
|
30
|
+
define_method :requestors do
|
31
31
|
collector
|
32
32
|
end
|
33
33
|
end
|
@@ -41,7 +41,7 @@ module JsonClient
|
|
41
41
|
|
42
42
|
yield collector
|
43
43
|
|
44
|
-
define_method :
|
44
|
+
define_method :responders do
|
45
45
|
collector
|
46
46
|
end
|
47
47
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'api_auth'
|
2
|
+
|
3
|
+
module JsonClient
|
4
|
+
class Request
|
5
|
+
attr_reader :uri, :auth_params, :params
|
6
|
+
|
7
|
+
def initialize(uri, auth_params, params)
|
8
|
+
@uri = uri
|
9
|
+
@auth_params = auth_params
|
10
|
+
@params = params
|
11
|
+
end
|
12
|
+
|
13
|
+
def sign!(request)
|
14
|
+
ApiAuth.sign!(
|
15
|
+
request,
|
16
|
+
auth_params[:client_id],
|
17
|
+
auth_params[:secret_key]
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
protected
|
22
|
+
|
23
|
+
def execute!(request)
|
24
|
+
Net::HTTP.start(uri.hostname, uri.port) do |http|
|
25
|
+
http.request(
|
26
|
+
sign!(request)
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def client
|
32
|
+
Net::HTTP
|
33
|
+
end
|
34
|
+
|
35
|
+
def headers
|
36
|
+
{
|
37
|
+
'Content-Type' => 'application/json',
|
38
|
+
'Accept' => 'application/json'
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
def validate_variables
|
43
|
+
%w(url auth_params).each do |name|
|
44
|
+
fail "#{name} must be set" if (send name).nil?
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|