pusher-fake 1.12.0 → 2.0.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.
- checksums.yaml +4 -4
- data/bin/pusher-fake +1 -3
- data/lib/pusher-fake.rb +3 -1
- data/lib/pusher-fake/channel.rb +4 -2
- data/lib/pusher-fake/channel/presence.rb +2 -0
- data/lib/pusher-fake/channel/private.rb +2 -0
- data/lib/pusher-fake/channel/public.rb +2 -0
- data/lib/pusher-fake/configuration.rb +2 -0
- data/lib/pusher-fake/connection.rb +4 -2
- data/lib/pusher-fake/cucumber.rb +2 -0
- data/lib/pusher-fake/server.rb +2 -0
- data/lib/pusher-fake/server/application.rb +4 -2
- data/lib/pusher-fake/support/base.rb +2 -0
- data/lib/pusher-fake/support/cucumber.rb +2 -0
- data/lib/pusher-fake/support/rspec.rb +2 -0
- data/lib/pusher-fake/webhook.rb +2 -0
- data/spec/features/api/channels_spec.rb +2 -0
- data/spec/features/api/users_spec.rb +2 -0
- data/spec/features/client/connect_spec.rb +2 -0
- data/spec/features/client/event_spec.rb +2 -0
- data/spec/features/client/presence_spec.rb +2 -0
- data/spec/features/client/subscribe_spec.rb +9 -5
- data/spec/features/server/event_spec.rb +2 -0
- data/spec/features/server/webhooks_spec.rb +2 -0
- data/spec/lib/pusher-fake/channel/presence_spec.rb +2 -0
- data/spec/lib/pusher-fake/channel/private_spec.rb +2 -0
- data/spec/lib/pusher-fake/channel/public_spec.rb +2 -0
- data/spec/lib/pusher-fake/channel_spec.rb +2 -0
- data/spec/lib/pusher-fake/configuration_spec.rb +2 -0
- data/spec/lib/pusher-fake/connection_spec.rb +4 -2
- data/spec/lib/pusher-fake/server/application_spec.rb +4 -2
- data/spec/lib/pusher-fake/server_spec.rb +2 -0
- data/spec/lib/pusher-fake/webhook_spec.rb +2 -0
- data/spec/lib/pusher_fake_spec.rb +2 -0
- data/spec/spec_helper.rb +3 -1
- data/spec/support/application.rb +3 -1
- data/spec/support/capybara.rb +2 -0
- data/spec/support/coveralls.rb +2 -0
- data/spec/support/helpers/connect.rb +2 -0
- data/spec/support/helpers/event.rb +2 -0
- data/spec/support/helpers/subscription.rb +2 -0
- data/spec/support/helpers/user.rb +2 -0
- data/spec/support/matchers/have_configuration_option.rb +2 -0
- data/spec/support/pusher_fake.rb +2 -0
- data/spec/support/webhooks.rb +2 -0
- metadata +31 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d309b75217635241d1035f9b8e13d83ada29a93d0eae14c38a77cba3c6299c6b
|
4
|
+
data.tar.gz: d50f95bfff4d1c52103d2d7df9b82e4b26a2543c458b7f6a603395bd79b65003
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 865a390f19167fbb6dd0c2a65b0f8f322eefac51becad6801d0364c20c179fd5c711e8aa8c819fa2f03a7f545540faf9eb635094d1a0fda8c1ebbbf1058ad9de
|
7
|
+
data.tar.gz: 3c56bb54d92b2d2b1a81aed4cfedafe2474ab39c18b5a7ddca79f501ff26851b3f2554aa9b33968a0e453b69455e6fa8924b2f3ca6844c4ec373dc8d1cbf721c
|
data/bin/pusher-fake
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
#
|
3
|
+
# frozen_string_literal: true
|
4
4
|
|
5
5
|
require "optparse"
|
6
6
|
require "pusher"
|
@@ -54,5 +54,3 @@ raise OptionParser::MissingArgument.new("--key") if Pusher.key.nil?
|
|
54
54
|
raise OptionParser::MissingArgument.new("--secret") if Pusher.secret.nil?
|
55
55
|
|
56
56
|
PusherFake::Server.start
|
57
|
-
|
58
|
-
# rubocop:enable Metrics/BlockLength, Metrics/LineLength
|
data/lib/pusher-fake.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "em-http-request"
|
2
4
|
require "em-websocket"
|
3
5
|
require "multi_json"
|
@@ -7,7 +9,7 @@ require "thin"
|
|
7
9
|
# A Pusher fake.
|
8
10
|
module PusherFake
|
9
11
|
# The current version string.
|
10
|
-
VERSION = "
|
12
|
+
VERSION = "2.0.0"
|
11
13
|
|
12
14
|
autoload :Channel, "pusher-fake/channel"
|
13
15
|
autoload :Configuration, "pusher-fake/configuration"
|
data/lib/pusher-fake/channel.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module PusherFake
|
2
4
|
# Channel creation and management.
|
3
5
|
module Channel
|
@@ -6,10 +8,10 @@ module PusherFake
|
|
6
8
|
autoload :Presence, "pusher-fake/channel/presence"
|
7
9
|
|
8
10
|
# Prefix for private channels.
|
9
|
-
PRIVATE_CHANNEL_PREFIX = "private-"
|
11
|
+
PRIVATE_CHANNEL_PREFIX = "private-"
|
10
12
|
|
11
13
|
# Prefix for presence channels.
|
12
|
-
PRESENCE_CHANNEL_PREFIX = "presence-"
|
14
|
+
PRESENCE_CHANNEL_PREFIX = "presence-"
|
13
15
|
|
14
16
|
class << self
|
15
17
|
# @return [Hash] Cache of existing channels.
|
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module PusherFake
|
2
4
|
# A client connection.
|
3
5
|
class Connection
|
4
6
|
# Prefix for client events.
|
5
|
-
CLIENT_EVENT_PREFIX = "client-"
|
7
|
+
CLIENT_EVENT_PREFIX = "client-"
|
6
8
|
|
7
9
|
# @return [EventMachine::WebSocket::Connection] Socket for the connection.
|
8
10
|
attr_reader :socket
|
@@ -19,7 +21,7 @@ module PusherFake
|
|
19
21
|
# @return [Integer] The object ID of the socket.
|
20
22
|
def id
|
21
23
|
parts = socket.object_id.to_s.split("")
|
22
|
-
parts = parts.each_slice(parts.length / 2).to_a
|
24
|
+
parts = parts.each_slice((parts.length / 2.0).ceil).to_a
|
23
25
|
|
24
26
|
[parts.first.join(""), parts.last.join("")].join(".")
|
25
27
|
end
|
data/lib/pusher-fake/cucumber.rb
CHANGED
data/lib/pusher-fake/server.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module PusherFake
|
2
4
|
module Server
|
3
5
|
# The fake web application.
|
4
6
|
class Application
|
5
7
|
CHANNEL_FILTER_ERROR = "user_count may only be requested for presence " \
|
6
8
|
"channels - please supply filter_by_prefix " \
|
7
|
-
"begining with presence-"
|
9
|
+
"begining with presence-"
|
8
10
|
|
9
11
|
CHANNEL_USER_COUNT_ERROR = "Cannot retrieve the user count unless the " \
|
10
|
-
"channel is a presence channel"
|
12
|
+
"channel is a presence channel"
|
11
13
|
|
12
14
|
REQUEST_PATHS = {
|
13
15
|
%r{\A/apps/:id/batch_events\z} => :batch_events,
|
data/lib/pusher-fake/webhook.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "spec_helper"
|
2
4
|
|
3
5
|
feature "Client subscribing to a channel" do
|
4
6
|
before do
|
5
|
-
|
6
|
-
|
7
|
-
# rubocop:disable RSpec/ExpectInHook
|
8
|
-
expect(page).to have_content("Client connected.")
|
9
|
-
# rubocop:enable RSpec/ExpectInHook
|
7
|
+
connect
|
10
8
|
end
|
11
9
|
|
12
10
|
scenario "successfully subscribes to a channel" do
|
@@ -57,6 +55,12 @@ feature "Client subscribing to a channel" do
|
|
57
55
|
page.execute_script("Helpers.subscribe(#{MultiJson.dump(channel)})")
|
58
56
|
end
|
59
57
|
|
58
|
+
def connect
|
59
|
+
visit "/"
|
60
|
+
|
61
|
+
expect(page).to have_content("Client connected.")
|
62
|
+
end
|
63
|
+
|
60
64
|
def override_socket_id(value)
|
61
65
|
page.execute_script(
|
62
66
|
"Pusher.instance.connection.socket_id = #{MultiJson.dump(value)};"
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "spec_helper"
|
2
4
|
|
3
5
|
shared_examples_for "#process" do
|
@@ -95,8 +97,8 @@ end
|
|
95
97
|
describe PusherFake::Connection, "#id" do
|
96
98
|
subject { described_class.new(socket) }
|
97
99
|
|
98
|
-
let(:id) { "
|
99
|
-
let(:socket) { instance_double(Object, object_id:
|
100
|
+
let(:id) { "1234.567" }
|
101
|
+
let(:socket) { instance_double(Object, object_id: 1_234_567) }
|
100
102
|
|
101
103
|
it "returns the object ID of the socket" do
|
102
104
|
expect(subject.id).to eq(id)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "spec_helper"
|
2
4
|
|
3
5
|
shared_examples_for "an API request" do
|
@@ -210,7 +212,7 @@ describe PusherFake::Server::Application, ".events" do
|
|
210
212
|
let(:data) { { "example" => "data" } }
|
211
213
|
let(:name) { "event-name" }
|
212
214
|
let(:request) { instance_double(Rack::Request, body: body) }
|
213
|
-
let(:channels) {
|
215
|
+
let(:channels) { %w(channel-1 channel-2) }
|
214
216
|
let(:channel_1) { instance_double(PusherFake::Channel::Public, emit: true) }
|
215
217
|
let(:channel_2) { instance_double(PusherFake::Channel::Public, emit: true) }
|
216
218
|
let(:data_json) { data.to_json }
|
@@ -281,7 +283,7 @@ describe PusherFake::Server::Application, ".batch_events" do
|
|
281
283
|
let(:data) { { "example" => "data" } }
|
282
284
|
let(:name) { "event-name" }
|
283
285
|
let(:request) { instance_double(Rack::Request, body: body) }
|
284
|
-
let(:channels) {
|
286
|
+
let(:channels) { %w(channel-1 channel-2) }
|
285
287
|
let(:channel_1) { instance_double(PusherFake::Channel::Public, emit: true) }
|
286
288
|
let(:channel_2) { instance_double(PusherFake::Channel::Public, emit: true) }
|
287
289
|
let(:data_json) { data.to_json }
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "bundler/setup"
|
2
4
|
|
3
5
|
Bundler.require(:default, :development)
|
4
6
|
|
5
|
-
Dir[File.expand_path("support/**/*.rb", __dir__)].each do |file|
|
7
|
+
Dir[File.expand_path("support/**/*.rb", __dir__)].sort.each do |file|
|
6
8
|
require file
|
7
9
|
end
|
8
10
|
|
data/spec/support/application.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "sinatra"
|
2
4
|
require "tilt/erb"
|
3
5
|
|
@@ -22,7 +24,7 @@ module Sinatra
|
|
22
24
|
protected
|
23
25
|
|
24
26
|
def channel_data
|
25
|
-
return unless params[:channel_name]
|
27
|
+
return unless /^presence-/.match?(params[:channel_name])
|
26
28
|
|
27
29
|
{
|
28
30
|
user_id: params[:socket_id],
|
data/spec/support/capybara.rb
CHANGED
data/spec/support/coveralls.rb
CHANGED
data/spec/support/pusher_fake.rb
CHANGED
data/spec/support/webhooks.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pusher-fake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tristan Dunn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: em-http-request
|
@@ -86,98 +86,112 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - '='
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 1.3.
|
89
|
+
version: 1.3.3
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 1.3.
|
96
|
+
version: 1.3.3
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rake
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - '='
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 13.0.1
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - '='
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 13.0.1
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: rspec
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - '='
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 3.
|
117
|
+
version: 3.9.0
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - '='
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 3.
|
124
|
+
version: 3.9.0
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rubocop
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - '='
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.
|
131
|
+
version: 0.80.1
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - '='
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0.
|
138
|
+
version: 0.80.1
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rubocop-performance
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 1.5.2
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 1.5.2
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: rubocop-rspec
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
157
|
- - '='
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version: 1.
|
159
|
+
version: 1.38.1
|
146
160
|
type: :development
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
164
|
- - '='
|
151
165
|
- !ruby/object:Gem::Version
|
152
|
-
version: 1.
|
166
|
+
version: 1.38.1
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: sinatra
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
156
170
|
requirements:
|
157
171
|
- - '='
|
158
172
|
- !ruby/object:Gem::Version
|
159
|
-
version: 2.0.
|
173
|
+
version: 2.0.8.1
|
160
174
|
type: :development
|
161
175
|
prerelease: false
|
162
176
|
version_requirements: !ruby/object:Gem::Requirement
|
163
177
|
requirements:
|
164
178
|
- - '='
|
165
179
|
- !ruby/object:Gem::Version
|
166
|
-
version: 2.0.
|
180
|
+
version: 2.0.8.1
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: yard
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
170
184
|
requirements:
|
171
185
|
- - '='
|
172
186
|
- !ruby/object:Gem::Version
|
173
|
-
version: 0.9.
|
187
|
+
version: 0.9.24
|
174
188
|
type: :development
|
175
189
|
prerelease: false
|
176
190
|
version_requirements: !ruby/object:Gem::Requirement
|
177
191
|
requirements:
|
178
192
|
- - '='
|
179
193
|
- !ruby/object:Gem::Version
|
180
|
-
version: 0.9.
|
194
|
+
version: 0.9.24
|
181
195
|
description: A fake Pusher server for development and testing.
|
182
196
|
email: hello@tristandunn.com
|
183
197
|
executables:
|
@@ -243,7 +257,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
243
257
|
requirements:
|
244
258
|
- - ">="
|
245
259
|
- !ruby/object:Gem::Version
|
246
|
-
version: '
|
260
|
+
version: '2.4'
|
247
261
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
248
262
|
requirements:
|
249
263
|
- - ">="
|