digital_cable 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []