rbexy 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/README.md +10 -0
- data/lib/rbexy/component.rb +8 -8
- data/lib/rbexy/component_providers/namespaced_rbexy_provider.rb +20 -0
- data/lib/rbexy/component_providers/rbexy_provider.rb +0 -2
- data/lib/rbexy/component_providers/view_component_provider.rb +0 -2
- data/lib/rbexy/lexer.rb +14 -2
- data/lib/rbexy/rails.rb +0 -1
- data/lib/rbexy/rails/engine.rb +9 -2
- data/lib/rbexy/runtime.rb +11 -1
- data/lib/rbexy/version.rb +1 -1
- metadata +3 -3
- data/lib/rbexy/rails/template_handler.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 563f7d14586235a18249e38e8859824b7952617b4984ab794e69963c218b41b2
|
4
|
+
data.tar.gz: a20d77a9a3d2fc439d425033fcb3230d18f59a98990a50be022569de163e67cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48a530ceee5c8b30f7c41900db8b5b0658351a5ab397af004bc9b38c1047d1bb62eecc0ee4807bc992d690d50dabf5d291a15aadc7c27975cc6901bae8985ec1
|
7
|
+
data.tar.gz: 4e5713408292969214aeb92909f522dd59f823f847ece59bb016e55e0993eb2d3c51fd0434ebaab3447f939f32833600da4c466fdacb5d3632b4201dea7c7e13
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -375,6 +375,16 @@ Rbexy.configure do |config|
|
|
375
375
|
end
|
376
376
|
```
|
377
377
|
|
378
|
+
Or in Rails you can customize the component provider just for a controller:
|
379
|
+
|
380
|
+
```ruby
|
381
|
+
class ThingsController < ApplicationController
|
382
|
+
def rbexy_component_provider
|
383
|
+
MyComponentProvider.new
|
384
|
+
end
|
385
|
+
end
|
386
|
+
```
|
387
|
+
|
378
388
|
See `lib/rbexy/component_providers/` for example implementations.
|
379
389
|
|
380
390
|
## Usage outside of Rails
|
data/lib/rbexy/component.rb
CHANGED
@@ -64,6 +64,14 @@ module Rbexy
|
|
64
64
|
raise(ContextNotFound, "no parent context `#{name}`")
|
65
65
|
end
|
66
66
|
|
67
|
+
def view_renderer
|
68
|
+
view_context.view_renderer
|
69
|
+
end
|
70
|
+
|
71
|
+
def component_name
|
72
|
+
self.class.name.underscore
|
73
|
+
end
|
74
|
+
|
67
75
|
private
|
68
76
|
|
69
77
|
attr_reader :view_context, :content_block, :old_lookup_context
|
@@ -88,14 +96,6 @@ module Rbexy
|
|
88
96
|
LookupContext.new(paths, LookupContext.details_hash(existing_context))
|
89
97
|
end
|
90
98
|
|
91
|
-
def view_renderer
|
92
|
-
view_context.view_renderer
|
93
|
-
end
|
94
|
-
|
95
|
-
def component_name
|
96
|
-
self.class.name.underscore
|
97
|
-
end
|
98
|
-
|
99
99
|
def method_missing(meth, *args, &block)
|
100
100
|
if view_context.respond_to?(meth)
|
101
101
|
view_context.send(meth, *args, &block)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Rbexy
|
2
|
+
module ComponentProviders
|
3
|
+
class NamespacedRbexyProvider < Rbexy::ComponentProviders::RbexyProvider
|
4
|
+
attr_reader :namespaces
|
5
|
+
|
6
|
+
def initialize(*namespaces)
|
7
|
+
@namespaces = namespaces
|
8
|
+
end
|
9
|
+
|
10
|
+
def find(name)
|
11
|
+
namespaces.each do |namespace|
|
12
|
+
result = super("#{namespace}::#{name}")
|
13
|
+
return result if result != nil
|
14
|
+
end
|
15
|
+
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/rbexy/lexer.rb
CHANGED
@@ -115,7 +115,7 @@ module Rbexy
|
|
115
115
|
expression_inner_single_quote
|
116
116
|
elsif scanner.scan(Patterns.open_tag_def)
|
117
117
|
potential_expression_inner_tag
|
118
|
-
elsif
|
118
|
+
elsif expression_content?
|
119
119
|
self.curr_expr += scanner.matched
|
120
120
|
else
|
121
121
|
raise SyntaxError, self
|
@@ -132,7 +132,7 @@ module Rbexy
|
|
132
132
|
expression_inner_single_quote
|
133
133
|
elsif scanner.scan(Patterns.open_tag_def)
|
134
134
|
potential_expression_inner_tag
|
135
|
-
elsif
|
135
|
+
elsif expression_content?
|
136
136
|
self.curr_expr += scanner.matched
|
137
137
|
else
|
138
138
|
raise SyntaxError, self
|
@@ -237,6 +237,7 @@ module Rbexy
|
|
237
237
|
end
|
238
238
|
|
239
239
|
def potential_expression_inner_tag
|
240
|
+
# binding.pry
|
240
241
|
if self.curr_expr =~ Patterns.expression_internal_tag_prefixes
|
241
242
|
tokens << [:EXPRESSION_BODY, curr_expr]
|
242
243
|
self.curr_expr = ""
|
@@ -275,5 +276,16 @@ module Rbexy
|
|
275
276
|
self.curr_expr += scanner.getch
|
276
277
|
stack.pop unless curr_expr.end_with?('\\')
|
277
278
|
end
|
279
|
+
|
280
|
+
def expression_content?
|
281
|
+
# Patterns.expression_content ends at `<` characters, because we need to
|
282
|
+
# separately scan for allowed open_tag_defs within expressions. We should
|
283
|
+
# support any found open_tag_ends as expression content, as that means the
|
284
|
+
# open_tag_def was not considered allowed (or stack would be inside
|
285
|
+
# :tag_def instead of :expression) so we should thus also consider the
|
286
|
+
# open_tag_end to just be a part of the expression (maybe its in a string,
|
287
|
+
# etc).
|
288
|
+
scanner.scan(Patterns.expression_content) || scanner.scan(Patterns.open_tag_end)
|
289
|
+
end
|
278
290
|
end
|
279
291
|
end
|
data/lib/rbexy/rails.rb
CHANGED
data/lib/rbexy/rails/engine.rb
CHANGED
@@ -4,10 +4,17 @@ module Rbexy
|
|
4
4
|
module Rails
|
5
5
|
class Engine < ::Rails::Engine
|
6
6
|
initializer "rbexy" do |app|
|
7
|
-
|
7
|
+
template_handler = ::Rails.version.to_f >= 6.0 ?
|
8
|
+
proc { |template, source| Rbexy.compile(source) } :
|
9
|
+
proc { |template| Rbexy.compile(template.source) }
|
8
10
|
|
9
|
-
|
11
|
+
ActionView::Template.register_template_handler(:rbx, template_handler)
|
12
|
+
|
13
|
+
ActiveSupport.on_load :action_controller_base do
|
10
14
|
helper Rbexy::ViewContextHelper
|
15
|
+
helper_method :rbexy_component_provider
|
16
|
+
|
17
|
+
def rbexy_component_provider; end
|
11
18
|
end
|
12
19
|
|
13
20
|
if defined?(ViewComponent)
|
data/lib/rbexy/runtime.rb
CHANGED
@@ -11,7 +11,11 @@ module Rbexy
|
|
11
11
|
|
12
12
|
DefaultTagBuilder = ActionView::Helpers::TagHelper::TagBuilder
|
13
13
|
|
14
|
-
def self.create_tag_builder(context, provider =
|
14
|
+
def self.create_tag_builder(context, provider = nil)
|
15
|
+
provider = provider ||
|
16
|
+
provider_from_context(context) ||
|
17
|
+
Rbexy.configuration.component_provider
|
18
|
+
|
15
19
|
if provider
|
16
20
|
ComponentTagBuilder.new(context, provider)
|
17
21
|
else
|
@@ -19,6 +23,12 @@ module Rbexy
|
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
26
|
+
def self.provider_from_context(context)
|
27
|
+
if context.respond_to?(:rbexy_component_provider)
|
28
|
+
context.rbexy_component_provider
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
22
32
|
def initialize(component_provider = nil)
|
23
33
|
@rbexy_tag = self.class.create_tag_builder(self, component_provider)
|
24
34
|
end
|
data/lib/rbexy/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbexy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Giancola
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -224,6 +224,7 @@ files:
|
|
224
224
|
- example.rb
|
225
225
|
- lib/rbexy.rb
|
226
226
|
- lib/rbexy/component.rb
|
227
|
+
- lib/rbexy/component_providers/namespaced_rbexy_provider.rb
|
227
228
|
- lib/rbexy/component_providers/rbexy_provider.rb
|
228
229
|
- lib/rbexy/component_providers/view_component_provider.rb
|
229
230
|
- lib/rbexy/component_tag_builder.rb
|
@@ -235,7 +236,6 @@ files:
|
|
235
236
|
- lib/rbexy/parser.rb
|
236
237
|
- lib/rbexy/rails.rb
|
237
238
|
- lib/rbexy/rails/engine.rb
|
238
|
-
- lib/rbexy/rails/template_handler.rb
|
239
239
|
- lib/rbexy/runtime.rb
|
240
240
|
- lib/rbexy/version.rb
|
241
241
|
- lib/rbexy/view_context_helper.rb
|