collab 0.1.8 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/collab.rb +2 -1
- data/lib/collab/bridge.rb +1 -1
- data/lib/collab/channel.rb +32 -0
- data/lib/collab/config.rb +1 -11
- data/lib/collab/engine.rb +4 -0
- data/lib/collab/models/document.rb +1 -1
- data/lib/collab/models/document_transaction.rb +2 -2
- data/lib/collab/version.rb +1 -1
- data/lib/generators/collab/install/install_generator.rb +2 -0
- data/lib/generators/collab/install/templates/channel.rb +19 -0
- data/lib/generators/collab/install/templates/initializer.rb +5 -14
- metadata +5 -4
- data/app/channels/collab/document_channel.rb +0 -28
- data/lib/collab/railtie.rb +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2efe75edc1fb38bc6c91ea6b81182c98258f1e8fef1e494356d25151871ebaa7
|
4
|
+
data.tar.gz: e7d6e12431300c01d37ebada5cd7d52c0dcbe6abec825ce7b436f76b5ddbbe52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 143fc779846435452295416d8ed9f88497ee3bf56be85cbc6c091c95676eb7b1383119c61de85c639c402150a6e1efe940bee15e36509a9738b1f2dba0e14e72
|
7
|
+
data.tar.gz: b67060677d363c4a6527a505b4c6b3941b5f347e134db4fd7b3d6d530343f219964e268c7da702e4225acd076a1f8f6dcf63a9eb8ba62f577c78429b37897482
|
data/lib/collab.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require "collab/
|
1
|
+
require "collab/engine"
|
2
2
|
|
3
3
|
module Collab
|
4
4
|
def self.config
|
@@ -7,6 +7,7 @@ module Collab
|
|
7
7
|
yield @config
|
8
8
|
end
|
9
9
|
|
10
|
+
autoload "Channel", "collab/channel"
|
10
11
|
autoload "Config", "collab/config"
|
11
12
|
autoload "Bridge", "collab/bridge"
|
12
13
|
autoload "HasCollaborativeDocument", "collab/has_collaborative_document"
|
data/lib/collab/bridge.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
module Collab
|
2
|
+
module Channel
|
3
|
+
def document; @document end
|
4
|
+
|
5
|
+
def subscribed
|
6
|
+
@document = find_document
|
7
|
+
|
8
|
+
starting_version = params[:startingVersion]&.to_i
|
9
|
+
raise "missing startingVersion" if starting_version.nil?
|
10
|
+
|
11
|
+
stream_for document
|
12
|
+
|
13
|
+
transactions = document.transactions
|
14
|
+
.where("document_version > ?", starting_version)
|
15
|
+
.order(document_version: :asc)
|
16
|
+
.load
|
17
|
+
|
18
|
+
raise "invalid version" unless transactions.first.document_version == (starting_version + 1) unless transactions.empty?
|
19
|
+
|
20
|
+
transactions.lazy.map(&:as_json).each(method(:transmit))
|
21
|
+
end
|
22
|
+
|
23
|
+
def submit(data)
|
24
|
+
authorize_submit!(data)
|
25
|
+
document.perform_transaction_later(data)
|
26
|
+
end
|
27
|
+
|
28
|
+
def unsubscribed
|
29
|
+
stop_all_streams # this may not be needed
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/collab/config.rb
CHANGED
@@ -1,15 +1,5 @@
|
|
1
1
|
module Collab
|
2
2
|
class Config
|
3
|
-
attr_accessor :max_transactions, :application_job, :queue_document_transaction_job_as, :schema_package, :application_record, :document_transaction_model, :document_model
|
4
|
-
|
5
|
-
def find_document_for_subscribe(&block)
|
6
|
-
@find_document_for_subscribe unless block
|
7
|
-
@find_document_for_subscribe = block
|
8
|
-
end
|
9
|
-
|
10
|
-
def authorize_update_document(&block)
|
11
|
-
@authorize_update_document unless block
|
12
|
-
@authorize_update_document = block
|
13
|
-
end
|
3
|
+
attr_accessor :max_transactions, :application_job, :queue_document_transaction_job_as, :schema_package, :application_record, :document_transaction_model, :document_model, :channel_name
|
14
4
|
end
|
15
5
|
end
|
data/lib/collab/version.rb
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
class CollabDocumentChannel < ApplicationCable::Channel
|
2
|
+
include Collab::Channel
|
3
|
+
|
4
|
+
private
|
5
|
+
|
6
|
+
# Find the document to subscribe to based on the params passed to the channel
|
7
|
+
# Authorization may also be performed here (raise an error)
|
8
|
+
def find_document
|
9
|
+
Collab::Models::Document.find(params[:document_id]).tap do |document|
|
10
|
+
raise "authorization failed"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# Called when a client submits a transaction in order to update a document
|
15
|
+
# You should throw an error if unauthorized
|
16
|
+
def authorize_submit!(data)
|
17
|
+
raise "authorization failed"
|
18
|
+
end
|
19
|
+
end
|
@@ -6,20 +6,11 @@ Collab.config do |c|
|
|
6
6
|
# How many old transactions to keep per document
|
7
7
|
c.max_transactions = 250
|
8
8
|
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
|
14
|
-
c.find_document_for_subscribe do
|
15
|
-
Collab::Models::Document.find params[:document_id]
|
16
|
-
end
|
17
|
-
# Called when a client submits a transaction in order to update a document
|
18
|
-
# You should throw an error if unauthorized
|
19
|
-
# The block is executed in the instance of the channel
|
20
|
-
c.authorize_update_document do |document, transaction_data|
|
21
|
-
# raise "authorization failed"
|
22
|
-
end
|
9
|
+
# ActionCable settings
|
10
|
+
# ====================
|
11
|
+
# The document channel to use for collaboration
|
12
|
+
# If you change this, you must pass {channel: "[ChannelName]"} as subscription params to the Javascript client
|
13
|
+
c.channel_name = "::CollabDocumentChannel"
|
23
14
|
|
24
15
|
# ActionJob settings
|
25
16
|
# ==================
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: collab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Aubin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -52,18 +52,19 @@ extensions: []
|
|
52
52
|
extra_rdoc_files: []
|
53
53
|
files:
|
54
54
|
- Rakefile
|
55
|
-
- app/channels/collab/document_channel.rb
|
56
55
|
- app/jobs/collab/document_transaction_job.rb
|
57
56
|
- lib/collab.rb
|
58
57
|
- lib/collab/bridge.rb
|
58
|
+
- lib/collab/channel.rb
|
59
59
|
- lib/collab/config.rb
|
60
|
+
- lib/collab/engine.rb
|
60
61
|
- lib/collab/has_collaborative_document.rb
|
61
62
|
- lib/collab/models/base.rb
|
62
63
|
- lib/collab/models/document.rb
|
63
64
|
- lib/collab/models/document_transaction.rb
|
64
|
-
- lib/collab/railtie.rb
|
65
65
|
- lib/collab/version.rb
|
66
66
|
- lib/generators/collab/install/install_generator.rb
|
67
|
+
- lib/generators/collab/install/templates/channel.rb
|
67
68
|
- lib/generators/collab/install/templates/create_collab_tables.rb
|
68
69
|
- lib/generators/collab/install/templates/initializer.rb
|
69
70
|
- lib/tasks/collab_tasks.rake
|
@@ -1,28 +0,0 @@
|
|
1
|
-
class Collab::DocumentChannel < ApplicationCable::Channel
|
2
|
-
def subscribed
|
3
|
-
@document = instance_exec(::Collab.config.find_document_for_subscribe)
|
4
|
-
|
5
|
-
starting_version = params[:startingVersion]&.to_i
|
6
|
-
raise "missing startingVersion" if starting_version.nil?
|
7
|
-
|
8
|
-
stream_for @document
|
9
|
-
|
10
|
-
transactions = @document.transactions
|
11
|
-
.where("document_version > ?", starting_version)
|
12
|
-
.order(document_version: :asc)
|
13
|
-
.load
|
14
|
-
|
15
|
-
raise "invalid version" unless transactions.first.document_version == (starting_version + 1) unless transactions.empty?
|
16
|
-
|
17
|
-
transactions.lazy.map(&:as_json).each(method(:transmit))
|
18
|
-
end
|
19
|
-
|
20
|
-
def submit(data)
|
21
|
-
instance_exec(@document, data, &::Collab.config.authorize_update_document)
|
22
|
-
@document.perform_transaction_later(data)
|
23
|
-
end
|
24
|
-
|
25
|
-
def unsubscribed
|
26
|
-
stop_all_streams # this may not be needed
|
27
|
-
end
|
28
|
-
end
|
data/lib/collab/railtie.rb
DELETED