phlex 1.11.0 → 2.0.0.beta1

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.
data/lib/phlex/svg.rb CHANGED
@@ -1,20 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Phlex
4
- class SVG < SGML
5
- autoload :StandardElements, "phlex/svg/standard_elements"
3
+ class Phlex::SVG < Phlex::SGML
4
+ autoload :StandardElements, "phlex/svg/standard_elements"
6
5
 
7
- include StandardElements
6
+ include StandardElements
8
7
 
9
- # This should be extended after all method definitions
10
- extend ElementClobberingGuard
8
+ # This should be extended after all method definitions
9
+ extend Phlex::ElementClobberingGuard
11
10
 
12
- def content_type
13
- "image/svg+xml"
14
- end
11
+ def content_type
12
+ "image/svg+xml"
13
+ end
15
14
 
16
- def filename
17
- nil
18
- end
15
+ def filename
16
+ nil
19
17
  end
20
18
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "capybara"
4
+
5
+ module Phlex::Testing::Capybara
6
+ include Phlex::Testing::SGML
7
+
8
+ def self.included(mod)
9
+ if defined?(Minitest::Test) && Minitest::Test > mod
10
+ require "capybara/minitest"
11
+ mod.include Capybara::Minitest::Assertions
12
+ end
13
+
14
+ if defined?(RSpec::Core::ExampleGroup) && RSpec::Core::ExampleGroup > mod
15
+ require "capybara/rspec"
16
+ mod.include Capybara::RSpecMatchers
17
+ end
18
+ end
19
+
20
+ attr_reader :page
21
+ alias_method :component, :page
22
+
23
+ def render(...)
24
+ @page = ::Capybara::Node::Simple.new(
25
+ render_to_string(...),
26
+ )
27
+ end
28
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokogiri"
4
+
5
+ module Phlex::Testing::Nokogiri
6
+ include Phlex::Testing::SGML
7
+
8
+ def render_fragment(...)
9
+ ::Nokogiri::HTML5.fragment(
10
+ render_to_string(...),
11
+ )
12
+ end
13
+
14
+ def render_document(...)
15
+ ::Nokogiri::HTML5(
16
+ render_to_string(...),
17
+ )
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokolexbor"
4
+
5
+ module Phlex::Testing::Nokolexbor
6
+ include Phlex::Testing::SGML
7
+
8
+ def render_fragment(...)
9
+ Nokolexbor::DocumentFragment.parse(
10
+ render_to_string(...),
11
+ )
12
+ end
13
+
14
+ def render_document(...)
15
+ ::Nokolexbor::HTML(
16
+ render_to_string(...),
17
+ )
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Phlex::Testing::SGML
4
+ def render_to_string(component, &)
5
+ component.call(view_context:, &)
6
+ end
7
+
8
+ def view_context = nil
9
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "phlex"
4
+
5
+ module Phlex::Testing
6
+ autoload :SGML, "phlex/testing/sgml"
7
+ autoload :Capybara, "phlex/testing/capybara"
8
+ autoload :Nokogiri, "phlex/testing/nokogiri"
9
+ autoload :Nokolexbor, "phlex/testing/nokolexbor"
10
+ end
data/lib/phlex/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Phlex
4
- VERSION = "1.11.0"
4
+ VERSION = "2.0.0.beta1"
5
5
  end
data/lib/phlex.rb CHANGED
@@ -1,54 +1,38 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "erb"
4
+ require "set"
4
5
 
5
6
  module Phlex
7
+ autoload :ArgumentError, "phlex/errors/argument_error"
8
+ autoload :DoubleRenderError, "phlex/errors/double_render_error"
9
+ autoload :BlackHole, "phlex/black_hole"
10
+ autoload :CSV, "phlex/csv"
11
+ autoload :Callable, "phlex/callable"
6
12
  autoload :Context, "phlex/context"
7
13
  autoload :DeferredRender, "phlex/deferred_render"
8
14
  autoload :ElementClobberingGuard, "phlex/element_clobbering_guard"
9
15
  autoload :Elements, "phlex/elements"
16
+ autoload :Error, "phlex/error"
17
+ autoload :FIFO, "phlex/fifo"
10
18
  autoload :HTML, "phlex/html"
11
19
  autoload :Helpers, "phlex/helpers"
20
+ autoload :Kit, "phlex/kit"
21
+ autoload :NameError, "phlex/errors/name_error"
12
22
  autoload :SGML, "phlex/sgml"
13
23
  autoload :SVG, "phlex/svg"
14
- autoload :Unbuffered, "phlex/unbuffered"
15
- autoload :ConcurrentMap, "phlex/concurrent_map"
16
- autoload :BlackHole, "phlex/black_hole"
17
- autoload :CSV, "phlex/csv"
18
- autoload :Callable, "phlex/callable"
19
- autoload :Kit, "phlex/kit"
20
24
 
21
- # Included in all Phlex exceptions allowing you to match any Phlex error.
22
- # @example Rescue any Phlex error:
23
- # rescue Phlex::Error
24
- module Error; end
25
+ Escape = ERB::Escape
26
+ ATTRIBUTE_CACHE = FIFO.new
27
+ SUPPORTS_FIBER_STORAGE = RUBY_ENGINE == "ruby"
28
+ Null = Object.new.freeze
25
29
 
26
- if defined?(ERB::Escape)
27
- Escape = ERB::Escape
28
- else
29
- Escape = ERB::Util
30
- end
31
-
32
- # A specialised ArgumentError for Phlex.
33
- class ArgumentError < ::ArgumentError
34
- include Error
35
- end
36
-
37
- # A specialised NameError for Phlex.
38
- class NameError < ::NameError
39
- include Error
40
- end
41
-
42
- # @api private
43
- ATTRIBUTE_CACHE = {}
44
-
45
- SUPPORTS_FIBER_STORAGE = Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.2")
46
- end
30
+ CACHED_FILES = Set.new
47
31
 
48
- if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("3.0")
49
- class Symbol
50
- def name
51
- to_s
32
+ def self.__expand_attribute_cache__(file_path)
33
+ unless CACHED_FILES.include?(file_path)
34
+ CACHED_FILES << file_path
35
+ Phlex::ATTRIBUTE_CACHE.expand(File.size(file_path))
52
36
  end
53
37
  end
54
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phlex
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.0
4
+ version: 2.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Drapper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-06 00:00:00.000000000 Z
11
+ date: 2024-09-12 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A high-performance view framework optimised for fun.
14
14
  email:
@@ -21,22 +21,31 @@ files:
21
21
  - README.md
22
22
  - lib/phlex.rb
23
23
  - lib/phlex/black_hole.rb
24
- - lib/phlex/callable.rb
25
24
  - lib/phlex/context.rb
26
25
  - lib/phlex/csv.rb
27
26
  - lib/phlex/deferred_render.rb
28
27
  - lib/phlex/element_clobbering_guard.rb
29
28
  - lib/phlex/elements.rb
29
+ - lib/phlex/error.rb
30
+ - lib/phlex/errors/argument_error.rb
31
+ - lib/phlex/errors/double_render_error.rb
32
+ - lib/phlex/errors/name_error.rb
33
+ - lib/phlex/fifo.rb
30
34
  - lib/phlex/helpers.rb
31
35
  - lib/phlex/html.rb
32
36
  - lib/phlex/html/standard_elements.rb
33
37
  - lib/phlex/html/void_elements.rb
34
38
  - lib/phlex/kit.rb
35
39
  - lib/phlex/sgml.rb
40
+ - lib/phlex/sgml/safe_object.rb
41
+ - lib/phlex/sgml/safe_value.rb
36
42
  - lib/phlex/svg.rb
37
43
  - lib/phlex/svg/standard_elements.rb
38
- - lib/phlex/testing/view_helper.rb
39
- - lib/phlex/unbuffered.rb
44
+ - lib/phlex/testing.rb
45
+ - lib/phlex/testing/capybara.rb
46
+ - lib/phlex/testing/nokogiri.rb
47
+ - lib/phlex/testing/nokolexbor.rb
48
+ - lib/phlex/testing/sgml.rb
40
49
  - lib/phlex/version.rb
41
50
  homepage: https://www.phlex.fun
42
51
  licenses:
@@ -55,14 +64,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
55
64
  requirements:
56
65
  - - ">="
57
66
  - !ruby/object:Gem::Version
58
- version: '2.7'
67
+ version: 3.3.1
59
68
  required_rubygems_version: !ruby/object:Gem::Requirement
60
69
  requirements:
61
70
  - - ">="
62
71
  - !ruby/object:Gem::Version
63
72
  version: '0'
64
73
  requirements: []
65
- rubygems_version: 3.5.13
74
+ rubygems_version: 3.5.18
66
75
  signing_key:
67
76
  specification_version: 4
68
77
  summary: A fun framework for building views in Ruby.
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # @api private
4
- module Phlex::Callable
5
- def to_proc
6
- method(:call).to_proc
7
- end
8
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Phlex::Testing
4
- module ViewHelper
5
- def render(view, &block)
6
- if view.is_a?(Class) && view < Phlex::SGML
7
- view = view.new
8
- end
9
-
10
- view.call(view_context: view_context, &block)
11
- end
12
-
13
- def view_context
14
- nil
15
- end
16
- end
17
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # @api private
4
- class Phlex::Unbuffered < BasicObject
5
- def initialize(object)
6
- @object = object
7
- end
8
-
9
- def inspect
10
- "Unbuffered(#{@object.class.name})[object: #{@object.inspect}]"
11
- end
12
-
13
- # Borrow some important methods from Object
14
- define_method :__class__,
15
- ::Object.instance_method(:class)
16
-
17
- define_method :__public_send__,
18
- ::Object.instance_method(:public_send)
19
-
20
- def respond_to_missing?(...)
21
- @object.respond_to?(...)
22
- end
23
-
24
- def method_missing(name, *args, **kwargs, &block)
25
- if @object.respond_to?(name)
26
-
27
- __class__.define_method(name) do |*a, **k, &b|
28
- @object.capture { @object.public_send(name, *a, **k, &b) }
29
- end
30
-
31
- # Now we've defined this missing method, we can call it.
32
- __public_send__(name, *args, **kwargs, &block)
33
- else
34
- super
35
- end
36
- end
37
-
38
- # Forward some methods to the original underlying method
39
- def call(...)
40
- @object.call(...)
41
- end
42
-
43
- def send(...)
44
- @object.send(...)
45
- end
46
-
47
- def public_send(...)
48
- @object.public_send(...)
49
- end
50
- end