juju 0.0.1
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.
- data/.gitignore +3 -0
- data/README.rdoc +7 -0
- data/Rakefile +2 -0
- data/juju.gemspec +24 -0
- data/lib/juju.rb +57 -0
- metadata +99 -0
data/.gitignore
ADDED
data/README.rdoc
ADDED
data/Rakefile
ADDED
data/juju.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'juju/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "juju"
|
8
|
+
spec.version = Juju::VERSION
|
9
|
+
spec.authors = ["Elena Burachevskaya"]
|
10
|
+
spec.email = ["elena.burachevskaya@startdatelabs.com"]
|
11
|
+
spec.description = %q{Juju search engine API wrapper}
|
12
|
+
spec.summary = %q{Get the jobs feed using Juju API.}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_dependency "rest-client"
|
24
|
+
end
|
data/lib/juju.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'active_support/all'
|
2
|
+
require 'rest-client'
|
3
|
+
|
4
|
+
class Juju
|
5
|
+
URL = "http://api.juju.com/jobs"
|
6
|
+
|
7
|
+
def self.instance
|
8
|
+
@instance ||= Juju.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.search(params)
|
12
|
+
self.instance.search(params)
|
13
|
+
end
|
14
|
+
|
15
|
+
def search(params)
|
16
|
+
check_required params
|
17
|
+
begin
|
18
|
+
response = RestClient.get URL, {:params => params}
|
19
|
+
rescue RestClient::BadRequest
|
20
|
+
raise JujuError, 'Request failed: invalid parameters'
|
21
|
+
end
|
22
|
+
parse_xml response
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
def parse_xml(xml)
|
27
|
+
begin
|
28
|
+
data = Hash.from_xml(xml)['rss']['channel']
|
29
|
+
rescue REXML::ParseException
|
30
|
+
raise JujuError, 'Did not get a valid XML response from Juju'
|
31
|
+
end
|
32
|
+
jobs = data['item'].each {|item| item['link'].squish!}
|
33
|
+
JujuResult.new(jobs, data['totalresults'], data['startindex'], data['itemsperpage'])
|
34
|
+
end
|
35
|
+
|
36
|
+
def check_required(params)
|
37
|
+
raise JujuError.new('Partner ID was not provided') unless params[:partnerid]
|
38
|
+
raise JujuError.new('IP Address was not provided') unless params[:ipaddress]
|
39
|
+
raise JujuError.new('User-Agent was not provided') unless params[:useragent]
|
40
|
+
raise JujuError.new('Required parameters were not provided') unless params[:k] || params[:l] || params[:c]
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
class JujuError < StandardError; end
|
46
|
+
|
47
|
+
class JujuResult < Array
|
48
|
+
attr_accessor :total, :start_index, :per_page
|
49
|
+
|
50
|
+
def initialize(jobs_array, total, start_index, per_page)
|
51
|
+
super(jobs_array)
|
52
|
+
self.total = total.to_i
|
53
|
+
self.start_index = start_index.to_i
|
54
|
+
self.per_page = per_page.to_i
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
metadata
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: juju
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Elena Burachevskaya
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-07-18 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.3'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rest-client
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
description: Juju search engine API wrapper
|
63
|
+
email:
|
64
|
+
- elena.burachevskaya@startdatelabs.com
|
65
|
+
executables: []
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- .gitignore
|
70
|
+
- README.rdoc
|
71
|
+
- Rakefile
|
72
|
+
- juju.gemspec
|
73
|
+
- lib/juju.rb
|
74
|
+
homepage: ''
|
75
|
+
licenses:
|
76
|
+
- MIT
|
77
|
+
post_install_message:
|
78
|
+
rdoc_options: []
|
79
|
+
require_paths:
|
80
|
+
- lib
|
81
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
requirements: []
|
94
|
+
rubyforge_project:
|
95
|
+
rubygems_version: 1.8.25
|
96
|
+
signing_key:
|
97
|
+
specification_version: 3
|
98
|
+
summary: Get the jobs feed using Juju API.
|
99
|
+
test_files: []
|