trumpet-trumpet 0.0.12 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/LICENSE +0 -0
  2. data/README.rdoc +0 -0
  3. data/Rakefile +1 -0
  4. data/VERSION.yml +2 -2
  5. data/lib/core_extensions.rb +0 -0
  6. data/lib/trumpet.rb +6 -2
  7. data/lib/trumpet/base.rb +16 -0
  8. data/lib/trumpet/channel.rb +14 -30
  9. data/lib/trumpet/delegator.rb +47 -0
  10. data/lib/trumpet/exceptions.rb +0 -0
  11. data/lib/trumpet/helpers.rb +1 -10
  12. data/lib/trumpet/listener.rb +9 -32
  13. data/lib/trumpet/message.rb +10 -18
  14. data/lib/trumpet/receiver.rb +13 -43
  15. data/lib/trumpet/request.rb +32 -22
  16. data/lib/trumpet/resource.rb +13 -0
  17. data/lib/trumpet/transmitter.rb +11 -41
  18. data/lib/trumpet/user.rb +20 -22
  19. data/spec/channel_spec.rb +39 -1
  20. data/spec/fixtures/channels/all +1 -0
  21. data/spec/fixtures/channels/create +1 -0
  22. data/spec/fixtures/channels/messages +1 -0
  23. data/spec/fixtures/channels/show +1 -0
  24. data/spec/fixtures/listeners/create +1 -0
  25. data/spec/fixtures/listeners/find +1 -0
  26. data/spec/fixtures/receivers/create +1 -0
  27. data/spec/fixtures/receivers/find +1 -0
  28. data/spec/fixtures/receivers/messages +1 -0
  29. data/spec/fixtures/transmitters/create +1 -0
  30. data/spec/fixtures/transmitters/find +1 -0
  31. data/spec/fixtures/users/channels +1 -0
  32. data/spec/fixtures/users/create +1 -0
  33. data/spec/fixtures/users/listeners +1 -0
  34. data/spec/fixtures/users/receivers +1 -0
  35. data/spec/fixtures/users/show +1 -0
  36. data/spec/listener_spec.rb +27 -0
  37. data/spec/message_spec.rb +60 -0
  38. data/spec/receiver_spec.rb +35 -0
  39. data/spec/resource_spec.rb +7 -0
  40. data/spec/spec_helper.rb +4 -0
  41. data/spec/transmitter_spec.rb +29 -0
  42. data/spec/user_spec.rb +58 -0
  43. metadata +45 -4
data/LICENSE CHANGED
File without changes
data/README.rdoc CHANGED
File without changes
data/Rakefile CHANGED
@@ -10,6 +10,7 @@ begin
10
10
  gem.homepage = "http://github.com/trumpet/trumpet"
11
11
  gem.authors = ["Michael Taras"]
12
12
  gem.add_dependency 'json'
13
+ gem.add_dependency 'fakeweb'
13
14
 
14
15
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
16
  end
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 12
2
+ :minor: 1
3
+ :patch: 0
3
4
  :major: 0
4
- :minor: 0
File without changes
data/lib/trumpet.rb CHANGED
@@ -5,6 +5,7 @@ require 'json'
5
5
 
6
6
  require 'net/http'
7
7
  require 'uri'
8
+ require 'pp'
8
9
 
9
10
  require 'core_extensions'
10
11
 
@@ -12,12 +13,15 @@ require 'core_extensions'
12
13
  module Trumpet
13
14
  end
14
15
 
15
- require 'trumpet/request'
16
16
  require 'trumpet/exceptions'
17
+ require 'trumpet/request'
18
+ require 'trumpet/resource'
17
19
  require 'trumpet/message'
18
20
  require 'trumpet/receiver'
19
21
  require 'trumpet/listener'
20
22
  require 'trumpet/transmitter'
21
23
  require 'trumpet/channel'
22
24
  require 'trumpet/user'
23
- require 'trumpet/helpers'
25
+ require 'trumpet/helpers'
26
+ require 'trumpet/delegator'
27
+ require 'trumpet/base'
@@ -0,0 +1,16 @@
1
+ module Trumpet
2
+ class Base
3
+ include Delegator
4
+
5
+ delegate_with_credentials :users, User
6
+ delegate_with_credentials :channels, Channel
7
+ delegate_with_credentials :messages, Message
8
+ delegate_with_credentials :receivers, Receiver
9
+ delegate_with_credentials :listeners, Listener
10
+ delegate_with_credentials :transmitters, Transmitter
11
+
12
+ def initialize(credentials={})
13
+ @credentials = credentials unless credentials.empty?
14
+ end
15
+ end
16
+ end
@@ -1,49 +1,33 @@
1
1
  module Trumpet
2
- class Channel
3
- @@attributes = [
4
- :name,
5
- :description,
6
- :receiver_id,
7
- :transmitter_id,
8
- :owner_id,
9
- :created_at,
10
- :updated_at
11
- ]
12
-
13
- attr_reader *@@attributes
2
+ class Channel < Trumpet::Resource
14
3
 
15
4
  def self.create(options)
16
- Channel.new(Trumpet::Request.post('/channels', :parameters => options))
5
+ Channel.new(Trumpet::Request.post('/channels', options))
17
6
  end
18
7
 
19
- def self.find(name)
20
- Channel.new(Trumpet::Request.get("/channels/#{name}"))
8
+ def self.find(name, options={})
9
+ Channel.new(Trumpet::Request.get("/channels/#{name}", options))
21
10
  end
22
11
 
23
- def self.all
24
- Trumpet::Request.get('/channels').map { |attributes| Channel.new(attributes) }
12
+ def self.all(options={})
13
+ Trumpet::Request.get('/channels', options).map { |attributes| Channel.new(attributes) }
25
14
  end
26
15
 
27
- def self.all_by_user(name)
28
- channels = Trumpet::Request.get("/users/#{name}/channels")
16
+ def self.all_by_user(name, options={})
17
+ channels = Trumpet::Request.get("/users/#{name}/channels", options)
29
18
  channels.map { |attributes| Channel.new(attributes) }
30
19
  end
31
20
 
32
- def broadcast(message)
33
- !!Trumpet::Request.post("/channels/#{@name}/messages", :parameters => message.to_h, :parse_response => false)
21
+ def broadcast(message, options={})
22
+ options[:credentials] ||= @credentials
23
+ !!Trumpet::Request.post("/channels/#{@name}/messages", :parameters => message.to_h, :parse_response => false, :credentials => options[:credentials])
34
24
  end
35
25
 
36
- def messages
37
- messages = Trumpet::Request.get("/channels/#{@name}/messages")
26
+ def messages(options={})
27
+ options[:credentials] ||= @credentials
28
+ messages = Trumpet::Request.get("/channels/#{@name}/messages", options)
38
29
  messages.map { |attributes| Message.new(attributes) }
39
30
  end
40
-
41
- protected
42
31
 
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
48
32
  end
49
33
  end
@@ -0,0 +1,47 @@
1
+ # This module defines the delegate_with_credentials method on classes that include it
2
+ # This allows the class to say the following :
3
+ #
4
+ # delegate_with_request :users, Trumpet::User
5
+ #
6
+ # And any instance of the class will have a users method on it, which will delegate
7
+ # calls to the Trumpet::User class with the proper request object in the args
8
+
9
+ module Trumpet
10
+ module Delegator
11
+
12
+ class ResourceDelegator
13
+ def initialize(delegate, credentials)
14
+ @delegate = delegate
15
+ @credentials = credentials
16
+ end
17
+
18
+ def method_missing(sym, args=nil)
19
+ if args.nil?
20
+ new_args = Hash.new
21
+ new_args[:credentials] = @credentials if @credentials
22
+ @delegate.send sym, new_args
23
+ elsif args.is_a? Hash
24
+ new_args = {}
25
+ new_args[:parameters] = args
26
+ new_args[:credentials] = @credentials if @credentials
27
+ @delegate.send sym, new_args
28
+ else
29
+ new_args = [args]
30
+ new_args << {:credentials => @credentials} if @credentials
31
+ @delegate.send sym, *new_args
32
+ end
33
+ end
34
+ end
35
+
36
+ def self.included(includer)
37
+ class << includer
38
+ def delegate_with_credentials(resource, klass)
39
+ define_method resource do
40
+ ResourceDelegator.new(klass, @credentials)
41
+ end
42
+ end
43
+ end
44
+ end
45
+
46
+ end
47
+ end
File without changes
@@ -1,14 +1,5 @@
1
- module Trumpet
2
- def self.authenticate(username, password)
3
- Trumpet::Request.authenticate(username, password)
4
- true
5
- end
6
-
1
+ module Trumpet
7
2
  def self.set_server(uri, port=nil)
8
3
  Trumpet::Request.set_server(uri, port)
9
4
  end
10
-
11
- def self.clear_credentials
12
- Trumpet::Request.clear_credentials
13
- end
14
5
  end
@@ -1,46 +1,23 @@
1
1
  module Trumpet
2
- class Listener
3
- @@attributes = [
4
- :id,
5
- :receiver_id,
6
- :owner_id,
7
- :uri,
8
- :schedule,
9
- :created_at,
10
- :updated_at,
11
- ]
12
-
13
- attr_reader *@@attributes
14
-
2
+ class Listener < Trumpet::Resource
15
3
 
16
4
  def self.create(options)
17
- if options[:receiver_id]
18
- Listener.new(Trumpet::Request.post("/receivers/#{options[:receiver_id]}/listeners", :parameters => options))
5
+ if options[:parameters][:receiver_id]
6
+ Listener.new(Trumpet::Request.post("/receivers/#{options[:parameters][:receiver_id]}/listeners", options))
19
7
  else
20
8
  raise Trumpet::BadRequest, "Must specify a receiver id when creating a listener"
21
9
  end
22
10
  end
23
11
 
24
- def self.find(id)
25
- Listener.new(Trumpet::Request.get("/listeners/#{id}"))
26
- end
27
-
28
- def self.all_by_user(name)
29
- listeners = Trumpet::Request.get("/users/#{name}/listeners")
30
- listeners.map { |attributes| Listener.new(attributes) }
12
+ def self.find(id, options={})
13
+ Listener.new(Trumpet::Request.get("/listeners/#{id}", options))
31
14
  end
32
15
 
33
- def delete
34
- !!Trumpet::Request.delete("/listeners/#{@id}", :parse_response => false)
16
+ def delete(options={})
17
+ options[:credentials] ||= @credentials
18
+ options[:parse_response] = false
19
+ !!Trumpet::Request.delete("/listeners/#{@id}", options)
35
20
  end
36
21
 
37
-
38
- protected
39
-
40
- def initialize(attributes)
41
- @@attributes.each do |attr|
42
- self.instance_variable_set(:"@#{attr.to_s}", attributes[attr.to_s]) if attributes[attr.to_s]
43
- end
44
- end
45
22
  end
46
23
  end
@@ -1,5 +1,6 @@
1
1
  module Trumpet
2
2
  class Message
3
+
3
4
  @@attributes = [
4
5
  :url , :created_by_id,
5
6
  :author , :author_name,
@@ -9,36 +10,27 @@ module Trumpet
9
10
  :lat , :lng,
10
11
  :radius , :channel,
11
12
  :public , :authorized_receiver_owners,
12
- :content , :created_at,
13
- :updated_at , :id
13
+ :content , :id,
14
+ :created_at , :updated_at
14
15
  ]
15
16
 
16
17
  #TODO: created_at and updated_at maybe not writable
17
-
18
-
18
+
19
19
  attr_accessor *@@attributes
20
20
 
21
- def initialize(attributes)
21
+ def initialize(options)
22
+ parameters = options[:parameters] ? options[:parameters] : options
22
23
  @@attributes.each do |attr|
23
- self.send "#{attr.to_s}=".to_sym, (attributes[attr] || attributes[attr.to_s])
24
+ self.send "#{attr.to_s}=".to_sym, (parameters[attr] || parameters[attr.to_s])
24
25
  end
25
26
  end
26
27
 
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
- unless @id
36
- !!Trumpet::Request.post('/messages', :parameters => self.to_h, :parse_response => false)
37
- end
28
+ def self.create(request, attributes)
29
+ !!request.post('/messages', :parameters => self.to_h, :parse_response => false)
38
30
  end
39
31
 
40
32
  def to_h
41
33
  @@attributes.inject({}) { |hash, attribute| hash[attribute] = self.send(attribute); hash }
42
34
  end
43
35
  end
44
- end
36
+ end
@@ -1,59 +1,29 @@
1
1
  module Trumpet
2
- class Receiver
2
+ class Receiver < Trumpet::Resource
3
3
 
4
- @@attributes = [
5
- :id , :url,
6
- :source_url , :owner_id ,
7
- :author , :author_name ,
8
- :avatar_url , :authored_at ,
9
- :title , :description ,
10
- :tags , :location_string ,
11
- :lat , :lng ,
12
- :radius , :channels ,
13
- :keywords , :name ,
14
- :created_at , :updated_at ,
15
- :errors
16
- ]
17
- attr_reader *@@attributes
18
-
19
-
20
- def self.create(options={})
21
- Receiver.new(Trumpet::Request.post("/receivers", :parameters => options))
4
+ def self.create(options)
5
+ Receiver.new(Trumpet::Request.post("/receivers", options))
22
6
  end
23
7
 
24
- def self.find(id)
25
- Receiver.new(Trumpet::Request.get("/receivers/#{id}"))
26
- end
27
-
28
- def self.all_by_user(name)
29
- receivers = Trumpet::Request.get("/users/#{name}/receivers")
30
- receivers.map { |attributes| Receiver.new(attributes) }
31
- end
32
-
33
- def delete
34
- !!Trumpet::Request.delete("/receivers/#{@id}")
8
+ def self.find(id, options={})
9
+ Receiver.new(Trumpet::Request.get("/receivers/#{id}", options))
35
10
  end
36
11
 
37
- def listeners
38
- Trumpet::Listener.all_by_receiver_id(@id)
12
+ def delete(options={})
13
+ options[:credentials] ||= @credentials
14
+ options[:parse_response] = false
15
+ !!Trumpet::Request.delete("/receivers/#{@id}", options)
39
16
  end
40
17
 
41
- def messages
42
- messages = Trumpet::Request.get("/receivers/#{@id}/messages")
18
+ def messages(options={})
19
+ options[:credentials] ||= @credentials
20
+ messages = Trumpet::Request.get("/receivers/#{@id}/messages", options)
43
21
  messages.map { |attributes| Message.new(attributes) }
44
22
  end
45
23
 
46
24
  def listen
47
25
  #TODO: impliment this
48
26
  end
49
-
50
-
51
- protected
52
-
53
- def initialize(attributes)
54
- @@attributes.each do |attr|
55
- self.instance_variable_set(:"@#{attr.to_s}", attributes[attr.to_s]) if attributes[attr.to_s]
56
- end
57
- end
27
+
58
28
  end
59
29
  end
@@ -1,17 +1,7 @@
1
1
  module Trumpet
2
2
  module Request
3
- @@http = Net::HTTP.new('api.trumpet.io', 3000)
4
- @@http_auth = {}
5
-
6
- def self.authenticate(username, password)
7
- @@http_auth[:username] = username
8
- @@http_auth[:password] = password
9
- end
10
-
11
- def self.clear_credentials
12
- @@http_auth = {}
13
- end
14
-
3
+ @@http = Net::HTTP.new('api.trumpet.io')
4
+
15
5
  def self.get(path, options={})
16
6
  do_request(Net::HTTP::Get, path, options)
17
7
  end
@@ -25,23 +15,33 @@ module Trumpet
25
15
  end
26
16
 
27
17
  def self.delete(path, options={})
28
- do_request(Net::HTTP::Delete, path, options)
18
+ do_request(Net::HTTP::Delete, path, options)
29
19
  end
30
20
 
31
- def self.set_server(uri, port=nil)
32
- @@http = Net::HTTP.new(uri.gsub('http://', ''), port) #no http:// in hosts
21
+ def self.set_server(host, port=nil)
22
+ @@http = Net::HTTP.new(host.gsub('http://', ''), port) #no http:// in hosts
33
23
  end
34
24
 
35
25
  private
36
26
 
37
- def self.do_request(http_method, path, options)
27
+ def self.do_request(http_method, path, options={})
38
28
  raw_request = http_method.new(path)
39
- raw_request.basic_auth(@@http_auth[:username], @@http_auth[:password]) unless @@http_auth.empty?
29
+ raw_request.basic_auth(options[:credentials][:username], options[:credentials][:password]) if options[:credentials]
40
30
  raw_request.body = options[:parameters].to_params if options[:parameters]
41
-
42
-
31
+
43
32
  response = @@http.request(raw_request)
44
-
33
+ handle_errors(response)
34
+
35
+ if options[:parse_response] == false
36
+ response
37
+ else
38
+ parsed_response = JSON.parse(response.body)
39
+ attach_credentials(parsed_response, options[:credentials]) if options[:credentials]
40
+ parsed_response
41
+ end
42
+ end
43
+
44
+ def self.handle_errors(response)
45
45
  unless response.code.to_i < 400
46
46
  error_string = JSON.parse(response.body).to_s
47
47
  case response.code.to_i
@@ -60,8 +60,18 @@ module Trumpet
60
60
  when 501
61
61
  raise Trumpet::NotImplemented, error_string
62
62
  end
63
- end
64
- (options[:parse_response] == false) ? response : JSON.parse(response.body)
63
+ end
65
64
  end
65
+
66
+ def self.attach_credentials(parsed_response, credentials)
67
+ if parsed_response.is_a? Array
68
+ parsed_response.each do |attributes|
69
+ attributes[:credentials] = credentials
70
+ end
71
+ else
72
+ parsed_response[:credentials] = credentials
73
+ end
74
+ end
75
+
66
76
  end
67
77
  end
@@ -0,0 +1,13 @@
1
+ module Trumpet
2
+ class Resource
3
+
4
+ protected
5
+
6
+ def initialize(attributes)
7
+ attributes.each do |attribute, value|
8
+ self.class.send(:define_method, attribute) { instance_variable_get(:"@#{attribute.to_s}") }
9
+ instance_variable_set(:"@#{attribute.to_s}", value)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,54 +1,24 @@
1
1
  module Trumpet
2
- class Transmitter
3
- @@attributes = [
4
- :id,
5
- :source_url,
6
- :tags,
7
- :location_string,
8
- :channel,
9
- :lat,
10
- :lng,
11
- :radius,
12
- :public,
13
- :created_at,
14
- :updated_at,
15
- ]
16
-
17
- attr_reader *@@attributes
2
+ class Transmitter < Trumpet::Resource
18
3
 
19
4
  def self.create(options)
20
- Transmitter.new(Trumpet::Request.post('transmitters', :parameters => options))
21
- end
22
-
23
- def self.find(id)
24
- Transmitter.new(Trumpet::Request.get("/transmitters/#{id}"))
5
+ Transmitter.new(Trumpet::Request.post('/transmitters', options))
25
6
  end
26
7
 
27
- def self.all_by_user(name)
28
- transmitters = Trumpet::Request.get("/users/#{name}/transmitters")
29
- transmitters.map { |attributes| Trumpet::Transmitter.new(attributes) }
8
+ def self.find(id, options={})
9
+ Transmitter.new(Trumpet::Request.get("/transmitters/#{id}", options))
30
10
  end
31
11
 
32
- def delete
33
- Trumpet::Request.delete("/transmitters/#{@id}")
12
+ def delete(options={})
13
+ Trumpet::Request.delete("/transmitters/#{@id}", options)
34
14
  end
35
15
 
36
- def listeners
37
- listeners = Trumpet::Request.get("/transmitters/#{@id}/listeners")
38
- listeners.map { |attributes| Listener.new(attributes) }
16
+ def broadcast(message, options={})
17
+ options[:credentials] ||= @credentials
18
+ options[:parameters] = message.to_h
19
+ options[:parse_response] = false
20
+ !!Trumpet::Request.post("/transmitters/#{@id}/messages", options)
39
21
  end
40
22
 
41
- def broadcast(message)
42
- Trumpet::Request.post("/transmitters/#{@transmitter_id}/messages", :parameters => message.to_h, :parse_response => false)
43
- end
44
-
45
-
46
- protected
47
-
48
- def initialize(attributes)
49
- @@attributes.each do |attr|
50
- self.instance_variable_set(:"@#{attr.to_s}", attributes[attr.to_s]) if attributes[attr.to_s]
51
- end
52
- end
53
23
  end
54
24
  end
data/lib/trumpet/user.rb CHANGED
@@ -1,40 +1,38 @@
1
1
  module Trumpet
2
- class User
3
- @@attributes = [:id, :name]
4
- attr_reader *@@attributes
2
+ class User < Trumpet::Resource
5
3
 
6
4
  def self.create(options)
7
- attributes = Trumpet::Request.post('/users', :parameters => options)
5
+ attributes = Trumpet::Request.post('/users', options)
8
6
  User.new(attributes)
9
7
  end
10
8
 
11
- def self.find(name)
12
- User.new(Trumpet::Request.get("/users/#{name}"))
9
+ def self.find(name, options={})
10
+ User.new(Trumpet::Request.get("/users/#{name}", options))
13
11
  end
14
12
 
15
- def delete
16
- !!Trumpet::Request.delete("/users/#{@name}")
13
+ def delete(options={})
14
+ options[:credentials] ||= @credentials
15
+ options[:parse_response] = false
16
+ !!Trumpet::Request.delete("/users/#{@name}", options)
17
17
  end
18
18
 
19
- def channels
20
- Trumpet::Channel.all_by_user(@name)
19
+ def channels(options={})
20
+ options[:credentials] ||= @credentials
21
+ channels = Trumpet::Request.get("/users/#{name}/channels", options)
22
+ channels.map { |attributes| Channel.new(attributes) }
21
23
  end
22
24
 
23
- def listeners
24
- Trumpet::Listener.all_by_user(@name)
25
+ def listeners(options={})
26
+ options[:credentials] ||= @credentials
27
+ listeners = Trumpet::Request.get("/users/#{name}/listeners", options)
28
+ listeners.map { |attributes| Listener.new(attributes) }
25
29
  end
26
30
 
27
- def receivers
28
- Trumpet::Receiver.all_by_user(@name)
31
+ def receivers(options={})
32
+ options[:credentials] ||= @credentials
33
+ receivers = Trumpet::Request.get("/users/#{name}/receivers", options)
34
+ receivers.map { |attributes| Receiver.new(attributes) }
29
35
  end
30
36
 
31
-
32
- protected
33
-
34
- def initialize(attributes)
35
- @@attributes.each do |attr|
36
- self.instance_variable_set(:"@#{attr.to_s}", attributes[attr.to_s]) if attributes[attr.to_s]
37
- end
38
- end
39
37
  end
40
38
  end
data/spec/channel_spec.rb CHANGED
@@ -1,5 +1,43 @@
1
- require 'spec_helper'
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
3
  describe "Channel" do
4
4
 
5
+ before(:all) do
6
+ @trumpet = Trumpet::Base.new :username => 'somedude', :password => 'somepassword'
7
+
8
+ FakeWeb.register_uri :post, "somedude:somepassword@api.trumpet.io/channels", :file => "#{File.dirname(__FILE__)}/fixtures/channels/create"
9
+ FakeWeb.register_uri :get, "somedude:somepassword@api.trumpet.io/channels", :file => "#{File.dirname(__FILE__)}/fixtures/channels/all"
10
+ FakeWeb.register_uri :get, "somedude:somepassword@api.trumpet.io/channels/radical", :file => "#{File.dirname(__FILE__)}/fixtures/channels/show"
11
+ FakeWeb.register_uri :post, "somedude:somepassword@api.trumpet.io/channels/radical/messages", :status => ["204", "OK"]
12
+ FakeWeb.register_uri :get, "somedude:somepassword@api.trumpet.io/channels/radical/messages", :file => "#{File.dirname(__FILE__)}/fixtures/channels/messages"
13
+ end
14
+
15
+ it 'should let me create a channel' do
16
+ channel = @trumpet.channels.create :name => 'radical'
17
+ channel.name.should == 'radical'
18
+ end
19
+
20
+ it 'should return a list of all channels' do
21
+ channels = @trumpet.channels.all
22
+ channels.length.should == 2
23
+ channels.first.name.should == 'cool'
24
+ channels.last.name.should == 'radical'
25
+ end
26
+
27
+ it 'should find a channel by name' do
28
+ channel = @trumpet.channels.find 'radical'
29
+ channel.name.should == 'radical'
30
+ end
31
+
32
+ it 'should allow me to broadcast a message through a channel' do
33
+ channel = @trumpet.channels.find 'radical'
34
+ channel.broadcast(Trumpet::Message.new(:content => 'dude, awesome')).should == true
35
+ end
36
+
37
+ it 'should return all messages in a given channel' do
38
+ channel = @trumpet.channels.find 'radical'
39
+ messages = channel.messages
40
+ messages.length.should == 3
41
+ end
42
+
5
43
  end
@@ -0,0 +1 @@
1
+ [{"receiver_id":1,"name":"cool","updated_at":null,"description":null,"owner_id":1,"transmitter_id":1,"created_at":null},{"receiver_id":2,"name":"radical","updated_at":null,"description":null,"owner_id":1,"transmitter_id":2,"created_at":null}]
@@ -0,0 +1 @@
1
+ {"receiver_id":2,"name":"radical","updated_at":null,"description":null,"owner_id":1,"transmitter_id":2,"created_at":null}
@@ -0,0 +1 @@
1
+ [{"updated_at":"2009/05/13 11:29:50 -0700","public":true,"id":2,"content":"Super Gnarly Dude","channel":"radical","created_at":"2009/05/13 11:29:50 -0700"},{"updated_at":"2009/05/13 11:36:50 -0700","public":true,"id":3,"content":"Super Gnarly Dude","channel":"radical","created_at":"2009/05/13 11:36:50 -0700"},{"updated_at":"2009/05/13 11:36:51 -0700","public":true,"id":4,"content":"Super Gnarly Dude","channel":"radical","created_at":"2009/05/13 11:36:51 -0700"}]
@@ -0,0 +1 @@
1
+ {"receiver_id":2,"name":"radical","updated_at":null,"description":null,"owner_id":1,"transmitter_id":2,"created_at":null}
@@ -0,0 +1 @@
1
+ {"owner":"raddude","created_at":"2009/05/13 16:01:01 -0700","receiver_id":1,"schedule":{"end":null,"start":null,"days":null},"id":1,"updated_at":"2009/05/13 16:01:01 -0700","uri":"mailto:\/\/someraddude@mailinator.com"}
@@ -0,0 +1 @@
1
+ {"owner":"raddude","created_at":"2009/05/13 16:01:01 -0700","receiver_id":1,"schedule":{"end":null,"start":null,"days":null},"id":1,"updated_at":"2009/05/13 16:01:01 -0700","uri":"mailto:\/\/someraddude@mailinator.com"}
@@ -0,0 +1 @@
1
+ {"name":"Everything ","updated_at":"2009/05/12 14:40:32 -0700","id":1,"owner_id":1,"channel":"cool","last_request":"2009/05/12 14:40:32 -0700","created_at":"2009/05/12 14:40:32 -0700","active":true}
@@ -0,0 +1 @@
1
+ {"name":"Everything ","updated_at":"2009/05/12 14:40:32 -0700","id":1,"owner_id":1,"channel":"cool","last_request":"2009/05/12 14:40:32 -0700","created_at":"2009/05/12 14:40:32 -0700","active":true}
@@ -0,0 +1 @@
1
+ [{"updated_at":"2009/05/12 14:49:07 -0700","public":true,"author":"radical","id":1,"content":"yay","channel":"cool","created_at":"2009/05/12 14:49:07 -0700"}]
@@ -0,0 +1 @@
1
+ {"radius":null,"updated_at":"2009/05/13 17:36:45 -0700","public":null,"tags":"dudes, gnarly, rad","source_url":null,"lng":null,"id":1,"public_transmissions":false,"owner_id":2,"channel":null,"location_string":null,"lat":null,"created_at":"2009/05/13 17:36:45 -0700"}
@@ -0,0 +1 @@
1
+ {"radius":null,"updated_at":"2009/05/13 17:36:45 -0700","public":null,"tags":"dudes, gnarly, rad","source_url":null,"lng":null,"id":1,"public_transmissions":false,"owner_id":2,"channel":null,"location_string":null,"lat":null,"created_at":"2009/05/13 17:36:45 -0700"}
@@ -0,0 +1 @@
1
+ [{"receiver_id":3,"name":"channel1","updated_at":null,"description":null,"owner_id":2,"transmitter_id":3,"created_at":null},{"receiver_id":4,"name":"channel2","updated_at":null,"description":null,"owner_id":2,"transmitter_id":4,"created_at":null},{"receiver_id":5,"name":"channel3","updated_at":null,"description":null,"owner_id":2,"transmitter_id":5,"created_at":null}]
@@ -0,0 +1 @@
1
+ {"name":"raddude","created_at":"2009/05/13 12:29:10 -0700","id":2,"updated_at":"2009/05/13 12:29:10 -0700"}
@@ -0,0 +1 @@
1
+ [{"owner":"raddude","created_at":"2009/05/13 14:24:53 -0700","receiver_id":1,"schedule":{"end":null,"start":null,"days":null},"id":1,"updated_at":"2009/05/13 14:24:53 -0700","uri":"mailto:\/\/someraddude@mailinator.com"},{"owner":"raddude","created_at":"2009/05/13 14:25:08 -0700","receiver_id":1,"schedule":{"end":null,"start":null,"days":null},"id":2,"updated_at":"2009/05/13 14:25:08 -0700","uri":"mailto:\/\/someotherdude@mailinator.com"},{"owner":"raddude","created_at":"2009/05/13 14:25:22 -0700","receiver_id":1,"schedule":{"end":null,"start":null,"days":null},"id":3,"updated_at":"2009/05/13 14:25:22 -0700","uri":"mailto:\/\/andanotherdude@mailinator.com"}]
@@ -0,0 +1 @@
1
+ [{"name":"other things, rad dudes ","updated_at":"2009/05/13 14:29:18 -0700","id":6,"owner_id":2,"last_request":"2009/05/13 14:29:18 -0700","keywords":"other things, rad dudes","created_at":"2009/05/13 14:29:18 -0700","active":true},{"name":"gnarly things, radical things ","updated_at":"2009/05/13 14:29:31 -0700","id":7,"owner_id":2,"last_request":"2009/05/13 14:29:31 -0700","keywords":"gnarly things, radical things","created_at":"2009/05/13 14:29:31 -0700","active":true},{"name":"other sweet things, pretty sweet stuff ","updated_at":"2009/05/13 14:29:49 -0700","id":8,"owner_id":2,"last_request":"2009/05/13 14:29:49 -0700","keywords":"other sweet things, pretty sweet stuff","created_at":"2009/05/13 14:29:49 -0700","active":true}]
@@ -0,0 +1 @@
1
+ {"name":"raddude","created_at":"2009/05/13 12:29:10 -0700","id":2,"updated_at":"2009/05/13 12:29:10 -0700"}
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe "Listener" do
4
+
5
+ before(:all) do
6
+ @trumpet = Trumpet::Base.new :username => "somedude", :password => "somepassword"
7
+
8
+ FakeWeb.register_uri :post, "#{AUTHENTICATED_URI}/receivers/1/listeners", :file => "#{File.dirname(__FILE__)}/fixtures/listeners/create"
9
+ FakeWeb.register_uri :get, "#{AUTHENTICATED_URI}/listeners/1", :file => "#{File.dirname(__FILE__)}/fixtures/listeners/find"
10
+ FakeWeb.register_uri :delete, "#{AUTHENTICATED_URI}/listeners/1", :string => ["204", "OK"]
11
+ end
12
+
13
+ it "should let me create a listener" do
14
+ listener = @trumpet.listeners.create :receiver_id => 1, :uri => 'mailto://someraddude@mailinator.com'
15
+ listener.uri.should == 'mailto://someraddude@mailinator.com'
16
+ end
17
+
18
+ it "should let me find an existing listener" do
19
+ listener = @trumpet.listeners.find(1)
20
+ listener.uri.should == 'mailto://someraddude@mailinator.com'
21
+ end
22
+
23
+ it "should let me delete an existing listener" do
24
+ listener = @trumpet.listeners.find(1)
25
+ listener.delete.should == true
26
+ end
27
+ end
@@ -0,0 +1,60 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe "Channel" do
4
+
5
+ before(:all) do
6
+ @trumpet = Trumpet::Base.new :username => 'somedude', :password => 'somepassword'
7
+
8
+ FakeWeb.register_uri :post, "somedude:somepassword@api.trumpet.io/messages", :file => "#{File.dirname(__FILE__)}/fixtures/messages/create"
9
+ end
10
+
11
+ it "should instantiate a message through the trumpet object with the proper attributes" do
12
+ message = @trumpet.messages.new(
13
+ :url => 'http://gnarly.com',
14
+ :author => 'gnarlydude073',
15
+ :avatar_url => 'http://gnarly.com',
16
+ :title => 'Radical Dude',
17
+ :tags => 'gnarly, dudes, radical',
18
+ :content => 'Bla bla bla, some short message.',
19
+ :author_name => 'Gnarly Dude',
20
+ :authored_at => 'Sep 1, 2008',
21
+ :description => 'Some sort of description.',
22
+ :location_string => 'San Francisco, CA'
23
+ )
24
+
25
+ message.url.should == 'http://gnarly.com'
26
+ message.author.should == 'gnarlydude073'
27
+ message.avatar_url.should == 'http://gnarly.com'
28
+ message.title.should == 'Radical Dude'
29
+ message.tags.should == 'gnarly, dudes, radical'
30
+ message.content.should == 'Bla bla bla, some short message.'
31
+ message.author_name.should == 'Gnarly Dude'
32
+ message.description.should == 'Some sort of description.'
33
+ message.location_string.should == 'San Francisco, CA'
34
+ end
35
+
36
+ it "should instantiate a message directly with the proper attributes" do
37
+ message = Trumpet::Message.new(
38
+ :url => 'http://gnarly.com',
39
+ :author => 'gnarlydude073',
40
+ :avatar_url => 'http://gnarly.com',
41
+ :title => 'Radical Dude',
42
+ :tags => 'gnarly, dudes, radical',
43
+ :content => 'Bla bla bla, some short message.',
44
+ :author_name => 'Gnarly Dude',
45
+ :authored_at => 'Sep 1, 2008',
46
+ :description => 'Some sort of description.',
47
+ :location_string => 'San Francisco, CA'
48
+ )
49
+
50
+ message.url.should == 'http://gnarly.com'
51
+ message.author.should == 'gnarlydude073'
52
+ message.avatar_url.should == 'http://gnarly.com'
53
+ message.title.should == 'Radical Dude'
54
+ message.tags.should == 'gnarly, dudes, radical'
55
+ message.content.should == 'Bla bla bla, some short message.'
56
+ message.author_name.should == 'Gnarly Dude'
57
+ message.description.should == 'Some sort of description.'
58
+ message.location_string.should == 'San Francisco, CA'
59
+ end
60
+ end
@@ -0,0 +1,35 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe "Receiver" do
4
+
5
+ before(:all) do
6
+ @trumpet = Trumpet::Base.new :username => "somedude", :password => "somepassword"
7
+
8
+ FakeWeb.register_uri :post, "#{AUTHENTICATED_URI}/receivers", :file => "#{File.dirname(__FILE__)}/fixtures/receivers/create"
9
+ FakeWeb.register_uri :get, "#{AUTHENTICATED_URI}/receivers/1", :file => "#{File.dirname(__FILE__)}/fixtures/receivers/find"
10
+ FakeWeb.register_uri :delete, "#{AUTHENTICATED_URI}/receivers/1", :string => ["204", "OK"]
11
+ FakeWeb.register_uri :get, "#{AUTHENTICATED_URI}/receivers/1/messages", :file => "#{File.dirname(__FILE__)}/fixtures/receivers/messages"
12
+ end
13
+
14
+ it "should let me create a receiver" do
15
+ receiver = @trumpet.receivers.create
16
+ receiver.name.should == "Everything "
17
+ end
18
+
19
+ it "should let me find an existing receiver" do
20
+ receiver = @trumpet.receivers.find(1)
21
+ receiver.name.should == "Everything "
22
+ end
23
+
24
+ it "should let me delete an existing receiver" do
25
+ receiver = @trumpet.receivers.find(1)
26
+ receiver.delete.should == true
27
+ end
28
+
29
+ it "should let me fetch all of the messages for a given receiver" do
30
+ receiver = @trumpet.receivers.find(1)
31
+ messages = receiver.messages
32
+ messages.length.should == 1
33
+ messages.first.content.should == 'yay'
34
+ end
35
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe "Resource" do
4
+ # TODO: write some general specs for behavior that is common to all resources, namely :
5
+ # - error handling (exception throwing)
6
+ # - instantiating
7
+ end
data/spec/spec_helper.rb CHANGED
@@ -7,5 +7,9 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
7
  require 'trumpet'
8
8
 
9
9
  Spec::Runner.configure do |config|
10
+ FakeWeb.allow_net_connect = false
10
11
 
12
+ # URI's for the app
13
+ AUTHENTICATED_URI = 'somedude:somepassword@api.trumpet.io'
14
+ UNAUTHENTICATED_URI = 'api.trumpet.io'
11
15
  end
@@ -0,0 +1,29 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe "Transmitter" do
4
+
5
+ before(:all) do
6
+ @trumpet = Trumpet::Base.new :username => "somedude", :password => "somepassword"
7
+
8
+ FakeWeb.register_uri :post, "#{AUTHENTICATED_URI}/transmitters", :file => "#{File.dirname(__FILE__)}/fixtures/transmitters/create"
9
+ FakeWeb.register_uri :get, "#{AUTHENTICATED_URI}/transmitters/1", :file => "#{File.dirname(__FILE__)}/fixtures/transmitters/find"
10
+ FakeWeb.register_uri :delete, "#{AUTHENTICATED_URI}/transmitters/1", :string => ["204", "OK"]
11
+ FakeWeb.register_uri :post, "#{AUTHENTICATED_URI}/transmitters/1/messages", :string => ["204", "OK"]
12
+ end
13
+
14
+ it "should let me create a transmitter" do
15
+ transmitter = @trumpet.transmitters.create :tags => 'dudes, gnarly, rad'
16
+ transmitter.tags.should == 'dudes, gnarly, rad'
17
+ end
18
+
19
+ it "should let me delete a transmitter" do
20
+ transmitter = @trumpet.transmitters.find(1)
21
+ transmitter.tags.should == 'dudes, gnarly, rad'
22
+ end
23
+
24
+ it "should let me broadcast a message into a receiver" do
25
+ transmitter = @trumpet.transmitters.find(1)
26
+ transmitter.broadcast(Trumpet::Message.new(:content => 'dude, awesome')).should == true
27
+ end
28
+
29
+ end
data/spec/user_spec.rb ADDED
@@ -0,0 +1,58 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe "User" do
4
+
5
+ before(:all) do
6
+ @trumpet = Trumpet::Base.new :username => "somedude", :password => "somepassword"
7
+
8
+ FakeWeb.register_uri :post, "#{AUTHENTICATED_URI}/users", :file => "#{File.dirname(__FILE__)}/fixtures/users/create"
9
+ FakeWeb.register_uri :get, "#{AUTHENTICATED_URI}/users/raddude", :file => "#{File.dirname(__FILE__)}/fixtures/users/show"
10
+ FakeWeb.register_uri :delete, "#{AUTHENTICATED_URI}/users/raddude", :string => ["204", "OK"]
11
+ FakeWeb.register_uri :get, "#{AUTHENTICATED_URI}/users/raddude/channels", :file => "#{File.dirname(__FILE__)}/fixtures/users/channels"
12
+ FakeWeb.register_uri :get, "#{AUTHENTICATED_URI}/users/raddude/listeners", :file => "#{File.dirname(__FILE__)}/fixtures/users/listeners"
13
+ FakeWeb.register_uri :get, "#{AUTHENTICATED_URI}/users/raddude/receivers", :file => "#{File.dirname(__FILE__)}/fixtures/users/receivers"
14
+ end
15
+
16
+ it "should let me create a new user" do
17
+ user = @trumpet.users.create :name => 'raddude', :password => 'raddude'
18
+ user.name.should == 'raddude'
19
+ end
20
+
21
+ it "should let me find an existing user by name" do
22
+ user = @trumpet.users.find 'raddude'
23
+ user.name.should == 'raddude'
24
+ end
25
+
26
+ it "should let me delete an existing user" do
27
+ user = @trumpet.users.find 'raddude'
28
+ user.delete.should == true
29
+ end
30
+
31
+ it "should let me find all of an existing user's channels" do
32
+ user = @trumpet.users.find 'raddude'
33
+ channels = user.channels
34
+ channels.length.should == 3
35
+ channels[0].name.should == 'channel1'
36
+ channels[1].name.should == 'channel2'
37
+ channels[2].name.should == 'channel3'
38
+ end
39
+
40
+ it "should let me find all of an existing user's listeners" do
41
+ user = @trumpet.users.find 'raddude'
42
+ listeners = user.listeners
43
+ listeners.length.should == 3
44
+ listeners[0].uri.should == 'mailto://someraddude@mailinator.com'
45
+ listeners[1].uri.should == 'mailto://someotherdude@mailinator.com'
46
+ listeners[2].uri.should == 'mailto://andanotherdude@mailinator.com'
47
+ end
48
+
49
+ it "should let me find all of an existing user's receivers" do
50
+ user = @trumpet.users.find 'raddude'
51
+ receivers = user.receivers
52
+ receivers.length.should == 3
53
+ receivers[0].keywords.should == 'other things, rad dudes'
54
+ receivers[1].keywords.should == 'gnarly things, radical things'
55
+ receivers[2].keywords.should == 'other sweet things, pretty sweet stuff'
56
+ end
57
+
58
+ end
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.12
4
+ version: 0.1.0
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-05-06 00:00:00 -07:00
12
+ date: 2009-05-14 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,6 +22,16 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: "0"
24
24
  version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: fakeweb
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
25
35
  description:
26
36
  email: wtf@trumpet.io
27
37
  executables: []
@@ -38,18 +48,43 @@ files:
38
48
  - VERSION.yml
39
49
  - lib/core_extensions.rb
40
50
  - lib/trumpet.rb
51
+ - lib/trumpet/base.rb
41
52
  - lib/trumpet/channel.rb
53
+ - lib/trumpet/delegator.rb
42
54
  - lib/trumpet/exceptions.rb
43
55
  - lib/trumpet/helpers.rb
44
56
  - lib/trumpet/listener.rb
45
57
  - lib/trumpet/message.rb
46
58
  - lib/trumpet/receiver.rb
47
59
  - lib/trumpet/request.rb
60
+ - lib/trumpet/resource.rb
48
61
  - lib/trumpet/transmitter.rb
49
62
  - lib/trumpet/user.rb
50
63
  - spec/channel_spec.rb
64
+ - spec/fixtures/channels/all
65
+ - spec/fixtures/channels/create
66
+ - spec/fixtures/channels/messages
67
+ - spec/fixtures/channels/show
68
+ - spec/fixtures/listeners/create
69
+ - spec/fixtures/listeners/find
70
+ - spec/fixtures/receivers/create
71
+ - spec/fixtures/receivers/find
72
+ - spec/fixtures/receivers/messages
73
+ - spec/fixtures/transmitters/create
74
+ - spec/fixtures/transmitters/find
75
+ - spec/fixtures/users/channels
76
+ - spec/fixtures/users/create
77
+ - spec/fixtures/users/listeners
78
+ - spec/fixtures/users/receivers
79
+ - spec/fixtures/users/show
80
+ - spec/listener_spec.rb
81
+ - spec/message_spec.rb
82
+ - spec/receiver_spec.rb
83
+ - spec/resource_spec.rb
51
84
  - spec/spec_helper.rb
52
- has_rdoc: true
85
+ - spec/transmitter_spec.rb
86
+ - spec/user_spec.rb
87
+ has_rdoc: false
53
88
  homepage: http://github.com/trumpet/trumpet
54
89
  post_install_message:
55
90
  rdoc_options:
@@ -73,8 +108,14 @@ requirements: []
73
108
  rubyforge_project:
74
109
  rubygems_version: 1.2.0
75
110
  signing_key:
76
- specification_version: 2
111
+ specification_version: 3
77
112
  summary: The official trumpet gem
78
113
  test_files:
79
114
  - spec/channel_spec.rb
115
+ - spec/listener_spec.rb
116
+ - spec/message_spec.rb
117
+ - spec/receiver_spec.rb
118
+ - spec/resource_spec.rb
80
119
  - spec/spec_helper.rb
120
+ - spec/transmitter_spec.rb
121
+ - spec/user_spec.rb