aitch 0.1.5 → 0.2.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 38aa9fc2ad29df790bc7fd40ce355bf708daf1d6
4
+ data.tar.gz: f175d33a07de066ba73d913462adbc5fd5e9cd7e
5
+ SHA512:
6
+ metadata.gz: 924cd3596df55c55b2be570715eaf1770874f45524557ef6a3a4f037c21ab07e0e8fe97a42445c15719074c8308caee0b1f24f9e8c810db9c7a37c02df97d927
7
+ data.tar.gz: 0f08930e4e9e0fe574020b8ef7bb4456caeb4fced990efebd65d5f22eda7980beaf7dee225c6afdebebc9ed524e0d902f1786959c29deec9ca3893a08dde163c
data/.gitignore CHANGED
@@ -3,7 +3,6 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
- Gemfile.lock
7
6
  InstalledFiles
8
7
  _yardoc
9
8
  coverage
@@ -0,0 +1,71 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ aitch (0.2.0)
5
+ activesupport
6
+ nokogiri (>= 1.6.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activesupport (4.0.0)
12
+ i18n (~> 0.6, >= 0.6.4)
13
+ minitest (~> 4.2)
14
+ multi_json (~> 1.3)
15
+ thread_safe (~> 0.1)
16
+ tzinfo (~> 0.3.37)
17
+ atomic (1.1.10)
18
+ awesome_print (1.1.0)
19
+ coderay (1.0.9)
20
+ diff-lcs (1.2.4)
21
+ fakeweb (1.3.0)
22
+ i18n (0.6.4)
23
+ method_source (0.8.2)
24
+ mini_portile (0.5.1)
25
+ minitest (4.7.5)
26
+ multi_json (1.7.7)
27
+ nokogiri (1.6.0)
28
+ mini_portile (~> 0.5.0)
29
+ notifier (0.4.1)
30
+ pry (0.9.12.2)
31
+ coderay (~> 1.0.5)
32
+ method_source (~> 0.8)
33
+ slop (~> 3.4)
34
+ pry-meta (0.0.5)
35
+ awesome_print
36
+ pry
37
+ pry-nav
38
+ pry-remote
39
+ pry-nav (0.2.3)
40
+ pry (~> 0.9.10)
41
+ pry-remote (0.1.7)
42
+ pry (~> 0.9)
43
+ slop (~> 3.0)
44
+ rake (10.1.0)
45
+ rspec (2.14.1)
46
+ rspec-core (~> 2.14.0)
47
+ rspec-expectations (~> 2.14.0)
48
+ rspec-mocks (~> 2.14.0)
49
+ rspec-core (2.14.4)
50
+ rspec-expectations (2.14.0)
51
+ diff-lcs (>= 1.1.3, < 2.0)
52
+ rspec-mocks (2.14.1)
53
+ slop (3.4.6)
54
+ test_notifier (1.0.1)
55
+ notifier
56
+ thread_safe (0.1.2)
57
+ atomic
58
+ tzinfo (0.3.37)
59
+
60
+ PLATFORMS
61
+ ruby
62
+
63
+ DEPENDENCIES
64
+ aitch!
65
+ bundler
66
+ fakeweb
67
+ nokogiri
68
+ pry-meta
69
+ rake
70
+ rspec
71
+ test_notifier
data/README.md CHANGED
@@ -71,14 +71,25 @@ end
71
71
  Performing requests:
72
72
 
73
73
  ```ruby
74
- response = Aitch.get("http://example.org", params, headers)
75
- Aitch.post("http://example.org", params, headers)
76
- Aitch.put("http://example.org", params, headers)
77
- Aitch.patch("http://example.org", params, headers)
78
- Aitch.delete("http://example.org", params, headers)
79
- Aitch.options("http://example.org", params, headers)
80
- Aitch.trace("http://example.org", params, headers)
81
- Aitch.head("http://example.org", params, headers)
74
+ response = Aitch.get("http://example.org", params, headers, options)
75
+ Aitch.post("http://example.org", params, headers, options)
76
+ Aitch.put("http://example.org", params, headers, options)
77
+ Aitch.patch("http://example.org", params, headers, options)
78
+ Aitch.delete("http://example.org", params, headers, options)
79
+ Aitch.options("http://example.org", params, headers, options)
80
+ Aitch.trace("http://example.org", params, headers, options)
81
+ Aitch.head("http://example.org", params, headers, options)
82
+ ```
83
+
84
+ You can also use a DSL.
85
+
86
+ ```ruby
87
+ response = Aitch.get do
88
+ url "http://simplesideias.com.br"
89
+ headers Authorization: "Token token=abc"
90
+ options follow_redirect: false
91
+ params a: 1, b: 2
92
+ end
82
93
  ```
83
94
 
84
95
  ### Response
@@ -98,20 +109,38 @@ response.error? # status 4xx or 5xx
98
109
  response.error # response error
99
110
  response.body # returned body
100
111
  response.data # HTML, JSON or XML payload
112
+ response.xml # An alias to the Aitch::Response#data method
113
+ response.html # An alias to the Aitch::Response#data method
114
+ response.json # An alias to the Aitch::Response#data method
101
115
  ```
102
116
 
103
- #### Parsing XML and HTML with Nokogiri
117
+ #### Parsing JSON, XML and HTML with Nokogiri
104
118
 
105
- If your response is a XML or a HTML content type, we'll automatically convert the response into a Nokogiri object.
119
+ If your response is a JSON, XML or a HTML content type, we'll automatically convert the response into the appropriate object.
106
120
 
107
121
  ```ruby
108
122
  response = Aitch.get("http://simplesideias.com.br")
109
123
 
110
- response.data.class
124
+ response.html.class
111
125
  #=> Nokogiri::HTML::Document
112
126
 
113
- response.data.css("h1").size
127
+ response.html.css("h1").size
114
128
  #=> 69
129
+
130
+ response = Aitch.get("http://simplesideias.com.br/feed")
131
+
132
+ response.xml.class
133
+ #=> Nokogiri::XML::Document
134
+
135
+ response.xml.css("item").size
136
+ #=> 10
137
+
138
+ response = Aitch.get("https://api.github.com/users/fnando")
139
+ response.json.class
140
+ #=> Hash
141
+
142
+ response.json["login"]
143
+ #=> fnando
115
144
  ```
116
145
 
117
146
  ### Following redirects
@@ -131,21 +160,26 @@ The request:
131
160
  Aitch.get("http://example.org")
132
161
  ```
133
162
 
134
- If the redirect limit is exceeded, then the `Aitch::TooManyRedirectsError` exception
135
- is raised.
163
+ If the redirect limit is exceeded, then the `Aitch::TooManyRedirectsError` exception is raised.
136
164
 
137
165
  ### Basic auth
138
166
 
139
167
  Setting basic auth credentials:
140
168
 
141
169
  ```ruby
142
- Aitch.get("http://restrict.example.org/", {}, {}, user: "john", password: "test")
170
+ response = Aitch.get do
171
+ url "http://restrict.example.org/"
172
+ options: user: "john", password: "test"
173
+ end
143
174
  ```
144
175
 
145
176
  ### Setting custom headers
146
177
 
147
178
  ```ruby
148
- Aitch.get("http://example.org", {}, {"User-Agent" => "MyBot/1.0.0"})
179
+ Aitch.get do
180
+ url "http://example.org"
181
+ headers "User-Agent" => "MyBot/1.0.0"
182
+ end
149
183
  ```
150
184
 
151
185
  The header value can be a callable object.
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_development_dependency "bundler"
25
25
  spec.add_development_dependency "rake"
26
- spec.add_development_dependency "rspec", "~> 2.14.0.rc1"
26
+ spec.add_development_dependency "rspec"
27
27
  spec.add_development_dependency "pry-meta"
28
28
  spec.add_development_dependency "test_notifier"
29
29
  spec.add_development_dependency "fakeweb"
@@ -8,6 +8,7 @@ require "active_support/core_ext/object/to_query"
8
8
 
9
9
  require "aitch/utils"
10
10
  require "aitch/uri"
11
+ require "aitch/dsl"
11
12
  require "aitch/namespace"
12
13
  require "aitch/configuration"
13
14
  require "aitch/errors"
@@ -40,5 +40,11 @@ module Aitch
40
40
  @xml_parser = XMLParser
41
41
  @html_parser = HTMLParser
42
42
  end
43
+
44
+ def to_h
45
+ instance_variables.each_with_object({}) do |name, buffer|
46
+ buffer[name.to_s.tr("@", "").to_sym] = instance_variable_get(name)
47
+ end
48
+ end
43
49
  end
44
50
  end
@@ -0,0 +1,26 @@
1
+ module Aitch
2
+ class DSL
3
+ %w[url options headers data].each do |name|
4
+ class_eval <<-RUBY
5
+ attr_writer :#{name}
6
+
7
+ def #{name}(*args)
8
+ @#{name} = args.first if args.any?
9
+ @#{name}
10
+ end
11
+ RUBY
12
+ end
13
+
14
+ alias_method :params, :data
15
+ alias_method :body, :data
16
+
17
+ def to_h
18
+ {
19
+ url: url,
20
+ options: options || {},
21
+ headers: headers || {},
22
+ data: data
23
+ }
24
+ end
25
+ end
26
+ end
@@ -9,19 +9,30 @@ module Aitch
9
9
  end
10
10
  alias_method :configuration, :config
11
11
 
12
- def execute(request_method, url, data = {}, headers = {}, options = {})
13
- Request.new({
14
- config: config,
12
+ def execute(request_method = nil, url = nil, data = {}, headers = {}, options = {}, &block)
13
+ if block_given?
14
+ dsl = DSL.new
15
+ dsl.instance_eval(&block)
16
+ args = dsl.to_h
17
+ else
18
+ args = {
19
+ url: url,
20
+ data: data,
21
+ headers: headers,
22
+ options: options
23
+ }
24
+ end
25
+
26
+ args.merge!(
15
27
  request_method: request_method,
16
- url: url,
17
- data: data,
18
- headers: headers,
19
- options: options
20
- }).perform
28
+ options: config.to_h.merge(Utils.symbolize_keys(args[:options]))
29
+ )
30
+
31
+ Request.new(args).perform
21
32
  end
22
33
 
23
- def execute!(*args)
24
- response = execute(*args)
34
+ def execute!(*args, &block)
35
+ response = execute(*args, &block)
25
36
  raise response.error if response.error?
26
37
  response
27
38
  end
@@ -36,12 +47,12 @@ module Aitch
36
47
  trace
37
48
  head
38
49
  ].each do |method_name|
39
- define_method(method_name) do |url, data = {}, headers = {}, options = {}|
40
- execute(method_name, url, data, headers, options)
50
+ define_method(method_name) do |url = nil, data = {}, headers = {}, options = {}, &block|
51
+ execute(method_name, url, data, headers, options, &block)
41
52
  end
42
53
 
43
- define_method("#{method_name}!") do |url, data = {}, headers = {}, options = {}|
44
- execute!(method_name, url, data, headers, options)
54
+ define_method("#{method_name}!") do |url = nil, data = {}, headers = {}, options = {}, &block|
55
+ execute!(method_name, url, data, headers, options, &block)
45
56
  end
46
57
  end
47
58
  end
@@ -1,9 +1,9 @@
1
1
  module Aitch
2
2
  class Redirect
3
- def initialize(config)
3
+ def initialize(options)
4
4
  @tries = 1
5
- @config = config
6
- @max_tries = @config.redirect_limit
5
+ @options = options
6
+ @max_tries = @options[:redirect_limit]
7
7
  end
8
8
 
9
9
  def followed!
@@ -15,7 +15,7 @@ module Aitch
15
15
  end
16
16
 
17
17
  def enabled?
18
- @config.follow_redirect
18
+ @options[:follow_redirect]
19
19
  end
20
20
  end
21
21
  end
@@ -1,6 +1,5 @@
1
1
  module Aitch
2
2
  class Request
3
- attr_accessor :config
4
3
  attr_accessor :request_method
5
4
  attr_accessor :url
6
5
  attr_accessor :data
@@ -17,8 +16,8 @@ module Aitch
17
16
  end
18
17
 
19
18
  def perform
20
- response = Response.new(config, client.request(request))
21
- redirect = Redirect.new(config)
19
+ response = Response.new(options, client.request(request))
20
+ redirect = Redirect.new(options)
22
21
 
23
22
  while redirect.follow?(response)
24
23
  redirect.followed!
@@ -73,7 +72,7 @@ module Aitch
73
72
  end
74
73
 
75
74
  def set_headers(request)
76
- all_headers = config.default_headers.merge(headers)
75
+ all_headers = options.fetch(:default_headers, {}).merge(headers)
77
76
 
78
77
  all_headers.each do |name, value|
79
78
  value = value.respond_to?(:call) ? value.call : value
@@ -91,16 +90,16 @@ module Aitch
91
90
  end
92
91
 
93
92
  def set_timeout(client)
94
- client.read_timeout = config.timeout
93
+ client.read_timeout = options[:timeout]
95
94
  end
96
95
 
97
96
  def set_logger(client)
98
- logger = config.logger
97
+ logger = options[:logger]
99
98
  client.set_debug_output(logger) if logger
100
99
  end
101
100
 
102
101
  def set_user_agent(request)
103
- request["User-Agent"] = config.user_agent
102
+ request["User-Agent"] = options[:user_agent]
104
103
  end
105
104
 
106
105
  def set_gzip(request)
@@ -4,8 +4,8 @@ module Aitch
4
4
 
5
5
  def_delegators :@http_response, :content_type
6
6
 
7
- def initialize(config, http_response)
8
- @config = config
7
+ def initialize(options, http_response)
8
+ @options = options
9
9
  @http_response = http_response
10
10
  end
11
11
 
@@ -55,15 +55,18 @@ module Aitch
55
55
 
56
56
  def data
57
57
  if json?
58
- @config.json_parser.load(body)
58
+ @options[:json_parser].load(body)
59
59
  elsif xml?
60
- @config.xml_parser.load(body)
60
+ @options[:xml_parser].load(body)
61
61
  elsif html?
62
- @config.html_parser.load(body)
62
+ @options[:html_parser].load(body)
63
63
  else
64
64
  body
65
65
  end
66
66
  end
67
+ alias_method :xml, :data
68
+ alias_method :html, :data
69
+ alias_method :json, :data
67
70
 
68
71
  def headers
69
72
  @headers ||= {}.tap do |headers|
@@ -81,5 +84,11 @@ module Aitch
81
84
  def respond_to_missing?(name, include_private = false)
82
85
  headers.key?(name.to_s)
83
86
  end
87
+
88
+ def inspect
89
+ "#<#{self.class} #{code} #{@http_response.msg} (#{content_type})>"
90
+ end
91
+
92
+ alias_method :to_s, :inspect
84
93
  end
85
94
  end
@@ -8,6 +8,12 @@ module Aitch
8
8
  string.downcase
9
9
  end
10
10
 
11
+ def symbolize_keys(hash)
12
+ hash.each_with_object({}) do |(key, value), buffer|
13
+ buffer[key.to_sym] = value
14
+ end
15
+ end
16
+
11
17
  def build_query(data)
12
18
  data.to_query
13
19
  end
@@ -1,3 +1,3 @@
1
1
  module Aitch
2
- VERSION = "0.1.5"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -28,13 +28,14 @@ describe Aitch do
28
28
  let(:request) { double.as_null_object }
29
29
 
30
30
  it "delegates to Request" do
31
+ options = {}
32
+
31
33
  expected = {
32
- config: Aitch.config,
33
34
  request_method: "get",
34
35
  url: "URL",
35
36
  data: "DATA",
36
37
  headers: "HEADERS",
37
- options: "OPTIONS"
38
+ options: options.merge(Aitch.config.to_h)
38
39
  }
39
40
 
40
41
  Aitch::Request
@@ -42,7 +43,7 @@ describe Aitch do
42
43
  .with(expected)
43
44
  .and_return(request)
44
45
 
45
- Aitch.get("URL", "DATA", "HEADERS", "OPTIONS")
46
+ Aitch.get("URL", "DATA", "HEADERS", options)
46
47
  end
47
48
 
48
49
  it "performs request" do
@@ -0,0 +1,47 @@
1
+ require "spec_helper"
2
+
3
+ describe Aitch::DSL do
4
+ subject(:dsl) { Aitch::DSL.new }
5
+
6
+ it "sets url" do
7
+ dsl.url "URL"
8
+ expect(dsl.url).to eql("URL")
9
+ end
10
+
11
+ it "sets options" do
12
+ dsl.options "OPTIONS"
13
+ expect(dsl.options).to eql("OPTIONS")
14
+ end
15
+
16
+ it "sets headers" do
17
+ dsl.headers "HEADERS"
18
+ expect(dsl.headers).to eql("HEADERS")
19
+ end
20
+
21
+ it "sets data" do
22
+ dsl.data "DATA"
23
+ expect(dsl.data).to eql("DATA")
24
+ end
25
+
26
+ it "sets data through params" do
27
+ dsl.params "PARAMS"
28
+ expect(dsl.data).to eql("PARAMS")
29
+ end
30
+
31
+ it "sets data through body" do
32
+ dsl.body "BODY"
33
+ expect(dsl.data).to eql("BODY")
34
+ end
35
+
36
+ it "returns hash" do
37
+ dsl.options "OPTIONS"
38
+ dsl.headers "HEADERS"
39
+ dsl.url "URL"
40
+ dsl.data "DATA"
41
+
42
+ expect(dsl.to_h).to include(data: "DATA")
43
+ expect(dsl.to_h).to include(headers: "HEADERS")
44
+ expect(dsl.to_h).to include(url: "URL")
45
+ expect(dsl.to_h).to include(options: "OPTIONS")
46
+ end
47
+ end
@@ -5,7 +5,7 @@ describe Aitch::Request do
5
5
  Aitch::Request.new({
6
6
  request_method: "get",
7
7
  url: "http://example.org",
8
- config: Aitch::Configuration.new
8
+ options: {}
9
9
  }.merge(options))
10
10
  end
11
11
 
@@ -36,7 +36,7 @@ describe Aitch::Request do
36
36
  it "sets user agent" do
37
37
  requester = build_request
38
38
  request = requester.request
39
- expect(request["User-Agent"]).to eql(requester.config.user_agent)
39
+ expect(request["User-Agent"]).to eql(requester.options[:user_agent])
40
40
  end
41
41
 
42
42
  it "requests gzip encoding" do
@@ -81,7 +81,7 @@ describe Aitch::Request do
81
81
 
82
82
  it "sets default headers" do
83
83
  requester = build_request
84
- requester.config.default_headers = {"HEADER" => "VALUE"}
84
+ requester.options[:default_headers] = {"HEADER" => "VALUE"}
85
85
  request = requester.request
86
86
 
87
87
  expect(request["HEADER"]).to eql("VALUE")
@@ -118,7 +118,7 @@ describe Aitch::Request do
118
118
  end
119
119
 
120
120
  it "sets timeout" do
121
- request.config.timeout = 20
121
+ request.options[:timeout] = 20
122
122
  expect(client.read_timeout).to eql(20)
123
123
  end
124
124
  end
@@ -183,4 +183,25 @@ describe Aitch::Request do
183
183
  expect(FakeWeb.last_request.path).to eql("/?a=1&b=2")
184
184
  end
185
185
  end
186
+
187
+ describe "using the DSL" do
188
+ it "performs request" do
189
+ FakeWeb.register_uri(:post, %r[.+], body: "")
190
+
191
+ response = Aitch.post do
192
+ url "http://example.org/some/path"
193
+ params a: 1, b: 2
194
+ headers Rendering: "0.1"
195
+ options user: "user", password: "pass"
196
+ end
197
+
198
+ expect(FakeWeb.last_request.path).to eql("/some/path")
199
+ expect(FakeWeb.last_request.method).to eql("POST")
200
+ expect(FakeWeb.last_request.body).to eql("a=1&b=2")
201
+ expect(FakeWeb.last_request["Rendering"]).to eql("0.1")
202
+
203
+ auth = Base64.encode64("user:pass").chomp
204
+ expect(FakeWeb.last_request["Authorization"]).to eql("Basic #{auth}")
205
+ end
206
+ end
186
207
  end
@@ -138,11 +138,11 @@ describe Aitch::Response do
138
138
  expect(response).to be_json
139
139
  end
140
140
 
141
- it "returns data" do
141
+ it "returns json" do
142
142
  FakeWeb.register_uri(:get, "http://example.org/", body: "[1,2,3]", content_type: "application/json")
143
143
  response = Aitch.get("http://example.org/")
144
144
 
145
- expect(response.data).to eql([1,2,3])
145
+ expect(response.json).to eql([1,2,3])
146
146
  end
147
147
  end
148
148
 
@@ -154,11 +154,11 @@ describe Aitch::Response do
154
154
  expect(response).to be_html
155
155
  end
156
156
 
157
- it "returns data" do
157
+ it "returns html" do
158
158
  FakeWeb.register_uri(:get, "http://example.org/", body: "Hello", content_type: "text/html")
159
159
  response = Aitch.get("http://example.org/")
160
160
 
161
- expect(response.data).to be_a(Nokogiri::HTML::Document)
161
+ expect(response.html).to be_a(Nokogiri::HTML::Document)
162
162
  end
163
163
  end
164
164
 
@@ -170,11 +170,11 @@ describe Aitch::Response do
170
170
  expect(response).to be_xml
171
171
  end
172
172
 
173
- it "returns data" do
173
+ it "returns xml" do
174
174
  FakeWeb.register_uri(:get, "http://example.org/", body: "<foo/>", content_type: "application/xml")
175
175
  response = Aitch.get("http://example.org/")
176
176
 
177
- expect(response.data).to be_a(Nokogiri::XML::Document)
177
+ expect(response.xml).to be_a(Nokogiri::XML::Document)
178
178
  end
179
179
  end
180
180
 
@@ -10,4 +10,10 @@ describe Aitch::Utils do
10
10
  expect(Aitch::Utils.underscore("RequestURITooLong")).to eql("request_uri_too_long")
11
11
  end
12
12
  end
13
+
14
+ describe ".symbolize_keys" do
15
+ it "converts keys to symbols" do
16
+ expect(Aitch::Utils.symbolize_keys("a" => 1)).to eql(a: 1)
17
+ end
18
+ end
13
19
  end
metadata CHANGED
@@ -1,158 +1,139 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aitch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Nando Vieira
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-26 00:00:00.000000000 Z
11
+ date: 2013-07-28 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: nokogiri
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 1.6.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: 1.6.0
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: activesupport
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: bundler
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rake
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rspec
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ~>
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
- version: 2.14.0.rc1
75
+ version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ~>
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
- version: 2.14.0.rc1
82
+ version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: pry-meta
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: test_notifier
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '>='
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: fakeweb
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ! '>='
115
+ - - '>='
132
116
  - !ruby/object:Gem::Version
133
117
  version: '0'
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ! '>='
122
+ - - '>='
140
123
  - !ruby/object:Gem::Version
141
124
  version: '0'
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: nokogiri
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - ! '>='
129
+ - - '>='
148
130
  - !ruby/object:Gem::Version
149
131
  version: '0'
150
132
  type: :development
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - ! '>='
136
+ - - '>='
156
137
  - !ruby/object:Gem::Version
157
138
  version: '0'
158
139
  description: A simple HTTP client
@@ -167,12 +148,14 @@ files:
167
148
  - .rspec
168
149
  - .travis.yml
169
150
  - Gemfile
151
+ - Gemfile.lock
170
152
  - LICENSE.txt
171
153
  - README.md
172
154
  - Rakefile
173
155
  - aitch.gemspec
174
156
  - lib/aitch.rb
175
157
  - lib/aitch/configuration.rb
158
+ - lib/aitch/dsl.rb
176
159
  - lib/aitch/errors.rb
177
160
  - lib/aitch/html_parser.rb
178
161
  - lib/aitch/namespace.rb
@@ -187,6 +170,7 @@ files:
187
170
  - lib/aitch/xml_parser.rb
188
171
  - spec/aitch/aitch_spec.rb
189
172
  - spec/aitch/configuration_spec.rb
173
+ - spec/aitch/dsl_spec.rb
190
174
  - spec/aitch/html_parser_spec.rb
191
175
  - spec/aitch/namespace_spec.rb
192
176
  - spec/aitch/request_spec.rb
@@ -199,31 +183,31 @@ files:
199
183
  homepage: http://rubygems.org/gems/aitch
200
184
  licenses:
201
185
  - MIT
186
+ metadata: {}
202
187
  post_install_message:
203
188
  rdoc_options: []
204
189
  require_paths:
205
190
  - lib
206
191
  required_ruby_version: !ruby/object:Gem::Requirement
207
- none: false
208
192
  requirements:
209
- - - ! '>='
193
+ - - '>='
210
194
  - !ruby/object:Gem::Version
211
195
  version: '0'
212
196
  required_rubygems_version: !ruby/object:Gem::Requirement
213
- none: false
214
197
  requirements:
215
- - - ! '>='
198
+ - - '>='
216
199
  - !ruby/object:Gem::Version
217
200
  version: '0'
218
201
  requirements: []
219
202
  rubyforge_project:
220
- rubygems_version: 1.8.23
203
+ rubygems_version: 2.0.3
221
204
  signing_key:
222
- specification_version: 3
205
+ specification_version: 4
223
206
  summary: A simple HTTP client
224
207
  test_files:
225
208
  - spec/aitch/aitch_spec.rb
226
209
  - spec/aitch/configuration_spec.rb
210
+ - spec/aitch/dsl_spec.rb
227
211
  - spec/aitch/html_parser_spec.rb
228
212
  - spec/aitch/namespace_spec.rb
229
213
  - spec/aitch/request_spec.rb