opal-rails 2.0.2 → 2.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aee279d2054d467d1e1c9088a1342fe8d75e7ec2affce2504b61b9b885cdb38b
4
- data.tar.gz: 4828f47994349fff41a915fd3e21ea7b83052b3eb1ca5c56d3b09fe77676f22d
3
+ metadata.gz: 875fb1f95adc2d5c12870d36c2fbd91b527d7d3361c97bb11651f83cb5206a93
4
+ data.tar.gz: 1640ba02072c130623acc881a00b91702720a21d6894c1bca9a2c44fdd0be7ff
5
5
  SHA512:
6
- metadata.gz: 44de5b40a2352e01fe1f830f35a79ffa4509078002bef98689fbd4827ed5e53b34b141155dddd982515debc70b018c1eece879ca2957bcbfc9c81bca9600b764
7
- data.tar.gz: 8b89cfd6f4778b746f8977f0bb20729766603b97840b56068bfa3ad04113aa8ac9cd2859616885b226c0252dd4114e00b2053aaee828715cbcd0bf94e49b7e5e
6
+ metadata.gz: 54b2acdaa18cd7354ab49623b951aa2c23f3a1da08bbebd5bddefbc18e56688b9777d7b1afb6c8648a200f335d24bf796d9d7dc2f87d47f2cc9f7a0bac3aa0ff
7
+ data.tar.gz: 471d1b6825196c2fe29310bf674fba3c0117452218bc8f56722435f81513e673e72a2ebce8f698d524973f15d5d4ead2acb6917b6eccdb5b98ada75463114cb1
@@ -11,10 +11,11 @@ on:
11
11
  jobs:
12
12
  build:
13
13
  strategy:
14
+ fail-fast: false
14
15
  matrix:
15
- ruby: ['2.7', '3.0'] # ['3.1'] - enable once Rails 7.0.1 is released
16
+ ruby: ['3.0', '3.1', '3.2']
16
17
  rails: ['rails_6_0', 'rails_6_1', 'rails_7_0']
17
- opal: ['opal_1_0', 'opal_1_3', 'opal_1_4']
18
+ opal: ['opal_1_0', 'opal_1_3', 'opal_1_7']
18
19
  runs-on: ubuntu-latest
19
20
 
20
21
  steps:
data/Appraisals CHANGED
@@ -7,8 +7,8 @@ ENV['OPAL_VERSION'] = nil # ensure the env is clean
7
7
  github = -> repo_name { "https://github.com/#{repo_name}.git" }
8
8
 
9
9
  {
10
- opal_1_4: -> gemfile do
11
- gemfile.gem 'opal', '~> 1.4.0'
10
+ opal_1_7: -> gemfile do
11
+ gemfile.gem 'opal', '~> 1.7.0'
12
12
  gemfile.gem 'opal-sprockets'
13
13
  end,
14
14
 
data/CHANGELOG.md CHANGED
@@ -18,7 +18,11 @@ Whitespace conventions:
18
18
  - 1 spaces before normal text
19
19
  -->
20
20
 
21
+ ## [2.0.3](https://github.com/opal/opal-rails/compare/v2.0.2...v2.0.3) - 2021-12-29
21
22
 
23
+ ### Added
24
+
25
+ - Add HAML 6 support
22
26
 
23
27
  ## [2.0.2](https://github.com/opal/opal-rails/compare/v2.0.1...v2.0.2) - 2021-12-29
24
28
 
data/README.md CHANGED
@@ -23,10 +23,10 @@ In your `Gemfile`
23
23
  gem 'opal-rails'
24
24
  ```
25
25
 
26
- Add `app/assets/javascript` to your asset-pipeline manifest in `app/assets/config/manifest.js`:
26
+ Run `opal:install` Rails generator to add `app/assets/javascript` to your asset-pipeline manifest in `app/assets/config/manifest.js`:
27
27
 
28
28
  ```
29
- bin/rails opal:install
29
+ bin/rails g opal:install
30
30
  ```
31
31
 
32
32
 
@@ -34,31 +34,36 @@ bin/rails opal:install
34
34
 
35
35
  #### For the compiler
36
36
 
37
- Add your configuration for the compiler:
37
+ The following automatically gets added to your configuration for the compiler when running the `opal:install` Rails generator:
38
38
 
39
39
  `config/initializers/opal.rb`
40
40
 
41
41
  ```ruby
42
42
  # Compiler options
43
- Rails.application.config.opal.method_missing_enabled = true
44
- Rails.application.config.opal.const_missing_enabled = true
45
- Rails.application.config.opal.arity_check_enabled = true
46
- Rails.application.config.opal.freezing_stubs_enabled = true
47
- Rails.application.config.opal.dynamic_require_severity = :ignore
43
+ Rails.application.configure do
44
+ config.opal.method_missing_enabled = true
45
+ config.opal.const_missing_enabled = true
46
+ config.opal.arity_check_enabled = true
47
+ config.opal.freezing_stubs_enabled = true
48
+ config.opal.dynamic_require_severity = :ignore
49
+ end
48
50
  ```
49
51
 
50
52
  Check out the full list of the available configuration options at: [lib/opal/config.rb](https://github.com/opal/opal/blob/master/lib/opal/config.rb).
51
53
 
52
54
  #### For template assigns
53
55
 
54
- Add your configuration for rendering assigns when using the template handler from actions:
56
+ You may optionally add configuration for rendering assigns when using the template handler from actions:
55
57
 
56
58
  `config/initializers/opal.rb`
57
59
 
58
60
  ```ruby
59
- Rails.application.config.opal.assigns_in_templates = true
60
- Rails.application.config.opal.assigns_in_templates = :locals # only locals
61
- Rails.application.config.opal.assigns_in_templates = :ivars # only instance variables
61
+ Rails.application.configure do
62
+ # ...
63
+ config.opal.assigns_in_templates = true
64
+ config.opal.assigns_in_templates = :locals # only locals
65
+ config.opal.assigns_in_templates = :ivars # only instance variables
66
+ end
62
67
  ```
63
68
 
64
69
 
@@ -69,6 +74,42 @@ Local and instance variables will be sent down to the view after converting thei
69
74
 
70
75
  ### Basic example
71
76
 
77
+ #### Rails 7 example
78
+
79
+ This example assumes Rails 7 and having followed the [Installation](#installation) instructions.
80
+
81
+ 1- Delete `app/javascript/application.js`
82
+
83
+ 2- Enable the following lines in the generated `app/assets/javascript/application.js.rb` below `require "opal"`:
84
+
85
+ ```ruby
86
+ puts "hello world!"
87
+ require "native"
88
+ $$[:document].addEventListener :DOMContentLoaded do
89
+ $$[:document][:body][:innerHTML] = '<h2>Hello World!</h2>'
90
+ end
91
+ ```
92
+
93
+ 3- Run `rails g scaffold welcome`
94
+
95
+ 4- Run `rails db:migrate`
96
+
97
+ 5- Clear `app/views/welcomes/index.html.erb` (empty its content)
98
+
99
+ 6- Run `rails s`
100
+
101
+ 7- Visit `http://localhost:3000/welcomes`
102
+
103
+ In the browser webpage, you should see:
104
+
105
+ <h2>Hello World!</h2>
106
+
107
+ Also, you should see `hello world!` in the browser console.
108
+
109
+ #### Rails 5 example
110
+
111
+ This example assumes Rails 5.
112
+
72
113
  1. Rename `app/assets/javascripts/application.js` to `app/assets/javascripts/application.js.rb`
73
114
  2. Replace the Sprockets directives with plain requires
74
115
 
@@ -88,7 +129,7 @@ require_tree '.'
88
129
  puts "hello world!"
89
130
  ```
90
131
 
91
- ### A more extensive example
132
+ #### A more extensive Rails 5 example
92
133
 
93
134
  ```ruby
94
135
  require 'opal'
@@ -166,12 +207,16 @@ post.find('.comments').html = comments_html
166
207
 
167
208
  #### Instance and local variables in templates
168
209
 
169
- By default `opal-rails` will forward any instance and local variable you'll pass to the template.
210
+ By default `opal-rails`, will NOT forward any instance and local variable you'll pass to the template.
170
211
 
171
- This behavior can be disabled by setting `Rails.application.config.opal.assigns_in_templates` to `false` in `config/initializers/assets.rb`:
212
+ This behavior can be enabled by setting `Rails.application.config.opal.assigns_in_templates` to `true` in `config/initializers/assets.rb`:
172
213
 
173
214
  ```ruby
174
- Rails.application.config.opal.assigns_in_templates = false
215
+ Rails.application.configure do
216
+ # ...
217
+ config.opal.assigns_in_templates = true
218
+ # ...
219
+ end
175
220
  ```
176
221
 
177
222
 
@@ -293,7 +338,7 @@ bin/rails s # will start the sandbox app server
293
338
 
294
339
  ## License
295
340
 
296
- © 2012-2021 Elia Schito
341
+ © 2012-2022 Elia Schito
297
342
 
298
343
  Permission is hereby granted, free of charge, to any person obtaining a copy
299
344
  of this software and associated documentation files (the "Software"), to deal
@@ -4,7 +4,7 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "net-smtp"
6
6
  gem "rails", "~> 6.0.0"
7
- gem "opal", "~> 1.4.0"
7
+ gem "opal", "~> 1.7.0"
8
8
  gem "opal-sprockets"
9
9
 
10
10
  gemspec path: "../"
@@ -4,7 +4,7 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "net-smtp"
6
6
  gem "rails", "~> 6.1.0"
7
- gem "opal", "~> 1.4.0"
7
+ gem "opal", "~> 1.7.0"
8
8
  gem "opal-sprockets"
9
9
 
10
10
  gemspec path: "../"
@@ -4,7 +4,7 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "net-smtp"
6
6
  gem "rails", "~> 7.0.0"
7
- gem "opal", "~> 1.4.0"
7
+ gem "opal", "~> 1.7.0"
8
8
  gem "opal-sprockets"
9
9
 
10
10
  gemspec path: "../"
@@ -8,5 +8,5 @@ require "opal"
8
8
  #
9
9
  # require "native"
10
10
  # $$[:document].addEventListener :DOMContentLoaded do
11
- # $$[:document][:body][:innerHTML] += '<h2>Hello World!</h2>'
11
+ # $$[:document][:body][:innerHTML] = '<h2>Hello World!</h2>'
12
12
  # end
@@ -0,0 +1,28 @@
1
+ module Haml::Filters::Opal
2
+ include Haml::Filters::Base
3
+
4
+ def mime_type
5
+ ::Opal::Config.esm ? 'module' : 'text/javascript'
6
+ end
7
+
8
+ def render_with_options ruby, options
9
+ text = ::Opal.compile(ruby)
10
+
11
+ if options[:format] == :html5
12
+ type = ''
13
+ else
14
+ type = " type=#{options[:attr_wrapper]}#{mime_type}#{options[:attr_wrapper]}"
15
+ end
16
+
17
+ text.rstrip!
18
+ text.gsub!("\n", "\n ")
19
+
20
+ <<HTML
21
+ <script#{type}>
22
+ //<![CDATA[
23
+ #{text}
24
+ //]]>
25
+ </script>
26
+ HTML
27
+ end
28
+ end
@@ -0,0 +1,23 @@
1
+ require "haml"
2
+ require "haml/filters"
3
+ require "haml/filters/base"
4
+
5
+ module Haml
6
+ class Filters
7
+ class Opal < Base
8
+ def mime_type
9
+ end
10
+
11
+ def compile(node)
12
+ template = [:multi]
13
+ template << [:static, "<script type='#{mime_type}'>\n"]
14
+ template << [:static, ::Opal.compile(node.value[:text]) ]
15
+ template << [:static, "\n</script>"]
16
+ template
17
+ end
18
+ end
19
+ ::Opal::Config.esm ? 'module' : 'text/javascript'
20
+ end
21
+ end
22
+
23
+ Haml::Filters.registered[:opal] ||= Haml::Filters::Opal
@@ -1,24 +1,9 @@
1
- module Haml::Filters::Opal
2
- include Haml::Filters::Base
1
+ require 'haml'
3
2
 
4
- def render_with_options ruby, options
5
- text = ::Opal.compile(ruby)
3
+ haml_version = Haml::VERSION.to_i
6
4
 
7
- if options[:format] == :html5
8
- type = ''
9
- else
10
- type = " type=#{options[:attr_wrapper]}text/javascript#{options[:attr_wrapper]}"
11
- end
12
-
13
- text.rstrip!
14
- text.gsub!("\n", "\n ")
15
-
16
- <<HTML
17
- <script#{type}>
18
- //<![CDATA[
19
- #{text}
20
- //]]>
21
- </script>
22
- HTML
23
- end
5
+ if haml_version < 6
6
+ require 'opal/rails/haml5_filter'
7
+ else
8
+ require 'opal/rails/haml6_filter'
24
9
  end
@@ -1,5 +1,5 @@
1
1
  module Opal
2
2
  module Rails
3
- VERSION = '2.0.2'
3
+ VERSION = '2.0.3'
4
4
  end
5
5
  end
data/opal-rails.gemspec CHANGED
@@ -35,10 +35,12 @@ Gem::Specification.new do |spec|
35
35
  spec.add_dependency 'opal', '~> 1.0'
36
36
  spec.add_dependency 'opal-sprockets', '~> 1.0'
37
37
 
38
+ spec.add_development_dependency 'haml'
39
+
38
40
  spec.add_development_dependency 'execjs'
39
41
  spec.add_development_dependency 'launchy'
40
42
  spec.add_development_dependency 'capybara', '~> 3.25'
41
- spec.add_development_dependency 'apparition'
43
+ spec.add_development_dependency 'cuprite'
42
44
  spec.add_development_dependency 'rspec-rails'
43
45
  spec.add_development_dependency 'appraisal', '~> 2.1'
44
46
  spec.add_development_dependency 'sqlite3'
@@ -0,0 +1,7 @@
1
+ RSpec.describe 'HAML filter', type: :feature, js: true do
2
+ it 'works' do
3
+ visit '/application/haml_filter'
4
+ wait_for_dom_ready
5
+ expect(page.evaluate_script('Opal.gvars.haml_filter')).to eq("working")
6
+ end
7
+ end
data/spec/spec_helper.rb CHANGED
@@ -94,4 +94,24 @@ RSpec.configure do |config|
94
94
  # test failures related to randomization by passing the same `--seed` value
95
95
  # as the one that triggered the failure.
96
96
  Kernel.srand config.seed
97
+
98
+ # Configure Capybara
99
+ Capybara.javascript_driver = :cuprite
100
+ Capybara.register_driver(:cuprite) do |app|
101
+ Capybara::Cuprite::Driver.new(app,
102
+ window_size: [1200, 800],
103
+ browser_options: { 'no-sandbox': nil },
104
+ inspector: ENV['INSPECTOR'],
105
+ headless: !ENV['NO_HEADLESS'],
106
+ timeout: 20,
107
+ url_blacklist: [],
108
+ )
109
+ end
110
+
111
+ Capybara.register_server :puma do |app, port, host|
112
+ require 'rack/handler/puma'
113
+ Rack::Handler::Puma.run(app, Host: host, Port: port, Threads: "0:4", Silent: true)
114
+ end
115
+
116
+ Capybara.default_max_wait_time = 5
97
117
  end
@@ -1,14 +1,5 @@
1
1
  require 'capybara/rspec'
2
- require 'capybara/apparition'
3
-
4
- Capybara.javascript_driver = :apparition
5
-
6
- Capybara.register_server :puma do |app, port, host|
7
- require 'rack/handler/puma'
8
- Rack::Handler::Puma.run(app, Host: host, Port: port, Threads: "0:4", Silent: true)
9
- end
10
-
11
- Capybara.default_max_wait_time = 5
2
+ require 'capybara/cuprite'
12
3
 
13
4
  module OpalHelper
14
5
  def compile_opal(code)
@@ -12,6 +12,11 @@ puts 'hello from a script tag!'
12
12
  </script>
13
13
  HTML
14
14
 
15
+ HAML = <<~HAML
16
+ :opal
17
+ $haml_filter = :working
18
+ HAML
19
+
15
20
  WITH_ASSIGNMENTS = File.read "#{__dir__}/assets/javascripts/with_assignments.js.rb"
16
21
 
17
22
  require_relative '../../app/helpers/opal_helper'
@@ -23,6 +28,7 @@ class ApplicationController < ActionController::Base
23
28
  self.view_paths = [ActionView::FixtureResolver.new(
24
29
  'layouts/application.html.erb' => LAYOUT,
25
30
  'application/index.html.erb' => INDEX,
31
+ 'application/haml_filter.html.haml' => HAML,
26
32
  'application/with_assignments.js.opal' => WITH_ASSIGNMENTS,
27
33
  )]
28
34
 
@@ -43,6 +49,9 @@ class ApplicationController < ActionController::Base
43
49
 
44
50
  render type: :js, locals: { local_var: 'i am local' }
45
51
  end
52
+
53
+ def haml_filter
54
+ end
46
55
  end
47
56
 
48
57
  Rails.logger = Logger.new(STDOUT) if $DEBUG
@@ -1,4 +1,4 @@
1
- return {
1
+ {
2
2
  number_var: @number_var,
3
3
  string_var: @string_var,
4
4
  array_var: @array_var,
data/test_apps/rails.rb CHANGED
@@ -5,6 +5,7 @@ require 'rails/all'
5
5
  require 'action_view/testing/resolvers'
6
6
 
7
7
  require 'opal-rails' # our gem
8
+ require 'opal/rails/haml_filter'
8
9
 
9
10
  module RailsApp
10
11
  class Application < Rails::Application
@@ -30,10 +31,11 @@ module RailsApp
30
31
  routes.append do
31
32
  get '/' => 'application#index'
32
33
  get '/application/with_assignments' => 'application#with_assignments'
34
+ get '/application/haml_filter' => 'application#haml_filter'
33
35
 
34
36
  # just to reduce noise
35
- get '/apple-touch-icon-precomposed.png' => -> { [404,{},[]] }
36
- get '/favicon.ico' => -> { [404,{},[]] }
37
+ get '/apple-touch-icon-precomposed.png' => proc { [404,{},[]] }
38
+ get '/favicon.ico' => proc { [404,{},[]] }
37
39
  end
38
40
 
39
41
  config.assets.debug = true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opal-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elia Schito
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-29 00:00:00.000000000 Z
11
+ date: 2023-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -72,6 +72,20 @@ dependencies:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '1.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: haml
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
75
89
  - !ruby/object:Gem::Dependency
76
90
  name: execjs
77
91
  requirement: !ruby/object:Gem::Requirement
@@ -115,7 +129,7 @@ dependencies:
115
129
  - !ruby/object:Gem::Version
116
130
  version: '3.25'
117
131
  - !ruby/object:Gem::Dependency
118
- name: apparition
132
+ name: cuprite
119
133
  requirement: !ruby/object:Gem::Requirement
120
134
  requirements:
121
135
  - - ">="
@@ -214,14 +228,14 @@ files:
214
228
  - gemfiles/rails_6_0_opal_1_0.gemfile
215
229
  - gemfiles/rails_6_0_opal_1_1.gemfile
216
230
  - gemfiles/rails_6_0_opal_1_3.gemfile
217
- - gemfiles/rails_6_0_opal_1_4.gemfile
231
+ - gemfiles/rails_6_0_opal_1_7.gemfile
218
232
  - gemfiles/rails_6_1_opal_1_0.gemfile
219
233
  - gemfiles/rails_6_1_opal_1_1.gemfile
220
234
  - gemfiles/rails_6_1_opal_1_3.gemfile
221
- - gemfiles/rails_6_1_opal_1_4.gemfile
235
+ - gemfiles/rails_6_1_opal_1_7.gemfile
222
236
  - gemfiles/rails_7_0_opal_1_0.gemfile
223
237
  - gemfiles/rails_7_0_opal_1_3.gemfile
224
- - gemfiles/rails_7_0_opal_1_4.gemfile
238
+ - gemfiles/rails_7_0_opal_1_7.gemfile
225
239
  - lib/assets/javascripts/opal_ujs.js.rb
226
240
  - lib/generators/opal/assets/assets_generator.rb
227
241
  - lib/generators/opal/assets/templates/javascript.js.rb
@@ -232,6 +246,8 @@ files:
232
246
  - lib/opal-rails.rb
233
247
  - lib/opal/rails.rb
234
248
  - lib/opal/rails/engine.rb
249
+ - lib/opal/rails/haml5_filter.rb
250
+ - lib/opal/rails/haml6_filter.rb
235
251
  - lib/opal/rails/haml_filter.rb
236
252
  - lib/opal/rails/slim_filter.rb
237
253
  - lib/opal/rails/template_handler.rb
@@ -239,6 +255,7 @@ files:
239
255
  - opal-rails.gemspec
240
256
  - spec/helpers/opal_helper_spec.rb
241
257
  - spec/integration/assigns_spec.rb
258
+ - spec/integration/haml_filter_spec.rb
242
259
  - spec/integration/js_spec.rb
243
260
  - spec/integration/source_map_spec.rb
244
261
  - spec/spec_helper.rb
@@ -276,13 +293,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
276
293
  - !ruby/object:Gem::Version
277
294
  version: '0'
278
295
  requirements: []
279
- rubygems_version: 3.2.22
296
+ rubygems_version: 3.4.10
280
297
  signing_key:
281
298
  specification_version: 4
282
299
  summary: Rails bindings for opal JS engine
283
300
  test_files:
284
301
  - spec/helpers/opal_helper_spec.rb
285
302
  - spec/integration/assigns_spec.rb
303
+ - spec/integration/haml_filter_spec.rb
286
304
  - spec/integration/js_spec.rb
287
305
  - spec/integration/source_map_spec.rb
288
306
  - spec/spec_helper.rb