aitch 0.1.5 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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