collab 0.1.7 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a0a566794428295f9b9ff7c624b1c6f936804bc071756766f340df9637e16938
4
- data.tar.gz: 0ccfbe46ff5f6273bfc14aac4d9e22e21a7d20e0a23b4acdfa63ef8968ea0ee7
3
+ metadata.gz: 4f8a71ae9b78062335060274fe354cfe2af0dadd83efe5c23509148d4121b4b2
4
+ data.tar.gz: dc1aaa0904bad425bb9f8ec101ec6f760ea64325380ec03a99b1b50194e9072d
5
5
  SHA512:
6
- metadata.gz: cd20428b6337a7f7609825d01369b3ac0374c17e72eafb81d3ed6239f01ca7e8061ca4f620e7e0278f279ca2ffbe0608a8fc3612f77de2e733470f09456a3e0c
7
- data.tar.gz: cc80222ba503f5b2605f77e81615397527fea9865d4b599657bd95226b4eda8bca1979347c2ddbdd6ddbe0ffcea098613b12fddd00c2b745755fc2f23f0e7ab5
6
+ metadata.gz: 47b8fd7d8996d1b7a417850c88c6c25fe985e02bb71e4e4783f5e36e5758c556295de77a64ac4035282598578dc26c3977e7a7f555811940b4a0e4f8c9423997
7
+ data.tar.gz: 5c2ca0065053132e5348392fca773696700bc326436bdac01aa22b8091734701544dcbbba52456c7f092d7dbf4204a7d077c8326c8ec256d70e459dcc582e2c4
@@ -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
 
@@ -40,7 +40,7 @@ module Collab
40
40
  end
41
41
 
42
42
  def apply_transaction(document, transaction, schema_name:)
43
- call("applyTransaction", {doc: document, data: transaction}, schema_name: schemaName)
43
+ call("applyTransaction", {doc: document, data: transaction}, schema_name: schema_name)
44
44
  end
45
45
 
46
46
  def html_to_document(html, schema_name:)
@@ -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
@@ -29,8 +29,6 @@ module Collab
29
29
  end
30
30
 
31
31
  def from_html(html)
32
- raise "cannot override a persisted document" if self.persisted?
33
-
34
32
  self.document = ::Collab::Bridge.current.html_to_document(html, schema_name: schema_name)
35
33
  end
36
34
 
@@ -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.7'
2
+ VERSION = '0.2.2'
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.7
4
+ version: 0.2.2
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