trumpet-trumpet 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.yml +1 -1
- data/lib/core_extensions.rb +0 -15
- data/lib/trumpet/channel.rb +5 -5
- data/lib/trumpet/helpers.rb +5 -0
- data/lib/trumpet/listener.rb +8 -3
- data/lib/trumpet/message.rb +20 -3
- data/lib/trumpet/receiver.rb +8 -4
- data/lib/trumpet/request.rb +66 -0
- data/lib/trumpet/transmitter.rb +14 -8
- data/lib/trumpet/user.rb +31 -4
- data/lib/trumpet.rb +3 -11
- metadata +4 -4
- data/lib/http.rb +0 -68
- data/lib/trumpet/sieve.rb +0 -102
data/VERSION.yml
CHANGED
data/lib/core_extensions.rb
CHANGED
@@ -135,19 +135,4 @@ class Hash #:nodoc:
|
|
135
135
|
|
136
136
|
param
|
137
137
|
end
|
138
|
-
|
139
|
-
# @return <String> The hash as attributes for an XML tag.
|
140
|
-
#
|
141
|
-
# @example
|
142
|
-
# { :one => 1, "two"=>"TWO" }.to_xml_attributes
|
143
|
-
# #=> 'one="1" two="TWO"'
|
144
|
-
def to_xml_attributes
|
145
|
-
map do |k,v|
|
146
|
-
%{#{k.to_s.snake_case.sub(/^(.{1,1})/) { |m| m.downcase }}="#{v}"}
|
147
|
-
end.join(' ')
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
class BlankSlate #:nodoc:
|
152
|
-
instance_methods.each { |m| undef_method m unless m =~ /^__/ }
|
153
138
|
end
|
data/lib/trumpet/channel.rb
CHANGED
@@ -9,23 +9,23 @@ module Trumpet
|
|
9
9
|
attr_reader *@@attributes
|
10
10
|
|
11
11
|
def self.create(options)
|
12
|
-
Channel.new(
|
12
|
+
Channel.new(Trumpet::Request.post('/channels', :parameters => options))
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.find(name)
|
16
|
-
Channel.new(
|
16
|
+
Channel.new(Trumpet::Request.get("/channels/#{name}"))
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.all
|
20
|
-
|
20
|
+
Trumpet::Request.get('/channels').map { |attributes| Channel.new(attributes) }
|
21
21
|
end
|
22
22
|
|
23
23
|
def broadcast(message)
|
24
|
-
Message.new(
|
24
|
+
Message.new(Trumpet::Request.post("/channels/#{@name}/messages", :parameters => message.to_h))
|
25
25
|
end
|
26
26
|
|
27
27
|
def messages
|
28
|
-
messages =
|
28
|
+
messages = Trumpet::Request.get("/channels/#{@name}/messages")
|
29
29
|
messages.map { |attributes| Message.new(attributes) }
|
30
30
|
end
|
31
31
|
|
data/lib/trumpet/listener.rb
CHANGED
@@ -14,15 +14,20 @@ module Trumpet
|
|
14
14
|
|
15
15
|
|
16
16
|
def self.create(options)
|
17
|
-
Listener.new(
|
17
|
+
Listener.new(Trumpet::Request.post('/listeners', :parameters => options))
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.find(id)
|
21
|
-
Listener.new(
|
21
|
+
Listener.new(Trumpet::Request.get("/listeners/#{id}"))
|
22
22
|
end
|
23
23
|
|
24
24
|
def self.delete
|
25
|
-
|
25
|
+
!!Trumpet::Request.delete("/listeners/#{@id}")
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.all_by_receiver_id(receiver_id)
|
29
|
+
listeners = Trumpet::Request.get("/receivers/#{receiver_id}/listeners")
|
30
|
+
listeners.map { |attributes| Listener.new(attributes) }
|
26
31
|
end
|
27
32
|
|
28
33
|
|
data/lib/trumpet/message.rb
CHANGED
@@ -19,14 +19,31 @@ module Trumpet
|
|
19
19
|
attr_accessor *@@attributes
|
20
20
|
|
21
21
|
def initialize(attributes)
|
22
|
-
|
23
|
-
|
24
|
-
|
25
22
|
@@attributes.each do |attr|
|
26
23
|
self.send "#{attr.to_s}=".to_sym, (attributes[attr] || attributes[attr.to_s])
|
27
24
|
end
|
28
25
|
end
|
29
26
|
|
27
|
+
def self.create(attributes)
|
28
|
+
message = Message.new(attributes)
|
29
|
+
message.broadcast
|
30
|
+
message
|
31
|
+
end
|
32
|
+
|
33
|
+
# Post a message to the server, but only if it didn't come from the server
|
34
|
+
def broadcast
|
35
|
+
|
36
|
+
puts "Self to h: #{self.to_h}"
|
37
|
+
puts "And plain to h: #{to_h}"
|
38
|
+
|
39
|
+
unless @id
|
40
|
+
attributes = Trumpet::Request.post('/messages', :parameters => self.to_h)
|
41
|
+
@@attributes.each do |attr|
|
42
|
+
self.send "#{attr.to_s}=".to_sym, (attributes[attr] || attributes[attr.to_s])
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
30
47
|
def to_h
|
31
48
|
@@attributes.inject({}) { |hash, attribute| hash[attribute] = self.send(attribute); hash }
|
32
49
|
end
|
data/lib/trumpet/receiver.rb
CHANGED
@@ -19,19 +19,23 @@ module Trumpet
|
|
19
19
|
|
20
20
|
|
21
21
|
def self.create(options={})
|
22
|
-
Receiver.new(
|
22
|
+
Receiver.new(Trumpet::Request.post("/receivers", :parameters => options))
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.find(id)
|
26
|
-
Receiver.new(
|
26
|
+
Receiver.new(Trumpet::Request.get("/receivers/#{id}"))
|
27
27
|
end
|
28
28
|
|
29
29
|
def delete
|
30
|
-
|
30
|
+
!!Trumpet::Request.delete("/receivers/#{@id}")
|
31
|
+
end
|
32
|
+
|
33
|
+
def listeners
|
34
|
+
Trumpet::Listener.all_by_receiver_id(@id)
|
31
35
|
end
|
32
36
|
|
33
37
|
def messages
|
34
|
-
messages =
|
38
|
+
messages = Trumpet::Request.get("/receivers/#{@id}/messages")
|
35
39
|
messages.map { |attributes| Message.new(attributes) }
|
36
40
|
end
|
37
41
|
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Trumpet
|
2
|
+
module Request
|
3
|
+
@@http = Resourceful::HttpAccessor.new
|
4
|
+
@@uri = 'http://api.trumpet.io:3000'
|
5
|
+
# @@uri = 'http://localhost:3000'
|
6
|
+
|
7
|
+
def self.authenticate(username, password)
|
8
|
+
my_realm_authenticator = Resourceful::BasicAuthenticator.new('Trumpet', username, password)
|
9
|
+
@@http = Resourceful::HttpAccessor.new(:authenticator => my_realm_authenticator)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.get(path, options={})
|
13
|
+
do_request(:get, path, options)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.post(path, options={})
|
17
|
+
do_request(:post, path, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.put(path, options={})
|
21
|
+
do_request(:put, path, options)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.delete(path, options={})
|
25
|
+
do_request(:delete, path, options)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def self.do_request(method, path, options)
|
31
|
+
resource = @@http.resource("#{@@uri}#{URI.encode(path)}")
|
32
|
+
begin
|
33
|
+
response =
|
34
|
+
if method == :post
|
35
|
+
resource.send(method, options[:parameters].to_params, :content_type => "application/x-www-form-urlencoded")
|
36
|
+
elsif options[:parameters]
|
37
|
+
resource.send(method, options[:parameters].to_params)
|
38
|
+
else
|
39
|
+
resource.send(method)
|
40
|
+
end
|
41
|
+
rescue Resourceful::UnsuccessfulHttpRequestError => e
|
42
|
+
response = e.http_response
|
43
|
+
error_string = JSON.parse(response.body).to_s
|
44
|
+
|
45
|
+
case response.code
|
46
|
+
when 400
|
47
|
+
raise Trumpet::BadRequest, error_string
|
48
|
+
when 403
|
49
|
+
raise Trumpet::Forbidden, error_string
|
50
|
+
when 404
|
51
|
+
raise Trumpet::NotFound, error_string
|
52
|
+
when 405
|
53
|
+
raise Trumpet::MethodNotAllowed, error_string
|
54
|
+
when 500
|
55
|
+
raise Trumpet::InternalServerError, error_string
|
56
|
+
when 501
|
57
|
+
raise Trumpet::NotImplemented, error_string
|
58
|
+
end
|
59
|
+
rescue IOError # Coudln't connect to server
|
60
|
+
raise Trumpet::ServerConnectionError, 'Could not connect to server'
|
61
|
+
end
|
62
|
+
|
63
|
+
(options[:parse_response] == false) ? response : JSON.parse(response.body)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/trumpet/transmitter.rb
CHANGED
@@ -17,27 +17,33 @@ module Trumpet
|
|
17
17
|
attr_reader *@@attributes
|
18
18
|
|
19
19
|
def self.create(options)
|
20
|
-
|
21
|
-
Transmitter.new(attributes)
|
20
|
+
Transmitter.new(Trumpet::Request.post('transmitters', :parameters => options))
|
22
21
|
end
|
23
22
|
|
24
23
|
def self.find(id)
|
25
|
-
|
26
|
-
Transmitter.new(attributes)
|
24
|
+
Transmitter.new(Trumpet::Request.get("/transmitters/#{id}"))
|
27
25
|
end
|
28
26
|
|
29
27
|
def delete
|
30
|
-
|
28
|
+
Trumpet::Request.delete("/transmitters/#{@id}")
|
31
29
|
end
|
32
30
|
|
33
31
|
def listeners
|
34
|
-
listeners =
|
32
|
+
listeners = Trumpet::Request.get("/transmitters/#{@id}/listeners")
|
35
33
|
listeners.map { |attributes| Listener.new(attributes) }
|
36
34
|
end
|
37
35
|
|
38
36
|
def broadcast(message)
|
39
|
-
|
37
|
+
Trumpet::Request.post("/transmitters/#{@transmitter_id}/messages", :parameters => message.to_h)
|
40
38
|
end
|
41
|
-
|
39
|
+
|
40
|
+
|
41
|
+
protected
|
42
|
+
|
43
|
+
def initialize(attributes)
|
44
|
+
@@attributes.each do |attr|
|
45
|
+
self.instance_variable_set(:"@#{attr.to_s}", attributes[attr.to_s]) if attributes[attr.to_s]
|
46
|
+
end
|
47
|
+
end
|
42
48
|
end
|
43
49
|
end
|
data/lib/trumpet/user.rb
CHANGED
@@ -4,17 +4,44 @@ module Trumpet
|
|
4
4
|
attr_reader *@@attributes
|
5
5
|
|
6
6
|
def self.create(options)
|
7
|
-
attributes = post('/users', options)
|
7
|
+
attributes = Trumpet::Request.post('/users', :parameters => options)
|
8
8
|
User.new(attributes)
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.find(name)
|
12
|
-
|
13
|
-
User.new(attributes) if attributes["name"]
|
12
|
+
User.new(Trumpet::Request.get("/users/#{name}"))
|
14
13
|
end
|
15
14
|
|
16
15
|
def delete
|
17
|
-
|
16
|
+
!!Trumpet::Request.delete("/users/#{@name}")
|
18
17
|
end
|
18
|
+
|
19
|
+
def channels
|
20
|
+
channels = Trumpet::Request.get("/users/#{@name}/channels")
|
21
|
+
channels.map { |attributes| Trumpet::Channel.new(attributes) }
|
22
|
+
end
|
23
|
+
|
24
|
+
def listeners
|
25
|
+
listeners = Trumpet::Request.get("/users/#{@name}/listeners")
|
26
|
+
listeners.map { |attributes| Trumpet::Channel.new(attributes) }
|
27
|
+
end
|
28
|
+
|
29
|
+
def receivers
|
30
|
+
receivers = Trumpet::Request.get("/users/#{@name}/receivers")
|
31
|
+
receivers.map { |attributes| Trumpet::Channel.new(attributes) }
|
32
|
+
end
|
33
|
+
|
34
|
+
def transmitters
|
35
|
+
transmitters = Trumpet::Request.get("/users/#{@name}/transmitters")
|
36
|
+
transmitters.map { |attributes| Trumpet::Transmitter.new(attributes) }
|
37
|
+
end
|
38
|
+
|
39
|
+
protected
|
40
|
+
|
41
|
+
def initialize(attributes)
|
42
|
+
@@attributes.each do |attr|
|
43
|
+
self.instance_variable_set(:"@#{attr.to_s}", attributes[attr.to_s]) if attributes[attr.to_s]
|
44
|
+
end
|
45
|
+
end
|
19
46
|
end
|
20
47
|
end
|
data/lib/trumpet.rb
CHANGED
@@ -5,25 +5,17 @@ require 'resourceful'
|
|
5
5
|
require 'json'
|
6
6
|
|
7
7
|
require 'core_extensions'
|
8
|
-
require 'http'
|
9
8
|
|
10
9
|
|
11
10
|
module Trumpet
|
12
|
-
include HTTP
|
13
|
-
|
14
|
-
def authenticate(name, token)
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
def authenticated?
|
19
|
-
|
20
|
-
end
|
21
11
|
end
|
22
12
|
|
13
|
+
require 'trumpet/request'
|
23
14
|
require 'trumpet/trumpet_resource'
|
24
15
|
require 'trumpet/exceptions'
|
25
16
|
require 'trumpet/message'
|
26
17
|
require 'trumpet/receiver'
|
27
18
|
require 'trumpet/listener'
|
28
19
|
require 'trumpet/transmitter'
|
29
|
-
require 'trumpet/channel'
|
20
|
+
require 'trumpet/channel'
|
21
|
+
require 'trumpet/helpers'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trumpet-trumpet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Taras
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-05-01 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -47,14 +47,14 @@ files:
|
|
47
47
|
- Rakefile
|
48
48
|
- VERSION.yml
|
49
49
|
- lib/core_extensions.rb
|
50
|
-
- lib/http.rb
|
51
50
|
- lib/trumpet.rb
|
52
51
|
- lib/trumpet/channel.rb
|
53
52
|
- lib/trumpet/exceptions.rb
|
53
|
+
- lib/trumpet/helpers.rb
|
54
54
|
- lib/trumpet/listener.rb
|
55
55
|
- lib/trumpet/message.rb
|
56
56
|
- lib/trumpet/receiver.rb
|
57
|
-
- lib/trumpet/
|
57
|
+
- lib/trumpet/request.rb
|
58
58
|
- lib/trumpet/transmitter.rb
|
59
59
|
- lib/trumpet/trumpet_resource.rb
|
60
60
|
- lib/trumpet/user.rb
|
data/lib/http.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
module HTTP
|
2
|
-
@@http = Resourceful::HttpAccessor.new
|
3
|
-
@@uri = 'http://api.trumpet.io:3000'
|
4
|
-
|
5
|
-
def self.get(path, options={})
|
6
|
-
do_request(:get, path, options)
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.post(path, options={})
|
10
|
-
do_request(:post, path, options)
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.put(path, options={})
|
14
|
-
do_request(:put, path, options)
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.delete(path, options={})
|
18
|
-
do_request(:delete, path, options)
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def self.do_request(method, path, options)
|
24
|
-
resource = @@http.resource("#{@@uri}#{URI.encode(path)}")
|
25
|
-
begin
|
26
|
-
response = if method == :post
|
27
|
-
resource.send(method, options[:parameters].to_params, :content_type => "application/x-www-form-urlencoded")
|
28
|
-
else
|
29
|
-
options[:parameters] ? resource.send(method, options[:parameters].to_params) : resource.send(method)
|
30
|
-
end
|
31
|
-
rescue Resourceful::UnsuccessfulHttpRequestError => e
|
32
|
-
response = e.http_response
|
33
|
-
error_string = JSON.parse(response.body).to_s
|
34
|
-
|
35
|
-
case response.code
|
36
|
-
when 400
|
37
|
-
raise Trumpet::BadRequest, error_string
|
38
|
-
when 403
|
39
|
-
raise Trumpet::Forbidden, error_string
|
40
|
-
when 404
|
41
|
-
raise Trumpet::NotFound, error_string
|
42
|
-
when 405
|
43
|
-
raise Trumpet::MethodNotAllowed, error_string
|
44
|
-
when 500
|
45
|
-
raise Trumpet::InternalServerError, error_string
|
46
|
-
when 501
|
47
|
-
raise Trumpet::NotImplemented, error_string
|
48
|
-
end
|
49
|
-
rescue IOError # Coudln't connect to server
|
50
|
-
raise Trumpet::ServerConnectionError, 'Could not connect to server'
|
51
|
-
end
|
52
|
-
|
53
|
-
(options[:parse_response] == false) ? response : JSON.parse(response.body)
|
54
|
-
end
|
55
|
-
|
56
|
-
def self.handle_response(response, parse_response)
|
57
|
-
case response.code
|
58
|
-
when 400
|
59
|
-
# TODO: what to do here?
|
60
|
-
when 404
|
61
|
-
raise Trumpet::ResourceNotFound JSON.parse(response.body)
|
62
|
-
when 500
|
63
|
-
# TODO: what to do here?
|
64
|
-
end
|
65
|
-
|
66
|
-
parse_response ? JSON.parse(response.body) : response
|
67
|
-
end
|
68
|
-
end
|
data/lib/trumpet/sieve.rb
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
module Trumpet
|
2
|
-
class Sieve
|
3
|
-
include HTTParty
|
4
|
-
base_uri 'devour.cc:3000'
|
5
|
-
|
6
|
-
@@options_attributes = [
|
7
|
-
:keywords , :location ,
|
8
|
-
:via , :to ,
|
9
|
-
:days , :start ,
|
10
|
-
:end , :expires ,
|
11
|
-
:foreign_id
|
12
|
-
]
|
13
|
-
|
14
|
-
attr_accessor :id, :foreign_id, :name, :type, :created_at, :options
|
15
|
-
|
16
|
-
@@options_attributes.each do |attribute|
|
17
|
-
define_method "#{attribute}=" do |value|
|
18
|
-
@options[attribute] = value
|
19
|
-
end
|
20
|
-
define_method attribute do
|
21
|
-
@options[attribute]
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
|
26
|
-
def initialize(options={})
|
27
|
-
options.reject! { |key, value| value.nil? || (value.is_a?(String) && value.strip.empty?) }
|
28
|
-
|
29
|
-
@options = {}
|
30
|
-
@@options_attributes.each do |attribute|
|
31
|
-
value = options[attribute] || options[attribute.to_s]
|
32
|
-
@options[attribute] = value if value
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def pull
|
37
|
-
add_to_server
|
38
|
-
|
39
|
-
self.class.get("/sieves/#{id}").inject([]) do |memo, attributes|
|
40
|
-
memo << Nugget.new(attributes)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def subscribe
|
45
|
-
wait_time ||= 2 # seconds
|
46
|
-
|
47
|
-
while true
|
48
|
-
results = pull
|
49
|
-
results.each { |nugget| yield nugget }
|
50
|
-
wait_time = results.nil? ? wait_time*2 : [wait_time/2, 2].max
|
51
|
-
sleep(wait_time)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def delete
|
56
|
-
self.class.delete("/sieves/#{@id}")
|
57
|
-
end
|
58
|
-
|
59
|
-
def add_to_server
|
60
|
-
unless @id
|
61
|
-
attributes = self.class.post("/sieves", :query => options)
|
62
|
-
@id = attributes['id']
|
63
|
-
@type = attributes['type']
|
64
|
-
@name = attributes['name']
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def self.index
|
69
|
-
get("/sieves")
|
70
|
-
end
|
71
|
-
|
72
|
-
def self.find(id)
|
73
|
-
attributes = get("/sieves/?id=#{id}").first
|
74
|
-
instantiate(attributes)
|
75
|
-
end
|
76
|
-
|
77
|
-
def self.find_by_foreign_id(foreign_id)
|
78
|
-
sieve_attributes = get("/sieves/?foreign_id=#{foreign_id}")
|
79
|
-
sieve_attributes.collect { |attributes| instantiate(attributes) }
|
80
|
-
end
|
81
|
-
|
82
|
-
def self.create(options={})
|
83
|
-
sieve = new(options)
|
84
|
-
sieve.add_to_server
|
85
|
-
sieve
|
86
|
-
end
|
87
|
-
|
88
|
-
|
89
|
-
private
|
90
|
-
|
91
|
-
def self.instantiate(attributes)
|
92
|
-
sieve = allocate
|
93
|
-
|
94
|
-
sieve.id = attributes['id']
|
95
|
-
sieve.options = attributes['options']
|
96
|
-
sieve.type = attributes['type']
|
97
|
-
sieve.name = attributes['name']
|
98
|
-
|
99
|
-
sieve
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|