hyper-operation 0.5.12 → 0.99.0
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 +5 -5
- data/.gitignore +4 -1
- data/.travis.yml +33 -0
- data/DOCS-POLICIES.md +93 -0
- data/DOCS.md +1 -1
- data/Gemfile +5 -1
- data/Gemfile.lock +379 -0
- data/README.md +10 -9
- data/Rakefile +10 -2
- data/hyper-operation.gemspec +34 -29
- data/lib/hyper-operation.rb +5 -4
- data/lib/hyper-operation/boot.rb +1 -1
- data/lib/hyper-operation/engine.rb +1 -1
- data/lib/hyper-operation/http.rb +309 -0
- data/lib/hyper-operation/railway/params_wrapper.rb +1 -0
- data/lib/hyper-operation/server_op.rb +83 -18
- data/lib/hyper-operation/transport/client_drivers.rb +71 -28
- data/lib/hyper-operation/transport/connection.rb +22 -20
- data/lib/hyper-operation/transport/hyperloop.rb +1 -1
- data/lib/hyper-operation/transport/hyperloop_controller.rb +6 -1
- data/lib/hyper-operation/transport/policy.rb +78 -13
- data/lib/hyper-operation/version.rb +1 -1
- metadata +95 -319
- data/CODE_OF_CONDUCT.md +0 -49
- data/examples/chat-app/.gitignore +0 -21
- data/examples/chat-app/Gemfile +0 -57
- data/examples/chat-app/Gemfile.lock +0 -283
- data/examples/chat-app/README.md +0 -3
- data/examples/chat-app/Rakefile +0 -6
- data/examples/chat-app/app/assets/config/manifest.js +0 -3
- data/examples/chat-app/app/assets/images/.keep +0 -0
- data/examples/chat-app/app/assets/javascripts/application.js +0 -3
- data/examples/chat-app/app/assets/javascripts/cable.js +0 -13
- data/examples/chat-app/app/assets/javascripts/channels/.keep +0 -0
- data/examples/chat-app/app/assets/stylesheets/application.css +0 -15
- data/examples/chat-app/app/channels/application_cable/channel.rb +0 -4
- data/examples/chat-app/app/channels/application_cable/connection.rb +0 -4
- data/examples/chat-app/app/controllers/application_controller.rb +0 -3
- data/examples/chat-app/app/controllers/concerns/.keep +0 -0
- data/examples/chat-app/app/controllers/home_controller.rb +0 -5
- data/examples/chat-app/app/helpers/application_helper.rb +0 -2
- data/examples/chat-app/app/hyperloop/components/app.rb +0 -11
- data/examples/chat-app/app/hyperloop/components/formatted_div.rb +0 -13
- data/examples/chat-app/app/hyperloop/components/input_box.rb +0 -29
- data/examples/chat-app/app/hyperloop/components/message.rb +0 -29
- data/examples/chat-app/app/hyperloop/components/messages.rb +0 -9
- data/examples/chat-app/app/hyperloop/components/nav.rb +0 -30
- data/examples/chat-app/app/hyperloop/operations/operations.rb +0 -56
- data/examples/chat-app/app/hyperloop/stores/message_store.rb +0 -23
- data/examples/chat-app/app/models/application_record.rb +0 -3
- data/examples/chat-app/app/models/concerns/.keep +0 -0
- data/examples/chat-app/app/models/models.rb +0 -2
- data/examples/chat-app/app/models/public/.keep +0 -0
- data/examples/chat-app/app/models/public/announcement.rb +0 -8
- data/examples/chat-app/app/policies/application_policy.rb +0 -5
- data/examples/chat-app/app/views/layouts/application.html.erb +0 -51
- data/examples/chat-app/bin/bundle +0 -3
- data/examples/chat-app/bin/rails +0 -9
- data/examples/chat-app/bin/rake +0 -9
- data/examples/chat-app/bin/setup +0 -34
- data/examples/chat-app/bin/spring +0 -17
- data/examples/chat-app/bin/update +0 -29
- data/examples/chat-app/config.ru +0 -5
- data/examples/chat-app/config/application.rb +0 -13
- data/examples/chat-app/config/boot.rb +0 -3
- data/examples/chat-app/config/cable.yml +0 -9
- data/examples/chat-app/config/database.yml +0 -25
- data/examples/chat-app/config/environment.rb +0 -5
- data/examples/chat-app/config/environments/development.rb +0 -56
- data/examples/chat-app/config/environments/production.rb +0 -86
- data/examples/chat-app/config/environments/test.rb +0 -42
- data/examples/chat-app/config/initializers/application_controller_renderer.rb +0 -6
- data/examples/chat-app/config/initializers/assets.rb +0 -11
- data/examples/chat-app/config/initializers/backtrace_silencers.rb +0 -7
- data/examples/chat-app/config/initializers/cookies_serializer.rb +0 -5
- data/examples/chat-app/config/initializers/filter_parameter_logging.rb +0 -4
- data/examples/chat-app/config/initializers/hyperloop.rb +0 -4
- data/examples/chat-app/config/initializers/inflections.rb +0 -16
- data/examples/chat-app/config/initializers/mime_types.rb +0 -4
- data/examples/chat-app/config/initializers/new_framework_defaults.rb +0 -24
- data/examples/chat-app/config/initializers/session_store.rb +0 -3
- data/examples/chat-app/config/initializers/wrap_parameters.rb +0 -14
- data/examples/chat-app/config/locales/en.yml +0 -23
- data/examples/chat-app/config/puma.rb +0 -47
- data/examples/chat-app/config/routes.rb +0 -5
- data/examples/chat-app/config/secrets.yml +0 -22
- data/examples/chat-app/config/spring.rb +0 -6
- data/examples/chat-app/db/seeds.rb +0 -7
- data/examples/chat-app/lib/assets/.keep +0 -0
- data/examples/chat-app/lib/tasks/.keep +0 -0
- data/examples/chat-app/log/.keep +0 -0
- data/examples/chat-app/public/404.html +0 -67
- data/examples/chat-app/public/422.html +0 -67
- data/examples/chat-app/public/500.html +0 -66
- data/examples/chat-app/public/apple-touch-icon-precomposed.png +0 -0
- data/examples/chat-app/public/apple-touch-icon.png +0 -0
- data/examples/chat-app/public/favicon.ico +0 -0
- data/examples/chat-app/public/robots.txt +0 -5
- data/examples/chat-app/test/controllers/.keep +0 -0
- data/examples/chat-app/test/fixtures/.keep +0 -0
- data/examples/chat-app/test/fixtures/files/.keep +0 -0
- data/examples/chat-app/test/helpers/.keep +0 -0
- data/examples/chat-app/test/integration/.keep +0 -0
- data/examples/chat-app/test/mailers/.keep +0 -0
- data/examples/chat-app/test/models/.keep +0 -0
- data/examples/chat-app/test/test_helper.rb +0 -10
- data/examples/chat-app/tmp/.keep +0 -0
- data/examples/chat-app/vendor/assets/javascripts/.keep +0 -0
- data/examples/chat-app/vendor/assets/stylesheets/.keep +0 -0
- data/examples/five-letter-word-game/.gitignore +0 -21
- data/examples/five-letter-word-game/Gemfile +0 -62
- data/examples/five-letter-word-game/Gemfile.lock +0 -291
- data/examples/five-letter-word-game/README.md +0 -24
- data/examples/five-letter-word-game/Rakefile +0 -6
- data/examples/five-letter-word-game/app/assets/config/manifest.js +0 -3
- data/examples/five-letter-word-game/app/assets/images/.keep +0 -0
- data/examples/five-letter-word-game/app/assets/javascripts/application.js +0 -4
- data/examples/five-letter-word-game/app/assets/javascripts/cable.js +0 -13
- data/examples/five-letter-word-game/app/assets/javascripts/channels/.keep +0 -0
- data/examples/five-letter-word-game/app/assets/stylesheets/application.css +0 -15
- data/examples/five-letter-word-game/app/channels/application_cable/channel.rb +0 -4
- data/examples/five-letter-word-game/app/channels/application_cable/connection.rb +0 -4
- data/examples/five-letter-word-game/app/controllers/application_controller.rb +0 -14
- data/examples/five-letter-word-game/app/controllers/concerns/.keep +0 -0
- data/examples/five-letter-word-game/app/controllers/home_controller.rb +0 -5
- data/examples/five-letter-word-game/app/helpers/application_helper.rb +0 -2
- data/examples/five-letter-word-game/app/hyperloop/components/app.rb +0 -65
- data/examples/five-letter-word-game/app/hyperloop/components/guesses.rb +0 -8
- data/examples/five-letter-word-game/app/hyperloop/components/input_word.rb +0 -13
- data/examples/five-letter-word-game/app/hyperloop/models/user.rb +0 -27
- data/examples/five-letter-word-game/app/hyperloop/operations/ops.rb +0 -115
- data/examples/five-letter-word-game/app/hyperloop/stores/store.rb +0 -120
- data/examples/five-letter-word-game/app/jobs/application_job.rb +0 -2
- data/examples/five-letter-word-game/app/mailers/application_mailer.rb +0 -4
- data/examples/five-letter-word-game/app/models/application_record.rb +0 -3
- data/examples/five-letter-word-game/app/models/concerns/.keep +0 -0
- data/examples/five-letter-word-game/app/policies/hyperloop/application_policy.rb +0 -3
- data/examples/five-letter-word-game/app/policies/user_policy.rb +0 -4
- data/examples/five-letter-word-game/app/views/layouts/application.html.erb +0 -14
- data/examples/five-letter-word-game/app/views/layouts/mailer.html.erb +0 -13
- data/examples/five-letter-word-game/app/views/layouts/mailer.text.erb +0 -1
- data/examples/five-letter-word-game/bin/bundle +0 -3
- data/examples/five-letter-word-game/bin/rails +0 -9
- data/examples/five-letter-word-game/bin/rake +0 -9
- data/examples/five-letter-word-game/bin/setup +0 -34
- data/examples/five-letter-word-game/bin/spring +0 -17
- data/examples/five-letter-word-game/bin/update +0 -29
- data/examples/five-letter-word-game/config.ru +0 -5
- data/examples/five-letter-word-game/config/application.rb +0 -12
- data/examples/five-letter-word-game/config/boot.rb +0 -3
- data/examples/five-letter-word-game/config/cable.yml +0 -9
- data/examples/five-letter-word-game/config/database.yml +0 -46
- data/examples/five-letter-word-game/config/environment.rb +0 -5
- data/examples/five-letter-word-game/config/environments/development.rb +0 -56
- data/examples/five-letter-word-game/config/environments/production.rb +0 -86
- data/examples/five-letter-word-game/config/environments/test.rb +0 -42
- data/examples/five-letter-word-game/config/initializers/application_controller_renderer.rb +0 -6
- data/examples/five-letter-word-game/config/initializers/assets.rb +0 -15
- data/examples/five-letter-word-game/config/initializers/backtrace_silencers.rb +0 -7
- data/examples/five-letter-word-game/config/initializers/cookies_serializer.rb +0 -5
- data/examples/five-letter-word-game/config/initializers/filter_parameter_logging.rb +0 -4
- data/examples/five-letter-word-game/config/initializers/hyperloop.rb +0 -19
- data/examples/five-letter-word-game/config/initializers/inflections.rb +0 -16
- data/examples/five-letter-word-game/config/initializers/mime_types.rb +0 -4
- data/examples/five-letter-word-game/config/initializers/new_framework_defaults.rb +0 -24
- data/examples/five-letter-word-game/config/initializers/session_store.rb +0 -3
- data/examples/five-letter-word-game/config/initializers/wrap_parameters.rb +0 -14
- data/examples/five-letter-word-game/config/locales/en.yml +0 -23
- data/examples/five-letter-word-game/config/puma.rb +0 -47
- data/examples/five-letter-word-game/config/routes.rb +0 -5
- data/examples/five-letter-word-game/config/secrets.yml +0 -22
- data/examples/five-letter-word-game/config/spring.rb +0 -6
- data/examples/five-letter-word-game/db/schema.rb +0 -28
- data/examples/five-letter-word-game/db/seeds.rb +0 -7
- data/examples/five-letter-word-game/lib/assets/.keep +0 -0
- data/examples/five-letter-word-game/lib/tasks/.keep +0 -0
- data/examples/five-letter-word-game/log/.keep +0 -0
- data/examples/five-letter-word-game/public/404.html +0 -67
- data/examples/five-letter-word-game/public/422.html +0 -67
- data/examples/five-letter-word-game/public/500.html +0 -66
- data/examples/five-letter-word-game/public/apple-touch-icon-precomposed.png +0 -0
- data/examples/five-letter-word-game/public/apple-touch-icon.png +0 -0
- data/examples/five-letter-word-game/public/favicon.ico +0 -0
- data/examples/five-letter-word-game/public/robots.txt +0 -5
- data/examples/five-letter-word-game/test/controllers/.keep +0 -0
- data/examples/five-letter-word-game/test/fixtures/.keep +0 -0
- data/examples/five-letter-word-game/test/fixtures/files/.keep +0 -0
- data/examples/five-letter-word-game/test/helpers/.keep +0 -0
- data/examples/five-letter-word-game/test/integration/.keep +0 -0
- data/examples/five-letter-word-game/test/mailers/.keep +0 -0
- data/examples/five-letter-word-game/test/models/.keep +0 -0
- data/examples/five-letter-word-game/test/test_helper.rb +0 -10
- data/examples/five-letter-word-game/tmp/.keep +0 -0
- data/examples/five-letter-word-game/vendor/assets/javascripts/.keep +0 -0
- data/examples/five-letter-word-game/vendor/assets/stylesheets/.keep +0 -0
- data/examples/smoke_test/.gitignore +0 -21
- data/examples/smoke_test/Gemfile +0 -59
- data/examples/smoke_test/Gemfile.lock +0 -289
- data/examples/smoke_test/README.md +0 -24
- data/examples/smoke_test/Rakefile +0 -6
- data/examples/smoke_test/app/assets/config/manifest.js +0 -3
- data/examples/smoke_test/app/assets/images/.keep +0 -0
- data/examples/smoke_test/app/assets/javascripts/application.js +0 -15
- data/examples/smoke_test/app/assets/javascripts/cable.js +0 -13
- data/examples/smoke_test/app/assets/javascripts/channels/.keep +0 -0
- data/examples/smoke_test/app/assets/stylesheets/application.css +0 -15
- data/examples/smoke_test/app/channels/application_cable/channel.rb +0 -4
- data/examples/smoke_test/app/channels/application_cable/connection.rb +0 -4
- data/examples/smoke_test/app/controllers/app_controller.rb +0 -5
- data/examples/smoke_test/app/controllers/application_controller.rb +0 -3
- data/examples/smoke_test/app/helpers/application_helper.rb +0 -2
- data/examples/smoke_test/app/hyperloop/components/hello.rb +0 -25
- data/examples/smoke_test/app/hyperloop/operations/operations/nested_send_to_all.rb +0 -7
- data/examples/smoke_test/app/hyperloop/operations/send_to_all.rb +0 -6
- data/examples/smoke_test/app/hyperloop/stores/messages.rb +0 -4
- data/examples/smoke_test/app/jobs/application_job.rb +0 -2
- data/examples/smoke_test/app/mailers/application_mailer.rb +0 -4
- data/examples/smoke_test/app/models/application_record.rb +0 -3
- data/examples/smoke_test/app/models/concerns/.keep +0 -0
- data/examples/smoke_test/app/policies/application_policy.rb +0 -8
- data/examples/smoke_test/app/views/layouts/application.html.erb +0 -14
- data/examples/smoke_test/app/views/layouts/mailer.html.erb +0 -13
- data/examples/smoke_test/app/views/layouts/mailer.text.erb +0 -1
- data/examples/smoke_test/bin/bundle +0 -3
- data/examples/smoke_test/bin/rails +0 -9
- data/examples/smoke_test/bin/rake +0 -9
- data/examples/smoke_test/bin/setup +0 -34
- data/examples/smoke_test/bin/spring +0 -17
- data/examples/smoke_test/bin/update +0 -29
- data/examples/smoke_test/config.ru +0 -5
- data/examples/smoke_test/config/application.rb +0 -15
- data/examples/smoke_test/config/boot.rb +0 -3
- data/examples/smoke_test/config/cable.yml +0 -9
- data/examples/smoke_test/config/database.yml +0 -25
- data/examples/smoke_test/config/environment.rb +0 -5
- data/examples/smoke_test/config/environments/development.rb +0 -54
- data/examples/smoke_test/config/environments/production.rb +0 -86
- data/examples/smoke_test/config/environments/test.rb +0 -42
- data/examples/smoke_test/config/initializers/application_controller_renderer.rb +0 -6
- data/examples/smoke_test/config/initializers/assets.rb +0 -11
- data/examples/smoke_test/config/initializers/backtrace_silencers.rb +0 -7
- data/examples/smoke_test/config/initializers/cookies_serializer.rb +0 -5
- data/examples/smoke_test/config/initializers/filter_parameter_logging.rb +0 -4
- data/examples/smoke_test/config/initializers/hyperloop.rb +0 -32
- data/examples/smoke_test/config/initializers/inflections.rb +0 -16
- data/examples/smoke_test/config/initializers/mime_types.rb +0 -4
- data/examples/smoke_test/config/initializers/new_framework_defaults.rb +0 -24
- data/examples/smoke_test/config/initializers/session_store.rb +0 -3
- data/examples/smoke_test/config/initializers/wrap_parameters.rb +0 -14
- data/examples/smoke_test/config/locales/en.yml +0 -23
- data/examples/smoke_test/config/puma.rb +0 -47
- data/examples/smoke_test/config/routes.rb +0 -5
- data/examples/smoke_test/config/secrets.yml +0 -22
- data/examples/smoke_test/config/spring.rb +0 -6
- data/examples/smoke_test/db/seeds.rb +0 -7
- data/examples/smoke_test/lib/assets/.keep +0 -0
- data/examples/smoke_test/lib/tasks/.keep +0 -0
- data/examples/smoke_test/log/.keep +0 -0
- data/examples/smoke_test/public/404.html +0 -67
- data/examples/smoke_test/public/422.html +0 -67
- data/examples/smoke_test/public/500.html +0 -66
- data/examples/smoke_test/public/apple-touch-icon-precomposed.png +0 -0
- data/examples/smoke_test/public/apple-touch-icon.png +0 -0
- data/examples/smoke_test/public/favicon.ico +0 -0
- data/examples/smoke_test/public/robots.txt +0 -5
- data/examples/smoke_test/test/controllers/.keep +0 -0
- data/examples/smoke_test/test/fixtures/.keep +0 -0
- data/examples/smoke_test/test/fixtures/files/.keep +0 -0
- data/examples/smoke_test/test/helpers/.keep +0 -0
- data/examples/smoke_test/test/integration/.keep +0 -0
- data/examples/smoke_test/test/mailers/.keep +0 -0
- data/examples/smoke_test/test/models/.keep +0 -0
- data/examples/smoke_test/test/test_helper.rb +0 -10
- data/examples/smoke_test/tmp/.keep +0 -0
- data/examples/smoke_test/vendor/assets/javascripts/.keep +0 -0
- data/examples/smoke_test/vendor/assets/stylesheets/.keep +0 -0
- data/lib/hyper-operation/call_by_class_name.rb +0 -60
|
File without changes
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
|
3
|
-
* listed below.
|
|
4
|
-
*
|
|
5
|
-
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
|
6
|
-
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
|
7
|
-
*
|
|
8
|
-
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
|
9
|
-
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
|
|
10
|
-
* files in this directory. Styles in this file should be added after the last require_* statement.
|
|
11
|
-
* It is generally better to create a new file per style scope.
|
|
12
|
-
*
|
|
13
|
-
*= require_tree .
|
|
14
|
-
*= require_self
|
|
15
|
-
*/
|
|
File without changes
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
class FormattedDiv < Hyperloop::Component
|
|
2
|
-
param :markdown, type: String
|
|
3
|
-
collect_other_params_as :attributes
|
|
4
|
-
|
|
5
|
-
def render
|
|
6
|
-
div(params.attributes) do # send other attributes on to the outer div
|
|
7
|
-
div(
|
|
8
|
-
dangerously_set_inner_HTML:
|
|
9
|
-
{ __html: `marked(#{params.markdown}, {sanitize: true })` }
|
|
10
|
-
)
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
class InputBox < Hyperloop::Component
|
|
2
|
-
before_mount { mutate.composition '' }
|
|
3
|
-
|
|
4
|
-
def render
|
|
5
|
-
div.row.form_group.input_box.navbar.navbar_inverse.navbar_fixed_bottom do
|
|
6
|
-
div.col_sm_1.white { 'Say: ' }
|
|
7
|
-
textarea.col_sm_5(rows: rows, value: state.composition)
|
|
8
|
-
.on(:change) do |e|
|
|
9
|
-
mutate.composition e.target.value
|
|
10
|
-
end
|
|
11
|
-
.on(:key_down) do |e|
|
|
12
|
-
send! if send_key?(e)
|
|
13
|
-
end
|
|
14
|
-
FormattedDiv class: 'col-sm-5 white', markdown: state.composition
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def rows
|
|
19
|
-
[state.composition.count("\n") + 1, 20].min
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def send_key?(e)
|
|
23
|
-
(e.char_code == 13 || e.key_code == 13) && (e.meta_key || e.ctrl_key)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def send!
|
|
27
|
-
Operations::Send message: mutate.composition(''), user_name: MessageStore.user_name
|
|
28
|
-
end
|
|
29
|
-
end
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
class Message < Hyperloop::Component
|
|
2
|
-
param :message, type: Hash
|
|
3
|
-
|
|
4
|
-
after_mount :scroll_to_bottom
|
|
5
|
-
after_update :scroll_to_bottom
|
|
6
|
-
|
|
7
|
-
def render
|
|
8
|
-
div.row.alternating.message do
|
|
9
|
-
div.col_sm_2 { params.message[:from] }
|
|
10
|
-
FormattedDiv class: 'col-sm-8', markdown: params.message[:message]
|
|
11
|
-
div.col_sm_2 { formatted_time }
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def scroll_to_bottom
|
|
16
|
-
Element['html, body'].animate({ scrollTop: Element[Document].height }, :slow)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def formatted_time
|
|
20
|
-
time = params.message[:time]
|
|
21
|
-
if Time.now < time + 1.day
|
|
22
|
-
time.strftime '%I:%M %p'
|
|
23
|
-
elsif Time.now < time + 7.days
|
|
24
|
-
time.strftime '%A'
|
|
25
|
-
else
|
|
26
|
-
time.strftime '%D %I:%M %p'
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
class Nav < Hyperloop::Component
|
|
2
|
-
|
|
3
|
-
before_mount do
|
|
4
|
-
mutate.user_name_input ''
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
render do
|
|
8
|
-
div.navbar.navbar_inverse.navbar_fixed_top do
|
|
9
|
-
div.container do
|
|
10
|
-
div.collapse.navbar_collapse(id: 'navbar') do
|
|
11
|
-
form.navbar_form.navbar_left(role: :search) do
|
|
12
|
-
div.form_group do
|
|
13
|
-
input.form_control(type: :text, value: state.user_name_input, placeholder: "Enter Your Handle"
|
|
14
|
-
).on(:change) do |e|
|
|
15
|
-
mutate.user_name_input e.target.value
|
|
16
|
-
end
|
|
17
|
-
button.btn.btn_default(type: :button) { "login!" }.on(:click) do
|
|
18
|
-
Operations::Join(user_name: state.user_name_input)
|
|
19
|
-
end if valid_new_input?
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def valid_new_input?
|
|
28
|
-
state.user_name_input.present? && state.user_name_input != MessageStore.user_name
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
module Operations
|
|
2
|
-
# encapsulates our "messages store" server side
|
|
3
|
-
# the params and dispatcher will be inherited
|
|
4
|
-
class ServerBase < Hyperloop::ServerOp
|
|
5
|
-
param :acting_user, nils: true
|
|
6
|
-
param :user_name
|
|
7
|
-
dispatch_to { Hyperloop::Application }
|
|
8
|
-
|
|
9
|
-
def messages
|
|
10
|
-
Rails.cache.fetch('messages') { [] }
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def add_message
|
|
14
|
-
params.message = {
|
|
15
|
-
message: params.message,
|
|
16
|
-
time: Time.now,
|
|
17
|
-
from: params.user_name
|
|
18
|
-
}
|
|
19
|
-
Rails.cache.write('messages', messages << params.message)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# get all the messages
|
|
24
|
-
class GetMessages < ServerBase
|
|
25
|
-
outbound :messages
|
|
26
|
-
|
|
27
|
-
step { params.messages = messages }
|
|
28
|
-
|
|
29
|
-
def self.deserialize_dispatch(messages)
|
|
30
|
-
# convert the time string back to time
|
|
31
|
-
messages[:messages].each do |message|
|
|
32
|
-
message[:time] = Time.parse(message[:time])
|
|
33
|
-
end
|
|
34
|
-
messages
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# send a message to everybody
|
|
39
|
-
class Send < ServerBase
|
|
40
|
-
param :message
|
|
41
|
-
|
|
42
|
-
step :add_message
|
|
43
|
-
|
|
44
|
-
def self.deserialize_dispatch(message)
|
|
45
|
-
# convert time strings back to time
|
|
46
|
-
message[:message][:time] = Time.parse(message[:message][:time])
|
|
47
|
-
message
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# client side only: registers user_name and then gets the messages
|
|
52
|
-
class Join < Hyperloop::Operation
|
|
53
|
-
param :user_name
|
|
54
|
-
step GetMessages
|
|
55
|
-
end
|
|
56
|
-
end
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
class MessageStore < Hyperloop::Store
|
|
2
|
-
state :messages, scope: :class, reader: :all
|
|
3
|
-
state :user_name, scope: :class, reader: true
|
|
4
|
-
|
|
5
|
-
def self.online?
|
|
6
|
-
state.messages
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
receives Operations::Join do |params|
|
|
10
|
-
puts "receiving Operations::Join(#{params})"
|
|
11
|
-
mutate.user_name params.user_name
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
receives Operations::GetMessages do |params|
|
|
15
|
-
puts "receiving Operations::GetMessages(#{params})"
|
|
16
|
-
mutate.messages params.messages
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
receives Operations::Send do |params|
|
|
20
|
-
puts "receiving Operations::Send(#{params})"
|
|
21
|
-
mutate.messages << params.message
|
|
22
|
-
end
|
|
23
|
-
end
|
|
File without changes
|
|
File without changes
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
class Announcement < Hyperloop::ServerOp
|
|
2
|
-
# should be able to say always_allow_connection HERE... instead its in the policy file...
|
|
3
|
-
# and setting a connection for a ServerOp should automatically dispatch to that connection..
|
|
4
|
-
# a few bugs to fix...
|
|
5
|
-
param :acting_user, nils: true
|
|
6
|
-
param :message
|
|
7
|
-
dispatch_to { Application }
|
|
8
|
-
end
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html>
|
|
3
|
-
<head>
|
|
4
|
-
<title>ChatApp</title>
|
|
5
|
-
<%= csrf_meta_tags %>
|
|
6
|
-
|
|
7
|
-
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
|
|
8
|
-
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
|
|
9
|
-
|
|
10
|
-
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.5/marked.min.js"></script>
|
|
11
|
-
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
|
|
12
|
-
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
|
|
13
|
-
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
|
|
14
|
-
<style type="text/css">
|
|
15
|
-
body {
|
|
16
|
-
padding-top: 50px;
|
|
17
|
-
padding-bottom: 60px;
|
|
18
|
-
}
|
|
19
|
-
div.alternating:nth-of-type(odd) {
|
|
20
|
-
background-color: #ddd;
|
|
21
|
-
}
|
|
22
|
-
div.alternating:nth-of-type(even) {
|
|
23
|
-
background-color: #ccc;
|
|
24
|
-
}
|
|
25
|
-
.input-box {
|
|
26
|
-
padding: 10px;
|
|
27
|
-
}
|
|
28
|
-
.white {
|
|
29
|
-
color: white;
|
|
30
|
-
}
|
|
31
|
-
.message {
|
|
32
|
-
padding-top: 10px;
|
|
33
|
-
}
|
|
34
|
-
textarea {
|
|
35
|
-
width: 100%;;
|
|
36
|
-
}
|
|
37
|
-
div.reactrb-icon {
|
|
38
|
-
float: left;
|
|
39
|
-
width: 50px;
|
|
40
|
-
height: 50px;
|
|
41
|
-
margin-right: 8px;
|
|
42
|
-
background-size: contain;
|
|
43
|
-
background-image: url("http://ruby-hyperloop.io/images/hyperloop_white.svg");
|
|
44
|
-
}
|
|
45
|
-
</style>
|
|
46
|
-
</head>
|
|
47
|
-
|
|
48
|
-
<body>
|
|
49
|
-
<%= yield %>
|
|
50
|
-
</body>
|
|
51
|
-
</html>
|
data/examples/chat-app/bin/rails
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
begin
|
|
3
|
-
load File.expand_path('../spring', __FILE__)
|
|
4
|
-
rescue LoadError => e
|
|
5
|
-
raise unless e.message.include?('spring')
|
|
6
|
-
end
|
|
7
|
-
APP_PATH = File.expand_path('../config/application', __dir__)
|
|
8
|
-
require_relative '../config/boot'
|
|
9
|
-
require 'rails/commands'
|
data/examples/chat-app/bin/rake
DELETED
data/examples/chat-app/bin/setup
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
require 'pathname'
|
|
3
|
-
require 'fileutils'
|
|
4
|
-
include FileUtils
|
|
5
|
-
|
|
6
|
-
# path to your application root.
|
|
7
|
-
APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
|
|
8
|
-
|
|
9
|
-
def system!(*args)
|
|
10
|
-
system(*args) || abort("\n== Command #{args} failed ==")
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
chdir APP_ROOT do
|
|
14
|
-
# This script is a starting point to setup your application.
|
|
15
|
-
# Add necessary setup steps to this file.
|
|
16
|
-
|
|
17
|
-
puts '== Installing dependencies =='
|
|
18
|
-
system! 'gem install bundler --conservative'
|
|
19
|
-
system('bundle check') || system!('bundle install')
|
|
20
|
-
|
|
21
|
-
# puts "\n== Copying sample files =="
|
|
22
|
-
# unless File.exist?('config/database.yml')
|
|
23
|
-
# cp 'config/database.yml.sample', 'config/database.yml'
|
|
24
|
-
# end
|
|
25
|
-
|
|
26
|
-
puts "\n== Preparing database =="
|
|
27
|
-
system! 'bin/rails db:setup'
|
|
28
|
-
|
|
29
|
-
puts "\n== Removing old logs and tempfiles =="
|
|
30
|
-
system! 'bin/rails log:clear tmp:clear'
|
|
31
|
-
|
|
32
|
-
puts "\n== Restarting application server =="
|
|
33
|
-
system! 'bin/rails restart'
|
|
34
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
|
|
3
|
-
# This file loads spring without using Bundler, in order to be fast.
|
|
4
|
-
# It gets overwritten when you run the `spring binstub` command.
|
|
5
|
-
|
|
6
|
-
unless defined?(Spring)
|
|
7
|
-
require 'rubygems'
|
|
8
|
-
require 'bundler'
|
|
9
|
-
|
|
10
|
-
lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read)
|
|
11
|
-
spring = lockfile.specs.detect { |spec| spec.name == "spring" }
|
|
12
|
-
if spring
|
|
13
|
-
Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path
|
|
14
|
-
gem 'spring', spring.version
|
|
15
|
-
require 'spring/binstub'
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
require 'pathname'
|
|
3
|
-
require 'fileutils'
|
|
4
|
-
include FileUtils
|
|
5
|
-
|
|
6
|
-
# path to your application root.
|
|
7
|
-
APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
|
|
8
|
-
|
|
9
|
-
def system!(*args)
|
|
10
|
-
system(*args) || abort("\n== Command #{args} failed ==")
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
chdir APP_ROOT do
|
|
14
|
-
# This script is a way to update your development environment automatically.
|
|
15
|
-
# Add necessary update steps to this file.
|
|
16
|
-
|
|
17
|
-
puts '== Installing dependencies =='
|
|
18
|
-
system! 'gem install bundler --conservative'
|
|
19
|
-
system('bundle check') || system!('bundle install')
|
|
20
|
-
|
|
21
|
-
puts "\n== Updating database =="
|
|
22
|
-
system! 'bin/rails db:migrate'
|
|
23
|
-
|
|
24
|
-
puts "\n== Removing old logs and tempfiles =="
|
|
25
|
-
system! 'bin/rails log:clear tmp:clear'
|
|
26
|
-
|
|
27
|
-
puts "\n== Restarting application server =="
|
|
28
|
-
system! 'bin/rails restart'
|
|
29
|
-
end
|