ilex 0.1.4 → 0.1.5

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: f82da20e01bb5e4051b176bfa0434191271ad11bb8337b1665539a047f3e6a6d
4
- data.tar.gz: e68418c30ffe861bae04640a9c7db675c56b69977a27c1432d51683c7cd94166
3
+ metadata.gz: fbd721cabba89d7f34b23841b6afcfd3d38b79bb35d947a620161e67e6f38cfd
4
+ data.tar.gz: 3aca8a08c6ae10f7918bcb239bbe103cd03073d18e1c30fc746a509c30c127f9
5
5
  SHA512:
6
- metadata.gz: 4bdf3430e7a97ed4c184884507d94a023a3ba061d911b0436dddb92f89f6ebbc4302ded795b25eac2bed9ff2c9415e0cfe1d969c20dcfa536ed4c1131d8fa85a
7
- data.tar.gz: 1b8a4ae20d0c5e9b2e298cfc62532714c20f0f013d2feee385649f4c0361c0aaa95068c148b0aabe131d406a8125e2fa88146ef17adbdeb3f2fc61e9c896066f
6
+ metadata.gz: cb7d4800158d6b0dfb093ffd0f44abbb6009bc8bb8c706125e108fe89c5dbff0e16c50a1d8502b12c846416f8986a61d6b7a5fa9c5e52a5ca0f0600ae8df2816
7
+ data.tar.gz: af85c50eedefbbe3ce29849e07c80f38de08037277a57bc71477bd04d67326d8f8af7ae973fb18ddd93d0b13e11c15acf09d588389a46ad65b843f9808dc84a2
data/CHANGELOG.md CHANGED
@@ -2,6 +2,21 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.1.5](https://github.com/joshleblanc/cedar/compare/v0.1.4...v0.1.5) (2021-04-17)
6
+
7
+
8
+ ### Features
9
+
10
+ * add helpers for rendering namespaced components ([3b0a5af](https://github.com/joshleblanc/cedar/commit/3b0a5af421e4b4c9a3b45b07b11647df65908552))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * allow appending helpers with _component ([7097420](https://github.com/joshleblanc/cedar/commit/7097420d3529533910fd5174af175aae15c16aa0))
16
+ * appease intellisense with unused splat ([854c8a8](https://github.com/joshleblanc/cedar/commit/854c8a8c7f121d4f531bb5a6d56b487f29772bb8))
17
+ * component content wasn't rendering ([041efb2](https://github.com/joshleblanc/cedar/commit/041efb21cbc0760ac94d1fa0093dc57d5185d0d0))
18
+ * override arbre render method ([235763b](https://github.com/joshleblanc/cedar/commit/235763b5820fbcbf7faaee934e14c90f381b128a))
19
+
5
20
  ### [0.1.4](https://github.com/joshleblanc/cedar/compare/v0.1.3...v0.1.4) (2021-04-16)
6
21
 
7
22
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ilex (0.1.4)
4
+ ilex (0.1.5)
5
5
  arbre
6
6
 
7
7
  GEM
@@ -19,19 +19,25 @@ module Ilex
19
19
  module Component
20
20
  include Arbre::HTML
21
21
 
22
- def render(&blk)
22
+ def render(*args, &blk)
23
23
  define_method :call do
24
24
  ctx = Context.new(self)
25
25
  ctx.instance_eval(&blk).to_s
26
26
  end
27
27
  end
28
28
 
29
- def find_component(name)
30
- if const_defined?(name)
31
- const_get(name)
29
+ def find_component(name, base_module = nil)
30
+ target = if base_module
31
+ base_module
32
32
  else
33
- if superclass.respond_to?(:find_component)
34
- superclass.find_component(name)
33
+ self
34
+ end
35
+
36
+ if target.const_defined?(name)
37
+ target.const_get(name)
38
+ else
39
+ if target.superclass.respond_to?(:find_component)
40
+ target.superclass.find_component(name)
35
41
  else
36
42
  adjusted_name = name.chomp("Component").underscore
37
43
  raise(NameError, "undefined local variable or method `#{adjusted_name}` for #{self}")
@@ -10,22 +10,28 @@ module Ilex
10
10
  class ComponentWarden
11
11
  def initialize(component, string)
12
12
  @component = component
13
- @raw_input = string
13
+ @input = string.to_s
14
14
 
15
- @collection = @raw_input.end_with? "_collection"
16
- @input = @raw_input.to_s.chomp("_collection")
15
+ @collection = @input.end_with? "_collection"
16
+ @nested = @input.include? "__"
17
+
18
+ process_input!(@input)
17
19
  end
18
20
 
19
21
  def collection?
20
22
  @collection
21
23
  end
22
24
 
25
+ def nested?
26
+ @nested
27
+ end
28
+
23
29
  def component_name
24
30
  "#{@input}_component".camelize
25
31
  end
26
32
 
27
33
  def component_class
28
- @component_class ||= @component.class.find_component(component_name)
34
+ @component_class ||= @component.class.find_component(component_name, @base_module)
29
35
  end
30
36
 
31
37
  def exists?
@@ -36,9 +42,23 @@ module Ilex
36
42
  return nil unless exists?
37
43
 
38
44
  if collection?
39
- component_class.with_collection(*args, &block)
45
+ component_class.with_collection(*args)
40
46
  else
41
- component_class.new(*args, &block)
47
+ component_class.new(*args)
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def process_input!(input)
54
+ @input.chomp! "_collection"
55
+ @input.chomp! "_component"
56
+
57
+ if nested?
58
+ parts = @input.split("__")
59
+ @input = parts.pop
60
+
61
+ @base_module = parts.map(&:camelize).join("::").constantize
42
62
  end
43
63
  end
44
64
  end
data/lib/ilex/context.rb CHANGED
@@ -7,32 +7,53 @@ module Ilex
7
7
  # tags
8
8
  class Context < Arbre::Context
9
9
 
10
- def initialize(component)
11
- super({}, component)
12
-
10
+ def initialize(component, &blk)
13
11
  @component = component
14
- @component_wardens = ComponentWardens.new(@component)
12
+
15
13
 
16
14
  # Copy all of the instance variables from the component to the context,
17
15
  # so we have access to them when rendering
18
16
  @component.instance_variables.each do |iv|
19
17
  instance_variable_set(iv, @component.instance_variable_get(iv))
20
18
  end
19
+
20
+ super({}, component, &blk)
21
21
  end
22
22
 
23
23
  def content
24
24
  @component.send :content
25
25
  end
26
26
 
27
+ def component_wardens
28
+ @component_wardens ||= ComponentWardens.new(@component)
29
+ end
30
+
31
+ # This is overriding arbre::rails::rendering
32
+ # It performs the same actions, but returns html_safe on a passed block
33
+ #
34
+ # Not 100% sure this is needed, but view_components won't render their
35
+ # contents without it, when rendered in an arbre tree
36
+ def render(*args)
37
+ rendered = helpers.render(*args) do
38
+ yield.html_safe if block_given?
39
+ end
40
+ case rendered
41
+ when Arbre::Context
42
+ current_arbre_element.add_child rendered
43
+ else
44
+ text_node rendered
45
+ end
46
+ end
47
+
27
48
  def respond_to_missing?(method, include_all)
28
- @component.respond_to?(method) || @component_wardens[method].exists? || super
49
+ @component.respond_to?(method) || component_wardens[method].exists? || super
29
50
  end
30
51
 
31
52
  def method_missing(method, *args, &content_block)
32
53
  if @component.respond_to?(method)
33
54
  @component.send(method, *args, &content_block)
34
- elsif @component_wardens[method].exists?
35
- render @component_wardens[method].new(*args, &content_block)
55
+ elsif component_wardens[method].exists?
56
+ render component_wardens[method].new(*args), &content_block
36
57
  else
37
58
  super
38
59
  end
data/lib/ilex/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ilex
4
- VERSION = "0.1.4"
4
+ VERSION = "0.1.5"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ilex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua LeBlanc
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-16 00:00:00.000000000 Z
11
+ date: 2021-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: arbre