roar 0.12.8 → 0.12.9

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: ffe7c7fce5349dc2287e33430181085877d94bde
4
- data.tar.gz: 2b78879bfa72fcefc3d19ed34004d8962663c94b
3
+ metadata.gz: bcbcc9501060b58047a296ceab9a48a3dd235251
4
+ data.tar.gz: 45ada5410ffee101229c7f07edf8bf33f80e5c45
5
5
  SHA512:
6
- metadata.gz: 3a9463cf35c702806d1f7b2d54271e297b868158e6c1c11d8e0ba2a371ec626b6b70543e6ee3906b2c173a3aa299b368858686d005840139fa3218d46fc70df4
7
- data.tar.gz: f47c71c63a542f9b2be7aadd98005b2db216ae292431e0490303f541725d3e5cb8ad29ddf551d12d04b00f8edfc89249ed2726b8b075a9cb6365fc6c0f4fa0cd
6
+ metadata.gz: 18f9be695ec8707c8bf5591aa669d6dcc38cc65c0b41eba490f54146298d9284eb7be8afd1dffcd6f121f862b230bce1cd14459d224b4f2ac62003122f7a3bca
7
+ data.tar.gz: 2d47ba5c28f74c6cc4952db4a298b90ad618a7b6730cfac6286c43773d1a05284fac56bea603f1b310f7752c1b888a7f5a9de12d08bf5d503e25866e186b530a
data/CHANGES.markdown CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.12.9
2
+
3
+ * Very last release in 0.12. Adding support for SSL certs.
4
+
1
5
  # 0.12.8
2
6
 
3
7
  * Last release to support representable < 2.0.
data/lib/roar.rb CHANGED
@@ -1,3 +1,6 @@
1
+
1
2
  module Roar
2
- # Your code goes here...
3
+ def self.root
4
+ File.expand_path '../..', __FILE__
5
+ end
3
6
  end
@@ -1,5 +1,4 @@
1
- require "net/http"
2
- require "uri"
1
+ require 'roar/representer/transport/net_http/request'
3
2
 
4
3
  module Roar
5
4
  module Representer
@@ -10,63 +9,6 @@ module Roar
10
9
  #
11
10
  # The following options are available:
12
11
  class NetHTTP
13
- class Request # TODO: implement me.
14
- def initialize(options)
15
- @uri = parse_uri(options[:uri]) # TODO: add :uri.
16
- @as = options[:as]
17
- @body = options[:body]
18
- @options = options
19
-
20
- @http = Net::HTTP.new(uri.host, uri.port)
21
- end
22
-
23
- def call(what)
24
- @req = what.new(uri.request_uri)
25
-
26
- # if options[:ssl]
27
- # uri.port = Net::HTTP.https_default_port()
28
- # end
29
- https!
30
- basic_auth!
31
-
32
- req.content_type = as
33
- req["accept"] = as # TODO: test me. # DISCUSS: if Accept is not set, rails treats this request as as "text/html".
34
- req.body = body if body
35
-
36
- yield req if block_given?
37
-
38
- http.request(req).tap do |res|
39
- raise UnauthorizedError if res.is_a?(Net::HTTPUnauthorized) # FIXME: make this better. # DISCUSS: abstract all that crap here?
40
- end
41
- end
42
-
43
- def get
44
- call(Net::HTTP::Get)
45
- end
46
-
47
- private
48
- attr_reader :uri, :as, :body, :options, :req, :http
49
-
50
- def parse_uri(url)
51
- uri = URI(url)
52
- raise "Incorrect URL `#{url}`. Maybe you forgot http://?" if uri.instance_of?(URI::Generic)
53
- uri
54
- end
55
-
56
- def https!
57
- return unless uri.scheme == 'https'
58
-
59
- @http.use_ssl = true
60
- @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
61
- end
62
-
63
- def basic_auth!
64
- return unless options[:basic_auth]
65
-
66
- @req.basic_auth(*options[:basic_auth])
67
- end
68
- end
69
-
70
12
 
71
13
  def get_uri(*options, &block)
72
14
  call(Net::HTTP::Get, *options, &block)
@@ -0,0 +1,75 @@
1
+ require "net/http"
2
+ require "uri"
3
+ require "openssl"
4
+
5
+ module Roar
6
+ module Representer
7
+ module Transport
8
+ class NetHTTP
9
+ class Request # TODO: implement me.
10
+ def initialize(options)
11
+ @uri = parse_uri(options[:uri]) # TODO: add :uri.
12
+ @as = options[:as]
13
+ @body = options[:body]
14
+ @options = options
15
+
16
+ @http = Net::HTTP.new(uri.host, uri.port)
17
+ unless options[:pem_file].nil?
18
+ pem = File.read(options[:pem_file])
19
+ @http.use_ssl = true
20
+ @http.cert = OpenSSL::X509::Certificate.new(pem)
21
+ @http.key = OpenSSL::PKey::RSA.new(pem)
22
+ @http.verify_mode = options[:ssl_verify_mode].nil? ? OpenSSL::SSL::VERIFY_PEER : options[:ssl_verify_mode]
23
+ end
24
+ end
25
+
26
+ def call(what)
27
+ @req = what.new(uri.request_uri)
28
+
29
+ # if options[:ssl]
30
+ # uri.port = Net::HTTP.https_default_port()
31
+ # end
32
+ https!
33
+ basic_auth!
34
+
35
+ req.content_type = as
36
+ req["accept"] = as # TODO: test me. # DISCUSS: if Accept is not set, rails treats this request as as "text/html".
37
+ req.body = body if body
38
+
39
+ yield req if block_given?
40
+
41
+ http.request(req).tap do |res|
42
+ raise UnauthorizedError if res.is_a?(Net::HTTPUnauthorized) # FIXME: make this better. # DISCUSS: abstract all that crap here?
43
+ end
44
+ end
45
+
46
+ def get
47
+ call(Net::HTTP::Get)
48
+ end
49
+
50
+ private
51
+ attr_reader :uri, :as, :body, :options, :req, :http
52
+
53
+ def parse_uri(url)
54
+ uri = URI(url)
55
+ raise "Incorrect URL `#{url}`. Maybe you forgot http://?" if uri.instance_of?(URI::Generic)
56
+ uri
57
+ end
58
+
59
+ def https!
60
+ return unless uri.scheme == 'https'
61
+
62
+ @http.use_ssl = true
63
+ @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
64
+ end
65
+
66
+ def basic_auth!
67
+ return unless options[:basic_auth]
68
+
69
+ @req.basic_auth(*options[:basic_auth])
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
data/lib/roar/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Roar
2
- VERSION = "0.12.8"
2
+ VERSION = "0.12.9"
3
3
  end
@@ -0,0 +1,31 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIICcTCCAdqgAwIBAgIJAMvA30EY1rKtMA0GCSqGSIb3DQEBBQUAMDAxCzAJBgNV
3
+ BAYTAlVTMQ0wCwYDVQQKEwRLZWFzMRIwEAYDVQQDEwlsb2NhbGhvc3QwHhcNMDgw
4
+ OTA0MTU1MTU5WhcNMTgwOTAyMTU1MTU5WjAwMQswCQYDVQQGEwJVUzENMAsGA1UE
5
+ ChMES2VhczESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GN
6
+ ADCBiQKBgQDK17rB/KVaK8MVjiEkvA4ZncOOIC3nStZ/erXM+qwkghPM4Tfr2FTU
7
+ iTgwwdLdu/ht74oWnppttfaTQ+sVz2rFXnPgfqKTGoJTwWFiuNuZhSRDVssGVnL/
8
+ RatZW6wns8UNf+W4hUe6/vGQP6obNTe2T4R+t2hXP51OkOy4BMcq0QIDAQABo4GS
9
+ MIGPMB0GA1UdDgQWBBQDIsX7HoSqbxKrCawi64MkXRmtmzBgBgNVHSMEWTBXgBQD
10
+ IsX7HoSqbxKrCawi64MkXRmtm6E0pDIwMDELMAkGA1UEBhMCVVMxDTALBgNVBAoT
11
+ BEtlYXMxEjAQBgNVBAMTCWxvY2FsaG9zdIIJAMvA30EY1rKtMAwGA1UdEwQFMAMB
12
+ Af8wDQYJKoZIhvcNAQEFBQADgYEAW5UBM7EIMpARzQwpQ8N1gyTR/VqJ9fSm4MIw
13
+ Y5m90HRgsDcXVbhn0rRfcC8o4EtGDvCjqsFYXy/ImF9tjEiuaysxbqepl+XMszPE
14
+ 1kO50quWsV1FLSdcJX6t/ofJYOxiQkqPvg9t/ovTnEZ+w4NfPo+0MJgudjJoD2+w
15
+ 5UTsKtU=
16
+ -----END CERTIFICATE-----
17
+ -----BEGIN RSA PRIVATE KEY-----
18
+ MIICXQIBAAKBgQDK17rB/KVaK8MVjiEkvA4ZncOOIC3nStZ/erXM+qwkghPM4Tfr
19
+ 2FTUiTgwwdLdu/ht74oWnppttfaTQ+sVz2rFXnPgfqKTGoJTwWFiuNuZhSRDVssG
20
+ VnL/RatZW6wns8UNf+W4hUe6/vGQP6obNTe2T4R+t2hXP51OkOy4BMcq0QIDAQAB
21
+ AoGAHcDJDx1M784NfoLrj6TZ+J3wik9kDFIo5mgMdLWsPGqsFthOSJTh1I8QI+66
22
+ THX++bkyKyE2i7MuKOnEeN2Ezo2jAThF7XoWhm6/+pSXhSqmL1jKr/1CZRaR9jv0
23
+ cCVJc3mTuAGH+yFVeGpWNvDaCmOUlD5M48xTROJXteDQ0TECQQDuDM9pmQdqkGIp
24
+ dvbIviS8donYn0kJ0TKS14pMtb/C63lcld513rHS43ru3FRY9baR/q5vV9vW5RhH
25
+ S7w4cYvVAkEA2iNLsFEAkY88oZJYbdyybeKxZdReyes1/zPe4RYzRdbDHRNAa+zk
26
+ mZIZDI820E0Y+DeoT+q3nXkXiiOS/iRNDQJBAKdAvOH2sO1AcJetjArS/cCkkIlw
27
+ sMKDB0OAyRzIfekXxPc2HU03oD0Jsy/sAh9W1GWTST/VvRIpeHtvTNljfdkCQF5T
28
+ UuBcNoW6zXoEYU6oV1Oi6hjhW1eu6PuAv4jPY754XoiNEZdZqYQqo8BFkWtDW1/C
29
+ GXrtQRbMDPzD40UYB2UCQQCmJpJp+u2lHj7zuZikHIHQBNyXyoGnzgNs6XUj1Bs6
30
+ Y4vjue8w6RkRLZ1YGP+xqsngVqb9IRygyLDpEgwEnOT4
31
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,64 @@
1
+ require 'test_helper'
2
+ require 'roar/representer/transport/net_http/request'
3
+
4
+ class NetHTTPTransportRequestTest < MiniTest::Spec
5
+
6
+ describe Roar::Representer::Transport::NetHTTP::Request do
7
+
8
+ describe "instance methods" do
9
+ describe "#initialize" do
10
+
11
+ describe "client certificate configuration" do
12
+
13
+ let(:uri) { URI.parse("http://www.bbc.co.uk") }
14
+ let(:options) { { uri: uri, pem_file: pem_file, ssl_verify_mode: ssl_verify_mode } }
15
+
16
+ let(:request) { Roar::Representer::Transport::NetHTTP::Request.new(options) }
17
+ let(:net_http_instance) { request.instance_variable_get(:@http) }
18
+ let(:ssl_verify_mode) { nil }
19
+
20
+ describe "when a pem file has been provided with the request options" do
21
+
22
+ let(:pem_file) { File.expand_path("test/fixtures/sample.pem", Roar.root) }
23
+
24
+ let(:pem) { File.read(pem_file) }
25
+ let(:cert) { OpenSSL::X509::Certificate.new(pem) }
26
+ let(:key) { OpenSSL::PKey::RSA.new(pem) }
27
+
28
+ it "sets the client to use an ssl connection" do
29
+ assert(net_http_instance.use_ssl?, "Net::HTTP connection uses ssl")
30
+ end
31
+
32
+ it "sets the client cert" do
33
+ assert_equal(net_http_instance.cert.to_s, cert.to_s)
34
+ end
35
+ it "sets the client key" do
36
+ assert_equal(net_http_instance.key.to_s, key.to_s)
37
+ end
38
+ it "defaults the verify mode to OpenSSL::SSL::VERIFY_PEER when no option provided" do
39
+ assert_equal(net_http_instance.verify_mode, OpenSSL::SSL::VERIFY_PEER)
40
+ end
41
+
42
+ describe "verify mode is specified" do
43
+
44
+ let(:ssl_verify_mode) { OpenSSL::SSL::VERIFY_NONE }
45
+
46
+ it "sets the client verify mode to that option provided" do
47
+ assert_equal(net_http_instance.verify_mode, ssl_verify_mode)
48
+ end
49
+ end
50
+ end
51
+
52
+ describe "when a pem file has not been provided in the request options" do
53
+
54
+ let(:pem_file) { nil }
55
+
56
+ it "does not set the client to use an ssl connection" do
57
+ refute(net_http_instance.use_ssl?, "Net::HTTP connection do not use SSL")
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.8
4
+ version: 0.12.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-30 00:00:00.000000000 Z
11
+ date: 2014-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: representable
@@ -160,6 +160,7 @@ files:
160
160
  - lib/roar/representer/json/hal.rb
161
161
  - lib/roar/representer/transport/faraday.rb
162
162
  - lib/roar/representer/transport/net_http.rb
163
+ - lib/roar/representer/transport/net_http/request.rb
163
164
  - lib/roar/representer/xml.rb
164
165
  - lib/roar/version.rb
165
166
  - roar.gemspec
@@ -168,6 +169,7 @@ files:
168
169
  - test/collection_json_test.rb
169
170
  - test/decorator_test.rb
170
171
  - test/faraday_http_transport_test.rb
172
+ - test/fixtures/sample.pem
171
173
  - test/hal_json_test.rb
172
174
  - test/hal_links_test.rb
173
175
  - test/http_verbs_test.rb
@@ -179,6 +181,7 @@ files:
179
181
  - test/integration/server.rb
180
182
  - test/integration/ssl_server.rb
181
183
  - test/json_representer_test.rb
184
+ - test/lib/roar/representer/transport/net_http/request_test.rb
182
185
  - test/net_http_transport_test.rb
183
186
  - test/representer_test.rb
184
187
  - test/test_helper.rb
@@ -203,29 +206,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
206
  version: '0'
204
207
  requirements: []
205
208
  rubyforge_project:
206
- rubygems_version: 2.2.1
209
+ rubygems_version: 2.2.2
207
210
  signing_key:
208
211
  specification_version: 4
209
212
  summary: Resource-oriented architectures in Ruby.
210
- test_files:
211
- - test/client_test.rb
212
- - test/coercion_feature_test.rb
213
- - test/collection_json_test.rb
214
- - test/decorator_test.rb
215
- - test/faraday_http_transport_test.rb
216
- - test/hal_json_test.rb
217
- - test/hal_links_test.rb
218
- - test/http_verbs_test.rb
219
- - test/hypermedia_feature_test.rb
220
- - test/hypermedia_test.rb
221
- - test/integration/Gemfile
222
- - test/integration/band_representer.rb
223
- - test/integration/runner.rb
224
- - test/integration/server.rb
225
- - test/integration/ssl_server.rb
226
- - test/json_representer_test.rb
227
- - test/net_http_transport_test.rb
228
- - test/representer_test.rb
229
- - test/test_helper.rb
230
- - test/xml_representer_test.rb
231
- has_rdoc:
213
+ test_files: []