proscenium 0.19.0.beta19-arm64-darwin → 0.19.0.beta20-arm64-darwin
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 +4 -4
- data/README.md +0 -88
- data/lib/proscenium/css_module/path.rb +2 -1
- data/lib/proscenium/ext/proscenium +0 -0
- data/lib/proscenium/log_subscriber.rb +0 -2
- data/lib/proscenium/railtie.rb +6 -1
- data/lib/proscenium/react_componentable.rb +1 -1
- data/lib/proscenium/side_load.rb +2 -1
- data/lib/proscenium/version.rb +1 -1
- data/lib/proscenium.rb +0 -1
- metadata +2 -49
- data/lib/proscenium/css_module/rewriter.rb +0 -76
- data/lib/proscenium/phlex/asset_inclusions.rb +0 -16
- data/lib/proscenium/phlex/css_modules.rb +0 -80
- data/lib/proscenium/phlex/react_component.rb +0 -32
- data/lib/proscenium/phlex.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b0226fc1e03aed740a6f8a57451cd5d5244df61f39fa72b7c69239dc952bbed
|
4
|
+
data.tar.gz: 3dceeb133efd79563ac73579430eb113e5b2f19e38e836f3b2fc88c91ef6ac89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 315359ede2e0bccf01e3b56dd76f0d24ab8e6f8f53b0b241cbca0332d69df2fe0b5cc20caa66c0d6f809c2d16f84fb1b568ea802bd294d6aa24da453baf4f0e3
|
7
|
+
data.tar.gz: 9209ad4652e88239e3190bcb4c76220dcfb598aa5158a349c386a4b37af6c8542bbc2702012b769f92768d4c9fbe99840e5b57ddc29492858516ff6a43245f2b
|
data/README.md
CHANGED
@@ -48,7 +48,6 @@
|
|
48
48
|
- [Typescript Caveats](#typescript-caveats)
|
49
49
|
- [JSX](#jsx)
|
50
50
|
- [JSON](#json)
|
51
|
-
- [Phlex Support](#phlex-support)
|
52
51
|
- [Cache Busting](#cache-busting)
|
53
52
|
- [rjs is back!](#rjs-is-back)
|
54
53
|
- [Resolution](#resolution)
|
@@ -681,93 +680,6 @@ import { version } from "./package.json";
|
|
681
680
|
console.log(version);
|
682
681
|
```
|
683
682
|
|
684
|
-
## Phlex Support
|
685
|
-
|
686
|
-
[Phlex](https://www.phlex.fun/) is a framework for building fast, reusable, testable views in pure Ruby. Proscenium works perfectly with Phlex, with support for side-loading, CSS modules, and more. Simply write your Phlex classes and inherit from `Proscenium::Phlex`.
|
687
|
-
|
688
|
-
```ruby
|
689
|
-
class MyView < Proscenium::Phlex
|
690
|
-
def view_template
|
691
|
-
h1 { 'Hello World' }
|
692
|
-
end
|
693
|
-
end
|
694
|
-
```
|
695
|
-
|
696
|
-
In your layouts, include `Proscenium::Phlex::AssetInclusions`, and call the `include_assets` helper.
|
697
|
-
|
698
|
-
```ruby
|
699
|
-
class ApplicationLayout < Proscenium::Phlex
|
700
|
-
include Proscenium::Phlex::AssetInclusions # <--
|
701
|
-
|
702
|
-
def view_template(&)
|
703
|
-
doctype
|
704
|
-
html do
|
705
|
-
head do
|
706
|
-
title { 'My Awesome App' }
|
707
|
-
include_assets # <--
|
708
|
-
end
|
709
|
-
body(&)
|
710
|
-
end
|
711
|
-
end
|
712
|
-
end
|
713
|
-
```
|
714
|
-
|
715
|
-
You can specifically include CCS and JS assets using the `include_stylesheets` and `include_javascripts` helpers, allowing you to control where they are included in the HTML.
|
716
|
-
|
717
|
-
### Side-loading
|
718
|
-
|
719
|
-
Any Phlex class that inherits `Proscenium::Phlex` will automatically be [side-loaded](#side-loading).
|
720
|
-
|
721
|
-
### CSS Modules
|
722
|
-
|
723
|
-
[CSS Modules](#css-modules) are fully supported in Phlex classes, with access to the [`css_module` helper](#in-your-views) if you need it. However, there is a better and more seemless way to reference CSS module classes in your Phlex classes.
|
724
|
-
|
725
|
-
Within your Phlex classes, any class names that begin with `@` will be treated as a CSS module class.
|
726
|
-
|
727
|
-
```ruby
|
728
|
-
# /app/views/users/show_view.rb
|
729
|
-
class Users::ShowView < Proscenium::Phlex
|
730
|
-
def view_template
|
731
|
-
h1 class: :@user_name do
|
732
|
-
@user.name
|
733
|
-
end
|
734
|
-
end
|
735
|
-
end
|
736
|
-
```
|
737
|
-
|
738
|
-
```css
|
739
|
-
/* /app/views/users/show_view.module.css */
|
740
|
-
.userName {
|
741
|
-
color: red;
|
742
|
-
font-size: 50px;
|
743
|
-
}
|
744
|
-
```
|
745
|
-
|
746
|
-
In the above `Users::ShowView` Phlex class, the `@user_name` class will be resolved to the `userName` class in the `users/show_view.module.css` file.
|
747
|
-
|
748
|
-
The view above will be rendered something like this:
|
749
|
-
|
750
|
-
```html
|
751
|
-
<h1 class="user_name-ABCD1234"></h1>
|
752
|
-
```
|
753
|
-
|
754
|
-
You can of course continue to reference regular class names in your view, and they will be passed through as is. This will allow you to mix and match CSS modules and regular CSS classes in your views.
|
755
|
-
|
756
|
-
```ruby
|
757
|
-
# /app/views/users/show_view.rb
|
758
|
-
class Users::ShowView < Proscenium::Phlex
|
759
|
-
def view_template
|
760
|
-
h1 class: :[@user_name, :title] do
|
761
|
-
@user.name
|
762
|
-
end
|
763
|
-
end
|
764
|
-
end
|
765
|
-
```
|
766
|
-
|
767
|
-
```html
|
768
|
-
<h1 class="user_name-ABCD1234 title">Joel Moss</h1>
|
769
|
-
```
|
770
|
-
|
771
683
|
## Cache Busting
|
772
684
|
|
773
685
|
> _COMING SOON_
|
@@ -18,7 +18,8 @@ module Proscenium
|
|
18
18
|
unless @css_module_path
|
19
19
|
klass = superclass
|
20
20
|
|
21
|
-
while klass.respond_to?(:css_module_path) &&
|
21
|
+
while klass.respond_to?(:css_module_path) &&
|
22
|
+
(klass.respond_to?(:abstract_class) ? !klass.abstract_class : true)
|
22
23
|
break if (@css_module_path = klass.css_module_path)
|
23
24
|
|
24
25
|
klass = klass.superclass
|
Binary file
|
data/lib/proscenium/railtie.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rails'
|
4
|
-
require 'proscenium/log_subscriber'
|
5
4
|
|
6
5
|
ENV['RAILS_ENV'] = Rails.env
|
7
6
|
|
@@ -11,6 +10,7 @@ module Proscenium
|
|
11
10
|
|
12
11
|
config.proscenium = ActiveSupport::OrderedOptions.new
|
13
12
|
config.proscenium.debug = false
|
13
|
+
config.proscenium.logging = true
|
14
14
|
config.proscenium.bundle = true
|
15
15
|
config.proscenium.side_load = true
|
16
16
|
config.proscenium.code_splitting = true
|
@@ -28,6 +28,11 @@ module Proscenium
|
|
28
28
|
}
|
29
29
|
|
30
30
|
config.after_initialize do |_app|
|
31
|
+
if config.proscenium.logging
|
32
|
+
require 'proscenium/log_subscriber'
|
33
|
+
Proscenium::LogSubscriber.attach_to :proscenium
|
34
|
+
end
|
35
|
+
|
31
36
|
ActiveSupport.on_load(:action_view) do
|
32
37
|
include Proscenium::Helper
|
33
38
|
end
|
@@ -11,7 +11,7 @@ module Proscenium
|
|
11
11
|
# The HTML tag to use as the wrapping element for the component. You can reassign this in your
|
12
12
|
# component class to use a different tag:
|
13
13
|
#
|
14
|
-
# class MyComponent < Proscenium::
|
14
|
+
# class MyComponent < Proscenium::ReactComponent
|
15
15
|
# self.root_tag = :span
|
16
16
|
# end
|
17
17
|
#
|
data/lib/proscenium/side_load.rb
CHANGED
@@ -116,7 +116,8 @@ module Proscenium
|
|
116
116
|
css_imports = []
|
117
117
|
|
118
118
|
klass = obj.class
|
119
|
-
while klass.respond_to?(:source_path) && klass.source_path &&
|
119
|
+
while klass.respond_to?(:source_path) && klass.source_path &&
|
120
|
+
(klass.respond_to?(:abstract_class) ? !klass.abstract_class : true)
|
120
121
|
if options[:css] == false
|
121
122
|
Importer.sideload klass.source_path, **options
|
122
123
|
else
|
data/lib/proscenium/version.rb
CHANGED
data/lib/proscenium.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: proscenium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.19.0.
|
4
|
+
version: 0.19.0.beta20
|
5
5
|
platform: arm64-darwin
|
6
6
|
authors:
|
7
7
|
- Joel Moss
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -24,34 +24,6 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.17.0
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: phlex-rails
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.2'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '1.2'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: prism
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
27
|
- !ruby/object:Gem::Dependency
|
56
28
|
name: rails
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,20 +44,6 @@ dependencies:
|
|
72
44
|
- - "<"
|
73
45
|
- !ruby/object:Gem::Version
|
74
46
|
version: '9.0'
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: require-hooks
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
78
|
-
requirements:
|
79
|
-
- - "~>"
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: '0.2'
|
82
|
-
type: :runtime
|
83
|
-
prerelease: false
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - "~>"
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '0.2'
|
89
47
|
description:
|
90
48
|
email:
|
91
49
|
- joel@developwithstyle.com
|
@@ -101,7 +59,6 @@ files:
|
|
101
59
|
- lib/proscenium/bundled_gems.rb
|
102
60
|
- lib/proscenium/css_module.rb
|
103
61
|
- lib/proscenium/css_module/path.rb
|
104
|
-
- lib/proscenium/css_module/rewriter.rb
|
105
62
|
- lib/proscenium/css_module/transformer.rb
|
106
63
|
- lib/proscenium/ensure_loaded.rb
|
107
64
|
- lib/proscenium/ext/proscenium
|
@@ -114,10 +71,6 @@ files:
|
|
114
71
|
- lib/proscenium/middleware/esbuild.rb
|
115
72
|
- lib/proscenium/middleware/ruby_gems.rb
|
116
73
|
- lib/proscenium/monkey.rb
|
117
|
-
- lib/proscenium/phlex.rb
|
118
|
-
- lib/proscenium/phlex/asset_inclusions.rb
|
119
|
-
- lib/proscenium/phlex/css_modules.rb
|
120
|
-
- lib/proscenium/phlex/react_component.rb
|
121
74
|
- lib/proscenium/railtie.rb
|
122
75
|
- lib/proscenium/react-manager/index.jsx
|
123
76
|
- lib/proscenium/react-manager/react.js
|
@@ -1,76 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'prism'
|
4
|
-
require 'require-hooks/setup'
|
5
|
-
|
6
|
-
module Proscenium
|
7
|
-
module CssModule
|
8
|
-
class Rewriter
|
9
|
-
def self.init(include: [], exclude: [])
|
10
|
-
RequireHooks.source_transform(
|
11
|
-
patterns: include,
|
12
|
-
exclude_patterns: exclude
|
13
|
-
) do |path, source|
|
14
|
-
source ||= File.read(path)
|
15
|
-
Processor.call(source)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
class Processor < Prism::Visitor
|
20
|
-
def self.call(source)
|
21
|
-
visitor = new
|
22
|
-
visitor.visit(Prism.parse(source).value)
|
23
|
-
|
24
|
-
buffer = source.dup
|
25
|
-
annotations = visitor.annotations
|
26
|
-
annotations.sort_by!(&:first)
|
27
|
-
|
28
|
-
annotations.reverse_each do |offset, action|
|
29
|
-
case action
|
30
|
-
when :start
|
31
|
-
buffer.insert(offset, 'class_names(*')
|
32
|
-
when :end
|
33
|
-
buffer.insert(offset, ')')
|
34
|
-
else
|
35
|
-
raise 'Invalid annotation'
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
buffer
|
40
|
-
end
|
41
|
-
|
42
|
-
def initialize
|
43
|
-
@annotations = []
|
44
|
-
end
|
45
|
-
|
46
|
-
PREFIX = '@'
|
47
|
-
|
48
|
-
attr_reader :annotations
|
49
|
-
|
50
|
-
def visit_assoc_node(node)
|
51
|
-
# Skip if the key is not a symbol or string
|
52
|
-
return if %i[symbol_node string_node].exclude?(node.key.type)
|
53
|
-
|
54
|
-
return if node.key.type == :symbol_node && node.key.value != 'class'
|
55
|
-
return if node.key.type == :string_node && node.key.content != 'class'
|
56
|
-
|
57
|
-
value = node.value
|
58
|
-
type = value.type
|
59
|
-
|
60
|
-
if (type == :symbol_node && value.value.start_with?(PREFIX)) ||
|
61
|
-
(type == :array_node && value.elements.any? { |it| it.value.start_with?(PREFIX) })
|
62
|
-
build_annotation value
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def build_annotation(value)
|
67
|
-
location = value.location
|
68
|
-
|
69
|
-
@annotations <<
|
70
|
-
[location.start_character_offset, :start] <<
|
71
|
-
[location.end_character_offset, :end]
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Proscenium::Phlex::AssetInclusions
|
4
|
-
def include_stylesheets
|
5
|
-
comment { '[PROSCENIUM_STYLESHEETS]' }
|
6
|
-
end
|
7
|
-
|
8
|
-
def include_javascripts
|
9
|
-
comment { '[PROSCENIUM_JAVASCRIPTS]' }
|
10
|
-
end
|
11
|
-
|
12
|
-
def include_assets
|
13
|
-
include_stylesheets
|
14
|
-
include_javascripts
|
15
|
-
end
|
16
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Proscenium
|
4
|
-
module Phlex::CssModules
|
5
|
-
def self.included(base)
|
6
|
-
base.extend CssModule::Path
|
7
|
-
base.extend ClassMethods
|
8
|
-
end
|
9
|
-
|
10
|
-
module ClassMethods
|
11
|
-
# Set of CSS module paths that have been resolved after being transformed from 'class' HTML
|
12
|
-
# attributes. See #process_attributes. This is here because Phlex caches attributes. Which
|
13
|
-
# means while the CSS class names will be transformed, any resolved paths will be lost in
|
14
|
-
# subsequent requests.
|
15
|
-
attr_accessor :resolved_css_module_paths
|
16
|
-
end
|
17
|
-
|
18
|
-
def before_template
|
19
|
-
self.class.resolved_css_module_paths ||= Concurrent::Set.new
|
20
|
-
super
|
21
|
-
end
|
22
|
-
|
23
|
-
def after_template
|
24
|
-
self.class.resolved_css_module_paths ||= Concurrent::Set.new
|
25
|
-
self.class.resolved_css_module_paths.each do |path|
|
26
|
-
Proscenium::Importer.import path, sideloaded: true
|
27
|
-
end
|
28
|
-
|
29
|
-
super
|
30
|
-
end
|
31
|
-
|
32
|
-
# Resolve and side load any CSS modules in the "class" attributes, where a CSS module is a class
|
33
|
-
# name beginning with a `@`. The class name is resolved to a CSS module name based on the file
|
34
|
-
# system path of the Phlex class, and any CSS file is side loaded.
|
35
|
-
#
|
36
|
-
# For example, the following will side load the CSS module file at
|
37
|
-
# app/components/user/component.module.css, and add the CSS Module name `user_name` to the
|
38
|
-
# <div>.
|
39
|
-
#
|
40
|
-
# # app/components/user/component.rb
|
41
|
-
# class User::Component < Proscenium::Phlex
|
42
|
-
# def view_template
|
43
|
-
# div class: :@user_name do
|
44
|
-
# 'Joel Moss'
|
45
|
-
# end
|
46
|
-
# end
|
47
|
-
# end
|
48
|
-
#
|
49
|
-
# Additionally, any class name containing a `/` is resolved as a CSS module path. Allowing you
|
50
|
-
# to use the same syntax as a CSS module, but without the need to manually import the CSS file.
|
51
|
-
#
|
52
|
-
# For example, the following will side load the CSS module file at /lib/users.module.css, and
|
53
|
-
# add the CSS Module name `name` to the <div>.
|
54
|
-
#
|
55
|
-
# class User::Component < Proscenium::Phlex
|
56
|
-
# def view_template
|
57
|
-
# div class: '/lib/users@name' do
|
58
|
-
# 'Joel Moss'
|
59
|
-
# end
|
60
|
-
# end
|
61
|
-
# end
|
62
|
-
#
|
63
|
-
# @raise [Proscenium::CssModule::Resolver::NotFound] If a CSS module file is not found for the
|
64
|
-
# Phlex class file path.
|
65
|
-
def process_attributes(**attributes)
|
66
|
-
if attributes.key?(:class) && (attributes[:class] = tokens(attributes[:class])).include?('@')
|
67
|
-
names = attributes[:class].is_a?(Array) ? attributes[:class] : attributes[:class].split
|
68
|
-
|
69
|
-
self.class.resolved_css_module_paths ||= Concurrent::Set.new
|
70
|
-
|
71
|
-
attributes[:class] = cssm.class_names(*names).map do |name, path|
|
72
|
-
self.class.resolved_css_module_paths << path if path
|
73
|
-
name
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
attributes
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Proscenium
|
4
|
-
# Renders a <div> for use with React components, with data attributes specifying the component
|
5
|
-
# path and props.
|
6
|
-
#
|
7
|
-
# If a block is given, it will be yielded within the div, allowing for a custom "loading" UI. If
|
8
|
-
# no block is given, then a "loading..." text will be rendered. It is intended that the component
|
9
|
-
# is mounted to this div, and the loading UI will then be replaced with the component's rendered
|
10
|
-
# output.
|
11
|
-
#
|
12
|
-
# You can pass props to the component in the `:props` keyword argument.
|
13
|
-
class Phlex::ReactComponent < Phlex
|
14
|
-
self.abstract_class = true
|
15
|
-
|
16
|
-
include ReactComponentable
|
17
|
-
|
18
|
-
# Override this to provide your own loading UI.
|
19
|
-
#
|
20
|
-
# @example
|
21
|
-
# def view_template(**attributes, &block)
|
22
|
-
# super do
|
23
|
-
# 'Look at me! I am loading now...'
|
24
|
-
# end
|
25
|
-
# end
|
26
|
-
#
|
27
|
-
# @yield the given block to a `div` within the top level component div.
|
28
|
-
def view_template(**attributes, &)
|
29
|
-
send(root_tag, **{ data: data_attributes }.deep_merge(attributes), &)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
data/lib/proscenium/phlex.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'phlex-rails'
|
4
|
-
|
5
|
-
module Proscenium
|
6
|
-
class Phlex < ::Phlex::HTML
|
7
|
-
extend ActiveSupport::Autoload
|
8
|
-
|
9
|
-
autoload :CssModules
|
10
|
-
autoload :ReactComponent
|
11
|
-
autoload :AssetInclusions
|
12
|
-
|
13
|
-
include Proscenium::SourcePath
|
14
|
-
include Proscenium::CssModule
|
15
|
-
include CssModules
|
16
|
-
include AssetInclusions
|
17
|
-
|
18
|
-
module Sideload
|
19
|
-
def before_template
|
20
|
-
Proscenium::SideLoad.sideload_inheritance_chain self,
|
21
|
-
helpers.controller.sideload_assets_options
|
22
|
-
|
23
|
-
super
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class_attribute :sideload_assets_options
|
28
|
-
|
29
|
-
class << self
|
30
|
-
attr_accessor :abstract_class
|
31
|
-
|
32
|
-
def inherited(child)
|
33
|
-
child.prepend Sideload
|
34
|
-
|
35
|
-
super
|
36
|
-
end
|
37
|
-
|
38
|
-
def sideload_assets(value)
|
39
|
-
self.sideload_assets_options = value
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|