rbexy 1.0.1 → 2.0.0.beta3

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +5 -4
  3. data/README.md +18 -0
  4. data/lib/rbexy.rb +27 -9
  5. data/lib/rbexy/ast_transformer.rb +21 -0
  6. data/lib/rbexy/component.rb +10 -18
  7. data/lib/rbexy/component_context.rb +18 -0
  8. data/lib/rbexy/component_resolver.rb +60 -0
  9. data/lib/rbexy/configuration.rb +18 -1
  10. data/lib/rbexy/lexer.rb +21 -14
  11. data/lib/rbexy/nodes.rb +15 -135
  12. data/lib/rbexy/nodes/abstract_attr.rb +12 -0
  13. data/lib/rbexy/nodes/abstract_element.rb +13 -0
  14. data/lib/rbexy/nodes/abstract_node.rb +58 -0
  15. data/lib/rbexy/nodes/component_element.rb +69 -0
  16. data/lib/rbexy/nodes/component_prop.rb +29 -0
  17. data/lib/rbexy/nodes/declaration.rb +15 -0
  18. data/lib/rbexy/nodes/expression.rb +15 -0
  19. data/lib/rbexy/nodes/expression_group.rb +55 -0
  20. data/lib/rbexy/nodes/html_attr.rb +13 -0
  21. data/lib/rbexy/nodes/html_element.rb +48 -0
  22. data/lib/rbexy/nodes/newline.rb +9 -0
  23. data/lib/rbexy/nodes/raw.rb +23 -0
  24. data/lib/rbexy/nodes/root.rb +19 -0
  25. data/lib/rbexy/nodes/text.rb +15 -0
  26. data/lib/rbexy/nodes/util.rb +9 -0
  27. data/lib/rbexy/parser.rb +22 -16
  28. data/lib/rbexy/rails/component_template_resolver.rb +3 -3
  29. data/lib/rbexy/rails/controller_helper.rb +5 -4
  30. data/lib/rbexy/rails/engine.rb +1 -11
  31. data/lib/rbexy/refinements.rb +5 -0
  32. data/lib/rbexy/refinements/array.rb +9 -0
  33. data/lib/rbexy/refinements/array/find_map.rb +13 -0
  34. data/lib/rbexy/refinements/array/insert_between_types.rb +26 -0
  35. data/lib/rbexy/refinements/array/map_type_when_neighboring_type.rb +26 -0
  36. data/lib/rbexy/runtime.rb +16 -23
  37. data/lib/rbexy/template.rb +12 -0
  38. data/lib/rbexy/version.rb +1 -1
  39. data/rbexy.gemspec +3 -3
  40. metadata +46 -35
  41. data/example.rb +0 -113
  42. data/lib/rbexy/component_providers/namespaced_rbexy_provider.rb +0 -20
  43. data/lib/rbexy/component_providers/rbexy_provider.rb +0 -21
  44. data/lib/rbexy/component_providers/view_component_provider.rb +0 -21
  45. data/lib/rbexy/component_tag_builder.rb +0 -19
  46. data/lib/rbexy/hash_mash.rb +0 -15
  47. data/lib/rbexy/view_context_helper.rb +0 -23
@@ -1,20 +0,0 @@
1
- module Rbexy
2
- module ComponentProviders
3
- class NamespacedRbexyProvider < Rbexy::ComponentProviders::RbexyProvider
4
- attr_reader :namespaces
5
-
6
- def initialize(*namespaces)
7
- @namespaces = namespaces
8
- end
9
-
10
- def find(name)
11
- namespaces.each do |namespace|
12
- result = super("#{namespace}::#{name}")
13
- return result if result != nil
14
- end
15
-
16
- super
17
- end
18
- end
19
- end
20
- end
@@ -1,21 +0,0 @@
1
- module Rbexy
2
- module ComponentProviders
3
- class RbexyProvider
4
- def match?(name)
5
- name =~ /^[A-Z]/ && find(name) != nil
6
- end
7
-
8
- def render(context, name, **attrs, &block)
9
- props = attrs.transform_keys { |k| ActiveSupport::Inflector.underscore(k.to_s).to_sym }
10
- find(name).new(context, **props).render(&block)
11
- end
12
-
13
- def find(name)
14
- ActiveSupport::Inflector.constantize("#{name}Component")
15
- rescue NameError => e
16
- raise e unless e.message =~ /wrong constant name/ || e.message =~ /uninitialized constant/
17
- nil
18
- end
19
- end
20
- end
21
- end
@@ -1,21 +0,0 @@
1
- module Rbexy
2
- module ComponentProviders
3
- class ViewComponentProvider
4
- def match?(name)
5
- name =~ /^[A-Z]/ && find(name) != nil
6
- end
7
-
8
- def render(context, name, **attrs, &block)
9
- props = attrs.transform_keys { |k| ActiveSupport::Inflector.underscore(k.to_s).to_sym }
10
- find(name).new(**props).render_in(context, &block)
11
- end
12
-
13
- def find(name)
14
- ActiveSupport::Inflector.constantize("#{name}Component")
15
- rescue NameError => e
16
- raise e unless e.message =~ /wrong constant name/ || e.message =~ /uninitialized constant/
17
- nil
18
- end
19
- end
20
- end
21
- end
@@ -1,19 +0,0 @@
1
- module Rbexy
2
- class ComponentTagBuilder < ActionView::Helpers::TagHelper::TagBuilder
3
- attr_reader :component_provider
4
-
5
- def initialize(context, component_provider)
6
- super(context)
7
- @component_provider = component_provider
8
- end
9
-
10
- def method_missing(called, *args, **attrs, &block)
11
- component_name = called.to_s.gsub("__", "::")
12
- if component_provider.match?(component_name)
13
- component_provider.render(@view_context, component_name, **attrs, &block)
14
- else
15
- super
16
- end
17
- end
18
- end
19
- end
@@ -1,15 +0,0 @@
1
- module Rbexy
2
- class HashMash < Hash
3
- def initialize(hash)
4
- replace(hash)
5
- end
6
-
7
- def method_missing(meth, *args, &block)
8
- if has_key?(meth)
9
- self[meth]
10
- else
11
- super
12
- end
13
- end
14
- end
15
- end
@@ -1,23 +0,0 @@
1
- module Rbexy
2
- module ViewContextHelper
3
- def rbexy_tag
4
- @rbexy_tag ||= Runtime.create_tag_builder(self)
5
- end
6
-
7
- def rbexy_context
8
- @rbexy_context ||= [{}]
9
- end
10
-
11
- def rbexy_prep_output(*value)
12
- return if value.length == 0
13
- value = value.first
14
-
15
- value = rbexy_is_html_safe_array?(value) ? value.join.html_safe : value
16
- [nil, false].include?(value) ? "" : value.to_s
17
- end
18
-
19
- def rbexy_is_html_safe_array?(value)
20
- value.is_a?(Array) && value.all? { |v| v.respond_to?(:html_safe?) && v.html_safe? }
21
- end
22
- end
23
- end