litecable 0.4.1 → 0.7.1

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 (61) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +34 -1
  3. data/LICENSE.txt +1 -1
  4. data/README.md +30 -28
  5. data/lib/lite_cable.rb +23 -2
  6. data/lib/lite_cable/anycable.rb +23 -14
  7. data/lib/lite_cable/broadcast_adapters.rb +35 -0
  8. data/lib/lite_cable/broadcast_adapters/any_cable.rb +11 -0
  9. data/lib/lite_cable/broadcast_adapters/base.rb +17 -0
  10. data/lib/lite_cable/broadcast_adapters/memory.rb +11 -0
  11. data/lib/lite_cable/channel.rb +1 -0
  12. data/lib/lite_cable/channel/base.rb +4 -2
  13. data/lib/lite_cable/channel/registry.rb +5 -0
  14. data/lib/lite_cable/channel/streams.rb +1 -2
  15. data/lib/lite_cable/coders.rb +1 -0
  16. data/lib/lite_cable/coders/json.rb +1 -0
  17. data/lib/lite_cable/coders/raw.rb +2 -1
  18. data/lib/lite_cable/config.rb +8 -6
  19. data/lib/lite_cable/connection.rb +1 -0
  20. data/lib/lite_cable/connection/authorization.rb +1 -0
  21. data/lib/lite_cable/connection/base.rb +2 -2
  22. data/lib/lite_cable/connection/identification.rb +3 -0
  23. data/lib/lite_cable/connection/streams.rb +1 -0
  24. data/lib/lite_cable/connection/subscriptions.rb +7 -2
  25. data/lib/lite_cable/internal.rb +1 -0
  26. data/lib/lite_cable/logging.rb +4 -2
  27. data/lib/lite_cable/server.rb +1 -6
  28. data/lib/lite_cable/server/client_socket.rb +1 -0
  29. data/lib/lite_cable/server/client_socket/base.rb +17 -21
  30. data/lib/lite_cable/server/client_socket/subscriptions.rb +3 -2
  31. data/lib/lite_cable/server/heart_beat.rb +4 -1
  32. data/lib/lite_cable/server/middleware.rb +7 -6
  33. data/lib/lite_cable/server/subscribers_map.rb +3 -0
  34. data/lib/lite_cable/version.rb +2 -1
  35. data/lib/litecable.rb +1 -0
  36. metadata +31 -77
  37. data/.gitignore +0 -40
  38. data/.rubocop.yml +0 -63
  39. data/.travis.yml +0 -7
  40. data/Gemfile +0 -4
  41. data/Rakefile +0 -6
  42. data/bin/console +0 -14
  43. data/bin/setup +0 -8
  44. data/circle.yml +0 -8
  45. data/examples/sinatra/Gemfile +0 -16
  46. data/examples/sinatra/Procfile +0 -3
  47. data/examples/sinatra/README.md +0 -33
  48. data/examples/sinatra/anycable +0 -18
  49. data/examples/sinatra/app.rb +0 -52
  50. data/examples/sinatra/assets/app.css +0 -169
  51. data/examples/sinatra/assets/cable.js +0 -584
  52. data/examples/sinatra/assets/reset.css +0 -223
  53. data/examples/sinatra/bin/anycable-go +0 -0
  54. data/examples/sinatra/chat.rb +0 -39
  55. data/examples/sinatra/config.ru +0 -28
  56. data/examples/sinatra/views/index.slim +0 -8
  57. data/examples/sinatra/views/layout.slim +0 -15
  58. data/examples/sinatra/views/login.slim +0 -8
  59. data/examples/sinatra/views/resetcss.slim +0 -224
  60. data/examples/sinatra/views/room.slim +0 -68
  61. data/litecable.gemspec +0 -33
data/.gitignore DELETED
@@ -1,40 +0,0 @@
1
- # Numerous always-ignore extensions
2
- *.diff
3
- *.err
4
- *.orig
5
- *.log
6
- *.rej
7
- *.swo
8
- *.swp
9
- *.vi
10
- *~
11
- *.sass-cache
12
- *.iml
13
- .idea/
14
-
15
- # Sublime
16
- *.sublime-project
17
- *.sublime-workspace
18
-
19
- # OS or Editor folders
20
- .DS_Store
21
- .cache
22
- .project
23
- .settings
24
- .tmproj
25
- Thumbs.db
26
-
27
- .bundle/
28
- log/*.log
29
- *.gz
30
- pkg/
31
- spec/dummy/db/*.sqlite3
32
- spec/dummy/db/*.sqlite3-journal
33
- spec/dummy/tmp/
34
-
35
- Gemfile.lock
36
- Gemfile.local
37
- .rspec
38
- *.gem
39
- tmp/
40
- coverage/
@@ -1,63 +0,0 @@
1
- AllCops:
2
- # Include gemspec and Rakefile
3
- Include:
4
- - 'lib/**/*.rb'
5
- - 'lib/**/*.rake'
6
- - 'spec/**/*.rb'
7
- Exclude:
8
- - 'bin/**/*'
9
- - 'spec/dummy/**/*'
10
- - 'tmp/**/*'
11
- - 'bench/**/*'
12
- - 'lib/anycable/rpc/**/*'
13
- DisplayCopNames: true
14
- StyleGuideCopsOnly: false
15
- TargetRubyVersion: 2.3
16
-
17
- Style/AccessorMethodName:
18
- Enabled: false
19
-
20
- Style/TrivialAccessors:
21
- Enabled: false
22
-
23
- Style/Documentation:
24
- Exclude:
25
- - 'spec/**/*.rb'
26
-
27
- Style/ParallelAssignment:
28
- Enabled: false
29
-
30
- Style/StringLiterals:
31
- Enabled: false
32
-
33
- Style/SpaceInsideStringInterpolation:
34
- EnforcedStyle: no_space
35
-
36
- Style/BlockDelimiters:
37
- Exclude:
38
- - 'spec/**/*.rb'
39
-
40
- Lint/AmbiguousRegexpLiteral:
41
- Enabled: false
42
-
43
- Lint/AssignmentInCondition:
44
- Enabled: false
45
-
46
- Metrics/MethodLength:
47
- Exclude:
48
- - 'spec/**/*.rb'
49
-
50
- Metrics/LineLength:
51
- Max: 100
52
- Exclude:
53
- - 'spec/**/*.rb'
54
-
55
- Metrics/BlockLength:
56
- Exclude:
57
- - 'spec/**/*.rb'
58
-
59
- Rails/Date:
60
- Enabled: false
61
-
62
- Rails/TimeZone:
63
- Enabled: false
@@ -1,7 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
-
4
- matrix:
5
- include:
6
- - rvm: 2.3.3
7
- - rvm: 2.4.0
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in litecable.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1,6 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task :default => :spec
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "litecable"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
data/circle.yml DELETED
@@ -1,8 +0,0 @@
1
- machine:
2
- ruby:
3
- version: 2.3.0
4
-
5
- dependencies:
6
- pre:
7
- - gem install bundler -v 1.11.2
8
-
@@ -1,16 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'sinatra'
4
- gem 'sinatra-contrib'
5
- gem 'slim'
6
-
7
- gem 'puma'
8
-
9
- gem 'pry-byebug'
10
-
11
- # litecable deps
12
- gem "anyway_config", "~> 0.5.0"
13
- gem "websocket", "~> 1.2.4"
14
-
15
- # anycable
16
- gem "anycable", "~> 0.4.2"
@@ -1,3 +0,0 @@
1
- web: ANYCABLE=1 bundle exec puma
2
- rpc: bundle exec ./anycable
3
- ws: sleep 2 && ./bin/anycable-go -log -addr=localhost:9293
@@ -1,33 +0,0 @@
1
- # Lite Cable Sinatra Demo
2
-
3
- Sample chat application built with [Sinatra](http://www.sinatrarb.com) and Lite Cable.
4
-
5
- ## Usage
6
-
7
- Install dependencies:
8
-
9
- ```sh
10
- bundle install
11
- ```
12
-
13
- Run server:
14
-
15
- ```sh
16
- bundle exec puma
17
- ```
18
-
19
- Open your browser at [localhost:9292](http://localhost:9292), enter your name and a chat room ID (anything you want).
20
-
21
- Then open another session (another browser, incognito window) and repeat all steps using the same room ID.
22
-
23
- Now you can chat with yourself!
24
-
25
- ## AnyCable usage
26
-
27
- This example also can be used with [AnyCable](http://anycable.io).
28
-
29
- Just run `Procfile` with your favourite tool ([hivemind](https://github.com/DarthSim/hivemind) or [Foreman](http://ddollar.github.io/foreman/)):
30
-
31
- ```sh
32
- hivemind
33
- ```
@@ -1,18 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
- lib = File.expand_path("../../../lib", __FILE__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
-
6
- require "./chat"
7
- require "rack"
8
- require "anycable"
9
-
10
- # Turn AnyCable compatibility mode
11
- LiteCable.anycable!
12
-
13
- Anycable.configure do |config|
14
- config.connection_factory = Chat::Connection
15
- config.debug = true
16
- end
17
-
18
- Anycable::Server.start
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
- require "sinatra"
3
- require "sinatra/cookies"
4
-
5
- CABLE_URL = ENV['ANYCABLE'] ? "ws://localhost:9293/cable" : "/cable"
6
-
7
- class App < Sinatra::Application # :nodoc:
8
- set :public_folder, 'assets'
9
-
10
- enable :sessions
11
- set :session_secret, 'my_secrets'
12
-
13
- get '/' do
14
- if session[:user]
15
- slim :index
16
- else
17
- slim :login
18
- end
19
- end
20
-
21
- get '/sign_in' do
22
- slim :login
23
- end
24
-
25
- post '/sign_in' do
26
- if params['user']
27
- session[:user] = params['user']
28
- cookies["user"] = params['user']
29
- redirect '/'
30
- else
31
- slim :login
32
- end
33
- end
34
-
35
- post '/rooms' do
36
- if params['id']
37
- redirect "/rooms/#{params['id']}"
38
- else
39
- slim :index
40
- end
41
- end
42
-
43
- get '/rooms/:id' do
44
- if session[:user]
45
- @room_id = params['id']
46
- @user = session[:user]
47
- slim :room
48
- else
49
- slim :login
50
- end
51
- end
52
- end
@@ -1,169 +0,0 @@
1
- html, body {
2
- height: 100%;
3
- width: 100%;
4
- min-width: 300px;
5
- }
6
-
7
- body {
8
- background: #fff;
9
- color: #363636;
10
- font: 18px/30px "Arial", sans-serif;
11
- }
12
-
13
- p, div, span, a, ul, li {
14
- box-sizing: border-box;
15
- }
16
-
17
- a {
18
- text-decoration: none;
19
- color: #ff5e5e;
20
-
21
- &:visited,
22
- &:active {
23
- color: #ff5e5e;
24
- }
25
-
26
- &:hover {
27
- opacity: 0.8;
28
- }
29
- }
30
-
31
- h1 {
32
- font-size: 70px;
33
- line-height: 90px;
34
- letter-spacing: 2px;
35
- font-weight: bold;
36
- }
37
-
38
- h2 {
39
- font-size: 40px;
40
- line-height: 50px;
41
- letter-spacing: 1.5px;
42
- margin: 20px 0;
43
- }
44
-
45
- .main {
46
- height: 100%;
47
- width: 100%;
48
- padding: 0 20%;
49
- }
50
-
51
- .header {
52
- width: 100%;
53
- display: flex;
54
- justify-content: center;
55
- }
56
-
57
- input[type="text"] {
58
- width: 100%;
59
- height: 40px;
60
- line-height: 40px;
61
- display: block;
62
- margin: 0;
63
- font-size: 18px;
64
- appearance: none;
65
- box-shadow: none;
66
- border-radius: none;
67
- }
68
-
69
- button:focus, input[type="text"]:focus {
70
- outline: none;
71
- }
72
-
73
- .btn {
74
- cursor: pointer;
75
- height: 40px;
76
- text-decoration: none;
77
- padding: 0 20px;
78
- text-align: center;
79
- background: #ff5e5e;
80
- transition: opacity 200ms;
81
- color: white;
82
- font-weight: bold;
83
- font-size: 16px;
84
- letter-spacing: 1.5px;
85
- display: flex;
86
- align-items: center;
87
- justify-content: center;
88
- width: 100px;
89
- margin-top: 30px;
90
- }
91
-
92
- .btn:hover {
93
- opacity: 0.8;
94
- }
95
-
96
- .message-form {
97
- position: fixed;
98
- bottom: 0;
99
- left: 0;
100
- width: 100%;
101
- border-top: 1px #e3e3e3 solid;
102
- z-index: 10;
103
- padding: 20px 20% 20px 20%;
104
- background: white;
105
- opacity: 0.9;
106
- }
107
-
108
- .messages {
109
- display: flex;
110
- flex-direction: column;
111
- padding-bottom: 160px;
112
- }
113
-
114
- .message {
115
- display: flex;
116
- flex-direction: column;
117
- }
118
-
119
- .message.me {
120
- align-self: flex-end;
121
- }
122
-
123
- .messages .message .author {
124
- color: #ff5e5e;
125
- }
126
-
127
- .messages .message.me .author {
128
- align-self: flex-end;
129
- color: #7ed321;
130
- }
131
-
132
- .messages .message.system .author {
133
- color: #9e9e9e;
134
- }
135
-
136
- @media (max-width: 800px) and (min-width: 601px) {
137
- body {
138
- font-size: 3vw;
139
- line-height: 5vw;
140
- }
141
-
142
- h1 {
143
- font-size: 14vw;
144
- line-height: 18vw;
145
- }
146
-
147
- h2 {
148
- font-size: 5vw;
149
- line-height: 7vw;
150
- }
151
- }
152
-
153
-
154
- @media (max-width: 600px) {
155
- body {
156
- font-size: 4vw;
157
- line-height: 6vw;
158
- }
159
-
160
- h1 {
161
- font-size: 14vw;
162
- line-height: 18vw;
163
- }
164
-
165
- h2 {
166
- font-size: 10vw;
167
- line-height: 12vw;
168
- }
169
- }