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.
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
  - - ">="