shove 1.0.7 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/Gemfile +1 -2
  2. data/README.markdown +57 -91
  3. data/Rakefile +0 -23
  4. data/lib/shove.rb +3 -70
  5. data/lib/shove/app.rb +40 -33
  6. data/lib/shove/client/channel.rb +4 -0
  7. data/lib/shove/client/connection.rb +32 -14
  8. data/lib/shove/http/request.rb +2 -2
  9. data/lib/shove/protocol.rb +3 -1
  10. data/shove.gemspec +1 -3
  11. data/spec/cassettes/should_be_able_to_authorize_with_the_server.yml +10 -6
  12. data/spec/cassettes/should_deny_a_connection.yml +10 -6
  13. data/spec/cassettes/should_deny_a_control_to_a_client.yml +10 -6
  14. data/spec/cassettes/should_deny_a_publishing_to_a_client.yml +10 -6
  15. data/spec/cassettes/should_deny_a_subscriptions_to_a_client.yml +10 -6
  16. data/spec/cassettes/should_deny_publishing_on_a_channel_context.yml +10 -6
  17. data/spec/cassettes/should_deny_subscriptions_on_a_channel_context.yml +10 -6
  18. data/spec/cassettes/should_get_a_set_of_nodes_for_the_network.yml +11 -7
  19. data/spec/cassettes/should_grant_a_connection.yml +10 -6
  20. data/spec/cassettes/should_grant_a_control_to_a_client.yml +11 -7
  21. data/spec/cassettes/should_grant_a_publishing_to_a_client.yml +10 -6
  22. data/spec/cassettes/should_grant_a_subscriptions_to_a_client.yml +10 -6
  23. data/spec/cassettes/should_grant_publishing_on_a_channel_context.yml +10 -6
  24. data/spec/cassettes/should_grant_subscriptions_on_a_channel_context.yml +10 -6
  25. data/spec/cassettes/should_publish_on_a_channel_context.yml +10 -6
  26. data/spec/cassettes/should_publish_to_a_client.yml +10 -6
  27. data/spec/helper.rb +0 -2
  28. data/spec/shove_client_spec.rb +39 -30
  29. data/spec/shove_http_spec.rb +27 -31
  30. metadata +20 -40
  31. data/bin/shove +0 -169
  32. data/lib/shove/app_directory.rb +0 -103
  33. data/spec/app_directory_spec.rb +0 -66
  34. data/spec/cassettes/should_authorize_on_a_channel.yml +0 -26
  35. data/spec/cassettes/should_authorize_oneself.yml +0 -24
  36. data/spec/cassettes/should_cancel_a_binding.yml +0 -24
  37. data/spec/cassettes/should_configure_the_default.yml +0 -24
  38. data/spec/cassettes/should_configure_the_from_the_previous_test.yml +0 -24
  39. data/spec/cassettes/should_create_a_channel_context.yml +0 -24
  40. data/spec/cassettes/should_get_a_subscribe_granted_event.yml +0 -24
  41. data/spec/cassettes/should_publish.yml +0 -24
  42. data/spec/cassettes/should_receive_an_unsubscribe_event.yml +0 -24
  43. data/spec/cassettes/should_receive_messages_on_a_channel.yml +0 -24
  44. data/spec/cassettes/should_send_a_connect_op.yml +0 -24
  45. data/spec/cassettes/should_send_a_connect_op_with_an_id.yml +0 -24
  46. data/spec/cassettes/should_spawn_a_client.yml +0 -24
  47. data/spec/cassettes/should_subscribe_to_a_channel.yml +0 -24
  48. data/spec/cassettes/should_trigger_a_connect_denied_event.yml +0 -24
  49. data/spec/cassettes/should_trigger_a_connect_event.yml +0 -24
  50. data/spec/cassettes/should_trigger_a_disconnect_event.yml +0 -24
  51. data/spec/cassettes/should_trigger_an_error_event.yml +0 -24
  52. data/spec/cassettes/should_unsubscribe_from_a_channel.yml +0 -24
  53. data/spec/cassettes/should_update_the_default_app.yml +0 -24
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shove
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.0.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-02-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: em-http-request
16
- requirement: &21823400 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 1.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *21823400
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.0
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: em-ws-client
27
- requirement: &21822160 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 0.2.0
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *21822160
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 0.2.0
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: yajl-ruby
38
- requirement: &21820560 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,22 +53,15 @@ dependencies:
43
53
  version: 1.1.0
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *21820560
47
- - !ruby/object:Gem::Dependency
48
- name: confstruct
49
- requirement: &21819840 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
50
57
  none: false
51
58
  requirements:
52
59
  - - ! '>='
53
60
  - !ruby/object:Gem::Version
54
- version: 0.2.1
55
- type: :runtime
56
- prerelease: false
57
- version_requirements: *21819840
61
+ version: 1.1.0
58
62
  description: Client side implementation for the shove.io API. See http://shove.io/documentation
59
63
  email: dan@shove.io
60
- executables:
61
- - shove
64
+ executables: []
62
65
  extensions: []
63
66
  extra_rdoc_files: []
64
67
  files:
@@ -67,10 +70,8 @@ files:
67
70
  - Gemfile.lock
68
71
  - README.markdown
69
72
  - Rakefile
70
- - bin/shove
71
73
  - lib/shove.rb
72
74
  - lib/shove/app.rb
73
- - lib/shove/app_directory.rb
74
75
  - lib/shove/client/callback.rb
75
76
  - lib/shove/client/channel.rb
76
77
  - lib/shove/client/connection.rb
@@ -80,14 +81,7 @@ files:
80
81
  - lib/shove/http/response.rb
81
82
  - lib/shove/protocol.rb
82
83
  - shove.gemspec
83
- - spec/app_directory_spec.rb
84
- - spec/cassettes/should_authorize_on_a_channel.yml
85
- - spec/cassettes/should_authorize_oneself.yml
86
84
  - spec/cassettes/should_be_able_to_authorize_with_the_server.yml
87
- - spec/cassettes/should_cancel_a_binding.yml
88
- - spec/cassettes/should_configure_the_default.yml
89
- - spec/cassettes/should_configure_the_from_the_previous_test.yml
90
- - spec/cassettes/should_create_a_channel_context.yml
91
85
  - spec/cassettes/should_deny_a_connection.yml
92
86
  - spec/cassettes/should_deny_a_control_to_a_client.yml
93
87
  - spec/cassettes/should_deny_a_publishing_to_a_client.yml
@@ -95,28 +89,14 @@ files:
95
89
  - spec/cassettes/should_deny_publishing_on_a_channel_context.yml
96
90
  - spec/cassettes/should_deny_subscriptions_on_a_channel_context.yml
97
91
  - spec/cassettes/should_get_a_set_of_nodes_for_the_network.yml
98
- - spec/cassettes/should_get_a_subscribe_granted_event.yml
99
92
  - spec/cassettes/should_grant_a_connection.yml
100
93
  - spec/cassettes/should_grant_a_control_to_a_client.yml
101
94
  - spec/cassettes/should_grant_a_publishing_to_a_client.yml
102
95
  - spec/cassettes/should_grant_a_subscriptions_to_a_client.yml
103
96
  - spec/cassettes/should_grant_publishing_on_a_channel_context.yml
104
97
  - spec/cassettes/should_grant_subscriptions_on_a_channel_context.yml
105
- - spec/cassettes/should_publish.yml
106
98
  - spec/cassettes/should_publish_on_a_channel_context.yml
107
99
  - spec/cassettes/should_publish_to_a_client.yml
108
- - spec/cassettes/should_receive_an_unsubscribe_event.yml
109
- - spec/cassettes/should_receive_messages_on_a_channel.yml
110
- - spec/cassettes/should_send_a_connect_op.yml
111
- - spec/cassettes/should_send_a_connect_op_with_an_id.yml
112
- - spec/cassettes/should_spawn_a_client.yml
113
- - spec/cassettes/should_subscribe_to_a_channel.yml
114
- - spec/cassettes/should_trigger_a_connect_denied_event.yml
115
- - spec/cassettes/should_trigger_a_connect_event.yml
116
- - spec/cassettes/should_trigger_a_disconnect_event.yml
117
- - spec/cassettes/should_trigger_an_error_event.yml
118
- - spec/cassettes/should_unsubscribe_from_a_channel.yml
119
- - spec/cassettes/should_update_the_default_app.yml
120
100
  - spec/helper.rb
121
101
  - spec/shove_client_spec.rb
122
102
  - spec/shove_http_spec.rb
@@ -140,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
120
  version: '0'
141
121
  requirements: []
142
122
  rubyforge_project:
143
- rubygems_version: 1.8.11
123
+ rubygems_version: 1.8.23
144
124
  signing_key:
145
125
  specification_version: 3
146
126
  summary: Ruby gem for leveraging shove.io, the web push platform
data/bin/shove DELETED
@@ -1,169 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift File.dirname(__FILE__) + "/../lib"
4
-
5
- require "optparse"
6
- require "shove"
7
-
8
- action = ARGV[0]
9
- channel = nil
10
- client = nil
11
- message = nil
12
- app = nil
13
- app_dir = Shove::AppDirectory.new
14
-
15
- OptionParser.new do |o|
16
-
17
- o.banner = "Usage: shove "
18
-
19
- o.on("-h", "--help") do
20
- action = "help"
21
- end
22
-
23
- o.on("-v", "--version") do
24
- action = "version"
25
- end
26
-
27
- o.on("-l", "--list") do
28
- action = "apps"
29
- end
30
-
31
- o.on("-a", "--app app", "the app to work with") do |arg|
32
- app = arg
33
- end
34
-
35
- o.on("-c", "--channel channel", "the channel to operate on") do |arg|
36
- channel = arg
37
- end
38
-
39
- o.on("-u", "--client client", "the client to operate on") do |arg|
40
- client = arg
41
- end
42
-
43
- o.on("-m", "--message message", "the message to publish") do |arg|
44
- message = arg
45
- end
46
-
47
- o.parse!(ARGV)
48
- end
49
-
50
- begin
51
-
52
- case action
53
- when "version"
54
- puts "shove version #{Shove::Version}"
55
- when "apps"
56
-
57
- apps = app_dir.apps
58
-
59
- if apps.empty?
60
- puts "No apps found. Run: shove apps:add"
61
- else
62
- puts "App Id\t\tApp Key"
63
- puts "-----------------------"
64
- apps.each_pair do |id,key|
65
- puts "#{id}\t\t#{key}"
66
- end
67
- end
68
-
69
- when "apps:add"
70
- app_dir.get_config app
71
- when "apps:default"
72
- app_dir.default = app
73
- when "hosts"
74
- Shove.configure(app_dir.get_config(app))
75
-
76
- Shove.hosts.each do |host|
77
- puts host
78
- end
79
-
80
- when "publish"
81
-
82
- Shove.configure(app_dir.get_config(app))
83
-
84
- errors = []
85
- errors << "channel not defined" unless channel
86
- errors << "message not defined" unless message
87
-
88
- if errors.empty?
89
- Shove.channel(channel).publish(message) do |r|
90
- if r.error?
91
- puts "Error: #{r.message}"
92
- else
93
- puts "Published"
94
- end
95
- end
96
- else
97
- puts "Errors: #{errors.join(",")}"
98
- end
99
-
100
- when "watch"
101
-
102
- Shove.configure(app_dir.get_config(app))
103
-
104
- if channel
105
-
106
- EM.run do
107
- client = Shove.connect
108
- client.authorize(app_dir.key(app))
109
-
110
- client.on("connect") do |error|
111
- puts "Connected"
112
- end
113
-
114
- client.on("error") do |error|
115
- puts "Watch Error #{error}"
116
- EM.stop
117
- end
118
-
119
- channel = client.channel(channel)
120
-
121
- channel.on("subscribe_denied") do
122
- puts "Subscribe Denied"
123
- end
124
-
125
- channel.on("subscribe") do
126
- puts "Subscribed"
127
- end
128
-
129
- channel.on("message") do |msg|
130
- puts "#{Time.now}: #{msg}"
131
- end
132
-
133
- end
134
-
135
- else
136
- puts "You must provide the channel with: -c channel_name"
137
- end
138
-
139
- else
140
- puts File.read(__FILE__).split("__END__").last
141
- end
142
-
143
-
144
- rescue Exception => ex
145
-
146
- puts ex.message
147
- puts ex.backtrace
148
-
149
- abort File.read(__FILE__).split("__END__").last
150
- end
151
-
152
- __END__
153
- Usage: shove action [options]
154
-
155
-
156
- Options
157
- -h, --help
158
- Show this message
159
-
160
- Actions
161
- publish publish a message to the app
162
- example: shove publish -c chan -m "Hello"
163
-
164
- hosts List available hosts for your app
165
- watch Watch the messages on a given channel
166
-
167
- apps List known apps
168
- apps:default Use a particular app
169
- apps:add Add a new app
@@ -1,103 +0,0 @@
1
- module Shove
2
-
3
- # Used for storing and accessing shove credentials
4
- # from the command line utility
5
- class AppDirectory
6
-
7
- attr_accessor :apps, :app
8
-
9
- def initialize io=STDIN, path=File.expand_path("~/.shove.yml")
10
- @io = io
11
- @path = path
12
- @app = nil
13
- @apps = {}
14
- load!
15
- end
16
-
17
- def put app_id, app_key
18
- @apps[app_id] = app_key
19
- @app = app_id if @app.nil?
20
- save
21
- end
22
-
23
- def key app_id
24
- get_config(app_id)[:app_key]
25
- end
26
-
27
- def default= app_id
28
- unless app_id.nil?
29
- @app = app_id
30
- save
31
- end
32
- end
33
-
34
- def default
35
- @app ? get_config(@app) : get_config
36
- end
37
-
38
- def get_config app_id=nil
39
- config = ENV["SHOVE_ENV"] == "development" ? {
40
- :api_url => "http://api.shove.dev:8080",
41
- :ws_url => "ws://shove.dev:9000"
42
- } : {}
43
-
44
- if !@app.nil? && app_id.nil?
45
- config[:app_id] = @app
46
- config[:app_key] = key(@app)
47
- elsif app_id.nil? || !@apps.key?(app_id)
48
-
49
- puts "We need some information to continue"
50
-
51
- if app_id.nil?
52
- config[:app_id] = getinput "Enter App Id"
53
- else
54
- config[:app_id] = app_id
55
- end
56
-
57
- loop do
58
- config[:app_key] = getinput "Enter App Key"
59
-
60
- Shove.configure config
61
- if Shove.valid?
62
- puts "App Settings accepted. Moving on..."
63
- break
64
- else
65
- puts "App Settings invalid, please try again"
66
- end
67
- end
68
-
69
- put config[:app_id], config[:app_key]
70
- else
71
- config[:app_id] = app_id
72
- config[:app_key] = @apps[app_id]
73
- end
74
-
75
- config
76
- end
77
-
78
- private
79
-
80
- def save
81
- File.open(@path, "w") do |f|
82
- f << {
83
- "app" => @app,
84
- "apps" => @apps
85
- }.to_yaml
86
- end
87
- end
88
-
89
- def getinput text
90
- print "#{text}: "
91
- @io.gets.strip
92
- end
93
-
94
- def load!
95
- if FileTest.exist?(@path)
96
- tmp = YAML.load_file(@path)
97
- @app = tmp["app"]
98
- @apps = tmp["apps"]
99
- end
100
- end
101
-
102
- end
103
- end
@@ -1,66 +0,0 @@
1
- require File.dirname(__FILE__) + "/helper"
2
-
3
- module Shove
4
-
5
- # Mock standard in (for CLI app)
6
- class MockStdin
7
-
8
- def initialize *msgs
9
- @msgs = msgs
10
- end
11
-
12
- def gets
13
- "#{@msgs.shift}\r\n"
14
- end
15
-
16
- end
17
-
18
- describe AppDirectory do
19
-
20
- before do |context|
21
- VCR.insert_cassette context.example.metadata[:description_args].first
22
- end
23
-
24
- after do |context|
25
- VCR.eject_cassette
26
- end
27
-
28
- it "should configure the default" do
29
- system "rm /tmp/shove.yml"
30
- dir = AppDirectory.new(MockStdin.new("test","test"), "/tmp/shove.yml")
31
- config = dir.default
32
- config[:app_id].should == "test"
33
- config[:app_key].should == "test"
34
- FileTest.exist?("/tmp/shove.yml").should == true
35
- end
36
-
37
- it "should configure the from the previous test" do
38
- dir = AppDirectory.new(MockStdin.new, "/tmp/shove.yml")
39
- config = dir.get_config "test"
40
- config[:app_id].should == "test"
41
- config[:app_key].should == "test"
42
- end
43
-
44
- it "should save an app" do
45
- dir = AppDirectory.new(MockStdin.new, "/tmp/shove.yml")
46
- dir.put "id1", "key1"
47
- dir.put "id2", "key2"
48
- dir.put "id3", "key3"
49
- dir.apps.size.should == 4
50
- end
51
-
52
- it "should update an app" do
53
- dir = AppDirectory.new(MockStdin.new, "/tmp/shove.yml")
54
- dir.put "id2", "key9"
55
- dir.key("id2").should == "key9"
56
- end
57
-
58
- it "should update the default app" do
59
- dir = AppDirectory.new(MockStdin.new, "/tmp/shove.yml")
60
- dir.default = "id2"
61
- dir.app.should == "id2"
62
- dir.default()[:app_key].should == "key9"
63
- end
64
-
65
- end
66
- end