digital_cable 0.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2860b456d0e0d57a5b066fc15b6ffd23310e4ee3fbcbc8a9c94c21d6567c3673
4
+ data.tar.gz: 16bc4d2fec09bd57fc298deff72948785c1bfff88097e161b86dfedf4defa600
5
+ SHA512:
6
+ metadata.gz: f46bc4279f11985454bb3fca606f83a748b913258a1248c5966b180f7dcbfabf45a662d27cbbdf10fa5b666b17921426f8f412c9eeb6429fa6bc473ffcbd7a5d
7
+ data.tar.gz: c703a2eb080d606aec7b2fba699f10a036b7220a1597af424cdabb3c5a7d1b238487f4858d7923385eb1ffe95cdf97a20d43f250d543f348300a8a672eaa031c
@@ -0,0 +1,30 @@
1
+ FROM ruby:2.6.6-stretch
2
+
3
+ RUN apt-get -q update -yqq && apt-get install -yqq --no-install-recommends && \
4
+ curl -sL https://deb.nodesource.com/setup_12.x | bash && \
5
+ apt-get install -yqq nodejs && \
6
+ rm -rf /var/lib/apt/lists/*
7
+ RUN npm cache clean -f && npm install -g n && n 12.16.3
8
+ RUN npm install --global yarn
9
+
10
+ RUN useradd --create-home --shell /bin/bash --user-group dev && \
11
+ echo "dev ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
12
+
13
+ RUN mkdir /digital_cable
14
+ RUN chown dev:dev /digital_cable
15
+ RUN mkdir -p /digital_cable/lib/digital_cable/
16
+
17
+ USER dev
18
+ SHELL ["/bin/bash", "-l", "-c"]
19
+ WORKDIR /digital_cable
20
+
21
+ COPY --chown=dev lib/digital_cable/version.rb /digital_cable/lib/digital_cable/
22
+ COPY --chown=dev digital_cable.gemspec /digital_cable/
23
+ COPY --chown=dev Gemfile* /digital_cable/
24
+ RUN bundle install
25
+
26
+ COPY --chown=dev package.json /digital_cable/
27
+ # COPY --chown=dev yarn.lock /digital_cable/
28
+ RUN yarn install --check-files
29
+
30
+ COPY --chown=dev . /digital_cable/
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in cable_ready.gemspec
6
+ gemspec
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "github_changelog_generator/task"
5
+
6
+ task default: [:test]
7
+
8
+ task :test do
9
+ puts "Please write some tests..."
10
+ end
11
+
12
+ GitHubChangelogGenerator::RakeTask.new :changelog do |config|
13
+ config.user = "ccollins"
14
+ config.project = "digital_cable"
15
+ end
16
+
17
+
18
+ # bundle exec magic_frozen_string_literal
19
+ # bundle exec standardrb --fix
20
+ # cd ./javascript && yarn run prettier-standard cable_ready.js
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "digital_cable"
5
+ require "pry"
6
+
7
+ Pry.start
@@ -0,0 +1,24 @@
1
+ require File.expand_path("../lib/digital_cable/version", __FILE__)
2
+
3
+ Gem::Specification.new do |gem|
4
+ gem.name = "digital_cable"
5
+ gem.license = "MIT"
6
+ gem.version = DigitalCable::VERSION
7
+ gem.authors = ["Chuck Collins"]
8
+ gem.email = ["chuck.collins@gmail.com"]
9
+ gem.homepage = "https://github.com/blackbox-engineering/digital-cable"
10
+ gem.summary = "Out-of-Band Server Triggered DOM Operations"
11
+
12
+ gem.files = Dir["lib/**/*.rb", "bin/*", "[A-Z]*"]
13
+ gem.test_files = Dir["spec/**/*.rb"]
14
+
15
+ gem.add_dependency "rails", ">= 5.2"
16
+
17
+ gem.add_development_dependency "github_changelog_generator"
18
+ gem.add_development_dependency "magic_frozen_string_literal"
19
+ gem.add_development_dependency "pry"
20
+ gem.add_development_dependency "pry-nav"
21
+ gem.add_development_dependency "rake"
22
+ gem.add_development_dependency "standardrb"
23
+ gem.add_development_dependency "rspec"
24
+ end
@@ -0,0 +1,10 @@
1
+ version: '3'
2
+
3
+ services:
4
+ gem:
5
+ build:
6
+ context: .
7
+ image: digital_cable/dev:latest
8
+ volumes:
9
+ - .:/digital_cable
10
+ - /digital_cable/node_modules
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails/engine"
4
+ require "active_support/all"
5
+ require "digital_cable/version"
6
+
7
+ module DigitalCable
8
+ class Engine < Rails::Engine; end
9
+ end
@@ -0,0 +1,56 @@
1
+ module DigitalCable
2
+
3
+ class DigitalCableError < StandardError; end
4
+ module Broadcaster
5
+
6
+ OPERATIONS = [
7
+ :add_css_class,
8
+ :console_log,
9
+ :dispatch_event,
10
+ :inner_html,
11
+ :insert_adjacent_html,
12
+ :insert_adjacent_text,
13
+ :morph,
14
+ :notification,
15
+ :outer_html,
16
+ :push_state,
17
+ :remove,
18
+ :remove_attribute,
19
+ :remove_css_class,
20
+ :set_attribute,
21
+ :set_cookie,
22
+ :set_dataset_property,
23
+ :set_focus,
24
+ :set_property,
25
+ :set_style,
26
+ :set_styles,
27
+ :set_value,
28
+ :text_content
29
+ ]
30
+
31
+ def broadcast(identifier, method:, options:)
32
+ verify_method!(method)
33
+
34
+ ActionCable.server.broadcast identifier, {
35
+ "digitalCable" => true,
36
+ "operation" => { method: method.to_s.camelize(:lower), options: options }
37
+ }
38
+ end
39
+
40
+ def broadcast_to(identifier, model, method:, options:)
41
+ verify_method!(method)
42
+
43
+ identifier.broadcast_to model, {
44
+ "digitalCable" => true,
45
+ "operation" => { method: method.to_s.camelize(:lower), options: options }
46
+ }
47
+ end
48
+
49
+ private
50
+
51
+ def verify_method!(method)
52
+ raise DigitalCableError, "Undefined method" unless OPERATIONS.include?(method.to_sym)
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,29 @@
1
+ require 'digital_cable'
2
+
3
+ module DigitalCable
4
+ class Reflex < ApplicationCable::Channel
5
+ include DigitalCable::Broadcaster
6
+
7
+ delegate :render, to: :ApplicationController
8
+
9
+ attr_accessor :stream_name
10
+
11
+ def subscribed
12
+ stream_from generate_stream_name(params)
13
+ end
14
+
15
+ def process_reflex(data)
16
+ reflex(data)
17
+ end
18
+
19
+ def reflex(data); end
20
+
21
+ def response; end
22
+
23
+ private
24
+
25
+ def generate_stream_name(params)
26
+ self.stream_name = "reflex:#{params['identifier']}"
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DigitalCable
4
+ VERSION = "0.0.1"
5
+ end
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "digital_cable",
3
+ "version": "0.0.1",
4
+ "description": "DigitalCable helps you create great real-time user experiences by making it simple to trigger client-side DOM changes from server-side Ruby.",
5
+ "keywords": [
6
+ "ruby",
7
+ "rails",
8
+ "websockets",
9
+ "actioncable",
10
+ "cable",
11
+ "ssr",
12
+ "stimulus_reflex",
13
+ "client-side",
14
+ "dom"
15
+ ],
16
+ "homepage": "https://github.com/ccollins/digital-cable",
17
+ "bugs": {
18
+ "url": "https://github.com/ccollins/digital-cable/issues"
19
+ },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com:ccollins/digital_cable.git"
23
+ },
24
+ "license": "",
25
+ "author": "Chuck Collins <chuck.collins@gmail.com>",
26
+ "main": "./digital_cable.js",
27
+ "scripts": {
28
+ "prettier-standard-check": "yarn run prettier-standard --check ./digital_cable.js"
29
+ },
30
+ "dependencies": {
31
+ "morphdom": "^2.6.1"
32
+ },
33
+ "devDependencies": {
34
+ "prettier-standard": "^16.1.0"
35
+ }
36
+ }
metadata ADDED
@@ -0,0 +1,166 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: digital_cable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Chuck Collins
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-10-19 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: '5.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '5.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: github_changelog_generator
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: magic_frozen_string_literal
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-nav
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: standardrb
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description:
126
+ email:
127
+ - chuck.collins@gmail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - Dockerfile
133
+ - Gemfile
134
+ - Rakefile
135
+ - bin/console
136
+ - digital_cable.gemspec
137
+ - docker-compose.yml
138
+ - lib/digital_cable.rb
139
+ - lib/digital_cable/broadcaster.rb
140
+ - lib/digital_cable/reflex.rb
141
+ - lib/digital_cable/version.rb
142
+ - package.json
143
+ homepage: https://github.com/blackbox-engineering/digital-cable
144
+ licenses:
145
+ - MIT
146
+ metadata: {}
147
+ post_install_message:
148
+ rdoc_options: []
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ requirements: []
162
+ rubygems_version: 3.0.3
163
+ signing_key:
164
+ specification_version: 4
165
+ summary: Out-of-Band Server Triggered DOM Operations
166
+ test_files: []