protolink 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ coverage
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use ruby-1.8.7@protolink
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source :gemcutter
2
+
3
+ gem "httparty"
4
+
5
+ group :test do
6
+ gem "rake"
7
+ gem "rcov"
8
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,16 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ crack (0.1.8)
5
+ httparty (0.7.8)
6
+ crack (= 0.1.8)
7
+ rake (0.9.2)
8
+ rcov (0.9.9)
9
+
10
+ PLATFORMS
11
+ ruby
12
+
13
+ DEPENDENCIES
14
+ httparty
15
+ rake
16
+ rcov
data/README.markdown CHANGED
@@ -9,13 +9,8 @@ Sorry, there are no tests at all yet...
9
9
 
10
10
  ## Dependencies
11
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
-
12
+ httparty
13
+ crack
19
14
 
20
15
  ## Usage
21
16
 
@@ -25,7 +20,7 @@ Sorry, there are no tests at all yet...
25
20
  require 'rubygems'
26
21
  require 'protolink'
27
22
 
28
- protonet = Protolink::Protonet.new('SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD', :ssl => false)
23
+ protonet = Protolink::Protonet.new('HTTP://SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD')
29
24
  channel = protonet.channels.first
30
25
  channel.speak 'Hello world!'
31
26
 
@@ -48,6 +43,15 @@ Sorry, there are no tests at all yet...
48
43
  channel.speak 'Hello world!'
49
44
 
50
45
 
46
+ # find channel by id
47
+ require 'rubygems'
48
+ require 'protolink'
49
+
50
+ protonet = Protolink::Protonet.new('SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD', :ssl => false)
51
+ channel = protonet.find_channel(117)
52
+ channel.speak 'Hello world!'
53
+
54
+
51
55
  # find or create a channel
52
56
  require 'rubygems'
53
57
  require 'protolink'
@@ -66,6 +70,12 @@ Sorry, there are no tests at all yet...
66
70
  protonet = Protolink::Protonet.new('SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD', :ssl => false)
67
71
  user = protonet.find_user_by_login("bjoern.dorra")
68
72
 
73
+ # find user by id
74
+ require 'rubygems'
75
+ require 'protolink'
76
+
77
+ protonet = Protolink::Protonet.new('SUBDOMAIN.DOMAIN.DE', 'USERLOGIN', 'PASSWORD', :ssl => false)
78
+ user = protonet.find_user(117)
69
79
 
70
80
  # create a user
71
81
  require 'rubygems'
@@ -1,15 +1,15 @@
1
1
  require 'rubygems'
2
2
  require 'protolink'
3
3
 
4
- protonet = Protolink::Protonet.new('localhost:3000', 'bjoern.dorra', 'geheim')
4
+ protonet = Protolink::Protonet.open('http://localhost:3000', 'bjoern.dorra', 'geheim')
5
5
 
6
- user = protonet.find_or_create_user_by_login("johndoe", "password", "John Doe", "john@doe.com")
6
+ user = protonet.find_or_create_user_by_login("johndoe", :password => "password", :name => "John Doe", :email => "john@doe.com")
7
7
  auth_token = user.auth_token
8
8
  puts "user_id : #{user.id}"
9
9
  puts "user_login : #{user.login}"
10
10
  puts "auth_token : #{auth_token}"
11
11
 
12
- channel = protonet.find_or_create_channel_by_name("test", "This is a test channel!")
12
+ channel = protonet.find_or_create_channel_by_name("test", :description => "This is a test channel!")
13
13
  puts "channel_id : #{channel.id}"
14
14
  puts "channel_name: #{channel.name}"
15
15
  puts "channel_desc: #{channel.description}"
data/lib/protolink.rb CHANGED
@@ -1,13 +1,7 @@
1
- require 'active_support'
2
- require 'active_support/json'
3
- require 'mime/types'
4
-
5
- require 'protolink/connection'
6
1
  require 'protolink/protonet'
7
2
  require 'protolink/channel'
8
3
  require 'protolink/user'
9
4
  require 'protolink/listen'
10
- require 'protolink/middleware'
11
5
 
12
6
  module Protolink
13
7
  class Error < StandardError; end
@@ -16,6 +16,16 @@ module Protolink
16
16
  send_message(message)
17
17
  end
18
18
 
19
+ def delete!
20
+ connection.delete("/api/v1/channels/#{self.id}")
21
+ end
22
+
23
+ def listener
24
+ users = connection.get("/api/v1/channels/#{self.id}/users")
25
+ users && users.map do |user|
26
+ User.new(connection, user)
27
+ end
28
+ end
19
29
 
20
30
  protected
21
31
 
@@ -34,7 +44,7 @@ module Protolink
34
44
  end
35
45
 
36
46
  def send_message(message)
37
- connection.post("/api/v1/meeps/create", {:channel_id => self.id, :message => message})
47
+ connection.post("/api/v1/meeps/create", :body => {:channel_id => self.id, :message => message})
38
48
  end
39
49
 
40
50
  def connection
@@ -1,3 +1,5 @@
1
+ require 'httparty'
2
+
1
3
  module Protolink
2
4
 
3
5
  # protonet = Protolink::Protonet.new 'domain', :user => 'john.doe', :password => 'secret', :token => 'xyz'
@@ -5,87 +7,119 @@ module Protolink
5
7
  # channel = protonet.find_channel_by_name 'home'
6
8
  # channel.speak 'Hello world!'
7
9
  class Protonet
8
- attr_reader :connection
9
-
10
- # Create a new connection to the account with the given +domain+.
10
+ include HTTParty
11
+
12
+ # Create a new connection to the account with the given +uri+.
11
13
  #
12
14
  # == 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')
15
+ # * +:username+: your api users username
16
+ # * +:password+: your api users password
17
+ # * +:proxy+: a hash with your proxy options (e.g. {:uri => 'http://user:pass@example.com', :port => 8800})
16
18
  #
17
- def initialize(domainname, username, password, options = {})
18
- @connection = Connection.new(domainname, username, password, options)
19
+ def self.open(uri, username, password, proxy = nil)
20
+ # this allows you to use the httparty class helpers (base_uri...) with multiple connections
21
+ clazz = self.dup
22
+ clazz.base_uri(uri)
23
+ clazz.basic_auth(username, password)
24
+ if proxy
25
+ clazz.http_proxy(proxy[:uri], proxy[:port])
26
+ end
27
+ clazz.new
19
28
  end
20
-
21
-
29
+
22
30
  # CHANNELS
23
31
 
24
32
  # Get an array of all the available channels
25
33
  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)
34
+ get('/api/v1/channels.json').map do |channel|
35
+ Channel.new(self, channel)
30
36
  end
31
37
  end
32
38
 
33
- # Find a Channel by name
34
- def find_channel_by_name(name)
35
- channels.detect { |channel| channel.name == name }
36
- end
37
-
38
39
  # 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 } )
40
+ def create_channel(options={})
41
+ name = options[:name] || raise(ArgumentError, "Please provide a name for the channel")
42
+ description = options[:description]
43
+ skip_autosubscribe = options[:skip_autosubscribe]
44
+ post('/api/v1/channels', :body => { :name => name, :description => description, :skip_autosubscribe => skip_autosubscribe } )
41
45
  find_channel_by_name(name)
42
46
  end
43
47
 
44
- def find_or_create_channel_by_name(name, description = nil)
45
- find_channel_by_name(name) || create_channel(name, description)
48
+ def find_or_create_channel_by_name(name, options = {})
49
+ find_channel_by_name(name) || create_channel({:name => name}.merge(options))
46
50
  end
47
51
 
52
+ # Find a Channel by id
53
+ def find_channel(id)
54
+ response = get("/api/v1/channels/#{id}")
55
+ Channel.new(self, response) if response
56
+ end
57
+
58
+ # Find a Channel by name
59
+ def find_channel_by_name(name)
60
+ response = get("/api/v1/channels/#{name}")
61
+ Channel.new(self, response) if response
62
+ end
48
63
 
49
64
  # USERS
50
65
 
51
66
  # Get an array of all the available users
52
67
  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)
68
+ get('/api/v1/users.json').map do |user|
69
+ User.new(self, user)
57
70
  end
58
71
  end
59
72
 
60
73
  # Creates and returns a new user with the given attributes
61
- def create_user(login, password = nil, name = nil, email = nil, avatar_url = nil, channels = nil)
74
+ def create_user(options)
75
+ login = options[:login] || raise(ArgumentError, "Please provide a login for this user")
76
+ password = options[:password]
77
+ name = options[:name]
78
+ email = options[:email] || raise(ArgumentError, "Please provide an email for this user")
79
+ avatar_url = options[:avatar_url]
80
+ profile_url = options[:profile_url]
81
+ channels = options[:channels]
62
82
  if channels
63
83
  # not implemented yet
64
84
  no_channels = "true"
65
85
  else
66
86
  no_channels = "true"
67
87
  end
68
- connection.post('/api/v1/users/create.json', {:login => login, :name => name, :password => password, :email => email, :avatar_url => avatar_url, :no_channels => no_channels, :channels_to_subscribe => nil } )
88
+ post('/api/v1/users', :body => {:login => login, :name => name, :password => password, :email => email, :avatar_url => avatar_url, :no_channels => no_channels, :channels_to_subscribe => nil } )
69
89
  find_user_by_login(login)
70
90
  end
71
91
 
72
- # Find a user by name
73
- def find_user_by_login(login)
74
- users.detect { |user| user.login == login }
92
+ def find_or_create_user_by_login(login, options = {})
93
+ find_user_by_login(login) || create_user({:login => login}.merge(options))
75
94
  end
76
95
 
77
- def find_or_create_user_by_login(login, password = nil, name = nil, email = nil, avatar_url = nil, channels = nil)
78
- find_user_by_login(login) || create_user(login, password, name, email, avatar_url = nil, channels = nil)
96
+ # Find a user by id
97
+ def find_user(id)
98
+ response = get("/api/v1/users/#{id}")
99
+ User.new(self, response) if response
100
+ end
101
+
102
+ def find_user_by_login(login)
103
+ response = get("/api/v1/users/#{login}")
104
+ User.new(self, response) if response
79
105
  end
80
-
81
106
 
82
107
  # LISTENS
83
108
  def create_listen(user_id, channel_id)
84
- connection.post('/api/v1/listens/create.json', {:user_id => user_id, :channel_id => channel_id } )
109
+ post('/api/v1/listens', :body => {:user_id => user_id, :channel_id => channel_id } )
85
110
  end
86
111
 
87
112
  def destroy_listen(user_id, channel_id)
88
- connection.post('/api/v1/listens/destroy.json', {:user_id => user_id, :channel_id => channel_id } )
113
+ delete('/api/v1/listens', :body => {:user_id => user_id, :channel_id => channel_id } )
114
+ end
115
+
116
+ [:get, :post, :update, :delete].each do |method|
117
+ class_eval <<-EOS
118
+ def #{method}(uri, options = {})
119
+ response = self.class.#{method}(uri, options)
120
+ response.code.to_s.match(/2../) ? response : nil
121
+ end
122
+ EOS
89
123
  end
90
124
 
91
125
  end
@@ -14,15 +14,15 @@ module Protolink
14
14
 
15
15
  # get token for autologin
16
16
  def auth_token
17
- receive_auth_token
17
+ connection.get("/api/v1/users/#{self.id}/auth_token.json")["token"]
18
+ end
19
+
20
+ def delete!
21
+ connection.delete("/api/v1/users/#{self.id}")
18
22
  end
19
23
 
20
24
  protected
21
25
 
22
- def receive_auth_token
23
- connection.get("/api/v1/users/auth_token.json?user_id=#{self.id}")['token']
24
- end
25
-
26
26
  def load
27
27
  reload! unless @loaded
28
28
  end
@@ -1,3 +1,3 @@
1
1
  module Protolink
2
- VERSION = '0.1.1' unless defined?(::Protolink::VERSION)
2
+ VERSION = '0.2.0' unless defined?(::Protolink::VERSION)
3
3
  end
data/protolink.gemspec CHANGED
@@ -25,33 +25,15 @@ Gem::Specification.new do |s|
25
25
  s.specification_version = 3
26
26
 
27
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"])
28
+ s.add_runtime_dependency(%q<crack>, [">= 0"])
29
+ s.add_runtime_dependency(%q<httparty>, ["~> 0.5.1"])
36
30
  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"])
31
+ s.add_dependency(%q<crack>, [">= 0"])
32
+ s.add_dependency(%q<httparty>, ["~> 0.5.1"])
45
33
  end
46
34
  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"])
35
+ s.add_dependency(%q<crack>, [">= 0"])
36
+ s.add_dependency(%q<httparty>, ["~> 0.5.1"])
55
37
  end
56
38
  end
57
39
 
data/test/all_tests.rb ADDED
@@ -0,0 +1,82 @@
1
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
2
+
3
+ require 'rubygems'
4
+ require 'protolink'
5
+ require "test/unit"
6
+
7
+ # require 'ruby-debug'
8
+ # Debugger.start
9
+ # change this if you need to connect to another server
10
+ PTN_SERVER = "http://localhost:3000"
11
+ PTN_USER = "dude"
12
+ PTN_PASS = "geheim"
13
+ # protonet = Protolink::Protonet.new('localhost:3000', 'bjoern.dorra', 'geheim')
14
+ #
15
+ # user = protonet.find_or_create_user_by_login("johndoe", "password", "John Doe", "john@doe.com")
16
+ # auth_token = user.auth_token
17
+ # puts "user_id : #{user.id}"
18
+ # puts "user_login : #{user.login}"
19
+ # puts "auth_token : #{auth_token}"
20
+ #
21
+ # channel = protonet.find_or_create_channel_by_name("test", "This is a test channel!")
22
+ # puts "channel_id : #{channel.id}"
23
+ # puts "channel_name: #{channel.name}"
24
+ # puts "channel_desc: #{channel.description}"
25
+ #
26
+ # protonet.create_listen(user.id, channel.id)
27
+ #
28
+ # puts "\nhttp://localhost:3000/?auth_token=#{auth_token}"
29
+
30
+ class TestAll < Test::Unit::TestCase
31
+
32
+ def teardown
33
+ protonet = Protolink::Protonet.open(PTN_SERVER, PTN_USER, PTN_PASS)
34
+ user = protonet.find_user_by_login("test")
35
+ user.delete!
36
+ user = protonet.find_user_by_login("test_2")
37
+ user.delete!
38
+ channel = protonet.find_channel_by_name("test_foobar")
39
+ channel.delete!
40
+ channel = protonet.find_channel_by_name("test_foobar_2")
41
+ channel.delete!
42
+ end
43
+
44
+ def test_all
45
+ protonet = Protolink::Protonet.open(PTN_SERVER, PTN_USER, PTN_PASS)
46
+ assert protonet, "Couldn't create connection instance"
47
+
48
+ user_1 = protonet.create_user(:login => 'test', :email => 'test@test.com')
49
+ assert user_1.is_a?(Protolink::User), "Couldn't create user"
50
+ assert_equal 'test', user_1.login
51
+ assert_equal 'test@test.com', user_1.email
52
+ assert user_1.auth_token.match(/\w+/)
53
+
54
+ user_2 = protonet.find_or_create_user_by_login('test', :email => 'test@test.com')
55
+ assert_equal user_1.id, user_2.id
56
+
57
+ user_3 = protonet.find_or_create_user_by_login('test_2', :email => 'test_2@test.com')
58
+ assert user_3.is_a?(Protolink::User), "Couldn't create user"
59
+ assert_equal 'test_2', user_3.login
60
+ assert_equal 'test_2@test.com', user_3.email
61
+
62
+ channel_1 = protonet.create_channel(:name => "test_foobar", :skip_autosubscribe => true)
63
+ assert channel_1.is_a?(Protolink::Channel), "Couldn't create channel"
64
+ assert_equal 'test_foobar', channel_1.name
65
+
66
+ channel_2 = protonet.find_or_create_channel_by_name("test_foobar")
67
+ assert_equal channel_1.id, channel_2.id
68
+
69
+ channel_3 = protonet.find_or_create_channel_by_name("test_foobar_2")
70
+ assert channel_3.is_a?(Protolink::Channel), "Couldn't create channel"
71
+ assert_equal 'test_foobar_2', channel_3.name
72
+
73
+ protonet.create_listen(user_1.id, channel_1.id)
74
+ protonet.create_listen(user_3.id, channel_1.id)
75
+
76
+ assert_equal [user_1.id, user_3.id].sort, channel_1.listener.map {|u| u.id}.sort
77
+
78
+ protonet.destroy_listen(user_1.id, channel_1.id)
79
+
80
+ assert_equal [user_3.id], channel_1.listener.map {|u| u.id}.sort
81
+ end
82
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protolink
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease: false
4
+ hash: 23
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Bj\xC3\xB6rn B. Dorra"
@@ -16,11 +16,10 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-06-15 00:00:00 +02:00
19
+ date: 2011-07-25 00:00:00 +02:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
- name: activesupport
24
23
  prerelease: false
25
24
  requirement: &id001 !ruby/object:Gem::Requirement
26
25
  none: false
@@ -32,9 +31,9 @@ dependencies:
32
31
  - 0
33
32
  version: "0"
34
33
  type: :runtime
34
+ name: crack
35
35
  version_requirements: *id001
36
36
  - !ruby/object:Gem::Dependency
37
- name: faraday
38
37
  prerelease: false
39
38
  requirement: &id002 !ruby/object:Gem::Requirement
40
39
  none: false
@@ -48,91 +47,8 @@ dependencies:
48
47
  - 1
49
48
  version: 0.5.1
50
49
  type: :runtime
50
+ name: httparty
51
51
  version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
53
- name: multipart-post
54
- prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
56
- none: false
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- hash: 3
61
- segments:
62
- - 0
63
- version: "0"
64
- type: :runtime
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- name: mime-types
68
- prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
70
- none: false
71
- requirements:
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- hash: 3
75
- segments:
76
- - 0
77
- version: "0"
78
- type: :runtime
79
- version_requirements: *id004
80
- - !ruby/object:Gem::Dependency
81
- name: twitter-stream
82
- prerelease: false
83
- requirement: &id005 !ruby/object:Gem::Requirement
84
- none: false
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- hash: 3
89
- segments:
90
- - 0
91
- version: "0"
92
- type: :runtime
93
- version_requirements: *id005
94
- - !ruby/object:Gem::Dependency
95
- name: eventmachine
96
- prerelease: false
97
- requirement: &id006 !ruby/object:Gem::Requirement
98
- none: false
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- hash: 3
103
- segments:
104
- - 0
105
- version: "0"
106
- type: :runtime
107
- version_requirements: *id006
108
- - !ruby/object:Gem::Dependency
109
- name: rspec
110
- prerelease: false
111
- requirement: &id007 !ruby/object:Gem::Requirement
112
- none: false
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- hash: 3
117
- segments:
118
- - 0
119
- version: "0"
120
- type: :development
121
- version_requirements: *id007
122
- - !ruby/object:Gem::Dependency
123
- name: fakeweb
124
- prerelease: false
125
- requirement: &id008 !ruby/object:Gem::Requirement
126
- none: false
127
- requirements:
128
- - - ">="
129
- - !ruby/object:Gem::Version
130
- hash: 3
131
- segments:
132
- - 0
133
- version: "0"
134
- type: :development
135
- version_requirements: *id008
136
52
  description: A Ruby API for interfacing with Protonet, the next-gen internet infrastructure. Truly social and people-powered.
137
53
  email: dorra@d-1.comg
138
54
  executables: []
@@ -142,18 +58,21 @@ extensions: []
142
58
  extra_rdoc_files:
143
59
  - README.markdown
144
60
  files:
61
+ - .gitignore
62
+ - .rvmrc
63
+ - Gemfile
64
+ - Gemfile.lock
145
65
  - README.markdown
146
66
  - Rakefile
147
67
  - example/create_and_subscribe.rb
148
68
  - lib/protolink.rb
149
69
  - lib/protolink/channel.rb
150
- - lib/protolink/connection.rb
151
70
  - lib/protolink/listen.rb
152
- - lib/protolink/middleware.rb
153
71
  - lib/protolink/protonet.rb
154
72
  - lib/protolink/user.rb
155
73
  - lib/protolink/version.rb
156
74
  - protolink.gemspec
75
+ - test/all_tests.rb
157
76
  has_rdoc: true
158
77
  homepage: http://github.com/protonet/protolink
159
78
  licenses: []
@@ -184,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
103
  requirements: []
185
104
 
186
105
  rubyforge_project: protolink
187
- rubygems_version: 1.3.7
106
+ rubygems_version: 1.6.2
188
107
  signing_key:
189
108
  specification_version: 3
190
109
  summary: Ruby wrapper for the ProtoNet API
@@ -1,83 +0,0 @@
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
@@ -1,30 +0,0 @@
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