pusher-fake 1.12.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/bin/pusher-fake +1 -3
  3. data/lib/pusher-fake.rb +3 -1
  4. data/lib/pusher-fake/channel.rb +4 -2
  5. data/lib/pusher-fake/channel/presence.rb +2 -0
  6. data/lib/pusher-fake/channel/private.rb +2 -0
  7. data/lib/pusher-fake/channel/public.rb +2 -0
  8. data/lib/pusher-fake/configuration.rb +2 -0
  9. data/lib/pusher-fake/connection.rb +4 -2
  10. data/lib/pusher-fake/cucumber.rb +2 -0
  11. data/lib/pusher-fake/server.rb +2 -0
  12. data/lib/pusher-fake/server/application.rb +4 -2
  13. data/lib/pusher-fake/support/base.rb +2 -0
  14. data/lib/pusher-fake/support/cucumber.rb +2 -0
  15. data/lib/pusher-fake/support/rspec.rb +2 -0
  16. data/lib/pusher-fake/webhook.rb +2 -0
  17. data/spec/features/api/channels_spec.rb +2 -0
  18. data/spec/features/api/users_spec.rb +2 -0
  19. data/spec/features/client/connect_spec.rb +2 -0
  20. data/spec/features/client/event_spec.rb +2 -0
  21. data/spec/features/client/presence_spec.rb +2 -0
  22. data/spec/features/client/subscribe_spec.rb +9 -5
  23. data/spec/features/server/event_spec.rb +2 -0
  24. data/spec/features/server/webhooks_spec.rb +2 -0
  25. data/spec/lib/pusher-fake/channel/presence_spec.rb +2 -0
  26. data/spec/lib/pusher-fake/channel/private_spec.rb +2 -0
  27. data/spec/lib/pusher-fake/channel/public_spec.rb +2 -0
  28. data/spec/lib/pusher-fake/channel_spec.rb +2 -0
  29. data/spec/lib/pusher-fake/configuration_spec.rb +2 -0
  30. data/spec/lib/pusher-fake/connection_spec.rb +4 -2
  31. data/spec/lib/pusher-fake/server/application_spec.rb +4 -2
  32. data/spec/lib/pusher-fake/server_spec.rb +2 -0
  33. data/spec/lib/pusher-fake/webhook_spec.rb +2 -0
  34. data/spec/lib/pusher_fake_spec.rb +2 -0
  35. data/spec/spec_helper.rb +3 -1
  36. data/spec/support/application.rb +3 -1
  37. data/spec/support/capybara.rb +2 -0
  38. data/spec/support/coveralls.rb +2 -0
  39. data/spec/support/helpers/connect.rb +2 -0
  40. data/spec/support/helpers/event.rb +2 -0
  41. data/spec/support/helpers/subscription.rb +2 -0
  42. data/spec/support/helpers/user.rb +2 -0
  43. data/spec/support/matchers/have_configuration_option.rb +2 -0
  44. data/spec/support/pusher_fake.rb +2 -0
  45. data/spec/support/webhooks.rb +2 -0
  46. metadata +31 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0fb8ba630f2ac529c445616e37b0aede14ebb36ea1698c8014e93f8cb235fb6e
4
- data.tar.gz: 374f57795f1fe563a64d3abf9baa0eaf9debeecec203c49a5e8a4f5d155a9ed1
3
+ metadata.gz: d309b75217635241d1035f9b8e13d83ada29a93d0eae14c38a77cba3c6299c6b
4
+ data.tar.gz: d50f95bfff4d1c52103d2d7df9b82e4b26a2543c458b7f6a603395bd79b65003
5
5
  SHA512:
6
- metadata.gz: 3cf72af652796b675ecfe0c9f0b930018d1e8381096d85e8296c7649503d5916f3282df9aca7aa3ffeb2e6dbdd968db3ad4c56d997c79be54d5f971144eb7aa3
7
- data.tar.gz: 27c01757983cc5c3d07f6a728dddad2948636222ea580b64341dd7691e48aab023c60d43caefa89e4bf56c9c777b8397841d147ef59c363f1fe1f4d2469ec16c
6
+ metadata.gz: 865a390f19167fbb6dd0c2a65b0f8f322eefac51becad6801d0364c20c179fd5c711e8aa8c819fa2f03a7f545540faf9eb635094d1a0fda8c1ebbbf1058ad9de
7
+ data.tar.gz: 3c56bb54d92b2d2b1a81aed4cfedafe2474ab39c18b5a7ddca79f501ff26851b3f2554aa9b33968a0e453b69455e6fa8924b2f3ca6844c4ec373dc8d1cbf721c
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # rubocop:disable Metrics/BlockLength, Metrics/LineLength
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
@@ -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 = "1.12.0".freeze
12
+ VERSION = "2.0.0"
11
13
 
12
14
  autoload :Channel, "pusher-fake/channel"
13
15
  autoload :Configuration, "pusher-fake/configuration"
@@ -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-".freeze
11
+ PRIVATE_CHANNEL_PREFIX = "private-"
10
12
 
11
13
  # Prefix for presence channels.
12
- PRESENCE_CHANNEL_PREFIX = "presence-".freeze
14
+ PRESENCE_CHANNEL_PREFIX = "presence-"
13
15
 
14
16
  class << self
15
17
  # @return [Hash] Cache of existing channels.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PusherFake
2
4
  module Channel
3
5
  # A presence channel.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PusherFake
2
4
  module Channel
3
5
  # A private channel.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PusherFake
2
4
  module Channel
3
5
  # A public channel.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PusherFake
2
4
  # Configuration class.
3
5
  class Configuration
@@ -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-".freeze
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "pusher-fake/support/cucumber"
2
4
 
3
5
  warn %([DEPRECATION] "pusher-fake/cucumber" is deprecated.) +
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PusherFake
2
4
  # Socket and web server manager.
3
5
  module Server
@@ -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-".freeze
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".freeze
12
+ "channel is a presence channel"
11
13
 
12
14
  REQUEST_PATHS = {
13
15
  %r{\A/apps/:id/batch_events\z} => :batch_events,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  %w(app_id key secret).each do |setting|
2
4
  next unless Pusher.public_send(setting).nil?
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "pusher-fake/support/base"
2
4
 
3
5
  # Reset channels between scenarios.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "pusher-fake/support/base"
2
4
 
3
5
  # Reset channels between examples
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PusherFake
2
4
  # Webhook triggering.
3
5
  class Webhook
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  feature "Requesting channel API endpoint" do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  feature "Requesting user API endpoint" do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  feature "Client connecting to the server" do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  feature "Client triggers a client event" do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  feature "Client on a presence channel" do
@@ -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
- visit "/"
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
  feature "Server triggers event" do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  feature "Receiving event webhooks" do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe PusherFake::Channel::Presence do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe PusherFake::Channel::Private do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe PusherFake::Channel::Public do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe PusherFake::Channel, ".factory" do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe PusherFake::Configuration do
@@ -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) { "123.456" }
99
- let(:socket) { instance_double(Object, object_id: 123_456) }
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) { ["channel-1", "channel-2"] }
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) { ["channel-1", "channel-2"] }
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 }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe PusherFake::Server, ".start" do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe PusherFake::Webhook, ".trigger" do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe PusherFake, ".configure" do
@@ -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
 
@@ -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] =~ /^presence-/
27
+ return unless /^presence-/.match?(params[:channel_name])
26
28
 
27
29
  {
28
30
  user_id: params[:socket_id],
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "capybara/poltergeist"
2
4
  require "capybara/rspec"
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  if ENV["CI"]
2
4
  require "coveralls"
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ConnectHelpers
2
4
  def connect(options = {})
3
5
  visit "/"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EventHelpers
2
4
  def have_event(event, options = {})
3
5
  have_css("li", text: "Channel #{options[:on]} received #{event} event.")
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SubscriptionHelpers
2
4
  def subscribe_to(channel)
3
5
  page.execute_script("Helpers.subscribe(#{MultiJson.dump(channel)})")
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module UserHelpers
2
4
  def user_id(name = nil)
3
5
  using_session(name) do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec::Matchers.define :have_configuration_option do |option|
2
4
  match do |configuration|
3
5
  configuration.respond_to?(option) &&
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "thin/server"
2
4
 
3
5
  RSpec.configure do |config|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class WebhookHelper
2
4
  def self.events
3
5
  @events ||= []
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: 1.12.0
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: 2019-04-02 00:00:00.000000000 Z
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.2
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.2
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: 12.3.2
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: 12.3.2
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.8.0
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.8.0
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.63.1
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.63.1
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.31.0
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.31.0
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.5
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.5
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.18
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.18
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: '0'
260
+ version: '2.4'
247
261
  required_rubygems_version: !ruby/object:Gem::Requirement
248
262
  requirements:
249
263
  - - ">="