ruby-rapleaf 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/Manifest.txt +10 -0
- data/README.txt +131 -0
- data/Rakefile +28 -0
- data/examples/person.rb +65 -0
- data/lib/rapleaf/exceptions.rb +61 -0
- data/lib/rapleaf/rapleaf.rb +52 -0
- data/lib/rapleaf/responses.rb +142 -0
- data/lib/ruby-rapleaf.rb +23 -0
- data/ruby-rapleaf.gemspec +38 -0
- metadata +95 -0
data/History.txt
ADDED
data/Manifest.txt
ADDED
data/README.txt
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
= ruby-rapleaf
|
2
|
+
|
3
|
+
* http://github.com/grempe/ruby-rapleaf
|
4
|
+
|
5
|
+
== DESCRIPTION:
|
6
|
+
|
7
|
+
Rapleaf's goal is to make the internet safe and transparent, by allowing you
|
8
|
+
to evaluate your web footprint across a variety of user-generated sites.
|
9
|
+
See http://www.rapleaf.com for more information.
|
10
|
+
|
11
|
+
== FEATURES/PROBLEMS:
|
12
|
+
|
13
|
+
This library was inspired by the sample code provided by Rapleaf at:
|
14
|
+
|
15
|
+
http://trac.rapleaf.com/ruby-api-kit/wiki
|
16
|
+
|
17
|
+
The code was extensively re-written so it would work with the current
|
18
|
+
Rapleaf v2 API and is provided for your use. Sorry that no support
|
19
|
+
for this library is currently available. However, Git pull requests/patches
|
20
|
+
are accepted.
|
21
|
+
|
22
|
+
http://github.com/grempe/ruby-rapleaf
|
23
|
+
|
24
|
+
Glenn Rempe
|
25
|
+
glenn@rempe.us
|
26
|
+
|
27
|
+
== SYNOPSIS:
|
28
|
+
|
29
|
+
In order to use this API, you will need to get an API Key from Rapleaf. These
|
30
|
+
can be obtained free at http://www.rapleaf.com/.
|
31
|
+
|
32
|
+
To run the samples you will need to put your API Key in the
|
33
|
+
examples/person.rb file or the examples will fail.
|
34
|
+
|
35
|
+
To run any of the examples, simply run it like:
|
36
|
+
|
37
|
+
cd examples
|
38
|
+
ruby person.rb
|
39
|
+
|
40
|
+
== REQUIREMENTS:
|
41
|
+
|
42
|
+
The following gems are required for installation of the ruby-rapleaf gem.
|
43
|
+
|
44
|
+
* xml-simple
|
45
|
+
* builder
|
46
|
+
|
47
|
+
== INSTALL:
|
48
|
+
|
49
|
+
Install as a Ruby Gem with:
|
50
|
+
|
51
|
+
Update to RubyGems 1.2.0 before proceeding!!
|
52
|
+
|
53
|
+
gem sources -a http://gems.github.com (you only have to do this once)
|
54
|
+
|
55
|
+
sudo gem install grempe-ruby-rapleaf
|
56
|
+
|
57
|
+
# OR
|
58
|
+
|
59
|
+
git clone git://github.com/grempe/ruby-rapleaf.git
|
60
|
+
cd ruby-rapleaf
|
61
|
+
rake gem
|
62
|
+
rake install_gem
|
63
|
+
|
64
|
+
== LICENSE:
|
65
|
+
|
66
|
+
This software is distributed under the Ruby License. A copy of which is
|
67
|
+
provided below.
|
68
|
+
|
69
|
+
RUBY LICENSE
|
70
|
+
|
71
|
+
Copyright (c) 2008 Glenn Rempe
|
72
|
+
|
73
|
+
http://www.ruby-lang.org/en/LICENSE.txt
|
74
|
+
|
75
|
+
Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.co.jp>.
|
76
|
+
You can redistribute it and/or modify it under either the terms of the GPL
|
77
|
+
(see COPYING.txt file), or the conditions below:
|
78
|
+
|
79
|
+
1. You may make and give away verbatim copies of the source form of the
|
80
|
+
software without restriction, provided that you duplicate all of the
|
81
|
+
original copyright notices and associated disclaimers.
|
82
|
+
|
83
|
+
2. You may modify your copy of the software in any way, provided that
|
84
|
+
you do at least ONE of the following:
|
85
|
+
|
86
|
+
a) place your modifications in the Public Domain or otherwise
|
87
|
+
make them Freely Available, such as by posting said
|
88
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
89
|
+
the author to include your modifications in the software.
|
90
|
+
|
91
|
+
b) use the modified software only within your corporation or
|
92
|
+
organization.
|
93
|
+
|
94
|
+
c) rename any non-standard executables so the names do not conflict
|
95
|
+
with standard executables, which must also be provided.
|
96
|
+
|
97
|
+
d) make other distribution arrangements with the author.
|
98
|
+
|
99
|
+
3. You may distribute the software in object code or executable
|
100
|
+
form, provided that you do at least ONE of the following:
|
101
|
+
|
102
|
+
a) distribute the executables and library files of the software,
|
103
|
+
together with instructions (in the manual page or equivalent)
|
104
|
+
on where to get the original distribution.
|
105
|
+
|
106
|
+
b) accompany the distribution with the machine-readable source of
|
107
|
+
the software.
|
108
|
+
|
109
|
+
c) give non-standard executables non-standard names, with
|
110
|
+
instructions on where to get the original software distribution.
|
111
|
+
|
112
|
+
d) make other distribution arrangements with the author.
|
113
|
+
|
114
|
+
4. You may modify and include the part of the software into any other
|
115
|
+
software (possibly commercial). But some files in the distribution
|
116
|
+
are not written by the author, so that they are not under this terms.
|
117
|
+
|
118
|
+
They are gc.c(partly), utils.c(partly), regex.[ch], st.[ch] and some
|
119
|
+
files under the ./missing directory. See each file for the copying
|
120
|
+
condition.
|
121
|
+
|
122
|
+
5. The scripts and library files supplied as input to or produced as
|
123
|
+
output from the software do not automatically fall under the
|
124
|
+
copyright of the software, but belong to whomever generated them,
|
125
|
+
and may be sold commercially, and may be aggregated with this
|
126
|
+
software.
|
127
|
+
|
128
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
129
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
130
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
131
|
+
PURPOSE.
|
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
require './lib/ruby-rapleaf.rb'
|
6
|
+
|
7
|
+
Hoe.new('ruby-rapleaf', Rapleaf::VERSION) do |p|
|
8
|
+
p.rubyforge_name = 'ruby-rapleaf' # if different than lowercase project name
|
9
|
+
p.developer('Glenn Rempe', 'glenn@rempe.us')
|
10
|
+
p.extra_deps = [['xml-simple', '>= 1.0.11'], ['builder', '>= 2.1.2']]
|
11
|
+
end
|
12
|
+
|
13
|
+
namespace :manifest do
|
14
|
+
desc 'Recreate Manifest.txt to include ALL files'
|
15
|
+
task :refresh do
|
16
|
+
`rake check_manifest | patch -p0 > Manifest.txt`
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
namespace :gemspec do
|
21
|
+
desc 'Refresh the gemspec file'
|
22
|
+
task :refresh do
|
23
|
+
`rake debug_gem > ruby-rapleaf.gemspec`
|
24
|
+
# remove the first line from the file which is an artifact of the gemspec generation
|
25
|
+
`perl -pi -e '$_ = "" if ($. == 1);' ruby-rapleaf.gemspec`
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
data/examples/person.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require File.dirname(__FILE__) + '/../lib/ruby-rapleaf'
|
3
|
+
|
4
|
+
# Instanciate a Rapleaf object with your API Key.
|
5
|
+
@rapleaf = Rapleaf::Base.new('REPLACE_WITH_YOUR_API_KEY')
|
6
|
+
|
7
|
+
@person = @rapleaf.person(:email => 'dummy@rapleaf.com')
|
8
|
+
|
9
|
+
puts "\n\n"
|
10
|
+
puts "BASICS"
|
11
|
+
|
12
|
+
puts "\n@person.basics.name:"
|
13
|
+
puts @person.basics.name
|
14
|
+
|
15
|
+
puts "\n@person.basics.age:"
|
16
|
+
puts @person.basics.age
|
17
|
+
|
18
|
+
puts "\n@person.basics.gender:"
|
19
|
+
puts @person.basics.gender
|
20
|
+
|
21
|
+
puts "\n@person.basics.location:"
|
22
|
+
puts @person.basics.location
|
23
|
+
|
24
|
+
puts "\n@person.basics.occupations:"
|
25
|
+
if @person.basics.occupations
|
26
|
+
@person.basics.occupations.each do |occupation|
|
27
|
+
puts "occupation.job_title"
|
28
|
+
puts occupation.job_title
|
29
|
+
puts "occupation.company"
|
30
|
+
puts occupation.company
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
puts "\n@person.basics.universities:"
|
35
|
+
if @person.basics.universities
|
36
|
+
@person.basics.universities.each do |university|
|
37
|
+
puts "university:"
|
38
|
+
puts university
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
puts "\n@person.basics.earliest_known_activity:"
|
43
|
+
puts @person.basics.earliest_known_activity
|
44
|
+
|
45
|
+
puts "\n@person.basics.latest_known_activity:"
|
46
|
+
puts @person.basics.latest_known_activity
|
47
|
+
|
48
|
+
puts "\n@person.basics.num_friends:"
|
49
|
+
puts @person.basics.num_friends
|
50
|
+
|
51
|
+
puts "\nMEMBERSHIPS"
|
52
|
+
|
53
|
+
puts "\n@person.memberships.inspect"
|
54
|
+
puts @person.memberships.inspect
|
55
|
+
|
56
|
+
puts "\n@person.memberships.primary.inspect"
|
57
|
+
puts @person.memberships.primary.inspect
|
58
|
+
|
59
|
+
puts "\n@person.memberships.primary.membership[0].site"
|
60
|
+
puts @person.memberships.primary.membership[0].site
|
61
|
+
|
62
|
+
# Look up a profile by hashed email address.
|
63
|
+
puts "\nLookup by hashed email:"
|
64
|
+
@person = @rapleaf.person(:email => '1147e414eec8b785fb760f13f7890a767ffaef6e')
|
65
|
+
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Rapleaf
|
2
|
+
|
3
|
+
# CLIENT SIDE ERRORS
|
4
|
+
|
5
|
+
# All of our errors are superclassed by Error < RuntimeError
|
6
|
+
class Error < RuntimeError #:nodoc:
|
7
|
+
end
|
8
|
+
|
9
|
+
# A client side only argument error
|
10
|
+
class ArgumentError < Error #:nodoc:
|
11
|
+
end
|
12
|
+
|
13
|
+
# SERVER SIDE ERRORS
|
14
|
+
|
15
|
+
# GENERAL API
|
16
|
+
# =============================================
|
17
|
+
|
18
|
+
# 401 Unauthorized
|
19
|
+
# API key was not provided or is invalid.
|
20
|
+
class AuthFailure < Error #:nodoc:
|
21
|
+
end
|
22
|
+
|
23
|
+
# 403 Forbidden
|
24
|
+
# Your query limit has been exceeded.
|
25
|
+
class ForbiddenQueryLimitExceeded < Error #:nodoc:
|
26
|
+
end
|
27
|
+
|
28
|
+
# 500 Internal Server Error
|
29
|
+
# There was an unexpected error on our server. This should be very
|
30
|
+
# rare and if you see it please contact developer@rapleaf.com.
|
31
|
+
class InternalServerError < Error #:nodoc:
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
# PERSON API
|
36
|
+
# =============================================
|
37
|
+
|
38
|
+
# 202 Accepted
|
39
|
+
# This person is currently being searched. Check back shortly and we should have data.
|
40
|
+
class PersonAccepted < Error #:nodoc:
|
41
|
+
end
|
42
|
+
|
43
|
+
# 400 Bad Request
|
44
|
+
# Invalid email address.
|
45
|
+
class PersonBadRequestInvalidEmail < Error #:nodoc:
|
46
|
+
end
|
47
|
+
|
48
|
+
# 404 Not Found
|
49
|
+
# Only returned for lookup by hash. We do not have this email in our
|
50
|
+
# system and are not able to create a person using a hash. If you would
|
51
|
+
# like better results, consider supplying the unhashed email address.
|
52
|
+
class PersonEmailHashNotFound < Error #:nodoc:
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
# ABOOK API
|
57
|
+
# =============================================
|
58
|
+
|
59
|
+
# TODO
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Rapleaf
|
2
|
+
|
3
|
+
class Base
|
4
|
+
|
5
|
+
def initialize(api_key, options = {})
|
6
|
+
options = {
|
7
|
+
:api_host => API_HOST,
|
8
|
+
:api_port => API_PORT,
|
9
|
+
:api_version => API_VERSION
|
10
|
+
}.merge(options)
|
11
|
+
|
12
|
+
@api_key = api_key
|
13
|
+
@host = options[:api_host]
|
14
|
+
@port = options[:api_port]
|
15
|
+
@version = options[:api_version]
|
16
|
+
end
|
17
|
+
|
18
|
+
# This resource is used to retrieve information about a person, identified
|
19
|
+
# using an email address or email address hash.
|
20
|
+
# Example: person(:email => 'dummy@rapleaf.com')
|
21
|
+
def person( opts = {} )
|
22
|
+
|
23
|
+
raise ArgumentError, 'Email address must be provided' if opts[:email].nil? || opts[:email] == ''
|
24
|
+
|
25
|
+
url = "http://#{@host}:#{@port}/#{@version}/person/#{opts[:email]}?api_key=#{@api_key}"
|
26
|
+
resp = Net::HTTP.get_response(URI.parse(url))
|
27
|
+
|
28
|
+
case resp.code
|
29
|
+
when '200'
|
30
|
+
return Response.parse(:xml => resp.body)
|
31
|
+
when '202'
|
32
|
+
raise PersonAccepted, 'This person is currently being searched. Check back shortly and we should have data.'
|
33
|
+
when '400'
|
34
|
+
raise PersonBadRequestInvalidEmail, 'Invalid email address.'
|
35
|
+
when '401'
|
36
|
+
raise AuthFailure, 'API key was not provided or is invalid.'
|
37
|
+
when '403'
|
38
|
+
raise ForbiddenQueryLimitExceeded, 'Your query limit has been exceeded. Contact developer@rapleaf.com if you would like to increase your limit.'
|
39
|
+
when '500'
|
40
|
+
raise InternalServerError, 'There was an unexpected error on our server. This should be very rare and if you see it please contact developer@rapleaf.com.'
|
41
|
+
else
|
42
|
+
raise Error, 'Unknown error'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def abook( opts = {} )
|
47
|
+
# TODO
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
module Rapleaf
|
2
|
+
|
3
|
+
# Credits :
|
4
|
+
# I learned the magic of making an OpenStruct object able to respond as a fully Enumerable
|
5
|
+
# object (responds to .each, etc.) thanks to a great blog article on Struct and OpenStruct
|
6
|
+
# at http://errtheblog.com/post/30
|
7
|
+
#
|
8
|
+
# Thanks to Sean Knapp for the XmlSimple response patch which greatly simplified the response
|
9
|
+
# mechanism for the whole library while making it more accurate and much less brittle to boot!
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'rubygems'
|
13
|
+
begin
|
14
|
+
require 'xmlsimple' unless defined? XmlSimple
|
15
|
+
rescue Exception => e
|
16
|
+
require 'xml-simple' unless defined? XmlSimple
|
17
|
+
end
|
18
|
+
|
19
|
+
class Response < OpenStruct
|
20
|
+
|
21
|
+
include Enumerable
|
22
|
+
|
23
|
+
def self.parse(options = {})
|
24
|
+
options = {
|
25
|
+
:xml => "",
|
26
|
+
:parse_options => { 'ForceArray' => ['item'], 'SuppressEmpty' => nil }
|
27
|
+
}.merge(options)
|
28
|
+
response = Response.new(XmlSimple.xml_in(options[:xml], options[:parse_options]))
|
29
|
+
|
30
|
+
# set the xml attribute of the response object to contain the original XML that was
|
31
|
+
# returned. This allows anyone to bypass our parsing if desired and just
|
32
|
+
# get right at the raw XML response.
|
33
|
+
response.xml = options[:xml]
|
34
|
+
return response
|
35
|
+
end
|
36
|
+
|
37
|
+
# Every member of an OpenStruct object has getters and setters, the latter of which
|
38
|
+
# has a method ending in "=". Find all of these methods, excluding those defined on
|
39
|
+
# parent classes.
|
40
|
+
def members
|
41
|
+
methods(false).sort.grep(/=/).map { |m| m[0...-1] }
|
42
|
+
end
|
43
|
+
|
44
|
+
# Required by the Enumerable module. Iterate over each item in the members array
|
45
|
+
# and pass as a value the block passed to each using yield.
|
46
|
+
def each
|
47
|
+
members.each do |method|
|
48
|
+
yield send(method)
|
49
|
+
end
|
50
|
+
self
|
51
|
+
end
|
52
|
+
|
53
|
+
# Same as the each method, but with both key and value.
|
54
|
+
#
|
55
|
+
#Sample Use:
|
56
|
+
# obj.each_pair { |k,v| puts "key: #{k}, value: #{v}" }
|
57
|
+
def each_pair
|
58
|
+
members.each do |method|
|
59
|
+
yield method, send(method)
|
60
|
+
end
|
61
|
+
self
|
62
|
+
end
|
63
|
+
|
64
|
+
# Alternative method for getting members.
|
65
|
+
def [](member)
|
66
|
+
send(member)
|
67
|
+
end
|
68
|
+
|
69
|
+
# Alternative method for setting members.
|
70
|
+
def []=(member, value)
|
71
|
+
send("#{member}=", value)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Helper for converting to string which support a long and short version
|
75
|
+
# to avoid recursion problems with parents.
|
76
|
+
def to_string(short=false)
|
77
|
+
s = "#<#{self.class}:0x#{(2 ** 32 + object_id).to_s(16).upcase}"
|
78
|
+
if (short)
|
79
|
+
s += " ..."
|
80
|
+
else
|
81
|
+
each_pair { |k,v|
|
82
|
+
if (v == self.parent && v.kind_of?(Response))
|
83
|
+
v = v.to_string(true)
|
84
|
+
elsif (v.kind_of?(String))
|
85
|
+
v = "\"#{v.gsub("\"", "\\\"")}\""
|
86
|
+
elsif (v.kind_of?(NilClass))
|
87
|
+
v = "nil"
|
88
|
+
end
|
89
|
+
s += " #{k}=#{v}"
|
90
|
+
}
|
91
|
+
end
|
92
|
+
s += ">"
|
93
|
+
return s
|
94
|
+
end
|
95
|
+
|
96
|
+
# Override of to string method.
|
97
|
+
def to_s
|
98
|
+
return to_string
|
99
|
+
end
|
100
|
+
|
101
|
+
private
|
102
|
+
|
103
|
+
# Initialize the object by passing data to the OpenStruct initialize method
|
104
|
+
# and then converting ourself to guarantee we have top-to-bottom data
|
105
|
+
# representation as a Response object.
|
106
|
+
def initialize(data, parent=nil)
|
107
|
+
super(data)
|
108
|
+
self.parent = parent
|
109
|
+
Response.convert(self, parent)
|
110
|
+
end
|
111
|
+
|
112
|
+
# The "brains" of our Response class. This method takes an arbitray object and
|
113
|
+
# depending on its class attempts to convert it.
|
114
|
+
def self.convert(obj, parent)
|
115
|
+
if (obj.kind_of?(Response))
|
116
|
+
# Recursively convert the object.
|
117
|
+
obj.each_pair { |k,v|
|
118
|
+
if (v != obj.parent)
|
119
|
+
obj[k] = convert(v, obj)
|
120
|
+
end
|
121
|
+
}
|
122
|
+
return obj
|
123
|
+
elsif (obj.kind_of?(Hash))
|
124
|
+
# Hashes make good Responses already thanks to OpenStruct.
|
125
|
+
return Response.new(obj, parent)
|
126
|
+
elsif (obj.kind_of?(Array))
|
127
|
+
# With arrays, make sure each element is appropriately converted.
|
128
|
+
new_arr = []
|
129
|
+
obj.each { |elem|
|
130
|
+
new_arr << convert(elem, parent)
|
131
|
+
}
|
132
|
+
return new_arr
|
133
|
+
else
|
134
|
+
# At this point we're out of ideas, so let's hope it is a string.
|
135
|
+
return obj
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
end # class Response < OpenStruct
|
140
|
+
|
141
|
+
end # module
|
142
|
+
|
data/lib/ruby-rapleaf.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'cgi'
|
3
|
+
require 'openssl'
|
4
|
+
require 'digest/sha1'
|
5
|
+
require 'net/http'
|
6
|
+
require 'builder'
|
7
|
+
require 'ostruct'
|
8
|
+
|
9
|
+
require 'rapleaf/rapleaf.rb'
|
10
|
+
require 'rapleaf/exceptions.rb'
|
11
|
+
require 'rapleaf/responses.rb'
|
12
|
+
|
13
|
+
module Rapleaf
|
14
|
+
|
15
|
+
VERSION = '0.1.5'
|
16
|
+
|
17
|
+
# API Constants
|
18
|
+
API_HOST = 'api.rapleaf.com'
|
19
|
+
API_PORT = 80
|
20
|
+
API_VERSION = 'v2'
|
21
|
+
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = %q{ruby-rapleaf}
|
3
|
+
s.version = "0.1.5"
|
4
|
+
|
5
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
|
+
s.authors = ["Glenn Rempe"]
|
7
|
+
s.date = %q{2008-08-27}
|
8
|
+
s.description = %q{Rapleaf's goal is to make the internet safe and transparent, by allowing you to evaluate your web footprint across a variety of user-generated sites. See http://www.rapleaf.com for more information.}
|
9
|
+
s.email = ["glenn@rempe.us"]
|
10
|
+
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
|
11
|
+
s.files = ["History.txt", "Manifest.txt", "README.txt", "Rakefile", "examples/person.rb", "lib/ruby-rapleaf.rb", "lib/rapleaf/exceptions.rb", "lib/rapleaf/rapleaf.rb", "lib/rapleaf/responses.rb", "ruby-rapleaf.gemspec"]
|
12
|
+
s.has_rdoc = true
|
13
|
+
s.homepage = %q{http://github.com/grempe/ruby-rapleaf}
|
14
|
+
s.rdoc_options = ["--main", "README.txt"]
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
s.rubyforge_project = %q{ruby-rapleaf}
|
17
|
+
s.rubygems_version = %q{1.2.0}
|
18
|
+
s.summary = %q{Rapleaf's goal is to make the internet safe and transparent, by allowing you to evaluate your web footprint across a variety of user-generated sites}
|
19
|
+
|
20
|
+
if s.respond_to? :specification_version then
|
21
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
22
|
+
s.specification_version = 2
|
23
|
+
|
24
|
+
if current_version >= 3 then
|
25
|
+
s.add_runtime_dependency(%q<xml-simple>, [">= 1.0.11"])
|
26
|
+
s.add_runtime_dependency(%q<builder>, [">= 2.1.2"])
|
27
|
+
s.add_development_dependency(%q<hoe>, [">= 1.7.0"])
|
28
|
+
else
|
29
|
+
s.add_dependency(%q<xml-simple>, [">= 1.0.11"])
|
30
|
+
s.add_dependency(%q<builder>, [">= 2.1.2"])
|
31
|
+
s.add_dependency(%q<hoe>, [">= 1.7.0"])
|
32
|
+
end
|
33
|
+
else
|
34
|
+
s.add_dependency(%q<xml-simple>, [">= 1.0.11"])
|
35
|
+
s.add_dependency(%q<builder>, [">= 2.1.2"])
|
36
|
+
s.add_dependency(%q<hoe>, [">= 1.7.0"])
|
37
|
+
end
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ruby-rapleaf
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Glenn Rempe
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-08-28 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: xml-simple
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.0.11
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: builder
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.1.2
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: hoe
|
37
|
+
type: :development
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.7.0
|
44
|
+
version:
|
45
|
+
description: Rapleaf's goal is to make the internet safe and transparent, by allowing you to evaluate your web footprint across a variety of user-generated sites. See http://www.rapleaf.com for more information.
|
46
|
+
email:
|
47
|
+
- glenn@rempe.us
|
48
|
+
executables: []
|
49
|
+
|
50
|
+
extensions: []
|
51
|
+
|
52
|
+
extra_rdoc_files:
|
53
|
+
- History.txt
|
54
|
+
- Manifest.txt
|
55
|
+
- README.txt
|
56
|
+
files:
|
57
|
+
- History.txt
|
58
|
+
- Manifest.txt
|
59
|
+
- README.txt
|
60
|
+
- Rakefile
|
61
|
+
- examples/person.rb
|
62
|
+
- lib/ruby-rapleaf.rb
|
63
|
+
- lib/rapleaf/exceptions.rb
|
64
|
+
- lib/rapleaf/rapleaf.rb
|
65
|
+
- lib/rapleaf/responses.rb
|
66
|
+
- ruby-rapleaf.gemspec
|
67
|
+
has_rdoc: true
|
68
|
+
homepage: http://github.com/grempe/ruby-rapleaf
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options:
|
71
|
+
- --main
|
72
|
+
- README.txt
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "0"
|
80
|
+
version:
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: "0"
|
86
|
+
version:
|
87
|
+
requirements: []
|
88
|
+
|
89
|
+
rubyforge_project: ruby-rapleaf
|
90
|
+
rubygems_version: 1.2.0
|
91
|
+
signing_key:
|
92
|
+
specification_version: 2
|
93
|
+
summary: Rapleaf's goal is to make the internet safe and transparent, by allowing you to evaluate your web footprint across a variety of user-generated sites
|
94
|
+
test_files: []
|
95
|
+
|