rbexy 0.1.2 → 0.2.1
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 +18 -12
- 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/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: 4cf2789f8c063a3b67dc6c4da86979b89214679833c8be14bee61d52b1a17f3b
|
4
|
+
data.tar.gz: 89d4d684fb473837be4b7c239e034ec6d27f9b754978cb6bfeb7b77774310e9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf0cd9cbf4fc983f6f7213da1babd5e6e334f86c3bd9a3f129f4889d69390946e858a29bc9cede2ffe36e510c6573fea1eb8e55b2e1f504964305a765efd3236
|
7
|
+
data.tar.gz: fc8090cb79071025b6f3ab491bdff3558a22dccfe43350830f36e6a8ba965e318b39e86bd07aec73659db428a4c223a115ccb3684b30a819e7dc5b577951d04b
|
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
@@ -3,6 +3,8 @@ require "action_view"
|
|
3
3
|
module Rbexy
|
4
4
|
class Component < ActionView::Base
|
5
5
|
class LookupContext < ActionView::LookupContext
|
6
|
+
attr_accessor :component_name_stack
|
7
|
+
|
6
8
|
def self.details_hash(context)
|
7
9
|
context.registered_details.each_with_object({}) do |key, details_hash|
|
8
10
|
value = key == :locale ? [context.locale] : context.send(key)
|
@@ -15,7 +17,8 @@ module Rbexy
|
|
15
17
|
# template path, since we're using the Rails partial-rendering
|
16
18
|
# functionality but don't want our templates prefixed with a `_`
|
17
19
|
def args_for_lookup(name, prefixes, partial, keys, details_options)
|
18
|
-
|
20
|
+
partial = false if component_name_stack.include?(name)
|
21
|
+
super(name, prefixes, partial, keys, details_options)
|
19
22
|
end
|
20
23
|
end
|
21
24
|
|
@@ -64,14 +67,25 @@ module Rbexy
|
|
64
67
|
raise(ContextNotFound, "no parent context `#{name}`")
|
65
68
|
end
|
66
69
|
|
70
|
+
def view_renderer
|
71
|
+
view_context.view_renderer
|
72
|
+
end
|
73
|
+
|
74
|
+
def component_name
|
75
|
+
self.class.name.underscore
|
76
|
+
end
|
77
|
+
|
67
78
|
private
|
68
79
|
|
69
80
|
attr_reader :view_context, :content_block, :old_lookup_context
|
70
81
|
|
71
82
|
def replace_lookup_context
|
72
|
-
|
73
|
-
|
74
|
-
|
83
|
+
unless view_renderer.lookup_context.is_a? Rbexy::Component::LookupContext
|
84
|
+
@old_lookup_context = view_renderer.lookup_context
|
85
|
+
view_renderer.lookup_context = build_lookup_context(old_lookup_context)
|
86
|
+
end
|
87
|
+
|
88
|
+
(view_renderer.lookup_context.component_name_stack ||= []) << component_name
|
75
89
|
end
|
76
90
|
|
77
91
|
def restore_lookup_context
|
@@ -88,14 +102,6 @@ module Rbexy
|
|
88
102
|
LookupContext.new(paths, LookupContext.details_hash(existing_context))
|
89
103
|
end
|
90
104
|
|
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
105
|
def method_missing(meth, *args, &block)
|
100
106
|
if view_context.respond_to?(meth)
|
101
107
|
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/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.1
|
4
|
+
version: 0.2.1
|
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-17 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
|