phlex-sinatra 0.1.0 → 0.2.0
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 +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +19 -3
- data/lib/phlex/sinatra/version.rb +1 -1
- data/lib/phlex-sinatra.rb +18 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0e0c3d6038f57d3a01b5abb0172d1598a0edb08d46e455dede38da9ad708560
|
4
|
+
data.tar.gz: 6e5025677940fc22ed1830405646c18d4d441f8125a4c37f3179d8c8e735a354
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e94e93fbb09a9b6043667f8139cc515a4d6b5302f3459b5216d4f900d471579b4621716e1734d4dd38ead39788074c6442ed3f0c46ce63e7aa9faa4868bb4cda
|
7
|
+
data.tar.gz: 5026ea9e6f0af3ae2b064dc475d441e85b6753e49e37ef1e57f6aca00d3d7e15feb8a6eb188a6939eff70c0dae7ff1fa4db8447f3cd2a6c512a9212273ef4a4e
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## Version 0.2.0 - 2023-04-24
|
2
|
+
|
3
|
+
- Allow passing a `content_type:` kwarg to the `#phlex` helper so it behaves like Sinatra's other template helpers (defaults to `:html` – or `:svg` for a `Phlex::SVG` instance).
|
4
|
+
- Raise an informative error message if the `#phlex` helper receives something other than a Phlex instance.
|
5
|
+
|
1
6
|
## Version 0.1.0 - 2023-04-17
|
2
7
|
|
3
8
|
- Initial release
|
data/README.md
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
[Phlex](https://github.com/phlex-ruby/phlex) already works with Sinatra (and everything else) but its normal usage leaves you without access to Sinatra's standard helper methods. This integration lets you use the `url()` helper method from within a Phlex view (along with the rest of the helper methods available in a Sinatra action).
|
4
4
|
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add phlex-sinatra to your application's Gemfile and run `bundle install`.
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'phlex-sinatra'
|
11
|
+
```
|
12
|
+
|
5
13
|
## Usage
|
6
14
|
|
7
15
|
To enable the integration use the `phlex` method in your Sinatra action and pass an _instance_ of the Phlex view (instead of using `.call` to get its output):
|
@@ -26,6 +34,14 @@ class MyView < Phlex::HTML
|
|
26
34
|
end
|
27
35
|
```
|
28
36
|
|
37
|
+
You can also pass an alternative content type – which defaults to `:html` (or `:svg` for a `Phlex::SVG` instance):
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
get '/foo' do
|
41
|
+
phlex MyView.new, content_type: :xml
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
29
45
|
## Why?
|
30
46
|
|
31
47
|
It might not seem obvious at first why you'd use `url()` at all given that you mostly just pass the string you want to output and then probably `false` so the scheme/host isn't included.
|
@@ -34,13 +50,13 @@ There are a couple of reasons:
|
|
34
50
|
|
35
51
|
1. **Linking to a full URL**
|
36
52
|
|
37
|
-
Sometimes you need to link to a page on the site using its full URL
|
53
|
+
Sometimes you need to link to a page on the site using its full URL – for instance within a feed or for an `og:image` social media preview image link.
|
38
54
|
|
39
55
|
2. **Awareness that the app is being served from a subdirectory**
|
40
56
|
|
41
|
-
This isn't something you encounter very often in a standard Sinatra app but you hit it quite quickly if you're using [Parklife](https://github.com/benpickles/parklife) to generate a static build which you host on GitHub Pages
|
57
|
+
This isn't something you encounter very often in a standard Sinatra app but you hit it quite quickly if you're using [Parklife](https://github.com/benpickles/parklife) to generate a static build which you host on GitHub Pages – which is exactly what prompted me to write this integration.
|
42
58
|
|
43
|
-
In this case by using the `url()` helper you won’t have to change anything when switching between serving the app from `/` in development and hosting it at `/my-repository/` in production
|
59
|
+
In this case by using the `url()` helper you won’t have to change anything when switching between serving the app from `/` in development and hosting it at `/my-repository/` in production – internal links to other pages/stylesheets/etc will always be correct regardless.
|
44
60
|
|
45
61
|
## Contributing
|
46
62
|
|
data/lib/phlex-sinatra.rb
CHANGED
@@ -5,6 +5,18 @@ require_relative 'phlex/sinatra/version'
|
|
5
5
|
|
6
6
|
module Phlex
|
7
7
|
module Sinatra
|
8
|
+
Error = Class.new(StandardError)
|
9
|
+
|
10
|
+
class TypeError < Error
|
11
|
+
MAX_SIZE = 32
|
12
|
+
|
13
|
+
def initialize(obj)
|
14
|
+
content = obj.inspect
|
15
|
+
content = content[0, MAX_SIZE] + '…' if content.size > MAX_SIZE
|
16
|
+
super "Expected a Phlex instance, received #{content}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
8
20
|
module SGML
|
9
21
|
module Overrides
|
10
22
|
def helpers
|
@@ -25,7 +37,12 @@ end
|
|
25
37
|
|
26
38
|
module Sinatra
|
27
39
|
module Templates
|
28
|
-
def phlex(obj)
|
40
|
+
def phlex(obj, content_type: nil)
|
41
|
+
raise Phlex::Sinatra::TypeError.new(obj) unless obj.is_a?(Phlex::SGML)
|
42
|
+
|
43
|
+
content_type ||= :svg if obj.is_a?(Phlex::SVG)
|
44
|
+
self.content_type(content_type) if content_type
|
45
|
+
|
29
46
|
obj.call(view_context: self)
|
30
47
|
end
|
31
48
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phlex-sinatra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Pickles
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: phlex
|