collab 0.1.8 → 0.2.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eb2ee35163aa059b11156c14d30c0366c5f69b79475e0c7d7ee5a97fbcf9ade9
4
- data.tar.gz: ded15f9d6aebc4fcd40adf92cb8105caeddd94b9894e596fe05fea1943518fa0
3
+ metadata.gz: 2efe75edc1fb38bc6c91ea6b81182c98258f1e8fef1e494356d25151871ebaa7
4
+ data.tar.gz: e7d6e12431300c01d37ebada5cd7d52c0dcbe6abec825ce7b436f76b5ddbbe52
5
5
  SHA512:
6
- metadata.gz: fe270eefabd2bc3753bef65a2892a359da7b9c16a6d4d2dff3d94006645a767744aad493268a795d6f339cf0e13259b6d0d6a383656da2b811c0aae4262fcf03
7
- data.tar.gz: 40da589d2a889569e10bbc6541892388ee6f061f0a6bca73fee2c8b470498a9211fd546c738da7dd184aa936ed56b2f5939136a82e0435195a0c85454b799961
6
+ metadata.gz: 143fc779846435452295416d8ed9f88497ee3bf56be85cbc6c091c95676eb7b1383119c61de85c639c402150a6e1efe940bee15e36509a9738b1f2dba0e14e72
7
+ data.tar.gz: b67060677d363c4a6527a505b4c6b3941b5f347e134db4fd7b3d6d530343f219964e268c7da702e4225acd076a1f8f6dcf63a9eb8ba62f577c78429b37897482
@@ -1,4 +1,4 @@
1
- require "collab/railtie"
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"
@@ -23,7 +23,7 @@ module Collab
23
23
 
24
24
  def initialize
25
25
  @node = Dir.chdir(Rails.root) do
26
- IO.popen(["node", "-e", %q{"require('rails-collab-server')"}], "r+")
26
+ IO.popen(["node", "-e", "require('rails-collab-server')"], "r+")
27
27
  end
28
28
  end
29
29
 
@@ -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
@@ -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
@@ -0,0 +1,4 @@
1
+ module Collab
2
+ class Engine < ::Rails::Engine
3
+ end
4
+ end
@@ -33,7 +33,7 @@ module Collab
33
33
  end
34
34
 
35
35
  def perform_transaction_later(data)
36
- ::Collab::DocumentTransactionJob.perform_later(@document, data)
36
+ ::Collab::DocumentTransactionJob.perform_later(self, data)
37
37
  end
38
38
 
39
39
  def apply_transaction_now(data)
@@ -16,7 +16,7 @@ module Collab
16
16
  end
17
17
 
18
18
  def broadcast
19
- ::Collab::DocumentChannel.broadcast_to(document, as_json)
19
+ ::Collab.config.channel_name.constantize.broadcast_to(document, as_json)
20
20
  end
21
21
  end
22
- end
22
+ end
@@ -1,3 +1,3 @@
1
1
  module Collab
2
- VERSION = '0.1.8'
2
+ VERSION = '0.2.3'
3
3
  end
@@ -22,6 +22,8 @@ module Collab
22
22
  "db/migrate/create_collab_tables.rb",
23
23
  )
24
24
 
25
+ copy_file "channel.rb", "app/channels/collab_document_channel.rb"
26
+
25
27
  copy_file "initializer.rb", "config/initializers/collab.rb"
26
28
  end
27
29
  end
@@ -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
- # Handlers
10
- # ========
11
- # Find a the document to subscribe to based on the params passed to the channel
12
- # Authorization may also be performed here (raise an error)
13
- # The block is executed in the scope of the ActionCable channel within #subscribe
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.1.8
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-30 00:00:00.000000000 Z
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
@@ -1,4 +0,0 @@
1
- module Collab
2
- class Railtie < ::Rails::Railtie
3
- end
4
- end