livestores 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 858cced771705265b92895f5664740fbecb5f44bca6b6b38cd6ddac41684bd69
4
+ data.tar.gz: 1fe46e27b62494098002264d26b336c66bcdedcec313071fc7f8936addbd75bb
5
+ SHA512:
6
+ metadata.gz: 36768095891c650a4298a443e3ddd5abde1973b6e196fd6643d68572b700dfcd3376b01525b76804f40457f8cac66019ec416f98bbc45a92420a5fa0f9cf841d
7
+ data.tar.gz: 37a55e12822c01000b361a95b97bc9d22a46c8c822d1210c77cb93c5dab1c7af36daab48cfa94c4fc7c9d54ba6b07006b6c980dd890c87a0a474795ba7e40ddf
data/Rakefile ADDED
@@ -0,0 +1,3 @@
1
+ require "bundler/setup"
2
+
3
+ require "bundler/gem_tasks"
@@ -0,0 +1,62 @@
1
+ module ApplicationCable
2
+ class Store
3
+ attr_accessor :transmitter
4
+
5
+ def initialize subject, channel, store_id = nil
6
+ @channel = channel
7
+ @subject = subject
8
+ @store_id = store_id
9
+ end
10
+
11
+ def transmit data
12
+ if @subject
13
+ @channel.broadcast_to @subject, ({store_id: @store_id}).compact.merge(data)
14
+ else
15
+ @channel.transmit ({store_id: @store_id}).compact.merge(data)
16
+ end
17
+ end
18
+
19
+ def set value
20
+ transmit action: "set", value: value
21
+ end
22
+
23
+ def update changes
24
+ transmit action: "update", changes: changes
25
+ end
26
+
27
+ def update_by_id_in key, id, changes
28
+ transmit action: "update_by_id_in", key: key, id: id, changes: changes
29
+ end
30
+
31
+ def append_to key, value
32
+ transmit action: "append_to", value: value, key: key
33
+ end
34
+
35
+ def append value
36
+ transmit action: "append", value: value
37
+ end
38
+ end
39
+
40
+ class ScopedChannel
41
+ def initialize channel, subject
42
+ @channel = channel
43
+ @subject = subject
44
+ end
45
+
46
+ def store(store_id)
47
+ Store.new(@subject, @channel, store_id)
48
+ end
49
+
50
+ end
51
+ class Channel < ActionCable::Channel::Base
52
+ public :transmit
53
+
54
+ def self.[](subject)
55
+ ScopedChannel.new(self, subject)
56
+ end
57
+
58
+ def store(store_id)
59
+ Store.new(nil, self, store_id)
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,3 @@
1
+ module Livestores
2
+ VERSION = "0.1.0"
3
+ end
data/lib/livestores.rb ADDED
@@ -0,0 +1,2 @@
1
+ require "livestores/version"
2
+ require "livestores/channel"
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :livestore do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: livestores
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Stefan Buhrmester
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-07-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 7.0.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 7.0.4
27
+ description: Push data into Svelte stores from Rails
28
+ email:
29
+ - buhrmi@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - Rakefile
35
+ - lib/livestores.rb
36
+ - lib/livestores/channel.rb
37
+ - lib/livestores/version.rb
38
+ - lib/tasks/actionstore_tasks.rake
39
+ homepage: https://github.com/buhrmi/livestores
40
+ licenses:
41
+ - MIT
42
+ metadata:
43
+ homepage_uri: https://github.com/buhrmi/livestores
44
+ source_code_uri: https://github.com/buhrmi/livestores
45
+ changelog_uri: https://github.com/buhrmi/livestores
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ requirements: []
61
+ rubygems_version: 3.5.11
62
+ signing_key:
63
+ specification_version: 4
64
+ summary: Push data into Svelte stores from Rails
65
+ test_files: []