purls 0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +6 -0
  3. data/lib/purls/version.rb +3 -0
  4. data/lib/purls.rb +75 -0
  5. metadata +74 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cb868c0739435539aba061ef35c333aa895eb2e7
4
+ data.tar.gz: 82cb87d177e5690a2d748a624eb57f55500cbd0c
5
+ SHA512:
6
+ metadata.gz: 76a0cc4cb617e84148454fba6b4f014bd718ad9966fbbc2142d063cd33848f7a6c47b71c701d6f6f61b9874e5b5d1d8c91a0ff7dc7ca60f945380cdbeda5302e
7
+ data.tar.gz: bb642516149166cbdc6486723525a6fbf17ce3b3b71d3e79285067553a650912815b5fda1590efbf57eff24754468114fe1450196fa4b798aa4e562d00cfd5e3
data/README.md ADDED
@@ -0,0 +1,6 @@
1
+ # Purls ruby client
2
+
3
+ <will add desc later>
4
+ +is-thread-safe
5
+
6
+ Tested on Ruby 2.1.1, JRuby 1.7.11 (latest gear at this time)..
@@ -0,0 +1,3 @@
1
+ class Purls
2
+ VERSION = '0.9'
3
+ end
data/lib/purls.rb ADDED
@@ -0,0 +1,75 @@
1
+ # require 'pry'
2
+ require 'net/http'
3
+ require 'uri'
4
+ require 'cgi'
5
+ require 'openssl'
6
+ require 'msgpack'
7
+
8
+ require 'purls/version'
9
+
10
+ class Purls
11
+ MAXTIME = 45 # timeout in seconds to complete parallel get
12
+
13
+ class ConfigError < StandardError; end
14
+ class SocketError < StandardError; end
15
+ class FetchError < StandardError; end
16
+
17
+ class << self
18
+ attr_accessor :service_uri, :maxtime
19
+
20
+ def instance
21
+ Thread.current[:purls_instance] ||= self.new
22
+ end
23
+
24
+ def get(urls, options={})
25
+ instance.get(urls, options)
26
+ end
27
+ end
28
+
29
+ def initialize
30
+ if self.class.service_uri.nil?
31
+ raise ConfigError.new("You must set Purls.service_uri")
32
+ end
33
+ self.class.service_uri = URI.parse(service_uri) if service_uri.is_a?(String)
34
+ self.class.maxtime ||= MAXTIME # set default timeout
35
+ end
36
+
37
+ def http
38
+ @http ||= Net::HTTP.new(service_uri.host, service_uri.port)
39
+ end
40
+
41
+ def get(urls, options={})
42
+ maxtime = options[:maxtime] || self.class.maxtime
43
+ q = urls.map {|u| "url[]=#{CGI.escape(u)}" rescue nil }.compact.join('&')
44
+ return [] if q.empty?
45
+
46
+ uri = service_uri.dup
47
+ uri.path = '/fetch'
48
+ uri.query = q + "&maxtime=#{maxtime}"
49
+
50
+ obj = nil
51
+ begin
52
+ resp = http.get(uri.to_s, {})
53
+ if resp.header['Content-Type'].index('x-msgpack')
54
+ obj = MessagePack.unpack(resp.body)
55
+ else
56
+ obj = resp.body
57
+ end
58
+ rescue => ex
59
+ raise SocketError.new(ex.inspect)
60
+ end
61
+
62
+ if resp.code.to_i != 200
63
+ raise FetchError.new("Server responded with #{resp.code}")
64
+ end
65
+
66
+ obj
67
+ end
68
+
69
+ private
70
+
71
+ def service_uri
72
+ self.class.service_uri
73
+ end
74
+
75
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: purls
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.9'
5
+ platform: ruby
6
+ authors:
7
+ - Peter Kieltyka
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: msgpack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.5.8
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.5.8
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: "..."
42
+ email:
43
+ - peter@pressly.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - README.md
49
+ - lib/purls.rb
50
+ - lib/purls/version.rb
51
+ homepage: https://github.com/pkieltyka/purls-ruby
52
+ licenses: []
53
+ metadata: {}
54
+ post_install_message:
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 1.3.6
68
+ requirements: []
69
+ rubyforge_project:
70
+ rubygems_version: 2.2.2
71
+ signing_key:
72
+ specification_version: 4
73
+ summary: "..."
74
+ test_files: []