nice_partials 0.9.0 → 0.9.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: b3b70755595cff02588aa600004e44ec9f20847a4fdd026e0326876a2cad7f52
4
- data.tar.gz: 24e42267606eb6a56ed481d2b82d137210618dff3282f6586036aa68bfad71c0
3
+ metadata.gz: e8c2fc27ad0c01eda3e489191c6ba385498ec49580f38400f8447600ee8d0488
4
+ data.tar.gz: e138bd379b7f805e0be27054d6a689e31d58169e27ad118bec43a3538b24c9f9
5
5
  SHA512:
6
- metadata.gz: de339636e922f606a268eb0a9888686e3f0c6b3bdd0f874c8c50998a55437dfc8dff7f4a1c4293d4814277f75a49a959aa47ba9318ad9d9898d651c87d5fc6f8
7
- data.tar.gz: ed7d3ff442df563d12aba16982a7a3ecae8a5f5b3022255e733bd2b5fd816c828064ddb659162839ef234fc26b22bd3f3a3a6be175e918a5518688a5cfe8bde2
6
+ metadata.gz: 24aa6946079c6663a907b6e7eb2c6158b07105bc3cf0273a9907c2a7732fc6ba030e3b733b8beacd1221288e32c995067a0af6b30649e8a6c8ec7960e8adcd22
7
+ data.tar.gz: 70548909852322e987e7a11aafb81f927b9652ac03bef500f1ddf3b3daca915bc37d22270a537a37580ac67e0fa76ef158bc7a783bf8327c603ad108cc275a5b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  ## CHANGELOG
2
2
 
3
+ ### 0.9.2
4
+
5
+ * Changed: view methods don't clobber section names
6
+
7
+ Previously, we'd eagerly delegate to the view context so if the view had a `label` method, `partial.label` would call the view's `label` instead of making a `label` section.
8
+
9
+ This was to support `partial.helpers` but we've changed the implementation to support the above. `partial.helpers` still works the same too.
10
+
11
+ * Changed: `partial.helpers` no longer automatically calls `partial` methods
12
+
13
+ Previously, if a user defined a partial helper like this:
14
+
15
+ ```ruby
16
+ partial.helpers do
17
+ def some_helper
18
+ some_section
19
+ end
20
+ end
21
+ ```
22
+
23
+ If `some_section` wasn't a view method, it would automatically call `partial.some_section`
24
+ thereby adding a new content section to the partial.
25
+
26
+ Now `partial.helpers` behaves exactly like view helpers — making it easier to copy code directly when migrating — so users would have to explicitly call `partial.some_section`.
27
+
28
+ ### 0.9.1
29
+
30
+ * Fix Ruby 2.7 compatibility
31
+
32
+ ### 0.9.0
33
+
3
34
  * Fix rendering with special characters in a view path.
4
35
 
5
36
  Ref: https://github.com/bullet-train-co/nice_partials/pull/70
@@ -24,7 +24,6 @@ class NicePartials::Partial::Section < NicePartials::Partial::Content
24
24
  # <% partial.title.h2 ", appended" %> # => <h2 class="xl">Some title content, appended</h2>
25
25
  #
26
26
  # Note that NicePartials don't support deep merging attributes out of the box.
27
- # For that, bundle https://github.com/seanpdoyle/attributes_and_token_lists
28
27
  def method_missing(meth, *arguments, **keywords, &block)
29
28
  if meth != :p && @view_context.respond_to?(meth)
30
29
  append @view_context.public_send(meth, *arguments, **keywords, &block)
@@ -32,7 +31,10 @@ class NicePartials::Partial::Section < NicePartials::Partial::Content
32
31
  @view_context.tag.public_send(meth, @content + arguments.first.to_s, **options.merge(keywords), &block)
33
32
  end
34
33
  end
35
- def respond_to_missing?(...) = @view_context.respond_to?(...)
34
+
35
+ def respond_to_missing?(...)
36
+ @view_context.respond_to?(...)
37
+ end
36
38
 
37
39
  private
38
40
 
@@ -44,5 +46,7 @@ class NicePartials::Partial::Section < NicePartials::Partial::Content
44
46
  end
45
47
  end
46
48
 
47
- def chunks() = @chunks ||= []
49
+ def chunks
50
+ @chunks ||= []
51
+ end
48
52
  end
@@ -4,8 +4,6 @@ module NicePartials
4
4
  autoload :Section, "nice_partials/partial/section"
5
5
  autoload :Stack, "nice_partials/partial/stack"
6
6
 
7
- delegate_missing_to :@view_context
8
-
9
7
  def initialize(view_context, local_assigns = nil)
10
8
  @view_context, @local_assigns = view_context, local_assigns
11
9
  end
@@ -19,7 +17,7 @@ module NicePartials
19
17
  end
20
18
 
21
19
  def helpers(&block)
22
- self.class.class_eval(&block)
20
+ Helpers.class_eval(&block)
23
21
  end
24
22
 
25
23
  # `translate` is a shorthand to set `content_for` with content that's run through
@@ -77,7 +75,7 @@ module NicePartials
77
75
  alias content_for? section?
78
76
 
79
77
  def content_for(...)
80
- section(...)&.to_s
78
+ section(...).presence&.to_s
81
79
  end
82
80
 
83
81
  def slice(*keys)
@@ -94,12 +92,12 @@ module NicePartials
94
92
  @sections ||= {} and @sections[name] ||= Section.new(@view_context, @local_assigns&.dig(name))
95
93
  end
96
94
 
95
+ def respond_to_missing?(meth, include_private = false)
96
+ meth != :to_ary # Avoid creating a section when doing `*partial`.
97
+ end
98
+
97
99
  def method_missing(meth, *arguments, **keywords, &block)
98
- if @view_context.respond_to?(meth)
99
- @view_context.public_send(meth, *arguments, **keywords, &block)
100
- else
101
- define_accessor meth and public_send(meth, *arguments, **keywords, &block)
102
- end
100
+ define_accessor meth and public_send(meth, *arguments, **keywords, &block)
103
101
  end
104
102
 
105
103
  def define_accessor(name)
@@ -107,5 +105,16 @@ module NicePartials
107
105
  self.class.define_method(name) { |content = nil, **options, &block| section(name, content, **options, &block) }
108
106
  self.class.define_method("#{name}?") { section?(name) }
109
107
  end
108
+
109
+ def helpers_context
110
+ @helpers_context ||= Helpers.new(@view_context)
111
+ end
112
+
113
+ class Helpers < SimpleDelegator
114
+ def self.method_added(name)
115
+ super
116
+ NicePartials::Partial.delegate name, to: :helpers_context
117
+ end
118
+ end
110
119
  end
111
120
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NicePartials
4
- VERSION = "0.9.0"
4
+ VERSION = "0.9.2"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nice_partials
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Culver
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2023-01-15 00:00:00.000000000 Z
12
+ date: 2023-02-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionview
@@ -75,7 +75,6 @@ files:
75
75
  - lib/nice_partials/partial/section.rb
76
76
  - lib/nice_partials/partial/stack.rb
77
77
  - lib/nice_partials/version.rb
78
- - nice_partials.gemspec
79
78
  homepage: https://github.com/bullet-train-co/nice_partials
80
79
  licenses:
81
80
  - MIT
@@ -95,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
94
  - !ruby/object:Gem::Version
96
95
  version: '0'
97
96
  requirements: []
98
- rubygems_version: 3.4.1
97
+ rubygems_version: 3.3.7
99
98
  signing_key:
100
99
  specification_version: 4
101
100
  summary: A little bit of magic to make partials perfect for components.
@@ -1,32 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require File.dirname(__FILE__) + "/lib/nice_partials/version"
4
-
5
- Gem::Specification.new do |gem|
6
- gem.name = "nice_partials"
7
- gem.version = NicePartials::VERSION
8
- gem.summary = "A little bit of magic to make partials perfect for components."
9
- gem.description = "A little bit of magic to make partials perfect for components."
10
- gem.authors = ["Andrew Culver", "Dom Christie"]
11
- gem.email = ["andrew.culver@gmail.com", "christiedom@gmail.com"]
12
- gem.homepage = "https://github.com/bullet-train-co/nice_partials"
13
- gem.license = "MIT"
14
-
15
- # Specify which files should be added to the gem when it is released.
16
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
17
- gem.files = Dir.chdir(__dir__) do
18
- `git ls-files -z`.split("\x0").reject do |f|
19
- (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
20
- end
21
- end
22
- gem.bindir = "exe"
23
- gem.executables = gem.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
24
- gem.require_paths = ["lib"]
25
-
26
- gem.required_ruby_version = ">= 2.0"
27
-
28
- gem.add_dependency "actionview", '>= 4.2.6'
29
-
30
- gem.add_development_dependency "rails"
31
- gem.add_development_dependency "standard"
32
- end