roda-phlex 0.1.0 → 0.2.0

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: 697b0c167a1b8e7c0a878d07a7b45c69e8ce1ea4ec7d04a8a2a1743df8856d63
4
- data.tar.gz: 0ef55428df093f8e8d61106b7819bf822fea490228e58c7c921ecf8e4d54aed6
3
+ metadata.gz: d4325bf47a07f07abf3c30722c16bcd2422559e3ae8ef3af32803efe081d640c
4
+ data.tar.gz: fe31c12b510c61204b61996b6f22a696a8e82ba1f6a491ffe399c71e30bae365
5
5
  SHA512:
6
- metadata.gz: 6789258cef5d8ed114bc9cf5322b3440eb5b01122a8d046f09f30fe0382ee3b2eb7a2f055089c25cbce2d351d4b7da1041691e5c03a272c439b4fd41ad8440c7
7
- data.tar.gz: c98632f1b504f435755b410dfcf0a5c7cc61b2f8fd9e59048bcde01966b01749b04a8aef1c4557a3f50e38911580e014a3869fe2a41408b2516e76ac55007ccf
6
+ metadata.gz: 3174f3c8d94c44d3876a51fe5f5d531f3feee7e5143d0b98a43e6978537f1b4e070c260f73421fb5bd04e9d8619e83067ab34eef073c7f91836d3c9a2e94df32
7
+ data.tar.gz: c6eb86db087726ee22f7cf2d0df7c140c34433606279675bd56c26158b361c9b0b34f8369eb9a390c04193b5b5c8e17e6591bb599553a1ffef06499be901baf3
data/.markdownlint.yml ADDED
@@ -0,0 +1,10 @@
1
+ MD004: # Unordered list style
2
+ style: sublist
3
+ MD007: # Unordered list indentation
4
+ indent: 4 # For Yard
5
+ MD013: # Line length
6
+ line_length: 120
7
+ code_blocks: false
8
+ tables: false
9
+ MD024: # Multiple headers with the same content
10
+ siblings_only: true
data/.yardopts ADDED
@@ -0,0 +1,2 @@
1
+ -m markdown
2
+ --files LICENSE.txt,CHANGELOG.md
data/CHANGELOG.md CHANGED
@@ -1,5 +1,62 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
6
+
1
7
  ## [Unreleased]
2
8
 
9
+ ### Added
10
+
11
+ ### Changed
12
+
13
+ ### Deprecated
14
+
15
+ ### Removed
16
+
17
+ ### Fixed
18
+
19
+ ### Security
20
+
21
+ ## [0.2.0] - 2024-12-13
22
+
23
+ ### Added
24
+
25
+ - Allow `phlex_layout(false)` to be used to reset disable layout.
26
+ - Allow `phlex_layout_handler(:default)` to be used to reset to the default layout handler.
27
+
28
+ ### Removed
29
+
30
+ - Don't delete layout options when deleting layout (eg via `phlex_layout(false)`)
31
+
32
+ ### Fixed
33
+
34
+ - `phlex_layout` should accept a `Phlex::SGML` class, not instance.
35
+ - `phlex_layout_handler` called with `nil` resets it to the default handler.
36
+
3
37
  ## [0.1.0] - 2024-08-28
4
38
 
5
- - Initial release based on <https://github.com/benpickles/phlex-sinatra/commit/2e3c9a612cbf6f4b4bf5db880f164b66f008baf8> and <https://gist.github.com/RomanTurner/0ce0b8792e4149d152d2af2224cb6407>
39
+ - Initial release based on <https://github.com/benpickles/phlex-sinatra/commit/2e3c9a612cbf6f4b4bf5db880f164b66f008baf8>
40
+ and <https://gist.github.com/RomanTurner/0ce0b8792e4149d152d2af2224cb6407>
41
+
42
+ ________________________________________________________________________________
43
+
44
+ [Unreleased]: https://github.com/fnordfish/roda-phlex/compare/v0.2.0...main
45
+ [0.2.0]: https://github.com/fnordfish/roda-phlex/releases/tag/v0.2.0
46
+ [0.1.0]: https://github.com/fnordfish/roda-phlex/releases/tag/v0.1.0
47
+
48
+ <!-- template for new release:
49
+ ### Added
50
+
51
+ ### Changed
52
+
53
+ ### Deprecated
54
+
55
+ ### Removed
56
+
57
+ ### Fixed
58
+
59
+ ### Security
60
+
61
+ ## [X.Y.Z] - YYYY-MM-DD
62
+ -->
data/README.md CHANGED
@@ -1,8 +1,11 @@
1
1
  # roda-phlex
2
2
 
3
- A [Roda](https://github.com/jeremyevans/roda) plugin that adds some convenience rendering [Phlex](https://github.com/phlex-ruby/phlex) views.
3
+ A [Roda](https://github.com/jeremyevans/roda) plugin that adds some convenience rendering
4
+ [Phlex](https://github.com/phlex-ruby/phlex) views.
4
5
  Especially accessing application methods from the view.
5
6
 
7
+ * API documentation is available at [https://www.rubydoc.info/gems/roda-phlex](https://www.rubydoc.info/gems/roda-phlex/Roda/RodaPlugins/Phlex/InstanceMethods)
8
+
6
9
  ## Installation
7
10
 
8
11
  Install the gem and add to the application's Gemfile by executing:
@@ -21,23 +24,23 @@ gem install roda-phlex
21
24
 
22
25
  `plugin :phlex` takes the following options:
23
26
 
24
- - `:layout` (`Phlex::SGML`): Specifies the layout class to be used for rendering
27
+ * `:layout` (`Phlex::SGML`): Specifies the layout class to be used for rendering
25
28
  views. This class should be a Phlex layout class that defines how the
26
29
  views are structured and rendered.
27
- - `:layout_opts` (`Object`): Options that are passed to the layout
30
+ * `:layout_opts` (`Object`): Options that are passed to the layout
28
31
  class when it is instantiated. These options can be used to customize
29
32
  the behavior of the layout. Usually, this is a `Hash`.
30
- - `:layout_handler` (`#call`): A custom handler for creating layout
33
+ * `:layout_handler` (`#call`): A custom handler for creating layout
31
34
  instances. This proc receives three arguments: the layout class, the
32
- layout options, and the object to be rendered. By default, it uses the
35
+ layout options, and the object to be rendered. By default, it runs
33
36
  `layout.new(obj, **layout_opts)`, which instantiates the layout class with the
34
37
  provided view object and options as keyword arguments.
35
- - `:delegate`: Define if or which methods should be delegated to the Roda app:
36
- - `true` (default): Create a single `app` method that delegates to the Roda app.
37
- - `false`: Do not create any delegate methods.
38
- - `:all`: Delegate all methods the Roda app responds to, to it. Be careful with this option.
39
- It can lead to unexpected behavior if the Roda app has methods that conflict with Phlex methods.
40
- - `Symbol`, `String`, `Array`: Delegate only the specified methods to the Roda app.
38
+ * `:delegate`: Define if or which methods should be delegated to the Roda app:
39
+ + `true` (default): Create a single `app` method that delegates to the Roda app.
40
+ + `false`: Do not create any delegate methods.
41
+ + `:all`: Delegate all methods the Roda app responds to, to it. Be careful with this option.
42
+ It can lead to unexpected behavior if the Roda app has methods that conflict with Phlex methods.
43
+ + `Symbol`, `String`, `Array<Symbol,String>`: Delegate only the specified methods to the Roda app.
41
44
 
42
45
  ## Usage
43
46
 
@@ -86,7 +89,8 @@ end
86
89
 
87
90
  ## Streaming
88
91
 
89
- Streaming a Phlex view can be enabled by passing `stream: true` which will cause Phlex to automatically write to the response after the closing `</head>` and buffer the remaining content.
92
+ Streaming a Phlex view can be enabled by passing `stream: true` which will cause Phlex to automatically write
93
+ to the response after the closing `</head>` and buffer the remaining content.
90
94
  The Roda `:stream` plugin must be enabled for this to work.
91
95
 
92
96
  ```ruby
@@ -101,7 +105,7 @@ You can also manually flush the contents of the buffer at any point using Phlex'
101
105
 
102
106
  ```ruby
103
107
  class Layout < Phlex::HTML
104
- def template(&block)
108
+ def view_template(&block)
105
109
  doctype
106
110
  html {
107
111
  head {
@@ -120,7 +124,7 @@ class Layout < Phlex::HTML
120
124
  end
121
125
 
122
126
  class MyView < Phlex::HTML
123
- def template
127
+ def view_template
124
128
  render Layout.new {
125
129
  # Knowing that this page can take a while to generate we can choose to
126
130
  # flush here so the browser can render the site header while downloading
@@ -156,7 +160,9 @@ end
156
160
 
157
161
  ## Contributing
158
162
 
159
- Bug reports and pull requests are welcome on GitHub at <https://github.com/fnordfish/roda-phlex>. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/fnordfish/roda-phlex/blob/main/CODE_OF_CONDUCT.md).
163
+ Bug reports and pull requests are welcome on GitHub at <https://github.com/fnordfish/roda-phlex>.
164
+ This project is intended to be a safe, welcoming space for collaboration, and contributors are expected
165
+ to adhere to the [code of conduct](https://github.com/fnordfish/roda-phlex/blob/main/CODE_OF_CONDUCT.md).
160
166
 
161
167
  ## License
162
168
 
@@ -164,8 +170,10 @@ The gem is available as open source under the terms of the [MIT License](https:/
164
170
 
165
171
  ## Code of Conduct
166
172
 
167
- Everyone interacting in the Roda::Phlex project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/fnordfish/roda-phlex/blob/main/CODE_OF_CONDUCT.md).
173
+ Everyone interacting in the Roda::Phlex project's codebases, issue trackers, chat rooms and mailing lists is expected
174
+ to follow the [code of conduct](https://github.com/fnordfish/roda-phlex/blob/main/CODE_OF_CONDUCT.md).
168
175
 
169
176
  ## Acknowledgements
170
177
 
171
- This gem is based on [phlex-sinatra](https://github.com/benpickles/phlex-sinatra), and extended by the layout handling features in [RomanTurner's gist](https://gist.github.com/RomanTurner/0ce0b8792e4149d152d2af2224cb6407)
178
+ This gem is based on [phlex-sinatra](https://github.com/benpickles/phlex-sinatra), and extended by the layout handling
179
+ features in [RomanTurner's gist](https://gist.github.com/RomanTurner/0ce0b8792e4149d152d2af2224cb6407)
data/lib/roda/phlex.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  class Roda
4
4
  module RodaPlugins
5
5
  module Phlex
6
- VERSION = "0.1.0"
6
+ VERSION = "0.2.0"
7
7
  end
8
8
  end
9
9
  end
@@ -18,11 +18,11 @@ class Roda
18
18
  # `DEFAULT_LAYOUT_HANDLER`, which instantiates the layout class with the
19
19
  # provided object and options as keyword arguments.
20
20
  # - `:delegate`: Define if or which methods should be delegated to the Roda app:
21
- # - `true` (default): Create a single `app` method that delegates to the Roda app.
22
- # - `false`: Do not create any delegate methods.
23
- # - `:all`: Delegate all methods the Roda app responds to, to it. Be careful with this option.
24
- # It can lead to unexpected behavior if the Roda app has methods that conflict with Phlex methods.
25
- # - `Symbol`, `String`, `Array`: Delegate only the specified methods to the Roda app.
21
+ # + `true` (default): Create a single `app` method that delegates to the Roda app.
22
+ # + `false`: Do not create any delegate methods.
23
+ # + `:all`: Delegate all methods the Roda app responds to, to it. Be careful with this option.
24
+ # It can lead to unexpected behavior if the Roda app has methods that conflict with Phlex methods.
25
+ # + `Symbol`, `String`, `Array<Symbol,String>`: Delegate only the named methods to the Roda app.
26
26
  module Phlex
27
27
  Undefined = Object.new
28
28
  private_constant :Undefined
@@ -44,6 +44,11 @@ class Roda
44
44
 
45
45
  # The default layout handler for creating layout instances.
46
46
  # Expects layout options to be a +Hash+ when provided.
47
+ # Layout options are passed as keyword arguments to the layout class.
48
+ #
49
+ # @param layout [Class] The layout class to be instantiated.
50
+ # @param layout_opts [Hash, nil] The layout options to be passed to the layout class.
51
+ # @param obj [Phlex::SGML] The object to be rendered.
47
52
  DEFAULT_LAYOUT_HANDLER = proc do |layout, layout_opts, obj|
48
53
  layout_opts ? layout.new(obj, **layout_opts) : layout.new(obj)
49
54
  end
@@ -93,24 +98,32 @@ class Roda
93
98
 
94
99
  module InstanceMethods
95
100
  # Retrieves or sets the layout.
96
- # @param layout [Phlex::SGML, Undefined, nil] The layout to be set.
97
- # @return [Phlex::SGML, nil] The current layout or nil if not set.
101
+ # When no argument is provided, it returns the current layout.
102
+ # Use +nil+ or +false+ to disable layout.
103
+ #
104
+ # @param layout [Class, nil, false] The layout (a +Phlex::SGML+ class) to be set.
105
+ # @return [Class, nil] The current layout (a +Phlex::SGML+ class) or nil if not set.
98
106
  def phlex_layout(layout = Undefined)
99
107
  case layout
100
108
  when Undefined
101
109
  opts.dig(:phlex, :layout)
102
- when nil
110
+ when nil, false
103
111
  opts[:phlex].delete(:layout)
104
- opts[:phlex].delete(:layout_opts)
105
- when ::Phlex::SGML
106
- opts[:phlex][:layout] = layout
107
112
  else
108
- raise TypeError.new(layout)
113
+ if layout <= ::Phlex::SGML
114
+ opts[:phlex][:layout] = layout
115
+ else
116
+ raise TypeError.new(layout)
117
+ end
109
118
  end
110
119
  end
111
120
 
112
121
  # Retrieves or sets the layout options.
113
- # @param layout_opts [Undefined, nil] The layout options to be set.
122
+ # When no argument is provided, it returns the current layout options.
123
+ # Use +nil+ to delete layout options.
124
+ #
125
+ # @note The {DEFAULT_LAYOUT_HANDLER} expects +layout_opts+ to be a +Hash+.
126
+ # @param layout_opts [Object, nil] The layout options to be set, usually a +Hash+.
114
127
  # @return [Object, nil] The current layout options or nil if not set.
115
128
  def phlex_layout_opts(layout_opts = Undefined)
116
129
  case layout_opts
@@ -124,14 +137,17 @@ class Roda
124
137
  end
125
138
 
126
139
  # Retrieves or sets the layout handler.
127
- # @param handler [#call, Undefined, nil] The layout handler to be set.
128
- # @return [#call, nil] The current layout handler or nil if not set.
140
+ # When no argument is provided, it returns the current layout handler.
141
+ # Use +nil+ or +:default: to reset the layout handler to the {DEFAULT_LAYOUT_HANDLER}.
142
+ #
143
+ # @param handler [#call, nil, :default] The layout handler to be set.
144
+ # @return [#call] The current layout handler.
129
145
  def phlex_layout_handler(handler = Undefined)
130
146
  case handler
131
147
  when Undefined
132
148
  opts.dig(:phlex, :layout_handler)
133
- when nil
134
- opts[:phlex].delete(:layout_handler)
149
+ when nil, :default
150
+ opts[:phlex][:layout_handler] = DEFAULT_LAYOUT_HANDLER
135
151
  else
136
152
  opts[:phlex][:layout_handler] = handler
137
153
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roda-phlex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Schulze
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-08-28 00:00:00.000000000 Z
11
+ date: 2024-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: phlex
@@ -47,8 +47,10 @@ extra_rdoc_files: []
47
47
  files:
48
48
  - ".devcontainer/Gemfile"
49
49
  - ".devcontainer/devcontainer.json"
50
+ - ".markdownlint.yml"
50
51
  - ".rspec"
51
52
  - ".standard.yml"
53
+ - ".yardopts"
52
54
  - CHANGELOG.md
53
55
  - CODE_OF_CONDUCT.md
54
56
  - LICENSE.txt
@@ -78,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
80
  - !ruby/object:Gem::Version
79
81
  version: '0'
80
82
  requirements: []
81
- rubygems_version: 3.5.17
83
+ rubygems_version: 3.5.23
82
84
  signing_key:
83
85
  specification_version: 4
84
86
  summary: A Phlex adapter for Roda