protolink 0.1.0
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/README.markdown +150 -0
- data/Rakefile +10 -0
- data/example/create_and_subscribe.rb +19 -0
- data/lib/protolink.rb +17 -0
- data/lib/protolink/channel.rb +45 -0
- data/lib/protolink/connection.rb +83 -0
- data/lib/protolink/listen.rb +35 -0
- data/lib/protolink/middleware.rb +30 -0
- data/lib/protolink/protonet.rb +86 -0
- data/lib/protolink/user.rb +47 -0
- data/lib/protolink/version.rb +3 -0
- data/protolink.gemspec +57 -0
- metadata +191 -0
data/README.markdown
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
# ProtoLink - Access your ProtoNet
|
2
|
+
|
3
|
+
ProtoLink is a library for interfacing with ProtoNet, the next-gen internet infrastructure. Truly social and people-powered.
|
4
|
+
|
5
|
+
Version: 0.1.0
|
6
|
+
|
7
|
+
Sorry, there are no tests at all yet...
|
8
|
+
|
9
|
+
|
10
|
+
## Dependencies
|
11
|
+
|
12
|
+
activesupport
|
13
|
+
faraday -v 0.5.1
|
14
|
+
multipart-post
|
15
|
+
mime-types
|
16
|
+
twitter-stream (for streaming listening in future)
|
17
|
+
eventmachine
|
18
|
+
|
19
|
+
|
20
|
+
## Usage
|
21
|
+
|
22
|
+
# CHANNELS
|
23
|
+
|
24
|
+
# simple message
|
25
|
+
require 'rubygems'
|
26
|
+
require 'protolink'
|
27
|
+
|
28
|
+
protonet = Protolink::Protonet.new('SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD', :ssl => false)
|
29
|
+
channel = protonet.channels.first
|
30
|
+
channel.speak 'Hello world!'
|
31
|
+
|
32
|
+
|
33
|
+
# post message in specific channel
|
34
|
+
require 'rubygems'
|
35
|
+
require 'protolink'
|
36
|
+
|
37
|
+
protonet = Protolink::Protonet.new('SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD', :ssl => false)
|
38
|
+
channel = protonet.find_channel_by_name("test")
|
39
|
+
channel.speak 'Hello world!'
|
40
|
+
|
41
|
+
|
42
|
+
# create a channel
|
43
|
+
require 'rubygems'
|
44
|
+
require 'protolink'
|
45
|
+
|
46
|
+
protonet = Protolink::Protonet.new('SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD', :ssl => false)
|
47
|
+
channel = protonet.create_channel("test", "This is the description... woah")
|
48
|
+
channel.speak 'Hello world!'
|
49
|
+
|
50
|
+
|
51
|
+
# find or create a channel
|
52
|
+
require 'rubygems'
|
53
|
+
require 'protolink'
|
54
|
+
|
55
|
+
protonet = Protolink::Protonet.new('SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD', :ssl => false)
|
56
|
+
channel = protonet.find_or_create_channel_by_name("test", "This is the description... woah")
|
57
|
+
channel.speak 'Hello world!'
|
58
|
+
|
59
|
+
|
60
|
+
# USERS
|
61
|
+
|
62
|
+
# find user by login
|
63
|
+
require 'rubygems'
|
64
|
+
require 'protolink'
|
65
|
+
|
66
|
+
protonet = Protolink::Protonet.new('SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD', :ssl => false)
|
67
|
+
user = protonet.find_user_by_login("bjoern.dorra")
|
68
|
+
|
69
|
+
|
70
|
+
# create a user
|
71
|
+
require 'rubygems'
|
72
|
+
require 'protolink'
|
73
|
+
|
74
|
+
protonet = Protolink::Protonet.new('SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD', :ssl => false)
|
75
|
+
user = protonet.create_user("testuser", "mymassword", "Test-User", "test@test.de")
|
76
|
+
|
77
|
+
|
78
|
+
# find or create a user
|
79
|
+
require 'rubygems'
|
80
|
+
require 'protolink'
|
81
|
+
|
82
|
+
protonet = Protolink::Protonet.new('SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD', :ssl => false)
|
83
|
+
user = protonet.find_or_create_user_by_login("testuser", "mymassword", "Test-User", "test@test.de")
|
84
|
+
|
85
|
+
|
86
|
+
# get users auth_token for auto-login
|
87
|
+
require 'rubygems'
|
88
|
+
require 'protolink'
|
89
|
+
|
90
|
+
protonet = Protolink::Protonet.new('SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD', :ssl => false)
|
91
|
+
user = protonet.find_user_by_name("bjoern.dorra")
|
92
|
+
user.auth_token
|
93
|
+
=> "A19zNgCzgv4RGDGPc2mL"
|
94
|
+
|
95
|
+
|
96
|
+
# LISTENS
|
97
|
+
|
98
|
+
# create a listen
|
99
|
+
require 'rubygems'
|
100
|
+
require 'protolink'
|
101
|
+
|
102
|
+
protonet = Protolink::Protonet.new('SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD', :ssl => false)
|
103
|
+
user = protonet.find_user_by_login("bjoern.dorra")
|
104
|
+
channel = protonet.find_channel_by_name("test")
|
105
|
+
protonet.create_listen(user.id, channel.id)
|
106
|
+
|
107
|
+
# destroy a listen
|
108
|
+
require 'rubygems'
|
109
|
+
require 'protolink'
|
110
|
+
|
111
|
+
protonet = Protolink::Protonet.new('SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD', :ssl => false)
|
112
|
+
user = protonet.find_user_by_login("bjoern.dorra")
|
113
|
+
channel = protonet.find_channel_by_name("test")
|
114
|
+
protonet.destroy_listen(user.id, channel.id)
|
115
|
+
|
116
|
+
|
117
|
+
# CREATE AND SUBSCRIBE
|
118
|
+
|
119
|
+
require 'rubygems'
|
120
|
+
require 'protolink'
|
121
|
+
|
122
|
+
protonet = Protolink::Protonet.new('localhost:3000', 'bjoern.dorra', 'geheim')
|
123
|
+
|
124
|
+
user = protonet.find_or_create_user_by_login("johndoe", "password", "JohnDoe", "john@doe.com")
|
125
|
+
auth_token = user.auth_token
|
126
|
+
channel = protonet.find_or_create_channel_by_name("test", "This is a test channel!")
|
127
|
+
protonet.create_listen(user.id, channel.id)
|
128
|
+
"\nhttp://localhost:3000/?auth_token=#{auth_token}"
|
129
|
+
|
130
|
+
|
131
|
+
## Installation
|
132
|
+
|
133
|
+
gem install protolink
|
134
|
+
|
135
|
+
|
136
|
+
## How to contribute
|
137
|
+
|
138
|
+
If you find what looks like a bug:
|
139
|
+
|
140
|
+
1. Check the GitHub issue tracker to see if anyone else has had the same issue.
|
141
|
+
http://github.com/protonet/protolink/issues/
|
142
|
+
2. If you don't see anything, create an issue with information on how to reproduce it.
|
143
|
+
|
144
|
+
If you want to contribute an enhancement or a fix:
|
145
|
+
|
146
|
+
1. Fork the project on github.
|
147
|
+
http://github.com/protonet/protolink
|
148
|
+
2. Make your changes with tests.
|
149
|
+
3. Commit the changes without making changes to the Rakefile, VERSION, or any other files that aren't related to your enhancement or fix
|
150
|
+
4. Send a pull request.
|
data/Rakefile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'protolink'
|
3
|
+
|
4
|
+
protonet = Protolink::Protonet.new('localhost:3000', 'bjoern.dorra', 'geheim')
|
5
|
+
|
6
|
+
user = protonet.find_or_create_user_by_login("johndoe", "password", "John Doe", "john@doe.com")
|
7
|
+
auth_token = user.auth_token
|
8
|
+
puts "user_id : #{user.id}"
|
9
|
+
puts "user_login : #{user.login}"
|
10
|
+
puts "auth_token : #{auth_token}"
|
11
|
+
|
12
|
+
channel = protonet.find_or_create_channel_by_name("test", "This is a test channel!")
|
13
|
+
puts "channel_id : #{channel.id}"
|
14
|
+
puts "channel_name: #{channel.name}"
|
15
|
+
puts "channel_desc: #{channel.description}"
|
16
|
+
|
17
|
+
protonet.create_listen(user.id, channel.id)
|
18
|
+
|
19
|
+
puts "\nhttp://localhost:3000/?auth_token=#{auth_token}"
|
data/lib/protolink.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'active_support/json'
|
3
|
+
require 'mime/types'
|
4
|
+
|
5
|
+
require 'protolink/connection'
|
6
|
+
require 'protolink/protonet'
|
7
|
+
require 'protolink/channel'
|
8
|
+
require 'protolink/user'
|
9
|
+
require 'protolink/listen'
|
10
|
+
require 'protolink/middleware'
|
11
|
+
|
12
|
+
module Protolink
|
13
|
+
class Error < StandardError; end
|
14
|
+
class SSLRequiredError < Error; end
|
15
|
+
class AuthenticationFailed < Error; end
|
16
|
+
class ListenFailed < Error; end
|
17
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Protolink
|
2
|
+
class Channel
|
3
|
+
attr_reader :id, :name, :description
|
4
|
+
|
5
|
+
def initialize(connection, attributes = {})
|
6
|
+
@connection = connection
|
7
|
+
@id = attributes['id']
|
8
|
+
@name = attributes['name']
|
9
|
+
@description = attributes['description']
|
10
|
+
@loaded = false
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
# Post a new message to the chat channel
|
15
|
+
def speak(message, options = {})
|
16
|
+
send_message(message)
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
protected
|
21
|
+
|
22
|
+
def load
|
23
|
+
reload! unless @loaded
|
24
|
+
end
|
25
|
+
|
26
|
+
# does not work yet
|
27
|
+
def reload!
|
28
|
+
attributes = connection.get("/api/v1/channels/#{@id}.json")['channel']
|
29
|
+
|
30
|
+
@id = attributes['id']
|
31
|
+
@name = attributes['name']
|
32
|
+
@description = attributes['description']
|
33
|
+
@loaded = true
|
34
|
+
end
|
35
|
+
|
36
|
+
def send_message(message)
|
37
|
+
connection.post("/api/v1/meeps/create", {:channel_id => self.id, :message => message})
|
38
|
+
end
|
39
|
+
|
40
|
+
def connection
|
41
|
+
@connection
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'faraday'
|
3
|
+
|
4
|
+
module Protolink
|
5
|
+
class Connection
|
6
|
+
|
7
|
+
attr_reader :domain, :username, :password, :uri, :options
|
8
|
+
|
9
|
+
def self.connection
|
10
|
+
@connection ||= Faraday::Connection.new do |conn|
|
11
|
+
conn.use Faraday::Request::ActiveSupportJson
|
12
|
+
conn.adapter :net_http
|
13
|
+
conn.use Protolink::FaradayResponse::RaiseOnAuthenticationFailure
|
14
|
+
conn.use Faraday::Response::ActiveSupportJson
|
15
|
+
conn.use Protolink::FaradayResponse::WithIndifferentAccess
|
16
|
+
|
17
|
+
conn.headers['Content-Type'] = 'application/json'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.raw_connection
|
22
|
+
@raw_connection ||= Faraday::Connection.new do |conn|
|
23
|
+
conn.adapter Faraday.default_adapter
|
24
|
+
conn.use Protolink::FaradayResponse::RaiseOnAuthenticationFailure
|
25
|
+
conn.use Faraday::Response::ActiveSupportJson
|
26
|
+
conn.use Protolink::FaradayResponse::WithIndifferentAccess
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize(domainname, username, password, options = {})
|
31
|
+
@domainname = domainname
|
32
|
+
@username = username
|
33
|
+
@password = password
|
34
|
+
@options = { :ssl => false, :proxy => ENV['HTTP_PROXY'] }.merge(options)
|
35
|
+
@uri = URI.parse("#{@options[:ssl] ? 'https' : 'http' }://#{domainname}")
|
36
|
+
|
37
|
+
connection.basic_auth username, password
|
38
|
+
raw_connection.basic_auth username, password
|
39
|
+
end
|
40
|
+
|
41
|
+
def connection
|
42
|
+
@connection ||= begin
|
43
|
+
conn = self.class.connection.dup
|
44
|
+
conn.url_prefix = @uri.to_s
|
45
|
+
conn.proxy options[:proxy]
|
46
|
+
conn
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def raw_connection
|
51
|
+
@raw_connection ||= begin
|
52
|
+
conn = self.class.raw_connection.dup
|
53
|
+
conn.url_prefix = @uri.to_s
|
54
|
+
conn.proxy options[:proxy]
|
55
|
+
conn
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def get(url, *args)
|
60
|
+
response = connection.get(url, *args)
|
61
|
+
response.body
|
62
|
+
end
|
63
|
+
|
64
|
+
def post(url, body = nil, *args)
|
65
|
+
response = connection.post(url, body, *args)
|
66
|
+
response.body
|
67
|
+
end
|
68
|
+
|
69
|
+
def raw_post(url, body = nil, *args)
|
70
|
+
response = raw_connection.post(url, body, *args)
|
71
|
+
end
|
72
|
+
|
73
|
+
def put(url, body = nil, *args)
|
74
|
+
response = connection.put(url, body, *args)
|
75
|
+
response.body
|
76
|
+
end
|
77
|
+
|
78
|
+
# Is the connection using ssl?
|
79
|
+
def ssl?
|
80
|
+
uri.scheme == 'https'
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Protolink
|
2
|
+
class Listen
|
3
|
+
attr_reader :id, :user_id, :channel_id
|
4
|
+
|
5
|
+
def initialize(connection, attributes = {})
|
6
|
+
@connection = connection
|
7
|
+
@id = attributes['id']
|
8
|
+
@user_id = attributes['user_id']
|
9
|
+
@channel_id = attributes['channel_id']
|
10
|
+
@loaded = false
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def load
|
17
|
+
reload! unless @loaded
|
18
|
+
end
|
19
|
+
|
20
|
+
# does not work yet
|
21
|
+
def reload!
|
22
|
+
attributes = connection.get("/api/v1/listens/#{@id}.json")['listen']
|
23
|
+
|
24
|
+
@id = attributes['id']
|
25
|
+
@user_id = attributes['user_id']
|
26
|
+
@channel_id = attributes['channel_id']
|
27
|
+
@loaded = true
|
28
|
+
end
|
29
|
+
|
30
|
+
def connection
|
31
|
+
@connection
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Protolink
|
2
|
+
module FaradayResponse
|
3
|
+
class WithIndifferentAccess < ::Faraday::Response::Middleware
|
4
|
+
begin
|
5
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
6
|
+
rescue LoadError, NameError => error
|
7
|
+
self.load_error = error
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.register_on_complete(env)
|
11
|
+
env[:response].on_complete do |response|
|
12
|
+
json = response[:body]
|
13
|
+
if json.is_a?(Hash)
|
14
|
+
response[:body] = ::HashWithIndifferentAccess.new(json)
|
15
|
+
elsif json.is_a?(Array) and json.first.is_a?(Hash)
|
16
|
+
response[:body] = json.map{|item| ::HashWithIndifferentAccess.new(item) }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class RaiseOnAuthenticationFailure < ::Faraday::Response::Middleware
|
23
|
+
def self.register_on_complete(env)
|
24
|
+
env[:response].on_complete do |response|
|
25
|
+
raise AuthenticationFailed if response[:status] == 401
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Protolink
|
2
|
+
|
3
|
+
# protonet = Protolink::Protonet.new 'domain', :user => 'john.doe', :password => 'secret', :token => 'xyz'
|
4
|
+
#
|
5
|
+
# channel = protonet.find_channel_by_name 'home'
|
6
|
+
# channel.speak 'Hello world!'
|
7
|
+
class Protonet
|
8
|
+
attr_reader :connection
|
9
|
+
|
10
|
+
# Create a new connection to the account with the given +domain+.
|
11
|
+
#
|
12
|
+
# == Options:
|
13
|
+
# * +:ssl+: use SSL for the connection, which is required if you have a Protonet SSL account.
|
14
|
+
# Defaults to false
|
15
|
+
# * +:proxy+: a proxy URI. (e.g. :proxy => 'http://user:pass@example.com:8000')
|
16
|
+
#
|
17
|
+
def initialize(domainname, username, password, options = {})
|
18
|
+
@connection = Connection.new(domainname, username, password, options)
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
# CHANNELS
|
23
|
+
|
24
|
+
# Get an array of all the available channels
|
25
|
+
def channels
|
26
|
+
s = connection.get('/api/v1/channels.json')
|
27
|
+
s = Hash["channels", s]
|
28
|
+
s['channels'].map do |channel|
|
29
|
+
Channel.new(connection, channel)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Find a Channel by name
|
34
|
+
def find_channel_by_name(name)
|
35
|
+
channels.detect { |channel| channel.name == name }
|
36
|
+
end
|
37
|
+
|
38
|
+
# Creates and returns a new Channel with the given +name+ and optionally a +description+
|
39
|
+
def create_channel(name, description = nil)
|
40
|
+
connection.post('/api/v1/channels/create.json', { :name => name, :description => description } )
|
41
|
+
find_channel_by_name(name)
|
42
|
+
end
|
43
|
+
|
44
|
+
def find_or_create_channel_by_name(name, description = nil)
|
45
|
+
find_channel_by_name(name) || create_channel(name, description)
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
# USERS
|
50
|
+
|
51
|
+
# Get an array of all the available users
|
52
|
+
def users
|
53
|
+
s = connection.get('/api/v1/users.json')
|
54
|
+
s = Hash["users", s]
|
55
|
+
s['users'].map do |user|
|
56
|
+
User.new(connection, user)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Creates and returns a new user with the given attributes
|
61
|
+
def create_user(login, password, name, email, avatar_url = nil, channels = nil)
|
62
|
+
connection.post('/api/v1/users/create.json', {:login => login, :name => name, :password => password, :email => email, :avatar_url => avatar_url, :channels => channels } )
|
63
|
+
find_user_by_login(login)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Find a user by name
|
67
|
+
def find_user_by_login(login)
|
68
|
+
users.detect { |user| user.login == login }
|
69
|
+
end
|
70
|
+
|
71
|
+
def find_or_create_user_by_login(login, password, name, email, avatar_url = nil, channels = nil)
|
72
|
+
find_user_by_login(name) || create_user(login, password, name, email, avatar_url = nil, channels = nil)
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
# LISTENS
|
77
|
+
def create_listen(user_id, channel_id)
|
78
|
+
connection.post('/api/v1/listens/create.json', {:user_id => user_id, :channel_id => channel_id } )
|
79
|
+
end
|
80
|
+
|
81
|
+
def destroy_listen(user_id, channel_id)
|
82
|
+
connection.post('/api/v1/listens/destroy.json', {:user_id => user_id, :channel_id => channel_id } )
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Protolink
|
2
|
+
class User
|
3
|
+
attr_reader :id, :name, :login, :email, :avatar_url
|
4
|
+
|
5
|
+
def initialize(connection, attributes = {})
|
6
|
+
@connection = connection
|
7
|
+
@id = attributes['id']
|
8
|
+
@name = attributes['name']
|
9
|
+
@login = attributes['login']
|
10
|
+
@email = attributes['email']
|
11
|
+
@avatar_url = attributes['avatar_url']
|
12
|
+
@loaded = false
|
13
|
+
end
|
14
|
+
|
15
|
+
# get token for autologin
|
16
|
+
def auth_token
|
17
|
+
receive_auth_token
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
|
22
|
+
def receive_auth_token
|
23
|
+
connection.get("/api/v1/users/auth_token.json?user_id=#{self.id}")['token']
|
24
|
+
end
|
25
|
+
|
26
|
+
def load
|
27
|
+
reload! unless @loaded
|
28
|
+
end
|
29
|
+
|
30
|
+
# does not work yet
|
31
|
+
def reload!
|
32
|
+
attributes = connection.get("/api/v1/users/#{@id}.json")['user']
|
33
|
+
|
34
|
+
@id = attributes['id']
|
35
|
+
@name = attributes['name']
|
36
|
+
@login = attributes['login']
|
37
|
+
@email = attributes['email']
|
38
|
+
@avatar_url = attributes['avatar_url']
|
39
|
+
@loaded = true
|
40
|
+
end
|
41
|
+
|
42
|
+
def connection
|
43
|
+
@connection
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
data/protolink.gemspec
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "protolink/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = %q{protolink}
|
7
|
+
s.version = Protolink::VERSION
|
8
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
|
+
s.authors = ["Björn B. Dorra"]
|
10
|
+
s.description = %q{A Ruby API for interfacing with Protonet, the next-gen internet infrastructure. Truly social and people-powered.}
|
11
|
+
s.email = %q{dorra@d-1.comg}
|
12
|
+
s.extra_rdoc_files = [
|
13
|
+
"README.markdown"
|
14
|
+
]
|
15
|
+
s.homepage = %q{http://github.com/protonet/protolink}
|
16
|
+
s.rubyforge_project = %q{protolink}
|
17
|
+
s.rubygems_version = %q{1.3.6}
|
18
|
+
s.summary = %q{Ruby wrapper for the ProtoNet API}
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
|
23
|
+
if s.respond_to? :specification_version then
|
24
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
|
+
s.specification_version = 3
|
26
|
+
|
27
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
29
|
+
s.add_runtime_dependency(%q<faraday>, ["~> 0.5.1"])
|
30
|
+
s.add_runtime_dependency(%q<multipart-post>, [">= 0"])
|
31
|
+
s.add_runtime_dependency(%q<mime-types>, [">= 0"])
|
32
|
+
s.add_runtime_dependency(%q<twitter-stream>, [">= 0"])
|
33
|
+
s.add_runtime_dependency(%q<eventmachine>, [">= 0"])
|
34
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
35
|
+
s.add_development_dependency(%q<fakeweb>, [">= 0"])
|
36
|
+
else
|
37
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
38
|
+
s.add_dependency(%q<faraday>, ["~> 0.5.1"])
|
39
|
+
s.add_dependency(%q<multipart-post>, [">= 0"])
|
40
|
+
s.add_dependency(%q<mime-types>, [">= 0"])
|
41
|
+
s.add_dependency(%q<twitter-stream>, [">= 0"])
|
42
|
+
s.add_dependency(%q<eventmachine>, [">= 0"])
|
43
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
44
|
+
s.add_dependency(%q<fakeweb>, [">= 0"])
|
45
|
+
end
|
46
|
+
else
|
47
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
48
|
+
s.add_dependency(%q<faraday>, ["~> 0.5.1"])
|
49
|
+
s.add_dependency(%q<multipart-post>, [">= 0"])
|
50
|
+
s.add_dependency(%q<mime-types>, [">= 0"])
|
51
|
+
s.add_dependency(%q<twitter-stream>, [">= 0"])
|
52
|
+
s.add_dependency(%q<eventmachine>, [">= 0"])
|
53
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
54
|
+
s.add_dependency(%q<fakeweb>, [">= 0"])
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
metadata
ADDED
@@ -0,0 +1,191 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: protolink
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- "Bj\xC3\xB6rn B. Dorra"
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-06-14 00:00:00 +02:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: activesupport
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: faraday
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 9
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
- 5
|
47
|
+
- 1
|
48
|
+
version: 0.5.1
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: multipart-post
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 3
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
type: :runtime
|
64
|
+
version_requirements: *id003
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: mime-types
|
67
|
+
prerelease: false
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 3
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
77
|
+
type: :runtime
|
78
|
+
version_requirements: *id004
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: twitter-stream
|
81
|
+
prerelease: false
|
82
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
hash: 3
|
88
|
+
segments:
|
89
|
+
- 0
|
90
|
+
version: "0"
|
91
|
+
type: :runtime
|
92
|
+
version_requirements: *id005
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: eventmachine
|
95
|
+
prerelease: false
|
96
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
hash: 3
|
102
|
+
segments:
|
103
|
+
- 0
|
104
|
+
version: "0"
|
105
|
+
type: :runtime
|
106
|
+
version_requirements: *id006
|
107
|
+
- !ruby/object:Gem::Dependency
|
108
|
+
name: rspec
|
109
|
+
prerelease: false
|
110
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
hash: 3
|
116
|
+
segments:
|
117
|
+
- 0
|
118
|
+
version: "0"
|
119
|
+
type: :development
|
120
|
+
version_requirements: *id007
|
121
|
+
- !ruby/object:Gem::Dependency
|
122
|
+
name: fakeweb
|
123
|
+
prerelease: false
|
124
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
125
|
+
none: false
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
hash: 3
|
130
|
+
segments:
|
131
|
+
- 0
|
132
|
+
version: "0"
|
133
|
+
type: :development
|
134
|
+
version_requirements: *id008
|
135
|
+
description: A Ruby API for interfacing with Protonet, the next-gen internet infrastructure. Truly social and people-powered.
|
136
|
+
email: dorra@d-1.comg
|
137
|
+
executables: []
|
138
|
+
|
139
|
+
extensions: []
|
140
|
+
|
141
|
+
extra_rdoc_files:
|
142
|
+
- README.markdown
|
143
|
+
files:
|
144
|
+
- README.markdown
|
145
|
+
- Rakefile
|
146
|
+
- example/create_and_subscribe.rb
|
147
|
+
- lib/protolink.rb
|
148
|
+
- lib/protolink/channel.rb
|
149
|
+
- lib/protolink/connection.rb
|
150
|
+
- lib/protolink/listen.rb
|
151
|
+
- lib/protolink/middleware.rb
|
152
|
+
- lib/protolink/protonet.rb
|
153
|
+
- lib/protolink/user.rb
|
154
|
+
- lib/protolink/version.rb
|
155
|
+
- protolink.gemspec
|
156
|
+
has_rdoc: true
|
157
|
+
homepage: http://github.com/protonet/protolink
|
158
|
+
licenses: []
|
159
|
+
|
160
|
+
post_install_message:
|
161
|
+
rdoc_options: []
|
162
|
+
|
163
|
+
require_paths:
|
164
|
+
- lib
|
165
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
166
|
+
none: false
|
167
|
+
requirements:
|
168
|
+
- - ">="
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
hash: 3
|
171
|
+
segments:
|
172
|
+
- 0
|
173
|
+
version: "0"
|
174
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
|
+
none: false
|
176
|
+
requirements:
|
177
|
+
- - ">="
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
hash: 3
|
180
|
+
segments:
|
181
|
+
- 0
|
182
|
+
version: "0"
|
183
|
+
requirements: []
|
184
|
+
|
185
|
+
rubyforge_project: protolink
|
186
|
+
rubygems_version: 1.3.7
|
187
|
+
signing_key:
|
188
|
+
specification_version: 3
|
189
|
+
summary: Ruby wrapper for the ProtoNet API
|
190
|
+
test_files: []
|
191
|
+
|