lookbook 2.0.0.beta.2 → 2.0.0.beta.4
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/app/assets/lookbook/css/fonts.css +33 -0
- data/app/assets/lookbook/css/lookbook.css +7 -0
- data/app/assets/lookbook/css/themes/blue.css +4 -1
- data/app/assets/lookbook/css/themes/green.css +4 -1
- data/app/assets/lookbook/css/themes/indigo.css +4 -1
- data/app/assets/lookbook/css/themes/rose.css +4 -1
- data/app/assets/lookbook/css/themes/zinc.css +4 -1
- data/app/assets/lookbook/fonts/Inter-italic.var.woff2 +0 -0
- data/app/assets/lookbook/fonts/Inter-roman.var.woff2 +0 -0
- data/app/assets/lookbook/fonts/SourceCodeVariable-Italic.ttf.woff2 +0 -0
- data/app/assets/lookbook/fonts/SourceCodeVariable-Roman.ttf.woff2 +0 -0
- data/app/assets/lookbook/img/lucide-sprite.svg +869 -869
- data/app/assets/lookbook/js/lib/lookbook.js +12 -2
- data/app/components/lookbook/code/highlight_github.css +16 -17
- data/app/components/lookbook/dimensions_display/component.js +4 -7
- data/app/components/lookbook/file_source/component.html.erb +9 -0
- data/app/components/lookbook/file_source/component.rb +73 -0
- data/app/components/lookbook/header/component.html.erb +11 -8
- data/app/components/lookbook/icon/component.css +1 -1
- data/app/components/lookbook/icon/component.html.erb +1 -1
- data/app/components/lookbook/icon/component.rb +4 -1
- data/app/components/lookbook/logo/component.html.erb +6 -0
- data/app/components/lookbook/logo/component.rb +15 -0
- data/app/components/lookbook/message/component.css +33 -0
- data/app/components/lookbook/message/component.html.erb +26 -0
- data/app/components/lookbook/message/component.rb +13 -0
- data/app/components/lookbook/nav/entity/component.html.erb +2 -2
- data/app/components/lookbook/nav/entity/component.rb +1 -1
- data/app/components/lookbook/page_tabs/component.html.erb +2 -2
- data/app/components/lookbook/params/field/component.css +3 -3
- data/app/components/lookbook/prose/component.css +8 -1
- data/app/components/lookbook/prose/component.html.erb +6 -1
- data/app/components/lookbook/prose/component.rb +2 -2
- data/app/controllers/concerns/lookbook/targetable_concern.rb +2 -16
- data/app/controllers/lookbook/application_controller.rb +38 -14
- data/app/controllers/lookbook/embeds_controller.rb +3 -4
- data/app/controllers/lookbook/inspector_controller.rb +4 -12
- data/app/controllers/lookbook/pages_controller.rb +15 -27
- data/app/controllers/lookbook/preview_controller.rb +30 -2
- data/app/controllers/lookbook/previews_controller.rb +13 -15
- data/app/views/layouts/lookbook/application.html.erb +1 -0
- data/app/views/layouts/lookbook/skeleton.html.erb +2 -2
- data/app/views/lookbook/errors/default.html.erb +40 -0
- data/app/views/lookbook/errors/not_found.html.erb +10 -0
- data/app/views/lookbook/index.html.erb +29 -24
- data/app/views/lookbook/pages/show.html.erb +9 -8
- data/app/views/lookbook/partials/_blank_slate.html.erb +7 -0
- data/config/app.yml +8 -0
- data/config/routes.rb +2 -0
- data/lib/lookbook/engine.rb +12 -5
- data/lib/lookbook/entities/concerns/annotatable_entity.rb +26 -1
- data/lib/lookbook/entities/concerns/inspectable_entity.rb +17 -2
- data/lib/lookbook/entities/concerns/locatable_entity.rb +51 -7
- data/lib/lookbook/entities/concerns/navigable_entity.rb +14 -1
- data/lib/lookbook/entities/entity.rb +34 -12
- data/lib/lookbook/entities/page_entity.rb +68 -10
- data/lib/lookbook/entities/page_section_entity.rb +4 -0
- data/lib/lookbook/entities/preview_entity.rb +107 -17
- data/lib/lookbook/entities/renderable_entity.rb +47 -9
- data/lib/lookbook/entities/rendered_scenario_entity.rb +17 -6
- data/lib/lookbook/entities/scenario_entity.rb +77 -16
- data/lib/lookbook/entities/scenario_group_entity.rb +82 -9
- data/lib/lookbook/helpers/page_helper.rb +26 -1
- data/lib/lookbook/helpers/ui_elements_helper.rb +0 -24
- data/lib/lookbook/param.rb +1 -1
- data/lib/lookbook/services/markdown_renderer.rb +2 -4
- data/lib/lookbook/stores/config_store.rb +0 -12
- data/lib/lookbook/support/errors/config_error.rb +1 -1
- data/lib/lookbook/support/errors/error.rb +64 -0
- data/lib/lookbook/support/errors/parser_error.rb +1 -1
- data/lib/lookbook/support/errors/preview_template_error.rb +1 -1
- data/lib/lookbook/support/errors/routing_error.rb +7 -0
- data/lib/lookbook/support/errors/template_error.rb +7 -0
- data/lib/lookbook/version.rb +1 -1
- data/public/lookbook-assets/Inter-italic.var.69eb0fe1.woff2 +0 -0
- data/public/lookbook-assets/Inter-italic.var.736a7044.woff2 +0 -0
- data/public/lookbook-assets/Inter-roman.var.b695afbe.woff2 +0 -0
- data/public/lookbook-assets/Inter-roman.var.fbdd51d0.woff2 +0 -0
- data/public/lookbook-assets/SourceCodeVariable-Italic.cad97b83.otf +0 -0
- data/public/lookbook-assets/SourceCodeVariable-Italic.ttf.09b4354a.woff2 +0 -0
- data/public/lookbook-assets/SourceCodeVariable-Italic.ttf.fcd7e9f4.woff2 +0 -0
- data/public/lookbook-assets/SourceCodeVariable-Roman.185ddb17.otf +0 -0
- data/public/lookbook-assets/SourceCodeVariable-Roman.ttf.118e9f22.woff2 +0 -0
- data/public/lookbook-assets/SourceCodeVariable-Roman.ttf.91043609.woff2 +0 -0
- data/public/lookbook-assets/css/lookbook.css +417 -58
- data/public/lookbook-assets/css/lookbook.css.map +1 -1
- data/public/lookbook-assets/css/themes/blue.css +4 -1
- data/public/lookbook-assets/css/themes/blue.css.map +1 -1
- data/public/lookbook-assets/css/themes/green.css +4 -1
- data/public/lookbook-assets/css/themes/green.css.map +1 -1
- data/public/lookbook-assets/css/themes/indigo.css +4 -1
- data/public/lookbook-assets/css/themes/indigo.css.map +1 -1
- data/public/lookbook-assets/css/themes/rose.css +4 -1
- data/public/lookbook-assets/css/themes/rose.css.map +1 -1
- data/public/lookbook-assets/css/themes/zinc.css +4 -1
- data/public/lookbook-assets/css/themes/zinc.css.map +1 -1
- data/public/lookbook-assets/img/lucide-sprite.svg +869 -869
- data/public/lookbook-assets/js/index.js +173 -173
- data/public/lookbook-assets/js/index.js.map +1 -1
- data/public/lookbook-assets/js/lookbook-core.js +4 -2
- data/public/lookbook-assets/js/lookbook.js +4 -2
- metadata +31 -26
- data/app/views/layouts/lookbook/shell.html.erb +0 -25
- data/app/views/lookbook/404.html.erb +0 -15
- data/app/views/lookbook/error.html.erb +0 -46
- data/lib/lookbook/error.rb +0 -120
- data/lib/lookbook/support/errors/lookbook_error.rb +0 -21
- data/lib/tasks/lookbook_tasks.rake +0 -10
- data/public/lookbook-assets/css/app.css +0 -2341
- data/public/lookbook-assets/css/app.css.map +0 -11
- data/public/lookbook-assets/css/themes/zinc.css.map.91837.5 +0 -1
- data/public/lookbook-assets/feather-sprite.svg +0 -1
- data/public/lookbook-assets/js/app.js +0 -10862
- data/public/lookbook-assets/js/app.js.map +0 -2571
- data/public/lookbook-assets/js/embed.js +0 -1427
- data/public/lookbook-assets/js/embed.js.91837.6 +0 -0
- data/public/lookbook-assets/js/embed.js.map +0 -1
- data/public/lookbook-assets/js/lookbook-core.js.map +0 -1
- data/public/lookbook-assets/js/lookbook.js.map +0 -1
- data/public/lookbook-assets/lookbook-esm.js +0 -1427
- data/public/lookbook-assets/lookbook-esm.js.map +0 -1
- data/public/lookbook-assets/lookbook-global.js +0 -1427
- data/public/lookbook-assets/lookbook-global.js.map +0 -1
- data/public/lookbook-assets/lookbook.js +0 -1427
- data/public/lookbook-assets/lookbook.js.map +0 -1
@@ -1,7 +1,6 @@
|
|
1
1
|
module Lookbook
|
2
2
|
# Represents a preview scenario method within a preview class
|
3
3
|
#
|
4
|
-
# @ignore methods
|
5
4
|
# @api public
|
6
5
|
class ScenarioEntity < Entity
|
7
6
|
include InspectableEntity
|
@@ -10,8 +9,15 @@ module Lookbook
|
|
10
9
|
|
11
10
|
delegate :group, to: :code_object
|
12
11
|
|
12
|
+
# The preview that this scenario belongs to.
|
13
|
+
#
|
14
|
+
# @return [PreviewEntity] The parent preview entity
|
13
15
|
attr_reader :preview
|
14
16
|
|
17
|
+
# @api private
|
18
|
+
alias_method :parent, :preview
|
19
|
+
|
20
|
+
# @api private
|
15
21
|
def initialize(code_object, preview, priority: nil)
|
16
22
|
@code_object = code_object
|
17
23
|
@preview = preview
|
@@ -19,61 +25,116 @@ module Lookbook
|
|
19
25
|
@lookup_path = "#{parent.lookup_path}/#{name}"
|
20
26
|
end
|
21
27
|
|
28
|
+
# @!group Identity
|
29
|
+
|
30
|
+
# Human-readable unique scenario ID
|
31
|
+
#
|
32
|
+
# @return [String] The ID
|
22
33
|
def id
|
23
34
|
@_id ||= Utils.id(fetch_config(:id) { "#{parent.id}-#{code_object.name}" })
|
24
35
|
end
|
25
36
|
|
37
|
+
# Parameter-safe scenario name.
|
38
|
+
#
|
39
|
+
# @return [String] The name
|
26
40
|
def name
|
27
41
|
@_name ||= Utils.name(code_object.name)
|
28
42
|
end
|
29
43
|
|
44
|
+
# Entity type identifier.
|
45
|
+
# Returns `:scenario` for scenarios.
|
46
|
+
#
|
47
|
+
# @return [Symbol] The entity type
|
48
|
+
def type
|
49
|
+
:scenario
|
50
|
+
end
|
51
|
+
|
52
|
+
# @!endgroup
|
53
|
+
|
54
|
+
# @!group Display options
|
55
|
+
|
56
|
+
# Display options hash.
|
57
|
+
#
|
58
|
+
# Contains all display options defined via the `@display` tag
|
59
|
+
# merged with any globally-defined options.
|
60
|
+
#
|
61
|
+
# @return [Hash] The resolved display options
|
30
62
|
def display_options
|
31
63
|
parent.display_options.merge(fetch_config(:display_options, {}))
|
32
64
|
end
|
33
65
|
|
66
|
+
# @!endgroup
|
67
|
+
|
68
|
+
# @!group Render Targets
|
69
|
+
|
70
|
+
# @api private
|
34
71
|
def render_targets
|
35
72
|
@_render_targets ||= RenderTargetCollection.new(load_render_targets)
|
36
73
|
end
|
37
74
|
|
75
|
+
# @api private
|
76
|
+
alias_method :components, :render_targets
|
77
|
+
|
78
|
+
# The item (component or partial) that the scenario renders.
|
79
|
+
#
|
80
|
+
# The render target is guessed where possible (based on the preview class name)
|
81
|
+
# but can also be manually specified using the `@renders` tag.
|
82
|
+
#
|
83
|
+
# @example :ruby
|
84
|
+
# "This scenario renders: #{scenario.render_target.label}"
|
85
|
+
#
|
86
|
+
# @return [RenderableEntity] The render target
|
38
87
|
def render_target
|
39
88
|
render_targets.first
|
40
89
|
end
|
41
90
|
|
91
|
+
alias_method :component, :render_target
|
92
|
+
|
93
|
+
# @!endgroup
|
94
|
+
|
95
|
+
# @!group URLs
|
96
|
+
|
97
|
+
# The inspector URL path for this preview
|
98
|
+
#
|
99
|
+
# @return [String] URL path
|
100
|
+
def inspect_path
|
101
|
+
lookbook_inspect_path(lookup_path)
|
102
|
+
end
|
103
|
+
|
104
|
+
# The standalone preview URL path for this preview
|
105
|
+
#
|
106
|
+
# @return [String] URL path
|
107
|
+
def preview_path
|
108
|
+
lookbook_preview_path(lookup_path)
|
109
|
+
end
|
110
|
+
|
111
|
+
# @!endgroup
|
112
|
+
|
113
|
+
# @api private
|
42
114
|
def scenarios
|
43
115
|
[self]
|
44
116
|
end
|
45
117
|
|
118
|
+
# @api private
|
46
119
|
def template_source(template_path)
|
47
120
|
source_path = template_file_path(template_path)
|
48
121
|
source_path ? File.read(source_path) : nil
|
49
122
|
end
|
50
123
|
|
124
|
+
# @api private
|
51
125
|
def template_lang(template_path)
|
52
126
|
path = template_file_path(template_path)
|
53
127
|
Lookbook::Lang.guess(path) || Lookbook::Lang.find(:html)
|
54
128
|
end
|
55
129
|
|
130
|
+
# @api private
|
56
131
|
def search_terms
|
57
132
|
[parent.label, label]
|
58
133
|
end
|
59
134
|
|
60
|
-
def url_path
|
61
|
-
lookbook_inspect_path(lookup_path)
|
62
|
-
end
|
63
|
-
|
64
|
-
def preview_path
|
65
|
-
lookbook_preview_path(lookup_path)
|
66
|
-
end
|
67
|
-
|
68
|
-
def type
|
69
|
-
:scenario
|
70
|
-
end
|
71
|
-
|
72
|
-
alias_method :parent, :preview
|
73
|
-
alias_method :components, :render_targets
|
74
|
-
alias_method :component, :render_target
|
75
135
|
alias_method :lang, :source_lang
|
76
136
|
alias_method :examples, :scenarios
|
137
|
+
alias_method :url_path, :inspect_path
|
77
138
|
|
78
139
|
deprecate lang: :source_lang, deprecator: Deprecation
|
79
140
|
deprecate examples: :scenarios, deprecator: Deprecation
|
@@ -1,13 +1,28 @@
|
|
1
1
|
module Lookbook
|
2
2
|
# Represents a group of preview scenarios within a preview class
|
3
3
|
#
|
4
|
-
# @ignore methods
|
5
4
|
# @api public
|
6
5
|
class ScenarioGroupEntity < Entity
|
7
6
|
include NavigableEntity
|
8
7
|
|
9
|
-
|
8
|
+
# @!group Scenarios
|
10
9
|
|
10
|
+
# Returns all scenarios within the group.
|
11
|
+
#
|
12
|
+
# @return [Array<ScenarioEntity>] All scenarios
|
13
|
+
attr_reader :scenarios
|
14
|
+
|
15
|
+
# @!endgroup
|
16
|
+
|
17
|
+
# The preview that this scenario belongs to.
|
18
|
+
#
|
19
|
+
# @return [PreviewEntity] The parent preview entity
|
20
|
+
attr_reader :preview
|
21
|
+
|
22
|
+
# @api private
|
23
|
+
alias_method :parent, :preview
|
24
|
+
|
25
|
+
# @api private
|
11
26
|
def initialize(name, scenarios, preview)
|
12
27
|
@name = Utils.name(name)
|
13
28
|
@scenarios = ScenarioCollection.new(scenarios)
|
@@ -15,6 +30,14 @@ module Lookbook
|
|
15
30
|
@lookup_path = "#{parent.lookup_path}/#{@name}"
|
16
31
|
end
|
17
32
|
|
33
|
+
# @!group Display options
|
34
|
+
|
35
|
+
# Display options hash.
|
36
|
+
#
|
37
|
+
# Contains all display options defined via the `@display` tag
|
38
|
+
# for each scenario in the group, merged with any globally-defined options.
|
39
|
+
#
|
40
|
+
# @return [Hash] The resolved display options
|
18
41
|
def display_options
|
19
42
|
merged = {}
|
20
43
|
scenarios.to_a.reverse.map do |scenario|
|
@@ -23,35 +46,85 @@ module Lookbook
|
|
23
46
|
merged
|
24
47
|
end
|
25
48
|
|
49
|
+
# @!endgroup
|
50
|
+
|
51
|
+
# @!group Render Targets
|
52
|
+
|
53
|
+
# Collection of render targets (components or partials)
|
54
|
+
# from each of the scenarios in the group.
|
55
|
+
#
|
56
|
+
# Render targets are guessed where possible (based on the preview class name)
|
57
|
+
# but can also be manually specified using the `@renders` tag.
|
58
|
+
#
|
59
|
+
# @example :ruby
|
60
|
+
# "This group renders: #{group.render_targets.map(&:label).join(", ")}"
|
61
|
+
#
|
62
|
+
# @return [Array<RenderableEntity>] Render target entities
|
26
63
|
def render_targets
|
27
64
|
@_render_targets ||= RenderTargetCollection.new(scenarios.flat_map(&:render_targets).uniq(&:lookup_path))
|
28
65
|
end
|
29
66
|
|
30
|
-
|
31
|
-
|
32
|
-
|
67
|
+
alias_method :components, :render_targets
|
68
|
+
|
69
|
+
# @!endgroup
|
33
70
|
|
71
|
+
# @!group Annotations
|
72
|
+
|
73
|
+
# Collection of tags from each of the scenarios in the group.
|
74
|
+
# Can be filtered by tag name by providing the name as an argument.
|
75
|
+
#
|
76
|
+
# @example :ruby
|
77
|
+
# all_tags = group.tags
|
78
|
+
# display_tags = group.tags(:display)
|
79
|
+
#
|
80
|
+
# @param tag_name [Symbol] Optional tag type to filter by
|
81
|
+
# @return [Array<YardTag>] Array of tags
|
34
82
|
def tags(tag_name = nil)
|
35
83
|
scenarios.flat_map { |scenario| scenario.tags(tag_name) }
|
36
84
|
end
|
37
85
|
|
86
|
+
# @api private
|
38
87
|
def tag(tag_name = nil)
|
39
88
|
tags(tag_name).first
|
40
89
|
end
|
41
90
|
|
42
|
-
|
91
|
+
# @!endgroup
|
92
|
+
|
93
|
+
# @!group URLs
|
94
|
+
|
95
|
+
# The inspector URL path for this scenario group
|
96
|
+
#
|
97
|
+
# @return [String] URL path
|
98
|
+
def inspect_path
|
43
99
|
lookbook_inspect_path(lookup_path)
|
44
100
|
end
|
45
101
|
|
102
|
+
# The standalone preview URL path for this scenario group
|
103
|
+
#
|
104
|
+
# @return [String] URL path
|
46
105
|
def preview_path
|
47
106
|
lookbook_preview_path(lookup_path)
|
48
107
|
end
|
49
108
|
|
109
|
+
alias_method :url_path, :inspect_path
|
110
|
+
|
111
|
+
# @!endgroup
|
112
|
+
|
113
|
+
# @!group Identity
|
114
|
+
|
115
|
+
# Entity type identifier.
|
116
|
+
# Returns `:scenario_group` for scenario groups.
|
117
|
+
#
|
118
|
+
# @return [Symbol] The entity type
|
50
119
|
def type
|
51
|
-
:
|
120
|
+
:scenario_group
|
52
121
|
end
|
53
122
|
|
54
|
-
|
55
|
-
|
123
|
+
# @!endgroup
|
124
|
+
|
125
|
+
# @api private
|
126
|
+
def search_terms
|
127
|
+
[parent.label, label]
|
128
|
+
end
|
56
129
|
end
|
57
130
|
end
|
@@ -5,14 +5,39 @@ module Lookbook
|
|
5
5
|
module PageHelper
|
6
6
|
# Returns the URL path to a page.
|
7
7
|
#
|
8
|
+
# @api private
|
8
9
|
# @param id [String, PageEntity] The id or PageEntity instance to generate a URL path for
|
9
10
|
def page_path(id)
|
10
11
|
page = id.is_a?(PageEntity) ? id : Engine.pages.find_by_id(id)
|
11
12
|
if page.present?
|
12
|
-
|
13
|
+
page.docs_path
|
13
14
|
else
|
14
15
|
Lookbook.logger.warn "Could not find page with id ':#{id}'"
|
15
16
|
end
|
16
17
|
end
|
18
|
+
|
19
|
+
# Render a 'live' embed of a component preview.
|
20
|
+
#
|
21
|
+
# If no scenario name is provided then the default (first) preview
|
22
|
+
# scenario will be rendered in the embed.
|
23
|
+
#
|
24
|
+
# @param preview [String] Name of the preview class to embed
|
25
|
+
# @param scenario [String] Example method name
|
26
|
+
# @param opts [Hash] Options hash
|
27
|
+
def embed(preview, scenario = nil, **opts)
|
28
|
+
preview_entity = if preview.is_a?(Symbol)
|
29
|
+
Engine.previews.find_by_path(preview)
|
30
|
+
else
|
31
|
+
Engine.previews.find_by_preview_class(preview)
|
32
|
+
end
|
33
|
+
scenario_entity = scenario ? preview_entity&.scenario(scenario) : preview_entity&.default_scenario
|
34
|
+
opts[:actions] ||= ["inspect", "open"]
|
35
|
+
|
36
|
+
lookbook_render Embed::Component.new(
|
37
|
+
scenario: scenario_entity,
|
38
|
+
params: opts.fetch(:params, {}),
|
39
|
+
options: opts.except(:params)
|
40
|
+
)
|
41
|
+
end
|
17
42
|
end
|
18
43
|
end
|
@@ -34,30 +34,6 @@ module Lookbook
|
|
34
34
|
lookbook_render :code, **opts, &block
|
35
35
|
end
|
36
36
|
|
37
|
-
# Render a 'live' embed of a component preview.
|
38
|
-
#
|
39
|
-
# If no scenario name is provided then the default (first) preview
|
40
|
-
# scenario will be rendered in the embed.
|
41
|
-
#
|
42
|
-
# @param preview [String] Name of the preview class to embed
|
43
|
-
# @param scenario [String] Example method name
|
44
|
-
# @param opts [Hash] Options hash
|
45
|
-
def embed(preview, scenario = nil, **opts)
|
46
|
-
preview_entity = if preview.is_a?(Symbol)
|
47
|
-
Engine.previews.find_by_path(preview)
|
48
|
-
else
|
49
|
-
Engine.previews.find_by_preview_class(preview)
|
50
|
-
end
|
51
|
-
scenario_entity = scenario ? preview_entity&.scenario(scenario) : preview_entity&.default_scenario
|
52
|
-
opts[:actions] ||= ["inspect", "open"]
|
53
|
-
|
54
|
-
lookbook_render Embed::Component.new(
|
55
|
-
scenario: scenario_entity,
|
56
|
-
params: opts.fetch(:params, {}),
|
57
|
-
options: opts.except(:params)
|
58
|
-
)
|
59
|
-
end
|
60
|
-
|
61
37
|
# @api private
|
62
38
|
def prose(**opts, &block)
|
63
39
|
lookbook_render :prose, **opts, &block
|
data/lib/lookbook/param.rb
CHANGED
@@ -65,7 +65,7 @@ module Lookbook
|
|
65
65
|
|
66
66
|
def input_config
|
67
67
|
config = Lookbook::Engine.inputs.get_input(input)
|
68
|
-
config || raise(
|
68
|
+
config || raise(Lookbook::Error.new("Unknown input type '#{input}'"))
|
69
69
|
end
|
70
70
|
|
71
71
|
def guess_input
|
@@ -18,11 +18,9 @@ module Lookbook
|
|
18
18
|
class LookbookMarkdownRenderer < Redcarpet::Render::HTML
|
19
19
|
def block_code(code, language = "ruby")
|
20
20
|
line_numbers = language.to_s.end_with? "-numbered"
|
21
|
-
ApplicationController.render(Lookbook::Code::Component.new(
|
22
|
-
source: code,
|
21
|
+
ApplicationController.render(Lookbook::Code::Component.new(source: code,
|
23
22
|
language: language.to_s.chomp("-numbered"),
|
24
|
-
line_numbers: line_numbers
|
25
|
-
}), layout: nil)
|
23
|
+
line_numbers: line_numbers), layout: nil)
|
26
24
|
end
|
27
25
|
|
28
26
|
def postprocess(full_document)
|
@@ -27,22 +27,10 @@ module Lookbook
|
|
27
27
|
store[:project_name] = (name == false) ? nil : name
|
28
28
|
end
|
29
29
|
|
30
|
-
def page_paths=(paths = nil)
|
31
|
-
store[:page_paths].push(*paths.to_a)
|
32
|
-
end
|
33
|
-
|
34
30
|
def page_extensions=(extensions = nil)
|
35
31
|
store[:page_extensions].push(*extensions.to_a).uniq!
|
36
32
|
end
|
37
33
|
|
38
|
-
def preview_paths=(paths = nil)
|
39
|
-
store[:preview_paths].push(*paths.to_a)
|
40
|
-
end
|
41
|
-
|
42
|
-
def component_paths=(paths = nil)
|
43
|
-
store[:component_paths].push(*paths.to_a)
|
44
|
-
end
|
45
|
-
|
46
34
|
def listen_extensions=(extensions = nil)
|
47
35
|
store[:listen_extensions].push(*extensions.to_a).uniq!
|
48
36
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Lookbook
|
2
|
+
class Error < StandardError
|
3
|
+
attr_reader :scope, :original, :status, :detail, :source
|
4
|
+
|
5
|
+
def initialize(message = nil,
|
6
|
+
scope: nil, original: nil, status: nil, detail: nil,
|
7
|
+
file_path: nil, source: nil, line_number: nil, **kwargs)
|
8
|
+
@scope = scope
|
9
|
+
@original = original
|
10
|
+
@message = message
|
11
|
+
@status = status
|
12
|
+
@detail = detail
|
13
|
+
@file_path = file_path
|
14
|
+
@source = source
|
15
|
+
@line_number = line_number
|
16
|
+
super(message)
|
17
|
+
end
|
18
|
+
|
19
|
+
def message
|
20
|
+
@message || original&.message
|
21
|
+
end
|
22
|
+
|
23
|
+
def backtrace
|
24
|
+
original&.backtrace || super
|
25
|
+
end
|
26
|
+
|
27
|
+
def type
|
28
|
+
(original.presence || self).class.to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
def file_path
|
32
|
+
return @file_path.to_s if @file_path.present?
|
33
|
+
|
34
|
+
parsed_backtrace[0][0] if parsed_backtrace.any?
|
35
|
+
end
|
36
|
+
|
37
|
+
def relative_file_path
|
38
|
+
file_path&.delete_prefix("#{Rails.root}/")
|
39
|
+
end
|
40
|
+
|
41
|
+
def line_number
|
42
|
+
return @line_number.to_i if @line_number.present?
|
43
|
+
|
44
|
+
if parsed_backtrace.any?
|
45
|
+
number = parsed_backtrace[0][1]
|
46
|
+
number.to_i if number.present?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def backtrace_lines
|
51
|
+
root = Rails.root.to_s
|
52
|
+
backtrace.map { |line| line.gsub(root, "") }
|
53
|
+
end
|
54
|
+
|
55
|
+
protected
|
56
|
+
|
57
|
+
def parsed_backtrace
|
58
|
+
backtrace.map do |line|
|
59
|
+
line =~ /^(.+?):(\d+)(|:in `(.+)')$/
|
60
|
+
[$1, $2, $4]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/lookbook/version.rb
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|