showcase-rails 0.2.8 → 0.3.1
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 +16 -3
- data/app/assets/builds/showcase.css +9 -0
- data/app/models/showcase/preview.rb +18 -2
- data/app/models/showcase/sample.rb +14 -11
- data/app/views/showcase/engine/_sample.html.erb +2 -2
- data/app/views/showcase/engine/path/_path.html.erb +1 -1
- data/config/tailwind.config.js +1 -1
- data/lib/showcase/previews_test.rb +8 -8
- data/lib/showcase/version.rb +1 -1
- data/lib/showcase.rb +1 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1fcccbcd02f9ffc40e5c1555b816250dd78dace039662c5302ae4149f37a8fed
|
4
|
+
data.tar.gz: b4591324e7afa694e34bc412ae5d4442ecc5308d834b6874a29750e1b522a578
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4719a8283d75170d95c789469824aab301df3d822b0d2da6f89a3ecd60c1e0a660c4af275dfffcf1b4967a546799e7193ab1ebedd2c11715e240ac7f4c1fc28d
|
7
|
+
data.tar.gz: b5d74c620b87ca6860d4a7356196ce8f7dd25a0ac2d71caa37b1d9cd440cb6b8f79eea28384dde8cd955766c8d5468b7cc3c6e2f389d81cf4c09914e3089e87a
|
data/README.md
CHANGED
@@ -99,9 +99,10 @@ class ShowcaseTest < Showcase::PreviewsTest
|
|
99
99
|
assert_text "This is a combobox, for sure."
|
100
100
|
end
|
101
101
|
|
102
|
-
test showcase: "button"
|
103
|
-
|
104
|
-
|
102
|
+
test showcase: "button" do
|
103
|
+
assert_selector id: "basic" do
|
104
|
+
assert_button class: ["text-xs"]
|
105
|
+
end
|
105
106
|
end
|
106
107
|
|
107
108
|
test "some non-Showcase test" do
|
@@ -110,6 +111,18 @@ class ShowcaseTest < Showcase::PreviewsTest
|
|
110
111
|
end
|
111
112
|
```
|
112
113
|
|
114
|
+
## Linking to previews
|
115
|
+
|
116
|
+
Call `showcase.link_to` with the URL path to the other Showcase:
|
117
|
+
|
118
|
+
```erb
|
119
|
+
<%= showcase.link_to "stimulus_controllers/welcome" %>
|
120
|
+
<%= showcase.link_to "components/button", id: "extra-large" %> <%# Pass an id to link to a specific sample %>
|
121
|
+
|
122
|
+
<%# You can also pass just an id: to target a sample on the current showcase %>
|
123
|
+
<%= showcase.link_to id: "extra-large" %>
|
124
|
+
```
|
125
|
+
|
113
126
|
## Full Rails engine support
|
114
127
|
|
115
128
|
Any Rails engines in your app that ships previews in their `app/views/showcase/previews` directory will automatically be surfaced in your app. Here's an example from the [bullet_train-themes-light Rails engine](https://github.com/bullet-train-co/bullet_train-core/tree/main/bullet_train-themes-light/app/views/showcase/previews).
|
@@ -916,6 +916,10 @@ select {
|
|
916
916
|
padding-top: 1.75rem;
|
917
917
|
}
|
918
918
|
|
919
|
+
.sc-font-mono {
|
920
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
921
|
+
}
|
922
|
+
|
919
923
|
.sc-text-2xl {
|
920
924
|
font-size: 1.5rem;
|
921
925
|
line-height: 2rem;
|
@@ -931,6 +935,11 @@ select {
|
|
931
935
|
line-height: 1.5rem;
|
932
936
|
}
|
933
937
|
|
938
|
+
.sc-text-sm {
|
939
|
+
font-size: 0.875rem;
|
940
|
+
line-height: 1.25rem;
|
941
|
+
}
|
942
|
+
|
934
943
|
.sc-text-xl {
|
935
944
|
font-size: 1.25rem;
|
936
945
|
line-height: 1.75rem;
|
@@ -32,6 +32,22 @@ class Showcase::Preview
|
|
32
32
|
@badges.concat badges
|
33
33
|
end
|
34
34
|
|
35
|
+
# Allows linking out to other Showcases
|
36
|
+
#
|
37
|
+
# <%= showcase.link_to "components/button", id: "extra-large" %>
|
38
|
+
# # => <a href="components/button#extra-large"><showcase components/button#extra-large></a>
|
39
|
+
#
|
40
|
+
# Can link to other samples on the current showcase too:
|
41
|
+
#
|
42
|
+
# # If we're within app/views/showcase/previews/components/_button.html.erb
|
43
|
+
# <%= showcase.link_to id: "extra-large" %>
|
44
|
+
# # => <a href="components/button#extra-large"><showcase components/button#extra-large></a>
|
45
|
+
def link_to(preview_id = id, id: nil)
|
46
|
+
@view_context.link_to @view_context.preview_path(preview_id, anchor: id), class: "sc-font-mono sc-text-sm" do
|
47
|
+
"<showcase #{[preview_id, id].compact.join("#").squish}>"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
35
51
|
# Adds a named sample to demonstrate with the Showcase can do.
|
36
52
|
#
|
37
53
|
# By default, sample takes a block that'll automatically have its source extracted, like this:
|
@@ -66,7 +82,7 @@ class Showcase::Preview
|
|
66
82
|
# - the `sample.events` what JavaScript `events` to listen for on the element
|
67
83
|
# - any other custom options are available in `sample.details`.
|
68
84
|
def sample(name, **options, &block)
|
69
|
-
@samples << Showcase::Sample.new(@view_context, name, **options).tap { _1.
|
85
|
+
@samples << Showcase::Sample.new(@view_context, name, **options).tap { _1.evaluate(&block) }
|
70
86
|
end
|
71
87
|
|
72
88
|
# Yields an Options object to help define the configuration table for a Preview.
|
@@ -88,7 +104,7 @@ class Showcase::Preview
|
|
88
104
|
end
|
89
105
|
|
90
106
|
def render_associated_partial
|
91
|
-
@view_context.render "
|
107
|
+
@view_context.render "showcase/previews/#{id}", showcase: self
|
92
108
|
nil
|
93
109
|
end
|
94
110
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Showcase::Sample
|
2
2
|
attr_reader :name, :id, :events, :details
|
3
|
-
attr_reader :source, :instrumented
|
3
|
+
attr_reader :rendered, :source, :instrumented
|
4
4
|
|
5
5
|
def initialize(view_context, name, description: nil, id: name.parameterize, syntax: :erb, events: nil, **details)
|
6
6
|
@view_context = view_context
|
@@ -14,36 +14,39 @@ class Showcase::Sample
|
|
14
14
|
@description
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
17
|
+
def evaluate(&block)
|
18
18
|
if block.arity.zero?
|
19
|
-
|
20
|
-
extract(&block)
|
19
|
+
consume(&block)
|
21
20
|
else
|
22
21
|
@view_context.capture(self, &block)
|
23
22
|
end
|
24
23
|
end
|
25
24
|
|
26
|
-
def
|
27
|
-
|
25
|
+
def consume(&block)
|
26
|
+
render(&block)
|
27
|
+
extract_source(&block)
|
28
|
+
end
|
28
29
|
|
30
|
+
def render(&block)
|
29
31
|
# TODO: Remove `is_a?` check when Rails 6.1 support is dropped.
|
30
32
|
assigns = proc { @instrumented = _1 if _1.is_a?(ActiveSupport::Notifications::Event) }
|
31
33
|
ActiveSupport::Notifications.subscribed(assigns, "render_partial.action_view") do
|
32
|
-
@
|
34
|
+
@rendered = @view_context.capture(&block)
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
36
|
-
def
|
38
|
+
def extract_source(&block)
|
37
39
|
source = extract_source_block_via_matched_indentation_from(*block.source_location)
|
38
40
|
@source = @view_context.instance_exec(source, @syntax, &Showcase.sample_renderer)
|
39
41
|
end
|
40
42
|
|
41
43
|
private
|
42
44
|
|
43
|
-
def extract_source_block_via_matched_indentation_from(file,
|
44
|
-
|
45
|
+
def extract_source_block_via_matched_indentation_from(file, source_location_index)
|
46
|
+
# `Array`s are zero-indexed, but `source_location` indexes are not, hence `pred`.
|
47
|
+
starting_line, *lines = File.readlines(file).slice(source_location_index.pred..)
|
45
48
|
|
46
|
-
indentation =
|
49
|
+
indentation = starting_line.match(/^\s+/).to_s
|
47
50
|
matcher = /^#{indentation}\S/
|
48
51
|
|
49
52
|
index = lines.index { _1.match?(matcher) }
|
@@ -1,3 +1,3 @@
|
|
1
1
|
<article class="hover:sc-bg-indigo-50 dark:hover:sc-bg-neutral-700/50 <%= "sc-bg-indigo-50 dark:sc-bg-neutral-700/50" if path.id == params[:id] %>">
|
2
|
-
<%= link_to path.basename.titleize,
|
2
|
+
<%= link_to path.basename.titleize, preview_path(path.id), class: "sc-inline-block sc-py-2 sc-px-8 sc-w-full !sc-text-inherit !sc-no-underline" %>
|
3
3
|
</article>
|
data/config/tailwind.config.js
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
class Showcase::PreviewsTest < ActionView::TestCase
|
2
|
+
extensions = [ Showcase::EngineController._helpers, Showcase::Engine.routes.url_helpers ]
|
3
|
+
setup { view.extend *extensions }
|
4
|
+
|
2
5
|
def self.inherited(test_class)
|
3
6
|
super
|
4
7
|
test_class.prepare
|
5
8
|
end
|
6
9
|
|
7
10
|
def self.prepare
|
8
|
-
tests Showcase::EngineController._helpers
|
9
|
-
|
10
11
|
tree = Showcase::Path.tree
|
11
12
|
tree.flat_map(&:ordered_paths).each do |path|
|
12
13
|
test "Showcase: automatically renders showcase/previews/#{path.id}" do
|
@@ -20,17 +21,16 @@ class Showcase::PreviewsTest < ActionView::TestCase
|
|
20
21
|
end
|
21
22
|
end
|
22
23
|
|
23
|
-
def self.test(name = nil, showcase: nil,
|
24
|
-
|
25
|
-
|
26
|
-
when id && showcase.nil? then raise ArgumentError, "can't test a sample without a showcase"
|
24
|
+
def self.test(name = nil, showcase: nil, &block)
|
25
|
+
if name
|
26
|
+
super(name, &block)
|
27
27
|
else
|
28
|
-
super "Showcase: showcase/previews/#{showcase}
|
28
|
+
super "Showcase: showcase/previews/#{showcase}" do
|
29
29
|
path = Showcase::Path.new(showcase)
|
30
30
|
render "showcase/engine/preview", preview: path.preview_for(view)
|
31
31
|
|
32
32
|
assert_showcase_preview(path.id)
|
33
|
-
|
33
|
+
instance_eval(&block)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
data/lib/showcase/version.rb
CHANGED
data/lib/showcase.rb
CHANGED
@@ -24,12 +24,9 @@ module Showcase
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
singleton_class.attr_reader :previews_path
|
28
|
-
@previews_path = "showcase/previews"
|
29
|
-
|
30
27
|
def self.previews
|
31
28
|
Showcase::EngineController.view_paths.map(&:path).flat_map do |root|
|
32
|
-
Dir.glob("**/*.*", base: File.join(root,
|
29
|
+
Dir.glob("**/*.*", base: File.join(root, "showcase/previews"))
|
33
30
|
end.uniq
|
34
31
|
end
|
35
32
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: showcase-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Pence
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-03-
|
12
|
+
date: 2023-03-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|