ilex 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
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