opal-rails 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1667d89f71ac1e122af6ac49faa4de25629c6d05c6c8fa3efa3dac2dcac905e7
4
- data.tar.gz: 875c55723b127a58a9419d2ee1c5c7bf563504d38b271c0377b9f745499c96ad
3
+ metadata.gz: 9689895c742592771f0b6486befa7cbca683f1cde5a61ae52ec7091ca39c0411
4
+ data.tar.gz: d48912a6dcd903b1465a045ded9084307b53930558a6b9dfbe4c3622e7c5ae42
5
5
  SHA512:
6
- metadata.gz: c46c91b5f4b67cd7c085ffcf66a40c094cbbb1fe33cc3fd6adf7e5b7a168d6fac2085dbd0242e8e0cf7fbeeee75aff578d8fa189ad34d83b1c00d5827818c7f4
7
- data.tar.gz: ede7e20e01eacc30da85dcda3409b7cabdd83c64c3f29f13c455a83c7dd6063f1e19ed6db389e8d8a792b870ccc8974066f1ec59bd687bcfb8f12cc3be494511
6
+ metadata.gz: 8621d6d34f9cf5b9901c7912a8a2f16b9b265f82f4ea7a6e87aef4f10206406d4bedb20e6bacb5545218fb70d05c8b41838912f5c8ed1250037d56e39caa1bcf
7
+ data.tar.gz: 1b858592dd83f05228e75d49c03bc4c33893e2657c396602734c6fc78fb27fc623e5bb6fce17026997f9dc76fcd81175059e663f53d6310a39519a98cb952517
data/CHANGELOG.md CHANGED
@@ -21,6 +21,21 @@ Whitespace conventions:
21
21
 
22
22
 
23
23
 
24
+ ## [1.1.0](https://github.com/opal/opal-rails/compare/v1.0.1...v1.1.0) - 2019-09-14
25
+
26
+
27
+ ### Added
28
+
29
+ - Added the ability to pass only locals or only ivars when reproducing assigns in Opal templates, `Rails.application.config.opal.assigns_in_templates` can now be set to `:locals` or `:ivars` in addition to the already possible `true`.
30
+
31
+
32
+ ### Changed
33
+
34
+ - The template handler now allows for the new Rails 6 api taking in both the template object and a source argument, but still allows the old behavior
35
+
36
+
37
+
38
+
24
39
  ## [1.0.1](https://github.com/opal/opal-rails/compare/v1.0.0...v1.0.1) - 2019-09-07
25
40
 
26
41
 
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Opal Rails
2
2
 
3
3
  [![Build Status](https://github.com/opal/opal-rails/workflows/CI/badge.svg)](https://github.com/opal/opal-rails/actions)
4
- [![Code Climate](https://img.shields.io/codeclimate/github/opal/opal-rails.svg)](https://codeclimate.com/github/opal/opal-rails)
4
+ [![Maintainability](https://api.codeclimate.com/v1/badges/31dda24adcecb836348f/maintainability)](https://codeclimate.com/github/opal/opal-rails/maintainability)
5
5
  [![Gem Version](https://badge.fury.io/rb/opal-rails.svg)](http://badge.fury.io/rb/opal-rails)
6
6
  ![fun guaranteed](https://img.shields.io/badge/fun-guaranteed-brightgreen.svg)
7
7
  ![web scale](http://img.shields.io/badge/webscale-over%209000-green.svg)
@@ -40,9 +40,17 @@ Rails.application.config.opal.optimized_operators = true
40
40
  Rails.application.config.opal.arity_check = !Rails.env.production?
41
41
  Rails.application.config.opal.const_missing = true
42
42
  Rails.application.config.opal.dynamic_require_severity = :ignore
43
+
44
+ # Other options
45
+
46
+ # Send local and instance variables down to the view after converting
47
+ # thier value with `.to_json`
48
+ Rails.application.config.opal.assigns_in_templates = true
49
+ Rails.application.config.opal.assigns_in_templates = :locals # only locals
50
+ Rails.application.config.opal.assigns_in_templates = :ivars # only instance variables
43
51
  ```
44
52
 
45
- For a full list of the available configuration options please refer to: [lib/opal/config.rb](https://github.com/opal/opal/blob/master/lib/opal/config.rb).
53
+ For a full list of the available configuration options for the compiler please refer to: [lib/opal/config.rb](https://github.com/opal/opal/blob/master/lib/opal/config.rb).
46
54
 
47
55
 
48
56
 
@@ -12,6 +12,14 @@ module Opal
12
12
  config.opal.dynamic_require_severity = :ignore
13
13
  config.opal.assigns_in_templates = true
14
14
 
15
+ def (config.opal).assign_locals_in_templates?
16
+ assigns_in_templates == true || assigns_in_templates == :locals
17
+ end
18
+
19
+ def (config.opal).assign_instance_variables_in_templates?
20
+ assigns_in_templates == true || assigns_in_templates == :ivars
21
+ end
22
+
15
23
  # Cache eager_load_paths now, otherwise the assets dir is added
16
24
  # and its .rb files are eagerly loaded.
17
25
  config.eager_load_paths
@@ -2,21 +2,28 @@ module Opal
2
2
  module Rails
3
3
  class TemplateHandler
4
4
 
5
- def self.call(template)
6
- new.call(template)
5
+ def self.call(template, source = template.source)
6
+ new.call(template, source)
7
7
  end
8
8
 
9
- def call(template)
10
- escaped = template.source.gsub(':', '\:')
9
+ def call(template, source = template.source)
10
+ escaped = source.gsub(':', '\:')
11
11
  string = '%q:' + escaped + ':'
12
12
 
13
13
  <<-RUBY
14
+ config = ::Rails.application.config.opal
15
+
14
16
  code = []
15
17
  code << 'Object.new.instance_eval {'
16
- if ::Rails.application.config.opal.assigns_in_templates
18
+
19
+ if config.assign_locals_in_templates?
17
20
  code << JSON.parse(local_assigns.to_json).map { |key, val| "\#{key} = \#{val.inspect};" }.join
21
+ end
22
+
23
+ if config.assign_instance_variables_in_templates?
18
24
  code << JSON.parse(@_assigns.to_json).map { |key, val| "@\#{key} = \#{val.inspect};" }.join
19
25
  end
26
+
20
27
  code << #{string}
21
28
  code << '}'
22
29
  Opal.compile(code.join("\n"))
@@ -1,5 +1,5 @@
1
1
  module Opal
2
2
  module Rails
3
- VERSION = '1.0.1'
3
+ VERSION = '1.1.0'
4
4
  end
5
5
  end
@@ -7,7 +7,7 @@ describe 'controller assignments' do
7
7
  Rails.application.config.opal.assigns_in_templates = true
8
8
  end
9
9
 
10
- it 'are in the template' do
10
+ it 'has them in the template' do
11
11
  source = get_source_of '/application/with_assignments.js'
12
12
  assignments = opal_eval(source)
13
13
 
@@ -29,7 +29,7 @@ describe 'controller assignments' do
29
29
  Rails.application.config.opal.assigns_in_templates = false
30
30
  end
31
31
 
32
- it 'are not in the template' do
32
+ it 'has not them in the template' do
33
33
  source = get_source_of '/application/with_assignments.js'
34
34
  assignments = opal_eval(source)
35
35
  {
@@ -45,6 +45,62 @@ describe 'controller assignments' do
45
45
  end
46
46
  end
47
47
 
48
+ context 'when :locals' do
49
+ before do
50
+ Rails.application.config.opal.assigns_in_templates = :locals
51
+ end
52
+
53
+ it 'has only locals in the template' do
54
+ source = get_source_of '/application/with_assignments.js'
55
+ assignments = opal_eval(source)
56
+ {
57
+ :number_var => 1234,
58
+ :string_var => 'hello',
59
+ :array_var => [1,'a'],
60
+ :hash_var => {:a => 1, :b => 2},
61
+ :object_var => {:contents => 'json representation'},
62
+ }.each_pair do |ivar, assignment|
63
+ expect(assignments[ivar]).not_to eq(assignment)
64
+ end
65
+ {
66
+ :local_var => 'i am local',
67
+ }.each_pair do |ivar, assignment|
68
+ expect(assignments[ivar]).to eq(assignment)
69
+ end
70
+ end
71
+ end
72
+
73
+ context 'when :ivars' do
74
+ before do
75
+ Rails.application.config.opal.assigns_in_templates = :ivars
76
+ end
77
+
78
+ it 'has only ivars in the template' do
79
+ source = get_source_of '/application/with_assignments.js'
80
+ assignments = opal_eval(source)
81
+ {
82
+ :number_var => 1234,
83
+ :string_var => 'hello',
84
+ :array_var => [1,'a'],
85
+ :hash_var => {:a => 1, :b => 2},
86
+ :object_var => {:contents => 'json representation'},
87
+ }.each_pair do |ivar, assignment|
88
+ expect(assignments[ivar]).to eq(assignment)
89
+ end
90
+ {
91
+ :local_var => 'i am local',
92
+ }.each_pair do |ivar, assignment|
93
+ expect(assignments[ivar]).not_to eq(assignment)
94
+ end
95
+ end
96
+ end
97
+
98
+ it 'has the correct content type' do
99
+ get '/application/with_assignments.js'
100
+ expect(response).to be_successful
101
+ expect(response.headers['Content-Type']).to eq('text/javascript; charset=utf-8')
102
+ end
103
+
48
104
  def get_source_of path
49
105
  get path
50
106
  response.should be_successful
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: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elia Schito
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-07 00:00:00.000000000 Z
11
+ date: 2019-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -271,7 +271,6 @@ files:
271
271
  - spec/integration/assigns_spec.rb
272
272
  - spec/integration/js_spec.rb
273
273
  - spec/integration/source_map_spec.rb
274
- - spec/integration/template_spec.rb
275
274
  - spec/spec_helper.rb
276
275
  - spec/support/capybara.rb
277
276
  - spec/support/reset_assets_cache.rb
@@ -313,7 +312,6 @@ test_files:
313
312
  - spec/integration/assigns_spec.rb
314
313
  - spec/integration/js_spec.rb
315
314
  - spec/integration/source_map_spec.rb
316
- - spec/integration/template_spec.rb
317
315
  - spec/spec_helper.rb
318
316
  - spec/support/capybara.rb
319
317
  - spec/support/reset_assets_cache.rb
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'template handler' do
4
- it 'has the correct content type' do
5
- get '/application/with_assignments.js'
6
- expect(response).to be_successful
7
- expect(response.headers['Content-Type']).to eq('text/javascript; charset=utf-8')
8
- end
9
- end