purls 0.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.
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: []