proscenium 0.19.0.beta4-aarch64-linux → 0.19.0.beta6-aarch64-linux

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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/proscenium/builder.rb +9 -13
  4. data/lib/proscenium/ext/proscenium +0 -0
  5. data/lib/proscenium/importer.rb +13 -13
  6. data/lib/proscenium/middleware/base.rb +5 -2
  7. data/lib/proscenium/middleware/engines.rb +5 -9
  8. data/lib/proscenium/middleware/esbuild.rb +13 -8
  9. data/lib/proscenium/middleware.rb +2 -4
  10. data/lib/proscenium/railtie.rb +15 -5
  11. data/lib/proscenium/react_componentable.rb +1 -1
  12. data/lib/proscenium/resolver.rb +3 -8
  13. data/lib/proscenium/side_load.rb +1 -1
  14. data/lib/proscenium/ui/flash/index.css +1 -0
  15. data/lib/proscenium/ui/flash/index.js +73 -0
  16. data/lib/proscenium/ui/flash.rb +15 -0
  17. data/lib/proscenium/ui/form/field_methods.rb +88 -0
  18. data/lib/proscenium/ui/form/fields/base.rb +188 -0
  19. data/lib/proscenium/ui/form/fields/checkbox/index.jsx +48 -0
  20. data/lib/proscenium/ui/form/fields/checkbox/index.module.css +9 -0
  21. data/lib/proscenium/ui/form/fields/checkbox/previews/basic.jsx +8 -0
  22. data/lib/proscenium/ui/form/fields/checkbox.rb +32 -0
  23. data/lib/proscenium/ui/form/fields/date.module.css +27 -0
  24. data/lib/proscenium/ui/form/fields/datetime.rb +15 -0
  25. data/lib/proscenium/ui/form/fields/hidden.rb +9 -0
  26. data/lib/proscenium/ui/form/fields/input/index.jsx +71 -0
  27. data/lib/proscenium/ui/form/fields/input/index.module.css +13 -0
  28. data/lib/proscenium/ui/form/fields/input/previews/basic.jsx +8 -0
  29. data/lib/proscenium/ui/form/fields/input.rb +14 -0
  30. data/lib/proscenium/ui/form/fields/radio_group.rb +173 -0
  31. data/lib/proscenium/ui/form/fields/radio_input/index.jsx +44 -0
  32. data/lib/proscenium/ui/form/fields/radio_input/index.module.css +13 -0
  33. data/lib/proscenium/ui/form/fields/radio_input/previews/basic.jsx +8 -0
  34. data/lib/proscenium/ui/form/fields/radio_input.rb +17 -0
  35. data/lib/proscenium/ui/form/fields/rich_textarea.css +23 -0
  36. data/lib/proscenium/ui/form/fields/rich_textarea.js +6 -0
  37. data/lib/proscenium/ui/form/fields/rich_textarea.rb +18 -0
  38. data/lib/proscenium/ui/form/fields/select.jsx +47 -0
  39. data/lib/proscenium/ui/form/fields/select.module.css +46 -0
  40. data/lib/proscenium/ui/form/fields/select.rb +300 -0
  41. data/lib/proscenium/ui/form/fields/tel.css +297 -0
  42. data/lib/proscenium/ui/form/fields/tel.js +83 -0
  43. data/lib/proscenium/ui/form/fields/tel.rb +54 -0
  44. data/lib/proscenium/ui/form/fields/textarea/index.jsx +50 -0
  45. data/lib/proscenium/ui/form/fields/textarea/index.module.css +13 -0
  46. data/lib/proscenium/ui/form/fields/textarea/previews/basic.jsx +8 -0
  47. data/lib/proscenium/ui/form/fields/textarea.rb +18 -0
  48. data/lib/proscenium/ui/form/translation.rb +71 -0
  49. data/lib/proscenium/ui/form.css +52 -0
  50. data/lib/proscenium/ui/form.rb +213 -0
  51. data/lib/proscenium/ui/props.css +7 -0
  52. data/lib/proscenium/ui/react-manager/index.jsx +1 -1
  53. data/lib/proscenium/ui/test.js +1 -1
  54. data/lib/proscenium/ui/ujs/index.js +1 -1
  55. data/lib/proscenium/ui.rb +3 -0
  56. data/lib/proscenium/utils.rb +33 -0
  57. data/lib/proscenium/version.rb +1 -1
  58. data/lib/proscenium/view_component.rb +0 -2
  59. data/lib/proscenium.rb +12 -2
  60. metadata +61 -10
  61. data/lib/proscenium/middleware/runtime.rb +0 -18
@@ -0,0 +1,213 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'literal'
4
+
5
+ module Proscenium::UI
6
+ # Helpers to aid in building forms and associated inputs with built-in styling, and inspired by
7
+ # Rails form helpers and SimpleForm.
8
+ #
9
+ # Start by creating the form with `Proscenium::UI::Form`, which expects a model
10
+ # instance, and a block in which you define one or more fields. It automatically includes a hidden
11
+ # authenticity token field for you.
12
+ #
13
+ # Example:
14
+ #
15
+ # render Proscenium::UI::Form.new(User.new) do |f|
16
+ # f.text_field :name
17
+ # f.radio_group :role, %i[admin manager]
18
+ # f.submit 'Save'
19
+ # end
20
+ #
21
+ # The following fields (inputs) are available:
22
+ #
23
+ # - `url_field` - <input> with 'url' type.
24
+ # - `text_field` - <input> with 'text' type.
25
+ # - `textarea_field` - <textarea>.
26
+ # - `rich_textarea_field` - A rich <textarea> using ActionText and Trix.
27
+ # - `email_field` - <input> with 'email' type.
28
+ # - `number_field` - <input> with 'number' type.
29
+ # - `color_field` - <input> with 'color' type.
30
+ # - `hidden_field` - <input> with 'hidden' type.
31
+ # - `search_field` - <input> with 'search' type.
32
+ # - `password_field` - <input> with 'password' type.
33
+ # - `tel_field` - <input> with 'tel' type.
34
+ # - `range_field` - <input> with 'range' type.
35
+ # - `time_field` - <input> with 'time' type.
36
+ # - `date_field` - <input> with 'date' type.
37
+ # - `week_field` - <input> with 'week' type.
38
+ # - `month_field` - <input> with 'month' type.
39
+ # - `datetime_local_field` - <input> with 'datetime-local' type.
40
+ # - `checkbox_field` - <input> with 'checkbox' type.
41
+ # - `radio_field` - <input> with 'radio' type.
42
+ # - `radio_group` - group of <input>'s with 'radio' type.
43
+ # - `select_field` - <select> input.
44
+ #
45
+ class Form < Proscenium::UI::Component
46
+ extend ActiveSupport::Autoload
47
+ extend Literal::Properties
48
+
49
+ autoload :FieldMethods
50
+ autoload :Translation
51
+
52
+ module Fields
53
+ extend ActiveSupport::Autoload
54
+
55
+ autoload :Base
56
+ autoload :Input
57
+ autoload :Hidden
58
+ autoload :RadioInput
59
+ autoload :Checkbox
60
+ autoload :Textarea
61
+ autoload :RichTextarea
62
+ autoload :RadioGroup
63
+ autoload :Select
64
+ autoload :Tel
65
+ end
66
+
67
+ include FieldMethods
68
+ include Translation
69
+
70
+ STANDARD_METHOD_VERBS = %w[get post].freeze
71
+
72
+ def self.input_field(method_name, type:)
73
+ define_method method_name do |*args, **attributes|
74
+ merge_bang_attributes! args, attributes
75
+ render Fields::Input.new(args, @model, self, type:, **attributes)
76
+ end
77
+ end
78
+
79
+ prop :model, _Interface(:to_model), :positional, reader: :public
80
+
81
+ prop :method, _Union?(:get, :post, :put, :patch, :delete,
82
+ 'get', 'post', 'put', 'patch', 'delete') do |value|
83
+ value ||= 'patch' if @model.respond_to?(:persisted?) && @model.persisted?
84
+ value&.to_s&.downcase || 'post'
85
+ end
86
+
87
+ # The form action, which can be any value that can be passed to Rails `url_for` helper.
88
+ prop :action, _Union?(String, Symbol, Array, Hash)
89
+
90
+ prop :attributes, Hash, :**
91
+
92
+ # Use the given `field_class` to render a custom field. This allows you to create a custom
93
+ # form field on an as-needed basis. The `field_class` must be a subclass of
94
+ # `Proscenium::UI::Form::Fields::Base`.
95
+ #
96
+ # Example:
97
+ #
98
+ # render Proscenium::UI::Form.new @resource do |f|
99
+ # f.use_field Administrator::EmailField, :email, :required!
100
+ # end
101
+ #
102
+ # @param field_class [Class<Proscenium::UI::Form::Fields::Base>]
103
+ # @param args [Array<Symbol>] name or nested names of model attribute
104
+ # @param attributes [Hash] passed through to each input
105
+ def use_field(field_class, *args, **attributes)
106
+ merge_bang_attributes! args, attributes
107
+ render field_class.new(args, model, self, **attributes)
108
+ end
109
+
110
+ # Returns a button with type of 'submit', using the `value` given.
111
+ #
112
+ # @param value [String] Value of the `value` attribute.
113
+ def submit(value = 'Save', **)
114
+ input(name: 'commit', type: :submit, value:, **)
115
+ end
116
+
117
+ # Returns a <div> with the given `message` as its content. If `message` is not given, and
118
+ # `attribute` is, then first error message for the given model `attribute`.
119
+ #
120
+ # @param message [String] error message to display.
121
+ # @param attribute [Symbol] name of the model attribute.
122
+ def error(message: nil, attribute: nil, &content)
123
+ if message.nil? && attribute.nil? && !content
124
+ raise ArgumentError, 'One of `message:`, `attribute:` or a block is required'
125
+ end
126
+
127
+ if content
128
+ div class: :@error, &content
129
+ else
130
+ div class: :@error do
131
+ message || @model.errors[attribute]&.first
132
+ end
133
+ end
134
+ end
135
+
136
+ def view_template(&block)
137
+ form action:, method:, **@attributes do
138
+ method_field
139
+ authenticity_token_field
140
+ error_for_base
141
+ yield_content(&block)
142
+ end
143
+ end
144
+
145
+ def error_for_base
146
+ return unless @model.errors.key?(:base)
147
+
148
+ callout :danger do |x|
149
+ x.title { 'Unable to save...' }
150
+ div { @model.errors.full_messages_for(:base).first }
151
+ end
152
+ end
153
+
154
+ def field_name(*names, multiple: false)
155
+ # Delete the `?` suffix if present.
156
+ lname = names.pop.to_s
157
+ names.append lname.delete_suffix('?').to_sym
158
+
159
+ @_view_context.field_name(ActiveModel::Naming.param_key(@model.class), *names,
160
+ multiple:)
161
+ end
162
+
163
+ def field_id(*)
164
+ @_view_context.field_id(ActiveModel::Naming.param_key(@model.class), *)
165
+ end
166
+
167
+ def authenticity_token_field
168
+ return if method == 'get'
169
+
170
+ input(
171
+ name: 'authenticity_token',
172
+ type: 'hidden',
173
+ value: @_view_context.form_authenticity_token(form_options: { action:,
174
+ method: @method })
175
+ )
176
+ end
177
+
178
+ def action
179
+ @_view_context.url_for(@action || @model)
180
+ end
181
+
182
+ def method_field
183
+ return if STANDARD_METHOD_VERBS.include?(@method)
184
+
185
+ input type: 'hidden', name: '_method', value: @method, autocomplete: 'off'
186
+ end
187
+
188
+ def method
189
+ STANDARD_METHOD_VERBS.include?(@method) ? @method : 'post'
190
+ end
191
+
192
+ input_field :file_field, type: 'file'
193
+ input_field :url_field, type: 'url'
194
+ input_field :text_field, type: 'text'
195
+ input_field :time_field, type: 'time'
196
+ input_field :date_field, type: 'date'
197
+ input_field :number_field, type: 'number'
198
+ input_field :week_field, type: 'week'
199
+ input_field :month_field, type: 'month'
200
+ input_field :email_field, type: 'email'
201
+ input_field :color_field, type: 'color'
202
+ input_field :search_field, type: 'search'
203
+ input_field :password_field, type: 'password'
204
+ input_field :range_field, type: 'range'
205
+
206
+ private
207
+
208
+ def merge_bang_attributes!(attrs, kw_attributes, additional_bang_attrs: [])
209
+ Proscenium::Utils.merge_bang_attributes! attrs, kw_attributes,
210
+ %i[required disabled].concat(additional_bang_attrs)
211
+ end
212
+ end
213
+ end
@@ -0,0 +1,7 @@
1
+ :where(html) {
2
+ --pui-input-border: 1px solid gray;
3
+ --pui-input-color: FieldText;
4
+ --pui-input-accent-color: lightgray;
5
+ --pui-input-border-radius: 2px;
6
+ --pui-input-background-color: Field;
7
+ }
@@ -85,7 +85,7 @@ function init(elements) {
85
85
  throw `[proscenium/react/manager] Cannot load component ${path} (not found in Proscenium.lazyScripts)`;
86
86
  }
87
87
 
88
- const react = import("@proscenium/react-manager/react");
88
+ const react = import("proscenium/react-manager/react");
89
89
  const Component = import(window.Proscenium.lazyScripts[path].outpath);
90
90
 
91
91
  const forwardChildren =
@@ -1 +1 @@
1
- console.log("@proscenium/ui/test.js");
1
+ console.log("proscenium/test.js");
@@ -2,7 +2,7 @@ export default async () => {
2
2
  window.Proscenium = window.Proscenium || {};
3
3
 
4
4
  if (!window.Proscenium.UJS) {
5
- const classPath = "/proscenium/ui/ujs/class.js";
5
+ const classPath = "/proscenium/ujs/class.js";
6
6
  const module = await import(classPath);
7
7
  window.Proscenium.UJS = new module.default();
8
8
  }
data/lib/proscenium/ui.rb CHANGED
@@ -2,7 +2,10 @@
2
2
 
3
3
  module Proscenium::UI
4
4
  extend ActiveSupport::Autoload
5
+ extend Phlex::Kit
5
6
 
6
7
  autoload :Component
7
8
  autoload :Breadcrumbs
9
+ autoload :Form
10
+ autoload :Flash
8
11
  end
@@ -9,5 +9,38 @@ module Proscenium
9
9
  def digest(value)
10
10
  Digest::SHA1.hexdigest(value.to_s)[..7]
11
11
  end
12
+
13
+ # Merges the given array of attribute `name`'s into the `kw_arguments`. A bang attribute is one
14
+ # that ends with an exclamation mark or - in Ruby parlance - a "bang", and has a boolean value.
15
+ # Modifies the given `kw_attributes`, and only attribute names in `allowed` will be merged.
16
+ #
17
+ # @param names [Array(Symbol)] of argument names
18
+ # @param kw_attributes [Hash] attributes to be merged with
19
+ # @param allowed [Array(Symbol)] attribute names allowed to be merged as bang attributes
20
+ #
21
+ # Example:
22
+ #
23
+ # def tab(name, *args, href:, **attributes)
24
+ # Hue::Utils.merge_bang_attributes!(args, attributes, [:current])
25
+ # end
26
+ #
27
+ # Allowing you to use either of the following API's:
28
+ #
29
+ # tab 'Tab 1', required: true
30
+ # tab 'Tab 1', :required!
31
+ #
32
+ def merge_bang_attributes!(names, kw_attributes, allowed)
33
+ allowed.each do |name|
34
+ sym_name = name.to_sym
35
+ bang_name = :"#{sym_name}!"
36
+
37
+ next unless names.include?(bang_name)
38
+
39
+ names.delete(bang_name)
40
+
41
+ # Keyword arguments should override the bang.
42
+ kw_attributes[sym_name] = true unless kw_attributes.key?(sym_name)
43
+ end
44
+ end
12
45
  end
13
46
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Proscenium
4
- VERSION = '0.19.0.beta4'
4
+ VERSION = '0.19.0.beta6'
5
5
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'view_component'
4
-
5
3
  class Proscenium::ViewComponent < ViewComponent::Base
6
4
  extend ActiveSupport::Autoload
7
5
 
data/lib/proscenium.rb CHANGED
@@ -1,6 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/dependencies/autoload'
3
+ # require 'zeitwerk'
4
+
5
+ # loader = Zeitwerk::Loader.for_gem
6
+ # loader.inflector.inflect 'ui' => 'UI'
7
+ # loader.ignore "#{__dir__}/proscenium/ext"
8
+ # loader.ignore "#{__dir__}/proscenium/libs"
9
+ # loader.setup
4
10
 
5
11
  module Proscenium
6
12
  extend ActiveSupport::Autoload
@@ -65,7 +71,11 @@ module Proscenium
65
71
  end
66
72
 
67
73
  def ui_path
68
- Railtie.root.join('lib', 'proscenium', 'ui')
74
+ @ui_path ||= Railtie.root.join('lib', 'proscenium', 'ui')
75
+ end
76
+
77
+ def ui_path_regex
78
+ @ui_path_regex ||= Regexp.new("^#{Proscenium.ui_path}/")
69
79
  end
70
80
 
71
81
  def root
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.beta4
4
+ version: 0.19.0.beta6
5
5
  platform: aarch64-linux
6
6
  authors:
7
7
  - Joel Moss
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-01-03 00:00:00.000000000 Z
11
+ date: 2025-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: 7.1.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '8.0'
22
+ version: '9.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,21 @@ dependencies:
29
29
  version: 7.1.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '8.0'
32
+ version: '9.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: countries
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 7.1.0
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 7.1.0
33
47
  - !ruby/object:Gem::Dependency
34
48
  name: ffi
35
49
  requirement: !ruby/object:Gem::Requirement
@@ -59,19 +73,19 @@ dependencies:
59
73
  - !ruby/object:Gem::Version
60
74
  version: '1.0'
61
75
  - !ruby/object:Gem::Dependency
62
- name: oj
76
+ name: phonelib
63
77
  requirement: !ruby/object:Gem::Requirement
64
78
  requirements:
65
79
  - - "~>"
66
80
  - !ruby/object:Gem::Version
67
- version: '3.13'
81
+ version: 0.10.3
68
82
  type: :runtime
69
83
  prerelease: false
70
84
  version_requirements: !ruby/object:Gem::Requirement
71
85
  requirements:
72
86
  - - "~>"
73
87
  - !ruby/object:Gem::Version
74
- version: '3.13'
88
+ version: 0.10.3
75
89
  - !ruby/object:Gem::Dependency
76
90
  name: railties
77
91
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +95,7 @@ dependencies:
81
95
  version: 7.1.0
82
96
  - - "<"
83
97
  - !ruby/object:Gem::Version
84
- version: '8.0'
98
+ version: '9.0'
85
99
  type: :runtime
86
100
  prerelease: false
87
101
  version_requirements: !ruby/object:Gem::Requirement
@@ -91,7 +105,7 @@ dependencies:
91
105
  version: 7.1.0
92
106
  - - "<"
93
107
  - !ruby/object:Gem::Version
94
- version: '8.0'
108
+ version: '9.0'
95
109
  - !ruby/object:Gem::Dependency
96
110
  name: ruby-next
97
111
  requirement: !ruby/object:Gem::Requirement
@@ -133,7 +147,6 @@ files:
133
147
  - lib/proscenium/middleware/base.rb
134
148
  - lib/proscenium/middleware/engines.rb
135
149
  - lib/proscenium/middleware/esbuild.rb
136
- - lib/proscenium/middleware/runtime.rb
137
150
  - lib/proscenium/monkey.rb
138
151
  - lib/proscenium/phlex.rb
139
152
  - lib/proscenium/phlex/asset_inclusions.rb
@@ -154,6 +167,44 @@ files:
154
167
  - lib/proscenium/ui/breadcrumbs/mixins.css
155
168
  - lib/proscenium/ui/component.rb
156
169
  - lib/proscenium/ui/custom_element.js
170
+ - lib/proscenium/ui/flash.rb
171
+ - lib/proscenium/ui/flash/index.css
172
+ - lib/proscenium/ui/flash/index.js
173
+ - lib/proscenium/ui/form.css
174
+ - lib/proscenium/ui/form.rb
175
+ - lib/proscenium/ui/form/field_methods.rb
176
+ - lib/proscenium/ui/form/fields/base.rb
177
+ - lib/proscenium/ui/form/fields/checkbox.rb
178
+ - lib/proscenium/ui/form/fields/checkbox/index.jsx
179
+ - lib/proscenium/ui/form/fields/checkbox/index.module.css
180
+ - lib/proscenium/ui/form/fields/checkbox/previews/basic.jsx
181
+ - lib/proscenium/ui/form/fields/date.module.css
182
+ - lib/proscenium/ui/form/fields/datetime.rb
183
+ - lib/proscenium/ui/form/fields/hidden.rb
184
+ - lib/proscenium/ui/form/fields/input.rb
185
+ - lib/proscenium/ui/form/fields/input/index.jsx
186
+ - lib/proscenium/ui/form/fields/input/index.module.css
187
+ - lib/proscenium/ui/form/fields/input/previews/basic.jsx
188
+ - lib/proscenium/ui/form/fields/radio_group.rb
189
+ - lib/proscenium/ui/form/fields/radio_input.rb
190
+ - lib/proscenium/ui/form/fields/radio_input/index.jsx
191
+ - lib/proscenium/ui/form/fields/radio_input/index.module.css
192
+ - lib/proscenium/ui/form/fields/radio_input/previews/basic.jsx
193
+ - lib/proscenium/ui/form/fields/rich_textarea.css
194
+ - lib/proscenium/ui/form/fields/rich_textarea.js
195
+ - lib/proscenium/ui/form/fields/rich_textarea.rb
196
+ - lib/proscenium/ui/form/fields/select.jsx
197
+ - lib/proscenium/ui/form/fields/select.module.css
198
+ - lib/proscenium/ui/form/fields/select.rb
199
+ - lib/proscenium/ui/form/fields/tel.css
200
+ - lib/proscenium/ui/form/fields/tel.js
201
+ - lib/proscenium/ui/form/fields/tel.rb
202
+ - lib/proscenium/ui/form/fields/textarea.rb
203
+ - lib/proscenium/ui/form/fields/textarea/index.jsx
204
+ - lib/proscenium/ui/form/fields/textarea/index.module.css
205
+ - lib/proscenium/ui/form/fields/textarea/previews/basic.jsx
206
+ - lib/proscenium/ui/form/translation.rb
207
+ - lib/proscenium/ui/props.css
157
208
  - lib/proscenium/ui/react-manager/index.jsx
158
209
  - lib/proscenium/ui/react-manager/react.js
159
210
  - lib/proscenium/ui/stimulus-loading.js
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Proscenium
4
- class Middleware
5
- class Runtime < Esbuild
6
- private
7
-
8
- def real_path
9
- @real_path ||= Pathname.new(@request.path.sub(%r{^/@proscenium},
10
- '/lib/proscenium/libs')).to_s
11
- end
12
-
13
- def root_for_readable
14
- Proscenium::Railtie.root
15
- end
16
- end
17
- end
18
- end