pusher 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -4,17 +4,19 @@ Pusher gem
4
4
  Getting started
5
5
  ---------------
6
6
 
7
- Request pusher credentials from <http://pusherapp.com> and configure the gem
7
+ After registering at <http://pusherapp.com> configure your app with the security credentials
8
8
 
9
9
  Pusher.key = 'your-pusher-key'
10
- Pusher.secret = 'your-pusher-key'
10
+ Pusher.secret = 'your-pusher-secret'
11
11
 
12
12
  Trigger an event
13
13
 
14
14
  Pusher['arbitrary-channel-name'].trigger({:some => 'data'})
15
15
 
16
16
  Logging
17
- Errors are logger to Pusher.logger. You can set that to any logger you want, ie:
17
+ -------
18
+
19
+ Errors are logged to `Pusher.logger`. It will by default use `Logger` from stdlib, however you can assign any logger:
18
20
 
19
21
  Pusher.logger = Rails.logger
20
22
 
data/Rakefile CHANGED
@@ -11,7 +11,6 @@ begin
11
11
  gem.homepage = "http://github.com/newbamboo/pusher-gem"
12
12
  gem.authors = ["New Bamboo"]
13
13
  # gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
14
- gem.add_dependency "rest-client"
15
14
  gem.add_dependency "json"
16
15
  gem.add_development_dependency "rspec", ">= 1.2.9"
17
16
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.3.4
data/lib/pusher.rb CHANGED
@@ -1,68 +1,38 @@
1
1
  require 'json'
2
2
  require 'uri'
3
3
  require 'net/http'
4
- require 'logger'
5
4
 
6
- class Pusher
7
-
5
+ autoload 'Logger', 'logger'
6
+
7
+ module Pusher
8
8
  class ArgumentError < ::ArgumentError
9
9
  def message
10
- 'You must configure both Pusher.key and Pusher.secret in order to authenticate your Pusher app'
10
+ 'You must configure both Pusher.key in order to authenticate your Pusher app'
11
11
  end
12
12
  end
13
-
13
+
14
14
  class << self
15
- attr_accessor :host, :port, :logger
16
- attr_writer :key, :secret
15
+ attr_accessor :host, :port
16
+ attr_writer :logger
17
+ attr_accessor :key, :secret
18
+
19
+ def logger
20
+ @logger ||= begin
21
+ log = Logger.new(STDOUT)
22
+ log.level = Logger::INFO
23
+ log
24
+ end
25
+ end
17
26
  end
18
27
 
19
- self.host = 'api.pusherapp.com'
20
- self.port = 80
21
- self.logger = Logger.new($STDOUT)
28
+ self.host = 'api.pusherapp.com'
29
+ self.port = 80
22
30
 
23
31
  def self.[](channel_id)
24
32
  raise ArgumentError unless @key
25
33
  @channels ||= {}
26
34
  @channels[channel_id.to_s] = Channel.new(@key, channel_id)
27
35
  end
28
-
29
- class Channel
30
- def initialize(key, id)
31
- @uri = URI.parse("http://#{Pusher.host}:#{Pusher.port}/app/#{key}/channel/#{id}")
32
- @http = Net::HTTP.new(@uri.host, @uri.port)
33
- end
34
-
35
- def trigger(event_name, data, socket_id = nil)
36
- begin
37
- @http.post(
38
- @uri.path,
39
- self.class.turn_into_json({
40
- :event => event_name,
41
- :data => data,
42
- :socket_id => socket_id
43
- }),
44
- {'Content-Type'=> 'application/json'}
45
- )
46
- rescue StandardError => e
47
- handle_error e
48
- end
49
- end
50
-
51
- def self.turn_into_json(data)
52
- j = if Object.const_defined?('ActiveSupport')
53
- data.to_json
54
- else
55
- JSON.generate(data)
56
- end
57
- j
58
- end
59
-
60
- private
61
-
62
- def handle_error(e)
63
- self.logger.error(e.backtrace.join("\n"))
64
- end
65
-
66
- end
67
-
68
36
  end
37
+
38
+ require 'pusher/channel'
@@ -0,0 +1,38 @@
1
+ module Pusher
2
+ class Channel
3
+ def initialize(key, id)
4
+ @uri = URI.parse("http://#{Pusher.host}:#{Pusher.port}/app/#{key}/channel/#{id}")
5
+ @http = Net::HTTP.new(@uri.host, @uri.port)
6
+ end
7
+
8
+ def trigger(event_name, data, socket_id = nil)
9
+ begin
10
+ @http.post(
11
+ @uri.path,
12
+ self.class.turn_into_json({
13
+ :event => event_name,
14
+ :data => data,
15
+ :socket_id => socket_id
16
+ }),
17
+ {'Content-Type'=> 'application/json'}
18
+ )
19
+ rescue StandardError => e
20
+ handle_error e
21
+ end
22
+ end
23
+
24
+ def self.turn_into_json(data)
25
+ if Object.const_defined?('ActiveSupport')
26
+ data.to_json
27
+ else
28
+ JSON.generate(data)
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def handle_error(e)
35
+ self.logger.error(e.backtrace.join("\n"))
36
+ end
37
+ end
38
+ end
data/pusher.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{pusher}
8
- s.version = "0.3.2"
8
+ s.version = "0.3.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["New Bamboo"]
12
- s.date = %q{2010-03-29}
12
+ s.date = %q{2010-04-14}
13
13
  s.description = %q{Wrapper for pusherapp.com REST api}
14
14
  s.email = %q{support@pusherapp.com}
15
15
  s.extra_rdoc_files = [
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  "Rakefile",
25
25
  "VERSION",
26
26
  "lib/pusher.rb",
27
+ "lib/pusher/channel.rb",
27
28
  "pusher.gemspec",
28
29
  "spec/pusher_spec.rb",
29
30
  "spec/spec.opts",
@@ -44,16 +45,13 @@ Gem::Specification.new do |s|
44
45
  s.specification_version = 3
45
46
 
46
47
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
47
- s.add_runtime_dependency(%q<rest-client>, [">= 0"])
48
48
  s.add_runtime_dependency(%q<json>, [">= 0"])
49
49
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
50
50
  else
51
- s.add_dependency(%q<rest-client>, [">= 0"])
52
51
  s.add_dependency(%q<json>, [">= 0"])
53
52
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
54
53
  end
55
54
  else
56
- s.add_dependency(%q<rest-client>, [">= 0"])
57
55
  s.add_dependency(%q<json>, [">= 0"])
58
56
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
59
57
  end
data/spec/pusher_spec.rb CHANGED
@@ -1,92 +1,88 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require File.expand_path('../spec_helper', __FILE__)
2
2
 
3
3
  describe Pusher do
4
-
5
4
  describe 'configuration' do
6
5
  it 'should be preconfigured for api host' do
7
6
  Pusher.host.should == 'api.pusherapp.com'
8
7
  end
9
-
8
+
10
9
  it 'should be preconfigured for pi port 80' do
11
10
  Pusher.port.should == 80
12
11
  end
13
- end
14
-
15
- describe 'unconfigured' do
16
- describe 'with missing key and secret' do
17
- it 'should raise exception' do
18
- lambda {
19
- Pusher['test-channel']
20
- }.should raise_error(Pusher::ArgumentError)
21
- end
12
+
13
+ it 'should use standard logger if no other logger if defined' do
14
+ Pusher.logger.debug('foo')
15
+ Pusher.logger.should be_kind_of(Logger)
22
16
  end
23
17
 
24
- describe 'with missing key' do
25
- it 'should raise exception' do
26
- lambda {
27
- Pusher['test-channel']
28
- }.should raise_error(Pusher::ArgumentError)
29
- end
18
+ it "can be configured to use any logger" do
19
+ logger = mock("ALogger")
20
+ logger.should_receive(:debug).with('foo')
21
+ Pusher.logger = logger
22
+ Pusher.logger.debug('foo')
23
+ end
24
+
25
+ it 'should raise exception if key and secret are missing' do
26
+ lambda {
27
+ Pusher['test-channel']
28
+ }.should raise_error(Pusher::ArgumentError)
29
+ end
30
+
31
+ it 'should raise exception if key is missing' do
32
+ lambda {
33
+ Pusher['test-channel']
34
+ }.should raise_error(Pusher::ArgumentError)
30
35
  end
31
36
  end
32
-
33
-
37
+
34
38
  describe 'configured' do
35
39
  before do
36
40
  Pusher.key = '12345678900000001'
37
41
  Pusher.secret = '12345678900000001'
38
42
  end
39
-
43
+
44
+ after do
45
+ Pusher.key = nil
46
+ Pusher.secret = nil
47
+ end
48
+
40
49
  describe '.[]' do
41
50
  before do
42
51
  @channel = Pusher['test_channel']
43
52
  end
44
-
53
+
45
54
  it 'should return a new channel' do
46
55
  @channel.should be_kind_of(Pusher::Channel)
47
56
  end
48
57
  end
49
-
50
- describe 'calling Channel#trigger' do
51
58
 
59
+ describe 'Channel#trigger' do
52
60
  before do
53
61
  @http = mock('HTTP', :post => 'posting')
54
62
  Net::HTTP.stub!(:new).and_return @http
55
63
  end
56
64
 
57
65
  it 'should configure HTTP library to talk to pusher API' do
58
- Net::HTTP.should_receive(:new).with('api.pusherapp.com', 80).and_return @http
59
- Pusher['test_channel'].trigger(
60
- 'new_event',
61
- 'Some data'
62
- )
66
+ Net::HTTP.should_receive(:new).
67
+ with('api.pusherapp.com', 80).and_return @http
68
+ Pusher['test_channel'].trigger('new_event', 'Some data')
63
69
  end
64
-
65
- describe 'POSTing to api.pusherapp.com' do
66
-
67
- it 'should POST JSON to p# usher API' do
68
- @http.should_receive(:post) do |*args|
69
- args[0].should == '/app/12345678900000001/channel/test_channel'
70
- parsed = JSON.parse(args[1])
71
- parsed['event'].should == 'new_event'
72
- parsed['data']['name'].should == 'Pusher'
73
- parsed['data']['last_name'].should == 'App'
74
- parsed['socket_id'].should == nil
75
- args[2].should == {'Content-Type'=> 'application/json'}
76
- end
77
- Pusher['test_channel'].trigger(
78
- 'new_event',
79
- :name => 'Pusher',
80
- :last_name => 'App'
81
- )
70
+
71
+ it 'should POST JSON to pusher API' do
72
+ @http.should_receive(:post) do |path, data, headers|
73
+ path.should == '/app/12345678900000001/channel/test_channel'
74
+ parsed = JSON.parse(data)
75
+ parsed['event'].should == 'new_event'
76
+ parsed['data']['name'].should == 'Pusher'
77
+ parsed['data']['last_name'].should == 'App'
78
+ parsed['socket_id'].should == nil
79
+ headers.should == {'Content-Type'=> 'application/json'}
82
80
  end
81
+ Pusher['test_channel'].trigger('new_event', {
82
+ :name => 'Pusher',
83
+ :last_name => 'App'
84
+ })
83
85
  end
84
86
  end
85
-
86
- end
87
-
88
- after do
89
- Pusher.key = nil
90
- Pusher.secret = nil
91
87
  end
92
88
  end
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,13 @@
1
+ require 'rubygems'
2
+
3
+ require 'spec'
4
+ require 'spec/autorun'
5
+
1
6
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
7
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
+
3
9
  require 'pusher'
4
- require 'spec'
5
- require 'spec/autorun'
10
+
6
11
  Spec::Runner.configure do |config|
7
12
 
8
13
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 2
9
- version: 0.3.2
8
+ - 4
9
+ version: 0.3.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - New Bamboo
@@ -14,11 +14,11 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-29 00:00:00 +01:00
17
+ date: 2010-04-14 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: rest-client
21
+ name: json
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  requirements:
@@ -29,22 +29,10 @@ dependencies:
29
29
  version: "0"
30
30
  type: :runtime
31
31
  version_requirements: *id001
32
- - !ruby/object:Gem::Dependency
33
- name: json
34
- prerelease: false
35
- requirement: &id002 !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- segments:
40
- - 0
41
- version: "0"
42
- type: :runtime
43
- version_requirements: *id002
44
32
  - !ruby/object:Gem::Dependency
45
33
  name: rspec
46
34
  prerelease: false
47
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ requirement: &id002 !ruby/object:Gem::Requirement
48
36
  requirements:
49
37
  - - ">="
50
38
  - !ruby/object:Gem::Version
@@ -54,7 +42,7 @@ dependencies:
54
42
  - 9
55
43
  version: 1.2.9
56
44
  type: :development
57
- version_requirements: *id003
45
+ version_requirements: *id002
58
46
  description: Wrapper for pusherapp.com REST api
59
47
  email: support@pusherapp.com
60
48
  executables: []
@@ -72,6 +60,7 @@ files:
72
60
  - Rakefile
73
61
  - VERSION
74
62
  - lib/pusher.rb
63
+ - lib/pusher/channel.rb
75
64
  - pusher.gemspec
76
65
  - spec/pusher_spec.rb
77
66
  - spec/spec.opts