1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/actioncable
Richard Macklin fefc304199
Enforce that actioncable compiled JS bundle is in sync with source code
We have run into issues in the past where the actioncable compiled
javascript bundle got out of sync with the source code. For example, in
30a0c7e040 only the compiled bundle was
modified. This meant that anyone who ran `yarn build` in the actioncable
directory would then see a dirty git status indicating changes to the
compiled bundle, despite not having made any changes to the actioncable
javascript source code. We fixed that particular inconsistency in
a4c27588d5. However, the same problem
could reoccur.

To address this, I've added a new test to enforce that actioncable's
compiled javascript bundle is in sync with the source code. When the
compiled bundle is in sync with the source code, the test will pass:

    $ bundle exec ruby -Itest test/javascript_package_test.rb
    Run options: --seed 19308

    # Running:

    yarn run v1.12.3
    $ yarn lint && bundle exec rake assets:codegen
    $ eslint app/javascript
    $ rollup --config rollup.config.js

    app/javascript/action_cable/index.js → app/assets/javascripts/action_cable.js...
    created app/assets/javascripts/action_cable.js in 762ms
      Done in 6.35s.
    .

    Finished in 7.130345s, 0.1402 runs/s, 0.1402 assertions/s.
    1 runs, 1 assertions, 0 failures, 0 errors, 0 skips

However, if the two are not in sync, the test will fail. For example, if
you were to apply the following patch (which only updates the source
code):

```
diff --git a/actioncable/app/javascript/action_cable/adapters.js b/actioncable/app/javascript/action_cable/adapters.js
index 4de8131438..d38d9a6a0b 100644
--- a/actioncable/app/javascript/action_cable/adapters.js
+++ b/actioncable/app/javascript/action_cable/adapters.js
@@ -1,4 +1,5 @@
 export default {
+  foo: self.foo,
   logger: self.console,
   WebSocket: self.WebSocket
 }
```

the test would then fail like this:

    $ bundle exec ruby -Itest test/javascript_package_test.rb
    Run options: --seed 26377

    # Running:

    yarn run v1.12.3
    $ yarn lint && bundle exec rake assets:codegen
    $ eslint app/javascript
    $ rollup --config rollup.config.js

    app/javascript/action_cable/index.js → app/assets/javascripts/action_cable.js...
    created app/assets/javascripts/action_cable.js in 776ms
      Done in 5.55s.
    F

    Failure:
    JavascriptPackageTest#test_compiled_code_is_in_sync_with_source_code [test/javascript_package_test.rb:16]:
    --- expected
    +++ actual
    @@ -3,6 +3,7 @@
     })(this, function(exports) {
       \"use strict\";
       var adapters = {
    +    foo: self.foo,
         logger: self.console,
         WebSocket: self.WebSocket
       };

    rails test test/javascript_package_test.rb:9

    Finished in 5.837403s, 0.1713 runs/s, 0.1713 assertions/s.
    1 runs, 1 assertions, 1 failures, 0 errors, 0 skips

Thus, the actioncable test suite will now prevent "the compiled bundle
is out of sync" issues going forward.
2019-10-19 02:26:31 +02:00
..
app Ensure @rails/actioncable package contains complete source 2019-08-15 09:19:59 -04:00
bin Use frozen string literal in actioncable/ 2017-07-23 23:30:29 +03:00
lib Implicitly assert no exception is raised in block assertions 2019-10-07 11:01:24 +02:00
test Enforce that actioncable compiled JS bundle is in sync with source code 2019-10-19 02:26:31 +02:00
.babelrc Convert ActionCable javascript to ES2015 modules with modern build environment 2018-11-02 08:41:05 -07:00
.eslintrc Convert ActionCable javascript to ES2015 modules with modern build environment 2018-11-02 08:41:05 -07:00
.gitignore Ensure @rails/actioncable package contains complete source 2019-08-15 09:19:59 -04:00
actioncable.gemspec Add bug tracker/documentation/mailing list URIs to the gemspecs 2019-10-11 20:47:19 -04:00
CHANGELOG.md Logging at info level should be reserved for top-level concerns 2019-08-26 16:43:45 -04:00
karma.conf.js s/Travis/Buildkite/ 2019-04-09 11:28:49 +09:30
MIT-LICENSE Bump license years for 2019 2018-12-31 10:24:38 +07:00
package.json update package.json files to use https homepage value 2019-10-02 12:00:11 +02:00
Rakefile Ensure @rails/actioncable package contains complete source 2019-08-15 09:19:59 -04:00
README.md Updated links from http to https in guides, docs, etc 2019-03-09 16:43:47 +05:30
rollup.config.js Remove circular dependency warnings in ActionCable javascript and publish source modules with fine-grained exports (#34370) 2018-12-01 16:25:02 -05:00
rollup.config.test.js Convert ActionCable tests from CoffeeScript to ES2015 and replace Blade with Karma and Rollup (#34440) 2018-11-26 17:16:02 -05:00

Action Cable Integrated WebSockets for Rails

Action Cable seamlessly integrates WebSockets with the rest of your Rails application. It allows for real-time features to be written in Ruby in the same style and form as the rest of your Rails application, while still being performant and scalable. It's a full-stack offering that provides both a client-side JavaScript framework and a server-side Ruby framework. You have access to your full domain model written with Active Record or your ORM of choice.

You can read more about Action Cable in the Action Cable Overview guide.

Support

API documentation is at:

Bug reports for the Ruby on Rails project can be filed here:

Feature requests should be discussed on the rails-core mailing list here: