protolink 0.1.1 → 0.2.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/.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