papercraft 0.22 → 0.23
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 +105 -54
- data/lib/papercraft/extensions/soap.rb +46 -0
- data/lib/papercraft/version.rb +1 -1
- data/lib/papercraft.rb +0 -1
- metadata +3 -3
- data/lib/papercraft/encoding.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 341520b9db20c53da441299fb449c4eea3321924517f4b93e70af1119b4516c3
|
4
|
+
data.tar.gz: 861a5a2747c3a468abb780cf50710698e52fbac1fc236c8672c2bbb328db6f4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7668a984a2c7957ba3f65234eab6770b4e969e0d2b4e1345839db8c0711d07afbfef5735b67de9a94c22994b4b6c1d6b2f87e07a810a0cae04ccbecb1ff5b38f
|
7
|
+
data.tar.gz: 1605f9b1459ab20b9cec97805529764ece6058ce34609dc7d75fe38d8b35889c65e4afa5174f1c1d89dfb46205d282e65e1020995c999f66b84a5f9b5e505de1
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -78,9 +78,10 @@ hello.render('world')
|
|
78
78
|
- [Emitting Markdown](#emitting-markdown)
|
79
79
|
- [Working with MIME types](#working-with-mime-types)
|
80
80
|
- [Deferred evaluation](#deferred-evaluation)
|
81
|
-
- [Papercraft extensions](#papercraft-extensions)
|
82
81
|
- [XML templates](#xml-templates)
|
83
82
|
- [JSON templates](#json-templates)
|
83
|
+
- [Papercraft extensions](#papercraft-extensions)
|
84
|
+
- [Bundled extensions](#bundled-extensions)
|
84
85
|
- [API Reference](#api-reference)
|
85
86
|
|
86
87
|
## Installing Papercraft
|
@@ -521,6 +522,72 @@ page = default_layout.apply {
|
|
521
522
|
}
|
522
523
|
```
|
523
524
|
|
525
|
+
## XML templates
|
526
|
+
|
527
|
+
XML templates behave largely the same as HTML templates, with a few minor
|
528
|
+
differences. XML templates employ a different encoding algorithm, and lack some
|
529
|
+
specific HTML functionality, such as emitting Markdown.
|
530
|
+
|
531
|
+
Here's an example showing how to create an RSS feed:
|
532
|
+
|
533
|
+
```ruby
|
534
|
+
rss = Papercraft.xml(mime_type: 'text/xml; charset=utf-8') { |resource:, **props|
|
535
|
+
rss(version: '2.0', 'xmlns:atom' => 'http://www.w3.org/2005/Atom') {
|
536
|
+
channel {
|
537
|
+
title 'Noteflakes'
|
538
|
+
link 'https://noteflakes.com/'
|
539
|
+
description 'A website by Sharon Rosner'
|
540
|
+
language 'en-us'
|
541
|
+
pubDate Time.now.httpdate
|
542
|
+
emit '<atom:link href="https://noteflakes.com/feeds/rss" rel="self" type="application/rss+xml" />'
|
543
|
+
|
544
|
+
article_entries = resource.page_list('/articles').reverse
|
545
|
+
|
546
|
+
article_entries.each { |e|
|
547
|
+
item {
|
548
|
+
title e[:title]
|
549
|
+
link "https://noteflakes.com#{e[:url]}"
|
550
|
+
guid "https://noteflakes.com#{e[:url]}"
|
551
|
+
pubDate e[:date].to_time.httpdate
|
552
|
+
description e[:html_content]
|
553
|
+
}
|
554
|
+
}
|
555
|
+
}
|
556
|
+
}
|
557
|
+
}
|
558
|
+
```
|
559
|
+
|
560
|
+
## JSON templates
|
561
|
+
|
562
|
+
JSON templates behave largely the same as HTML and XML templates. The only major
|
563
|
+
difference is that for adding array items you'll need to use the `#item` method:
|
564
|
+
|
565
|
+
```ruby
|
566
|
+
Papercraft.json {
|
567
|
+
item 1
|
568
|
+
item 2
|
569
|
+
item 3
|
570
|
+
}.render #=> "[1,2,3]"
|
571
|
+
```
|
572
|
+
|
573
|
+
Otherwise, you can create arbitrarily complex JSON structures by mixing hashes
|
574
|
+
and arrays:
|
575
|
+
|
576
|
+
```Ruby
|
577
|
+
Papercraft.json {
|
578
|
+
foo {
|
579
|
+
bar {
|
580
|
+
item nil
|
581
|
+
item true
|
582
|
+
item 123.456
|
583
|
+
}
|
584
|
+
}
|
585
|
+
}.render #=> "{\"foo\":{\"bar\":[null,true,123.456]}}"
|
586
|
+
```
|
587
|
+
|
588
|
+
Papercraft uses the [JSON gem](https://rubyapi.org/3.1/o/json) under the hood in
|
589
|
+
order to generate actual JSON.
|
590
|
+
|
524
591
|
## Papercraft extensions
|
525
592
|
|
526
593
|
Papercraft extensions are modules that contain one or more methods that can be
|
@@ -593,72 +660,56 @@ Papercraft.html {
|
|
593
660
|
}
|
594
661
|
```
|
595
662
|
|
596
|
-
##
|
663
|
+
## Bundled Extensions
|
597
664
|
|
598
|
-
|
599
|
-
|
600
|
-
|
665
|
+
Papercraft comes bundled with a few extensions that address common use cases.
|
666
|
+
All bundled extensions are namespaced under `Papercraft::Extensions`, and must
|
667
|
+
be specifically required in order to be available to templates.
|
601
668
|
|
602
|
-
|
669
|
+
For all bundled Papercraft extensions, there's no need to call
|
670
|
+
`Papercraft.extension`, requiring the extension is sufficient.
|
603
671
|
|
604
|
-
|
605
|
-
rss = Papercraft.xml(mime_type: 'text/xml; charset=utf-8') { |resource:, **props|
|
606
|
-
rss(version: '2.0', 'xmlns:atom' => 'http://www.w3.org/2005/Atom') {
|
607
|
-
channel {
|
608
|
-
title 'Noteflakes'
|
609
|
-
link 'https://noteflakes.com/'
|
610
|
-
description 'A website by Sharon Rosner'
|
611
|
-
language 'en-us'
|
612
|
-
pubDate Time.now.httpdate
|
613
|
-
emit '<atom:link href="https://noteflakes.com/feeds/rss" rel="self" type="application/rss+xml" />'
|
614
|
-
|
615
|
-
article_entries = resource.page_list('/articles').reverse
|
672
|
+
### SOAP extension
|
616
673
|
|
617
|
-
|
618
|
-
item {
|
619
|
-
title e[:title]
|
620
|
-
link "https://noteflakes.com#{e[:url]}"
|
621
|
-
guid "https://noteflakes.com#{e[:url]}"
|
622
|
-
pubDate e[:date].to_time.httpdate
|
623
|
-
description e[:html_content]
|
624
|
-
}
|
625
|
-
}
|
626
|
-
}
|
627
|
-
}
|
628
|
-
}
|
629
|
-
```
|
674
|
+
> The SOAP extension was contributed by [@aemadrid](https://github.com/aemadrid).
|
630
675
|
|
631
|
-
|
676
|
+
The SOAP extension provides common tags for building SOAP payloads. To load the
|
677
|
+
SOAP extensions, require `polyphony/extensions/soap`. The extension provides the
|
678
|
+
following methods:
|
632
679
|
|
633
|
-
|
634
|
-
|
680
|
+
- `soap.Body(...)` - emits a `soap:Body` tag.
|
681
|
+
- `soap.Envelope(...)` - emits a `soap:Envelope` tag.
|
682
|
+
- `soap.Fault(...)` - emits a `soap:Fault` tag.
|
683
|
+
- `soap.Header(...)` - emits a `soap:Header` tag.
|
635
684
|
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
item 2
|
640
|
-
item 3
|
641
|
-
}.render #=> "[1,2,3]"
|
642
|
-
```
|
685
|
+
As mentioned above, namespaced tags and attributes may be specified by using
|
686
|
+
double underscores for colons. Other tags that contain special characters may be
|
687
|
+
emitted using the `#tag` method:
|
643
688
|
|
644
|
-
|
645
|
-
|
689
|
+
```ruby
|
690
|
+
require 'polyphony/extensions/soap'
|
646
691
|
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
692
|
+
xml = Papercraft.xml {
|
693
|
+
soap.Envelope(
|
694
|
+
xmlns__xsd: 'http://www.w3.org/2001/XMLSchema',
|
695
|
+
xmlns__xsi: 'http://www.w3.org/2001/XMLSchema-instance'
|
696
|
+
) {
|
697
|
+
soap.Body {
|
698
|
+
PosRequest(xmlns: 'http://Some.Site') {
|
699
|
+
tag('Ver1.0') {
|
700
|
+
Header {
|
701
|
+
SecretAPIKey 'some_secret_key'
|
702
|
+
}
|
703
|
+
Transaction {
|
704
|
+
SomeData {}
|
705
|
+
}
|
706
|
+
}
|
707
|
+
}
|
654
708
|
}
|
655
709
|
}
|
656
|
-
}
|
710
|
+
}
|
657
711
|
```
|
658
712
|
|
659
|
-
Papercraft uses the [JSON gem](https://rubyapi.org/3.1/o/json) under the hood in
|
660
|
-
order to generate actual JSON.
|
661
|
-
|
662
713
|
## API Reference
|
663
714
|
|
664
715
|
The API reference for this library can be found
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Papercraft
|
4
|
+
module Extensions
|
5
|
+
module Soap
|
6
|
+
# Emits a SOAP XML tag that identifies the XML document as a SOAP message.
|
7
|
+
#
|
8
|
+
# @param **props [Hash] tag attributes
|
9
|
+
# @param &block [Proc] optional inner XML
|
10
|
+
# @return [void]
|
11
|
+
def Envelope(**props, &block)
|
12
|
+
props[:xmlns__soap] ||= 'http://schemas.xmlsoap.org/soap/envelope/'
|
13
|
+
tag('soap:Envelope', **props, &block)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Emits a SOAP XML tag that contains header information.
|
17
|
+
#
|
18
|
+
# @param **props [Hash] tag attributes
|
19
|
+
# @param &block [Proc] optional inner XML
|
20
|
+
# @return [void]
|
21
|
+
def Header(**props, &blk)
|
22
|
+
tag('soap:Header', **props, &blk)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Emits a SOAP XML tag that contains header information.
|
26
|
+
#
|
27
|
+
# @param **props [Hash] tag attributes
|
28
|
+
# @param &block [Proc] optional inner XML
|
29
|
+
# @return [void]
|
30
|
+
def Body(**props, &blk)
|
31
|
+
tag('soap:Body', **props, &blk)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Emits a SOAP XML tag that contains errors and status information.
|
35
|
+
#
|
36
|
+
# @param **props [Hash] tag attributes
|
37
|
+
# @param &block [Proc] optional inner XML
|
38
|
+
# @return [void]
|
39
|
+
def Fault(**props, &blk)
|
40
|
+
tag('soap:Fault', **props, &blk)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
Papercraft.extension(soap: Papercraft::Extensions::Soap)
|
data/lib/papercraft/version.rb
CHANGED
data/lib/papercraft.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: papercraft
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.23'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-02-
|
11
|
+
date: 2022-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: escape_utils
|
@@ -134,8 +134,8 @@ files:
|
|
134
134
|
- README.md
|
135
135
|
- lib/papercraft.rb
|
136
136
|
- lib/papercraft/compiler.rb
|
137
|
-
- lib/papercraft/encoding.rb
|
138
137
|
- lib/papercraft/extension_proxy.rb
|
138
|
+
- lib/papercraft/extensions/soap.rb
|
139
139
|
- lib/papercraft/html.rb
|
140
140
|
- lib/papercraft/json.rb
|
141
141
|
- lib/papercraft/renderer.rb
|
data/lib/papercraft/encoding.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Papercraft
|
4
|
-
# Papercraft::Encoding includes common encoding methods
|
5
|
-
module Encoding
|
6
|
-
# Encodes the given string to safe HTML text, converting special characters
|
7
|
-
# into the respective HTML entities. If a non-string value is given, it is
|
8
|
-
# converted to `String` using `#to_s`.
|
9
|
-
#
|
10
|
-
# @param text [String] string to be encoded
|
11
|
-
# @return [String] HTML-encoded string
|
12
|
-
def __html_encode__(text)
|
13
|
-
EscapeUtils.escape_html(text.to_s)
|
14
|
-
end
|
15
|
-
|
16
|
-
# Encodes the given string to safe URI component, converting special
|
17
|
-
# characters to URI entities. If a non-string value is given, it is
|
18
|
-
# converted to `String` using `#to_s`.
|
19
|
-
#
|
20
|
-
# @param text [String] string to be encoded
|
21
|
-
# @return [String] URI-encoded string
|
22
|
-
def __uri_encode__(text)
|
23
|
-
EscapeUtils.escape_uri(text.to_s)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|