Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## main

* Generate preview at overridden path if one exists when using `--preview` flag.

*Nishiki Liu*

## 2.26.1

* Fix bug that raises when trying to use a collection before the component has been compiled.
Expand Down
5 changes: 5 additions & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -1248,3 +1248,8 @@ ViewComponent is built by:
|:---:|:---:|:---:|:---:|:---:|
|@mixergtz|@jules2689|@g13ydson|@swanson|@bobmaerten|
|Medellin, Colombia|Toronto, Canada|João Pessoa, Brazil|Indianapolis, IN|Valenciennes, France|

|<img src="https://avatars.githubusercontent.com/nshki?s=256" alt="nshki" width="128" />|
|:---:|
|@nshki|
|Los Angeles, CA|
6 changes: 5 additions & 1 deletion lib/rails/generators/preview/component_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@ class ComponentGenerator < ::Rails::Generators::NamedBase
check_class_collision suffix: "ComponentPreview"

def create_preview_file
template "component_preview.rb", File.join("test/components/previews", class_path, "#{file_name}_component_preview.rb")
preview_paths = Rails.application.config.view_component.preview_paths
return if preview_paths.count > 1

path_prefix = preview_paths.one? ? preview_paths.first : "test/components/previews"
template "component_preview.rb", File.join(path_prefix, class_path, "#{file_name}_component_preview.rb")
end

private
Expand Down
41 changes: 33 additions & 8 deletions test/generators/component_generator_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,34 @@ def test_component_tests
end

def test_component_preview
run_generator %w[user --preview]
with_preview_paths([]) do
run_generator %w[user --preview]

assert_file "test/components/previews/user_component_preview.rb" do |component|
assert_match(/class UserComponentPreview < /, component)
assert_match(/render\(UserComponent.new\)/, component)
assert_file "test/components/previews/user_component_preview.rb" do |component|
assert_match(/class UserComponentPreview < /, component)
assert_match(/render\(UserComponent.new\)/, component)
end
end
end

def test_component_preview_with_one_overridden_preview_path
with_preview_paths(%w[spec/components/previews]) do
run_generator %w[user --preview]

assert_file "spec/components/previews/user_component_preview.rb" do |component|
assert_match(/class UserComponentPreview < /, component)
assert_match(/render\(UserComponent.new\)/, component)
end
end
end

def test_component_preview_with_two_overridden_preview_paths
with_preview_paths(%w[spec/components/previews some/other/directory]) do
run_generator %w[user --preview]

assert_no_file "test/components/previews/user_component_preview.rb"
assert_no_file "spec/components/previews/user_component_preview.rb"
assert_no_file "some/other/directory/user_component_preview.rb"
end
end

Expand Down Expand Up @@ -76,11 +99,13 @@ def test_component_tests_with_namespace
end

def test_component_preview_with_namespace
run_generator %w[admins/user --preview]
with_preview_paths([]) do
run_generator %w[admins/user --preview]

assert_file "test/components/previews/admins/user_component_preview.rb" do |component|
assert_match(/class Admins::UserComponentPreview < /, component)
assert_match(/render\(Admins::UserComponent.new\)/, component)
assert_file "test/components/previews/admins/user_component_preview.rb" do |component|
assert_match(/class Admins::UserComponentPreview < /, component)
assert_match(/render\(Admins::UserComponent.new\)/, component)
end
end
end

Expand Down
12 changes: 12 additions & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,18 @@
require File.expand_path("../config/environment.rb", __FILE__)
require "rails/test_help"

# Sets custom preview paths in tests.
#
# @param new_value [Array<String>] List of preview paths
# @yield Test code to run
# @return [void]
def with_preview_paths(new_value)
old_value = Rails.application.config.view_component.preview_paths
Rails.application.config.view_component.preview_paths = new_value
yield
Rails.application.config.view_component.preview_paths = old_value
end

def with_preview_route(new_value)
old_value = Rails.application.config.view_component.preview_route
Rails.application.config.view_component.preview_route = new_value
Expand Down