view_component-contrib 0.1.0 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1df61bb2350983380af49ecddc12cb3e6e5f90b5b05bdc66466a40064c435508
4
- data.tar.gz: 7b03a2c077b2c54cd16deb8720c3d878aa1a0a2d7e1240566aaa4c42fe4e616d
3
+ metadata.gz: 1f439e065cd49e9a08753fbcdfda2fbccc3b96f2a72f5d0ccb6896cd3da7b74e
4
+ data.tar.gz: 211ea998a9033327fdf57cc6094dcea1a269bb9022f539b2f182aece95fd6eb1
5
5
  SHA512:
6
- metadata.gz: 7ad12d739fad8a74bed8d299212ad41667021cd535f98bbd2a86055808a0f321b8a5919f11ca214f5bb4fc6cbff8199f19a1026d147eea92f2173986aaebcaaa
7
- data.tar.gz: 01724fd258b05e894635ca0a438e45a0369160dc74645f7cd675eeae8eba0157f09f56e000951b0b2b7d3829582ff27950e8219f017a14b1f14252fbfdaadf39
6
+ metadata.gz: 8bfa8779d3a7cc39519f92e9d020c325bf0f4f6d8e845dc3de21d1aef129959ebad4a68249b2229d3e49edf19096c73107fff6ffbccee43b8408db217fedf91e
7
+ data.tar.gz: 3add0d31953c16acc07a58637be8f6d5acd4dc7505a7466a635924c5afdddd23b0f6ffbded2e03e3c4195df45c04ba54f0822e58d72413b0aacd4a998469511e
data/CHANGELOG.md CHANGED
@@ -2,8 +2,26 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 0.1.2 (2023-01-13)
6
+
7
+ - Fix compatibility with sidecar translations. ([@palkan][])
8
+
9
+ - Detect Webpack when using Rails 7 + jsbundling-rails. ([@unikitty37][])
10
+
11
+ - Skip autoloading of Preview files when viewing previews is disabled. ([@dhnaranjo][])
12
+
13
+ - Automatic publish to RailsBytes in CI. ([@fargelus][])
14
+
15
+ ## 0.1.1 (2022-03-14)
16
+
17
+ - Fix adding gem's previews to the app's path. ([@palkan][])
18
+
19
+ - Fix configurable default template.
20
+
5
21
  ## 0.1.0 (2021-04-07)
6
22
 
7
23
  - Initial release.
8
24
 
9
25
  [@palkan]: https://github.com/palkan
26
+ [@fargelus]: https://github.com/fargelus
27
+ [@dhnaranjo]: https://github.com/dhnaranjo
data/README.md CHANGED
@@ -98,12 +98,25 @@ We provide a `ViewComponentContrib::Preview` class, which helps to reduce the bo
98
98
 
99
99
  The default template shipped with the gem is as follows:
100
100
 
101
- ```html
101
+ ```erb
102
102
  <div class="<%= container_class %>">
103
- <%= render component %>
103
+ <%- if component -%>
104
+ <%= render component %>
105
+ <%- else -%>
106
+ Failed to infer a component from the preview: <%= error %>
107
+ <%- end -%>
104
108
  </div>
105
109
  ```
106
110
 
111
+ To define your own default template:
112
+ ```ruby
113
+ class ApplicationViewComponentPreview < ViewComponentContrib::Preview::Base
114
+ # ...
115
+ self.default_preview_template = "path/to/your/template.html.{erb,haml,slim}"
116
+ # ...
117
+ end
118
+ ```
119
+
107
120
  Let's assume that you have the following `ApplicationViewComponentPreview`:
108
121
 
109
122
  ```ruby
@@ -154,9 +167,7 @@ class Banner::Preview < ApplicationViewComponentPreview
154
167
  end
155
168
  ```
156
169
 
157
- If you need more control over your template, you can add a custom `preview.html.erb` file.
158
- **NOTE:** We assume that all examples uses the same `preview.html`. If it's not the case,
159
- you can use the original `#render_with_template` method.
170
+ If you need more control over your template, you can add a custom `preview.html.*` template (which will be used for all examples in this preview), or even create an example-specific `previews/example.html.*` (e.g. `previews/mobile.html.erb`).
160
171
 
161
172
  ## Organizing assets (JS, CSS)
162
173
 
@@ -228,7 +239,7 @@ context.keys().forEach((path) => {
228
239
  // nav/user_info/index.js -> nav--user-info
229
240
  const identifier = path.replace(/^\.\//, '')
230
241
  .replace(/\/index\.js$/, '')
231
- .replace(/\//, '--');
242
+ .replace(/\//g, '--');
232
243
 
233
244
  application.register(identifier, mod.Controller);
234
245
  });
@@ -14,7 +14,7 @@ context.keys().forEach((path) => {
14
14
  // nav/user_info/index.js -> nav--user-info
15
15
  const identifier = path.replace(/^\\.\\//, '')
16
16
  .replace(/\\/index\\.js$/, '')
17
- .replace(/\\//, '--');
17
+ .replace(/\\//g, '--');
18
18
 
19
19
  application.register(identifier, mod.Controller);
20
20
  });
@@ -4,7 +4,7 @@
4
4
  if (!matches) return name;
5
5
 
6
6
  // identifier here is the same identifier we used for Stimulus controller (see above)
7
- const identifier = matches[1].replace("/", "--");
7
+ const identifier = matches[1].replace(/\\//g, "--");
8
8
 
9
9
  // We also add the `c-` prefix to all components classes
10
10
  return `c-${identifier}-${name}`;
@@ -3,7 +3,7 @@ say "👋 Welcome to interactive ViewComponent installer and configurator. " \
3
3
 
4
4
  run "bundle add view_component view_component-contrib --skip-install"
5
5
 
6
- inject_into_file "config/application.rb", "require \"view_component/engine\"\n", before: "\nBundler.require(*Rails.groups)"
6
+ inject_into_file "config/application.rb", "\nrequire \"view_component/engine\"\n", before: "\nBundler.require(*Rails.groups)"
7
7
 
8
8
  say_status :info, "✅ ViewComponent gems added"
9
9
 
@@ -65,7 +65,7 @@ end
65
65
 
66
66
  say_status :info, "✅ RSpec configured"
67
67
 
68
- USE_WEBPACK = File.directory?("config/webpack")
68
+ USE_WEBPACK = File.directory?("config/webpack") || File.file?("webpack.config.js")
69
69
 
70
70
  if USE_WEBPACK
71
71
  USE_STIMULUS = yes? "Do you use StimulusJS?"
@@ -85,6 +85,8 @@ if USE_WEBPACK
85
85
  say_status :info, "✅ Added index.js to load components JS/CSS"
86
86
  say "⚠️ Don't forget to import component JS/CSS (#{ROOT_PATH}/index.js) from your application.js entrypoint"
87
87
 
88
+ say "⚠️ Don't forget to add #{ROOT_PATH} to `additional_paths` in your `webpacker.yml` (unless your `source_path` already includes it)"
89
+
88
90
  USE_POSTCSS_MODULES = yes? "Would you like to use postcss-modules to isolate component styles?"
89
91
 
90
92
  if USE_POSTCSS_MODULES
@@ -122,6 +124,8 @@ if USE_WEBPACK
122
124
 
123
125
  say_status :info, "✅ postcss-modules configured"
124
126
  end
127
+ else
128
+ say "⚠️ See the discussion on how to configure non-Wepback JS/CSS installations: https://github.com/palkan/view_component-contrib/discussions/14"
125
129
  end
126
130
 
127
131
  <%= embed("./generator.rb") %>
@@ -14,7 +14,8 @@ module ViewComponentContrib
14
14
  alias_method :abstract_class?, :abstract_class
15
15
 
16
16
  def all
17
- super.reject(&:abstract_class?)
17
+ load_previews if descendants.reject(&:abstract_class?).empty?
18
+ descendants.reject(&:abstract_class?)
18
19
  end
19
20
  end
20
21
  end
@@ -23,20 +23,24 @@ module ViewComponentContrib
23
23
  end
24
24
  end
25
25
 
26
- def preview_example_template_path(...)
26
+ def preview_example_template_path(example)
27
27
  super
28
28
  rescue ViewComponent::PreviewTemplateError
29
- has_preview_template = preview_paths.find do |path|
29
+ has_example_preview = preview_paths.find do |path|
30
+ Dir.glob(File.join(path, preview_name, "previews", "#{example}.html.*")).any?
31
+ end
32
+
33
+ return File.join(preview_name, "previews", example) if has_example_preview
34
+
35
+ has_root_preview = preview_paths.find do |path|
30
36
  Dir.glob(File.join(path, preview_name, "preview.html.*")).any?
31
37
  end
32
38
 
33
- has_preview_template ? File.join(preview_name, "preview") : DEFAULT_TEMPLATE
39
+ return File.join(preview_name, "preview") if has_root_preview
40
+
41
+ default_preview_template
34
42
  end
35
43
  end
36
44
  end
37
45
  end
38
46
  end
39
-
40
- ActiveSupport.on_load(:view_component) do
41
- ViewComponent::Base.preview_paths << File.join(ViewComponentContrib::APP_PATH, "views")
42
- end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ViewComponentContrib
4
+ class Railtie < Rails::Railtie
5
+ config.view_component.preview_paths << File.join(ViewComponentContrib::APP_PATH, "views")
6
+
7
+ initializer "view_component-contrib.skip_loading_previews_if_disabled" do
8
+ unless Rails.application.config.view_component.show_previews
9
+ previews = Rails.application.config.view_component.preview_paths.flat_map do |path|
10
+ Pathname(path).glob("**/*preview.rb")
11
+ end
12
+ Rails.autoloaders.each { |autoloader| autoloader.ignore(previews) }
13
+ end
14
+ end
15
+ end
16
+ end
@@ -22,22 +22,22 @@ module ViewComponentContrib
22
22
  end
23
23
  end
24
24
 
25
- def i18n_scope
26
- return @i18n_scope if defined?(@i18n_scope)
25
+ def contrib_i18n_scope
26
+ return @contrib_i18n_scope if defined?(@contrib_i18n_scope)
27
27
 
28
- @i18n_scope = name.sub("::Component", "").underscore.split("/")
28
+ @contrib_i18n_scope = name.sub("::Component", "").underscore.split("/")
29
29
  end
30
30
 
31
31
  def i18n_scope=(val)
32
32
  raise ArgumentError, "Must be array" unless val.is_a?(Array)
33
33
 
34
- @i18n_scope = val.dup.freeze
34
+ @contrib_i18n_scope = val.dup.freeze
35
35
  end
36
36
 
37
37
  def virtual_path
38
38
  @contrib_virtual_path ||= [
39
39
  i18n_namespace,
40
- *i18n_scope
40
+ *contrib_i18n_scope
41
41
  ].join(".")
42
42
  end
43
43
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ViewComponentContrib # :nodoc:all
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.2"
5
5
  end
@@ -3,6 +3,8 @@
3
3
  require "ruby-next/language/setup"
4
4
  RubyNext::Language.setup_gem_load_path
5
5
 
6
+ require "view_component"
7
+
6
8
  module ViewComponentContrib
7
9
  APP_PATH = File.expand_path(File.join(__dir__, "../app"))
8
10
 
@@ -14,4 +16,5 @@ module ViewComponentContrib
14
16
  autoload :Preview, "view_component_contrib/preview"
15
17
  end
16
18
 
19
+ require "view_component_contrib/railtie" if defined?(::Rails::Railtie)
17
20
  require "view_component_contrib/version"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: view_component-contrib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Dementyev
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-07 00:00:00.000000000 Z
11
+ date: 2023-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: view_component
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: ruby-next-core
28
+ name: ruby-next
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -166,6 +166,7 @@ files:
166
166
  - lib/view_component_contrib/preview/base.rb
167
167
  - lib/view_component_contrib/preview/default_template.rb
168
168
  - lib/view_component_contrib/preview/sidecarable.rb
169
+ - lib/view_component_contrib/railtie.rb
169
170
  - lib/view_component_contrib/translation_helper.rb
170
171
  - lib/view_component_contrib/version.rb
171
172
  - lib/view_component_contrib/wrapped_helper.rb
@@ -179,7 +180,7 @@ metadata:
179
180
  documentation_uri: http://github.com/palkan/view_component-contrib
180
181
  homepage_uri: http://github.com/palkan/view_component-contrib
181
182
  source_code_uri: http://github.com/palkan/view_component-contrib
182
- post_install_message:
183
+ post_install_message:
183
184
  rdoc_options: []
184
185
  require_paths:
185
186
  - lib
@@ -187,15 +188,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
187
188
  requirements:
188
189
  - - ">="
189
190
  - !ruby/object:Gem::Version
190
- version: '2.5'
191
+ version: '2.6'
191
192
  required_rubygems_version: !ruby/object:Gem::Requirement
192
193
  requirements:
193
194
  - - ">="
194
195
  - !ruby/object:Gem::Version
195
196
  version: '0'
196
197
  requirements: []
197
- rubygems_version: 3.0.6
198
- signing_key:
198
+ rubygems_version: 3.3.11
199
+ signing_key:
199
200
  specification_version: 4
200
201
  summary: A collection of extensions and developer tools for ViewComponent
201
202
  test_files: []