clientura 0.0.7 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 74d80146176c18861d4110a3480cfae4c931a2ca
4
- data.tar.gz: 1f8158c8cbe76a740a9cb52ac01b29250f6a7708
3
+ metadata.gz: be51c881a9b38b3acadcb17ec24e188e6482c2ea
4
+ data.tar.gz: b67af8babfc9eeef876ca57d7bca2c7631b11951
5
5
  SHA512:
6
- metadata.gz: b8986b83c18bd5bc284f7b0d98a4f72a61af527dfdac9adec9a60c4779d751b567e4101fe32c2d2b8308c69ba236264facf363296d989159ac5062a3cd75b6dd
7
- data.tar.gz: a7c334c6b17508d7b6d35eba0a0fe6af189d4e7c5aad81f37ac4d0991a491f1ce931fa7b0b69877b8ae0d5bfaf1ddee31017db96bc4dc2828da90beaf861ff12
6
+ metadata.gz: 9a816ec51add374c410513923b9d079d96a04ab16d914e6411ee84beab0c75758d3518dbfdcdc7c79c69f6ad864cfc773a46f1c6f4cfdc66a250e343196f8910
7
+ data.tar.gz: 80513c9a5c307c6156232766c829a305f057f137bf9c0fae66a5485cc5f8c00cb5dea1d05e60944261aae20230f01de74e2aa9767227fede48b882d669492c18
data/Gemfile CHANGED
@@ -6,7 +6,7 @@ source 'http://rubygems.org'
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
 
9
- gem 'http', '~> 1.0'
9
+ gem 'typhoeus', '~> 1.0'
10
10
  gem 'concurrent-ruby', '~> 1.0'
11
11
  gem 'concurrent-ruby-edge', '~> 0.2'
12
12
  gem 'concurrent-ruby-ext', '~> 1.0'
data/Gemfile.lock CHANGED
@@ -24,11 +24,12 @@ GEM
24
24
  thread_safe (~> 0.3, >= 0.3.1)
25
25
  diff-lcs (1.2.5)
26
26
  docile (1.1.5)
27
- domain_name (0.5.20160128)
28
- unf (>= 0.0.5, < 1.0.0)
27
+ ethon (0.8.1)
28
+ ffi (>= 1.3.0)
29
29
  eventmachine (1.0.9.1)
30
30
  faraday (0.9.2)
31
31
  multipart-post (>= 1.2, < 3)
32
+ ffi (1.9.10)
32
33
  git (1.2.9.1)
33
34
  github_api (0.13.1)
34
35
  addressable (~> 2.4.0)
@@ -39,15 +40,6 @@ GEM
39
40
  oauth2
40
41
  hashie (3.4.3)
41
42
  highline (1.7.8)
42
- http (1.0.2)
43
- addressable (~> 2.3)
44
- http-cookie (~> 1.0)
45
- http-form_data (~> 1.0.1)
46
- http_parser.rb (~> 0.6.0)
47
- http-cookie (1.0.2)
48
- domain_name (~> 0.5)
49
- http-form_data (1.0.1)
50
- http_parser.rb (0.6.0)
51
43
  i18n (0.7.0)
52
44
  jeweler (2.0.1)
53
45
  builder
@@ -133,11 +125,10 @@ GEM
133
125
  rack (~> 1.0)
134
126
  thread_safe (0.3.5)
135
127
  tilt (2.0.2)
128
+ typhoeus (1.0.1)
129
+ ethon (>= 0.8.0)
136
130
  tzinfo (1.2.2)
137
131
  thread_safe (~> 0.1)
138
- unf (0.1.4)
139
- unf_ext
140
- unf_ext (0.0.7.2)
141
132
  unicode-display_width (0.3.1)
142
133
 
143
134
  PLATFORMS
@@ -150,7 +141,6 @@ DEPENDENCIES
150
141
  concurrent-ruby (~> 1.0)
151
142
  concurrent-ruby-edge (~> 0.2)
152
143
  concurrent-ruby-ext (~> 1.0)
153
- http (~> 1.0)
154
144
  jeweler
155
145
  pry
156
146
  rack
@@ -161,6 +151,7 @@ DEPENDENCIES
161
151
  sinatra
162
152
  sinatra-contrib
163
153
  thin
154
+ typhoeus (~> 1.0)
164
155
 
165
156
  BUNDLED WITH
166
157
  1.11.2
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.7
1
+ 0.1.0
data/clientura.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: clientura 0.0.7 ruby lib
5
+ # stub: clientura 0.1.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "clientura"
9
- s.version = "0.0.7"
9
+ s.version = "0.1.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Vlad Shmyhlo"]
14
- s.date = "2016-03-04"
14
+ s.date = "2016-04-02"
15
15
  s.description = "DSL for defining HTTP clients"
16
16
  s.email = "aion.stu@gmail.com"
17
17
  s.extra_rdoc_files = [
@@ -55,7 +55,7 @@ Gem::Specification.new do |s|
55
55
  s.specification_version = 4
56
56
 
57
57
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
58
- s.add_runtime_dependency(%q<http>, ["~> 1.0"])
58
+ s.add_runtime_dependency(%q<typhoeus>, ["~> 1.0"])
59
59
  s.add_runtime_dependency(%q<concurrent-ruby>, ["~> 1.0"])
60
60
  s.add_runtime_dependency(%q<concurrent-ruby-edge>, ["~> 0.2"])
61
61
  s.add_runtime_dependency(%q<concurrent-ruby-ext>, ["~> 1.0"])
@@ -73,7 +73,7 @@ Gem::Specification.new do |s|
73
73
  s.add_development_dependency(%q<thin>, [">= 0"])
74
74
  s.add_development_dependency(%q<codeclimate-test-reporter>, [">= 0"])
75
75
  else
76
- s.add_dependency(%q<http>, ["~> 1.0"])
76
+ s.add_dependency(%q<typhoeus>, ["~> 1.0"])
77
77
  s.add_dependency(%q<concurrent-ruby>, ["~> 1.0"])
78
78
  s.add_dependency(%q<concurrent-ruby-edge>, ["~> 0.2"])
79
79
  s.add_dependency(%q<concurrent-ruby-ext>, ["~> 1.0"])
@@ -92,7 +92,7 @@ Gem::Specification.new do |s|
92
92
  s.add_dependency(%q<codeclimate-test-reporter>, [">= 0"])
93
93
  end
94
94
  else
95
- s.add_dependency(%q<http>, ["~> 1.0"])
95
+ s.add_dependency(%q<typhoeus>, ["~> 1.0"])
96
96
  s.add_dependency(%q<concurrent-ruby>, ["~> 1.0"])
97
97
  s.add_dependency(%q<concurrent-ruby-edge>, ["~> 0.2"])
98
98
  s.add_dependency(%q<concurrent-ruby-ext>, ["~> 1.0"])
@@ -1,33 +1,27 @@
1
1
  module Clientura
2
2
  module Client
3
- class Request < SimpleDelegator
3
+ class Request
4
4
  attr_reader :config, :http
5
5
 
6
- def initialize(http = HTTP.headers({}),
7
- config = { uri: '', params: {}, json: nil })
8
- super http
9
- @http = http
10
- @config = config
6
+ def initialize(options = { uri: '', headers: {}, params: {} })
7
+ @options = options
11
8
  end
12
9
 
13
10
  def update(key)
14
- Request.new http, config.merge(key => yield(config[key]))
11
+ Request.new @options.merge key => yield(@options[key])
15
12
  end
16
13
 
17
- [:get, :post, :put, :patch, :delete].each do |verb|
18
- define_method verb do |path, **opts|
19
- super(*build_request_arguments(path, opts))
20
- end
14
+ def call
15
+ uri = @options[:uri]
16
+ path = @options[:path]
17
+ json = @options[:json]
18
+ options = @options.slice(*@options.keys - [:uri, :path, :json])
19
+ options[:body] = JSON.dump(json) if json
20
+ Typhoeus::Request.new(URI.join(uri, path), options).run
21
21
  end
22
22
 
23
- def build_request_arguments(path, **opts)
24
- opts[:params] = config.fetch(:params) if config[:params].present?
25
- opts[:json] = config.fetch(:json) if config[:json].present?
26
- [URI.join(config.fetch(:uri), path), opts]
27
- end
28
-
29
- def headers(*args)
30
- Request.new(http.headers(*args), config)
23
+ def headers(args)
24
+ update(:headers) { |h| h.merge args }
31
25
  end
32
26
  end
33
27
  end
@@ -28,9 +28,17 @@ module Clientura
28
28
  end
29
29
  end
30
30
 
31
+ def normalize_path(path)
32
+ if path.respond_to?(:call)
33
+ path
34
+ else
35
+ -> (_) { path }
36
+ end
37
+ end
38
+
31
39
  def register_endpoint(name, verb:, path:)
32
40
  registered_endpoints[name] = Endpoint.new verb,
33
- path,
41
+ normalize_path(path),
34
42
  [*@middleware_context],
35
43
  [*@pipes_context]
36
44
 
@@ -106,13 +114,7 @@ module Clientura
106
114
  end
107
115
 
108
116
  def call_endpoint(name_, args)
109
- endpoint = registered_endpoints.fetch(name_)
110
-
111
- path = if endpoint.path.respond_to?(:call)
112
- endpoint.path.call(args)
113
- else
114
- endpoint.path
115
- end
117
+ endpoint = registered_endpoints.fetch name_
116
118
 
117
119
  middlewares = endpoint.middleware.map do |name:, config:|
118
120
  { callable: registered_middleware.fetch(name), config: config }
@@ -128,7 +130,9 @@ module Clientura
128
130
  middleware.call
129
131
  end
130
132
 
131
- response = request.send(endpoint.verb, path)
133
+ request = request.update(:method) { endpoint.verb }
134
+ request = request.update(:path) { endpoint.path.call(args) }
135
+ response = request.call
132
136
 
133
137
  endpoints = endpoint.pipes.map do |name:, config:|
134
138
  -> (res) { registered_pipes.fetch(name).call(res, *config) }
data/lib/clientura.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'http'
1
+ require 'typhoeus'
2
2
  require 'concurrent'
3
3
  require 'concurrent-edge'
4
4
  require 'active_support/core_ext/object'
@@ -75,7 +75,7 @@ describe 'Ability to use this for solving real world problems' do
75
75
  end
76
76
 
77
77
  describe 'My wish to see this at least working' do
78
- subject { super().root.status }
78
+ subject { super().root.code }
79
79
 
80
80
  it { should eq 200 }
81
81
  end
@@ -125,7 +125,7 @@ describe 'Ability to use this for solving real world problems' do
125
125
  it { should be_pending }
126
126
 
127
127
  it 'has correct value' do
128
- expect(subject.value.status).to eq 200
128
+ expect(subject.value.code).to eq 200
129
129
  end
130
130
 
131
131
  context 'when awaited' do
@@ -161,7 +161,7 @@ describe 'Ability to use this for solving real world problems' do
161
161
  end
162
162
 
163
163
  describe 'My desire to pass some token in header' do
164
- subject { super().pass_token.status }
164
+ subject { super().pass_token.code }
165
165
 
166
166
  let(:client_config) { super().merge token: token }
167
167
 
@@ -197,7 +197,7 @@ describe 'Ability to use this for solving real world problems' do
197
197
  end
198
198
 
199
199
  describe 'My desire to namespace routes' do
200
- subject { super().namespaced.status }
200
+ subject { super().namespaced.code }
201
201
 
202
202
  it { should eq 200 }
203
203
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clientura
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vlad Shmyhlo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-04 00:00:00.000000000 Z
11
+ date: 2016-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: http
14
+ name: typhoeus
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"