prismic.io 1.4.5 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +8 -8
- data/Gemfile.lock +5 -2
- data/lib/prismic/fragments.rb +2 -0
- data/lib/prismic/fragments/boolean_field.rb +21 -0
- data/lib/prismic/fragments/image.rb +1 -1
- data/lib/prismic/fragments/integration_field.rb +19 -0
- data/lib/prismic/fragments/link.rb +20 -12
- data/lib/prismic/fragments/slices.rb +51 -2
- data/lib/prismic/fragments/structured_text.rb +19 -1
- data/lib/prismic/json_parsers.rb +57 -25
- data/lib/prismic/version.rb +1 -1
- data/lib/prismic/with_fragments.rb +7 -0
- data/spec/fragments_spec.rb +67 -2
- data/spec/json_parsers_spec.rb +18 -1
- data/spec/micro_spec.rb +1 -1
- data/spec/predicates_spec.rb +13 -0
- data/spec/responses_mocks/composite_slice.json +63 -0
- data/spec/responses_mocks/document.json +4 -0
- data/spec/responses_mocks/{slices.json → simple_slice.json} +0 -0
- metadata +10 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1f892385baa9ad4441d83552d88db0f1633aa97288324008e2e22dfd191b95b8
|
4
|
+
data.tar.gz: 74b6efa38bcb4c81be35a39af3ce6ae40448668babc2d1070724e47efdc09226
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74bc269db0e3c96f088196b27f506f9c73109507a857e1e81e7754cddd8721425e98834df7517cd10577e539b496bfad9ff5ead09a39134fd1172c0aecd1cbab
|
7
|
+
data.tar.gz: 2cb1ad33ac5befb98b6f31d674d2753f83c2992581616b9c8360f230973e44cf14e4e02023e42ff779587f10a6b587ca6f87e00f2408cabe0c9ee44bd41acad4
|
data/.travis.yml
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
-
|
4
|
-
- 2.3
|
5
|
-
- 2.
|
6
|
-
- 2.
|
7
|
-
-
|
8
|
-
-
|
9
|
-
-
|
10
|
-
- jruby-19mode
|
3
|
+
#- ruby-head
|
4
|
+
- 2.6.3
|
5
|
+
- 2.5.5
|
6
|
+
- 2.4.6
|
7
|
+
- jruby-head
|
8
|
+
- jruby-9.1.9.0
|
9
|
+
#- jruby-1.7.26
|
11
10
|
|
12
11
|
sudo: false
|
13
12
|
cache: bundler
|
14
13
|
|
14
|
+
before_install: gem install bundler:1.16.0
|
15
15
|
script: bundle exec rspec spec
|
16
16
|
|
17
17
|
notifications:
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
prismic.io (1.
|
4
|
+
prismic.io (1.7.0)
|
5
5
|
hashery (~> 2.1.1)
|
6
6
|
|
7
7
|
GEM
|
@@ -29,7 +29,7 @@ GEM
|
|
29
29
|
multi_json (~> 1.0)
|
30
30
|
simplecov-html (~> 0.7.1)
|
31
31
|
simplecov-html (0.7.1)
|
32
|
-
yajl-ruby (1.1
|
32
|
+
yajl-ruby (1.3.1)
|
33
33
|
|
34
34
|
PLATFORMS
|
35
35
|
java
|
@@ -44,3 +44,6 @@ DEPENDENCIES
|
|
44
44
|
rspec (~> 2.14)
|
45
45
|
simplecov (~> 0.7)
|
46
46
|
yajl-ruby
|
47
|
+
|
48
|
+
BUNDLED WITH
|
49
|
+
1.17.2
|
data/lib/prismic/fragments.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Prismic
|
3
|
+
module Fragments
|
4
|
+
class BooleanField < Fragment
|
5
|
+
attr_accessor :value
|
6
|
+
|
7
|
+
def initialize(value)
|
8
|
+
@value = value
|
9
|
+
end
|
10
|
+
|
11
|
+
def as_html(link_resolver=nil)
|
12
|
+
if (@value === true)
|
13
|
+
%(<input type="checkbox" checked="checked" />)
|
14
|
+
else
|
15
|
+
%(<input type="checkbox" />)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
@@ -53,7 +53,7 @@ module Prismic
|
|
53
53
|
|
54
54
|
def as_html(link_resolver=nil)
|
55
55
|
html = []
|
56
|
-
html << (link_to.nil? ? '' : link_to.start_html(link_resolver))
|
56
|
+
html << (link_to.nil? ? '' : link_to.start_html(link_resolver, link_to.target))
|
57
57
|
html << %(<img src="#@url" alt="#@alt" width="#@width" height="#@height" />)
|
58
58
|
html << (link_to.nil? ? '' : link_to.end_html)
|
59
59
|
html.join
|
@@ -3,8 +3,12 @@ module Prismic
|
|
3
3
|
module Fragments
|
4
4
|
class Link < Fragment
|
5
5
|
|
6
|
-
def start_html(link_resolver = nil)
|
7
|
-
|
6
|
+
def start_html(link_resolver = nil, target = nil)
|
7
|
+
unless target.nil?
|
8
|
+
%(<a href="#{url(link_resolver)}" target="#{target}" rel="noopener">)
|
9
|
+
else
|
10
|
+
%(<a href="#{url(link_resolver)}">)
|
11
|
+
end
|
8
12
|
end
|
9
13
|
|
10
14
|
def end_html
|
@@ -12,7 +16,7 @@ module Prismic
|
|
12
16
|
end
|
13
17
|
|
14
18
|
def as_html(link_resolver=nil)
|
15
|
-
%(#{start_html(link_resolver)}#{url(link_resolver)}#{end_html})
|
19
|
+
%(#{start_html(link_resolver, @target)}#{url(link_resolver)}#{end_html})
|
16
20
|
end
|
17
21
|
|
18
22
|
# Returns the URL of the link
|
@@ -27,10 +31,11 @@ module Prismic
|
|
27
31
|
end
|
28
32
|
|
29
33
|
class WebLink < Link
|
30
|
-
attr_accessor :url
|
34
|
+
attr_accessor :url, :target
|
31
35
|
|
32
|
-
def initialize(url)
|
36
|
+
def initialize(url, target = nil)
|
33
37
|
@url = url
|
38
|
+
@target = target
|
34
39
|
end
|
35
40
|
|
36
41
|
# Returns the URL of the link
|
@@ -47,13 +52,14 @@ module Prismic
|
|
47
52
|
end
|
48
53
|
|
49
54
|
class FileLink < Link
|
50
|
-
attr_accessor :url, :name, :kind, :size
|
55
|
+
attr_accessor :url, :name, :kind, :size, :target
|
51
56
|
|
52
|
-
def initialize(url, name, kind, size)
|
57
|
+
def initialize(url, name, kind, size, target = nil)
|
53
58
|
@url = url
|
54
59
|
@name = name
|
55
60
|
@kind = kind
|
56
61
|
@size = size
|
62
|
+
@target = target
|
57
63
|
end
|
58
64
|
|
59
65
|
def as_html(link_resolver=nil)
|
@@ -75,10 +81,11 @@ module Prismic
|
|
75
81
|
end
|
76
82
|
|
77
83
|
class ImageLink < Link
|
78
|
-
attr_accessor :url
|
84
|
+
attr_accessor :url, :target
|
79
85
|
|
80
|
-
def initialize(url)
|
86
|
+
def initialize(url, target = nil)
|
81
87
|
@url = url
|
88
|
+
@target = target
|
82
89
|
end
|
83
90
|
|
84
91
|
# Returns the URL of the link
|
@@ -96,9 +103,9 @@ module Prismic
|
|
96
103
|
|
97
104
|
class DocumentLink < Link
|
98
105
|
include Prismic::WithFragments
|
99
|
-
attr_accessor :id, :uid, :type, :tags, :slug, :lang, :fragments, :broken
|
106
|
+
attr_accessor :id, :uid, :type, :tags, :slug, :lang, :fragments, :broken, :target
|
100
107
|
|
101
|
-
def initialize(id, uid, type, tags, slug, lang, fragments, broken)
|
108
|
+
def initialize(id, uid, type, tags, slug, lang, fragments, broken, target = nil)
|
102
109
|
@id = id
|
103
110
|
@uid = uid
|
104
111
|
@type = type
|
@@ -107,9 +114,10 @@ module Prismic
|
|
107
114
|
@lang = lang
|
108
115
|
@fragments = fragments
|
109
116
|
@broken = broken
|
117
|
+
@target = target
|
110
118
|
end
|
111
119
|
|
112
|
-
def start_html(link_resolver)
|
120
|
+
def start_html(link_resolver, target = nil)
|
113
121
|
broken? ? %(<span>) : super
|
114
122
|
end
|
115
123
|
|
@@ -2,8 +2,57 @@
|
|
2
2
|
module Prismic
|
3
3
|
module Fragments
|
4
4
|
|
5
|
-
# A fragment of type
|
6
|
-
class
|
5
|
+
# A fragment of type CompositeSlice, an item in a SliceZone
|
6
|
+
class CompositeSlice < Fragment
|
7
|
+
attr_accessor :slice_type
|
8
|
+
attr_accessor :slice_label
|
9
|
+
attr_accessor :non_repeat
|
10
|
+
attr_accessor :repeat
|
11
|
+
|
12
|
+
def initialize(slice_type, slice_label, non_repeat, repeat)
|
13
|
+
@slice_type = slice_type
|
14
|
+
@slice_label = slice_label
|
15
|
+
@non_repeat = non_repeat
|
16
|
+
@repeat = repeat
|
17
|
+
end
|
18
|
+
|
19
|
+
# Generate an text representation of the group
|
20
|
+
#
|
21
|
+
# @return [String] the text representation
|
22
|
+
def as_text
|
23
|
+
non_repeat_text = ''
|
24
|
+
@non_repeat.each do |fragment_key, fragment_value|
|
25
|
+
non_repeat_text += fragment_value.as_text
|
26
|
+
end
|
27
|
+
|
28
|
+
"#{non_repeat_text}\n#{@repeat.as_text}"
|
29
|
+
end
|
30
|
+
|
31
|
+
# Generate an HTML representation of the group
|
32
|
+
#
|
33
|
+
# @param link_resolver [LinkResolver] The LinkResolver used to build
|
34
|
+
# application's specific URL
|
35
|
+
#
|
36
|
+
# @return [String] the HTML representation
|
37
|
+
def as_html(link_resolver=nil)
|
38
|
+
classes = ['slice']
|
39
|
+
unless (@slice_label.nil?)
|
40
|
+
classes.push(@slice_label)
|
41
|
+
end
|
42
|
+
|
43
|
+
non_repeat_html = ''
|
44
|
+
@non_repeat.each do |fragment_key, fragment_value|
|
45
|
+
non_repeat_html += fragment_value.as_html(link_resolver)
|
46
|
+
end
|
47
|
+
|
48
|
+
repeat_html = repeat.as_html(link_resolver)
|
49
|
+
|
50
|
+
%[<div data-slicetype="#{@slice_type}" class="#{classes.join(' ')}">#{non_repeat_html + repeat_html}</div>]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# A fragment of type SimpleSlice, an item in a SliceZone
|
55
|
+
class SimpleSlice < Fragment
|
7
56
|
attr_accessor :slice_type
|
8
57
|
attr_accessor :slice_label
|
9
58
|
attr_accessor :value
|
@@ -138,6 +138,8 @@ module Prismic
|
|
138
138
|
def serialize(text, link_resolver = nil)
|
139
139
|
if link.is_a? Prismic::Fragments::DocumentLink and link.broken
|
140
140
|
"<span>#{text}</span>"
|
141
|
+
elsif !link.target.nil?
|
142
|
+
%(<a href="#{link.url(link_resolver)}" target="#{link.target}" rel="noopener">#{text}</a>)
|
141
143
|
else
|
142
144
|
%(<a href="#{link.url(link_resolver)}">#{text}</a>)
|
143
145
|
end
|
@@ -370,13 +372,29 @@ module Prismic
|
|
370
372
|
end
|
371
373
|
|
372
374
|
class Embed < Block
|
373
|
-
attr_accessor :label
|
375
|
+
attr_accessor :embed, :label
|
374
376
|
|
375
377
|
def initialize(embed, label)
|
376
378
|
@embed = embed
|
377
379
|
@label = label
|
378
380
|
end
|
379
381
|
|
382
|
+
def embed_type
|
383
|
+
@embed.embed_type
|
384
|
+
end
|
385
|
+
|
386
|
+
def provider
|
387
|
+
@embed.provider
|
388
|
+
end
|
389
|
+
|
390
|
+
def url
|
391
|
+
@embed.url
|
392
|
+
end
|
393
|
+
|
394
|
+
def html
|
395
|
+
@embed.html
|
396
|
+
end
|
397
|
+
|
380
398
|
def as_html(link_resolver, html_serializer = nil)
|
381
399
|
custom = nil
|
382
400
|
unless html_serializer.nil?
|
data/lib/prismic/json_parsers.rb
CHANGED
@@ -25,10 +25,20 @@ module Prismic
|
|
25
25
|
'Multiple' => method(:multiple_parser),
|
26
26
|
'Group' => method(:group_parser),
|
27
27
|
'SliceZone' => method(:slices_parser),
|
28
|
-
'Separator' => method(:separator_parser)
|
28
|
+
'Separator' => method(:separator_parser),
|
29
|
+
'IntegrationFields' => method(:integration_fields_parser),
|
30
|
+
'Boolean' => method(:boolean_field_parser)
|
29
31
|
}
|
30
32
|
end
|
31
33
|
|
34
|
+
def integration_fields_parser(json)
|
35
|
+
Prismic::Fragments::IntegrationField.new(json['value'])
|
36
|
+
end
|
37
|
+
|
38
|
+
def boolean_field_parser(json)
|
39
|
+
Prismic::Fragments::BooleanField.new(json['value'])
|
40
|
+
end
|
41
|
+
|
32
42
|
def document_link_parser(json)
|
33
43
|
doc = json['value']['document']
|
34
44
|
type = doc['type']
|
@@ -50,15 +60,23 @@ module Prismic
|
|
50
60
|
URI.unescape(doc['slug']),
|
51
61
|
doc['lang'],
|
52
62
|
fragments,
|
53
|
-
json['value']['isBroken']
|
63
|
+
json['value']['isBroken'],
|
64
|
+
json['value']['target'] ? json['value']['target'] : nil)
|
54
65
|
end
|
55
66
|
|
56
67
|
def image_link_parser(json)
|
57
|
-
Prismic::Fragments::ImageLink.new(
|
68
|
+
Prismic::Fragments::ImageLink.new(
|
69
|
+
json['value']['image']['url'],
|
70
|
+
json['value']['target'] ? json['value']['target'] : nil)
|
58
71
|
end
|
59
72
|
|
60
73
|
def file_link_parser(json)
|
61
|
-
Prismic::Fragments::FileLink.new(
|
74
|
+
Prismic::Fragments::FileLink.new(
|
75
|
+
json['value']['file']['url'],
|
76
|
+
json['value']['file']['name'],
|
77
|
+
json['value']['file']['kind'],
|
78
|
+
json['value']['file']['size'],
|
79
|
+
json['value']['target'] ? json['value']['target'] : nil )
|
62
80
|
end
|
63
81
|
|
64
82
|
def text_parser(json)
|
@@ -74,7 +92,7 @@ module Prismic
|
|
74
92
|
end
|
75
93
|
|
76
94
|
def web_link_parser(json)
|
77
|
-
Prismic::Fragments::WebLink.new(json['value']['url'])
|
95
|
+
Prismic::Fragments::WebLink.new(json['value']['url'], json['value']['target'])
|
78
96
|
end
|
79
97
|
|
80
98
|
def date_parser(json)
|
@@ -90,14 +108,7 @@ module Prismic
|
|
90
108
|
end
|
91
109
|
|
92
110
|
def embed_parser(json)
|
93
|
-
|
94
|
-
Prismic::Fragments::Embed.new(
|
95
|
-
oembed['type'],
|
96
|
-
oembed['provider_name'],
|
97
|
-
oembed['provider_url'],
|
98
|
-
oembed['html'],
|
99
|
-
oembed
|
100
|
-
)
|
111
|
+
embed_object_parser(json['value']['oembed'])
|
101
112
|
end
|
102
113
|
|
103
114
|
def geo_point_parser(json)
|
@@ -171,17 +182,13 @@ module Prismic
|
|
171
182
|
)
|
172
183
|
when 'image'
|
173
184
|
Prismic::Fragments::StructuredText::Block::Image.new(
|
174
|
-
|
175
|
-
|
185
|
+
view_parser(block),
|
186
|
+
block['label']
|
176
187
|
)
|
177
188
|
when 'embed'
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
boembed['provider_name'],
|
182
|
-
boembed['provider_url'],
|
183
|
-
boembed['html'],
|
184
|
-
boembed
|
189
|
+
Prismic::Fragments::StructuredText::Block::Embed.new(
|
190
|
+
embed_object_parser(block['oembed']),
|
191
|
+
block['label']
|
185
192
|
)
|
186
193
|
else
|
187
194
|
puts "Unknown bloc type: #{block['type']}"
|
@@ -208,8 +215,23 @@ module Prismic
|
|
208
215
|
|
209
216
|
def slices_parser(json)
|
210
217
|
slices = []
|
218
|
+
|
211
219
|
json['value'].each do |data|
|
212
|
-
|
220
|
+
slice_type = data['slice_type']
|
221
|
+
slice_label = data['slice_label']
|
222
|
+
|
223
|
+
if data.key?('value')
|
224
|
+
slices << Prismic::Fragments::SimpleSlice.new(slice_type, slice_label, fragment_parser(data['value']))
|
225
|
+
else
|
226
|
+
non_repeat = {}
|
227
|
+
data['non-repeat'].each do |fragment_key, fragment_value|
|
228
|
+
non_repeat[fragment_key] = fragment_parser(fragment_value)
|
229
|
+
end
|
230
|
+
|
231
|
+
repeat = group_parser({ 'type' => 'Group', 'value' => data['repeat']})
|
232
|
+
|
233
|
+
slices << Prismic::Fragments::CompositeSlice.new(slice_type, slice_label, non_repeat, repeat)
|
234
|
+
end
|
213
235
|
end
|
214
236
|
Prismic::Fragments::SliceZone.new(slices)
|
215
237
|
end
|
@@ -223,7 +245,7 @@ module Prismic
|
|
223
245
|
end
|
224
246
|
|
225
247
|
def alternate_language_parser(alternate_language)
|
226
|
-
Prismic::AlternateLanguage.new(alternate_language)
|
248
|
+
Prismic::AlternateLanguage.new(alternate_language)
|
227
249
|
end
|
228
250
|
|
229
251
|
def document_parser(json)
|
@@ -241,7 +263,7 @@ module Prismic
|
|
241
263
|
|
242
264
|
alternate_languages = nil
|
243
265
|
if json.key?('alternate_languages')
|
244
|
-
alternate_languages = Hash[json['alternate_languages'].map { |doc|
|
266
|
+
alternate_languages = Hash[json['alternate_languages'].map { |doc|
|
245
267
|
[doc['lang'], alternate_language_parser(doc)]
|
246
268
|
}]
|
247
269
|
end
|
@@ -316,6 +338,16 @@ module Prismic
|
|
316
338
|
file_link_parser(json)
|
317
339
|
end
|
318
340
|
end
|
341
|
+
|
342
|
+
def embed_object_parser(json)
|
343
|
+
Prismic::Fragments::Embed.new(
|
344
|
+
json['type'],
|
345
|
+
json['provider_name'],
|
346
|
+
json['provider_url'],
|
347
|
+
json['html'],
|
348
|
+
json
|
349
|
+
)
|
350
|
+
end
|
319
351
|
end
|
320
352
|
end
|
321
353
|
end
|
data/lib/prismic/version.rb
CHANGED
@@ -156,6 +156,13 @@ module Prismic
|
|
156
156
|
fragment
|
157
157
|
end
|
158
158
|
|
159
|
+
# @return [Fragments::BooleanField]
|
160
|
+
def get_boolean_field(field)
|
161
|
+
fragment = self[field]
|
162
|
+
return nil unless fragment.is_a? Prismic::Fragments::BooleanField
|
163
|
+
fragment
|
164
|
+
end
|
165
|
+
|
159
166
|
# @return [Array<LinkedDocument>]
|
160
167
|
def linked_documents
|
161
168
|
self.fragments.map { |name, fragment|
|
data/spec/fragments_spec.rb
CHANGED
@@ -11,6 +11,7 @@ end
|
|
11
11
|
describe 'WebLink' do
|
12
12
|
before do
|
13
13
|
@web_link = Prismic::Fragments::WebLink.new('my_url')
|
14
|
+
@target_blank = Prismic::Fragments::WebLink.new('my_url', '_blank')
|
14
15
|
end
|
15
16
|
describe 'as_html' do
|
16
17
|
it "returns an <a> HTML element" do
|
@@ -28,6 +29,14 @@ describe 'WebLink' do
|
|
28
29
|
it "returns a HTML element whose content is the link" do
|
29
30
|
Nokogiri::XML(@web_link.as_html).child.content.should == 'my_url'
|
30
31
|
end
|
32
|
+
|
33
|
+
it "returns an <a> HTML element with a target attribute" do
|
34
|
+
Nokogiri::XML(@target_blank.as_html).child.has_attribute?('target').should be_true
|
35
|
+
end
|
36
|
+
|
37
|
+
it "returns an <a> HTML element with an target blank attribute" do
|
38
|
+
Nokogiri::XML(@target_blank.as_html).child.attribute('target').value.should == '_blank'
|
39
|
+
end
|
31
40
|
end
|
32
41
|
|
33
42
|
describe 'as_text' do
|
@@ -650,6 +659,8 @@ describe 'StructuredText::Hyperlink' do
|
|
650
659
|
)
|
651
660
|
@hyperlink = Prismic::Fragments::StructuredText::Span::Hyperlink.new(0, 0, @link)
|
652
661
|
@link_resolver = Prismic.link_resolver("master"){|doc_link| "http://localhost/#{doc_link.id}" }
|
662
|
+
@target_blank = Prismic::Fragments::WebLink.new("link_url", "_blank")
|
663
|
+
@target_hyperlink = Prismic::Fragments::StructuredText::Span::Hyperlink.new(0, 0, @target_blank)
|
653
664
|
end
|
654
665
|
|
655
666
|
describe 'as_html' do
|
@@ -663,6 +674,9 @@ describe 'StructuredText::Hyperlink' do
|
|
663
674
|
@link.broken = true
|
664
675
|
@hyperlink.serialize('', @link_resolver).should == '<span></span>'
|
665
676
|
end
|
677
|
+
it "can generate valid html for target blank" do
|
678
|
+
@target_hyperlink.serialize('', @link_resolver).should == '<a href="link_url" target="_blank" rel="noopener"></a>'
|
679
|
+
end
|
666
680
|
end
|
667
681
|
end
|
668
682
|
|
@@ -720,9 +734,9 @@ describe 'Group' do
|
|
720
734
|
|
721
735
|
end
|
722
736
|
|
723
|
-
describe '
|
737
|
+
describe 'Simple slice' do
|
724
738
|
before do
|
725
|
-
@raw_json_slices = File.read("#{File.dirname(__FILE__)}/responses_mocks/
|
739
|
+
@raw_json_slices = File.read("#{File.dirname(__FILE__)}/responses_mocks/simple_slice.json")
|
726
740
|
@json_slices = JSON.load(@raw_json_slices)
|
727
741
|
@doc = Prismic::JsonParser.document_parser(@json_slices)
|
728
742
|
@slices = @doc.get_slice_zone("article.blocks")
|
@@ -734,4 +748,55 @@ describe 'Slices' do
|
|
734
748
|
@slices.as_html(@link_resolver).gsub(''', "'").should == %[<div data-slicetype="features" class="slice features-label"><section data-field="illustration"><img src="https://wroomdev.s3.amazonaws.com/toto/db3775edb44f9818c54baa72bbfc8d3d6394b6ef_hsf_evilsquall.jpg" alt="" width="4285" height="709" /></section>\n<section data-field="title"><span class="text">c'est un bloc features</span></section></div>\n<div data-slicetype="text" class="slice"><p>C'est un bloc content</p></div>\n<div data-slicetype="separator" class="slice"><section data-field="sep"><hr class="separator" /></section></div>]
|
735
749
|
end
|
736
750
|
|
751
|
+
it 'get item correctly' do
|
752
|
+
expected_url = 'https://wroomdev.s3.amazonaws.com/toto/db3775edb44f9818c54baa72bbfc8d3d6394b6ef_hsf_evilsquall.jpg'
|
753
|
+
@slices.slices[0].value[0]["illustration"].url.should == expected_url
|
754
|
+
end
|
755
|
+
end
|
756
|
+
|
757
|
+
describe 'Composite slice' do
|
758
|
+
before do
|
759
|
+
@raw_json_slices = File.read("#{File.dirname(__FILE__)}/responses_mocks/composite_slice.json")
|
760
|
+
@json_slices = JSON.load(@raw_json_slices)
|
761
|
+
@doc = Prismic::JsonParser.document_parser(@json_slices)
|
762
|
+
@slices = @doc.get_slice_zone("nav-nodejs.items")
|
763
|
+
@link_resolver = Prismic.link_resolver('master'){|doc_link| "http://localhost/#{doc_link.type}/#{doc_link.id}" }
|
764
|
+
end
|
765
|
+
|
766
|
+
it 'get html' do
|
767
|
+
@slices.as_html(@link_resolver).gsub(''', "'").should == %[<div data-slicetype="with-submenu" class="slice"><p>Getting Started</p><section data-field="label"><p>Start from Scratch</p></section>\n<section data-field="link"><a href="http://localhost/page-nodejs/WPeD0SoAACsABzNC">page---nodejs---getting-started-with-the-starter-kit</a></section></div>]
|
768
|
+
end
|
769
|
+
|
770
|
+
it 'get text' do
|
771
|
+
@slices.as_text.should == %[Getting Started\nStart from Scratch\n]
|
772
|
+
end
|
773
|
+
|
774
|
+
it 'get item in non-repeat correctly' do
|
775
|
+
@slices.slices[0].non_repeat['label'].as_text.should == 'Getting Started'
|
776
|
+
end
|
777
|
+
|
778
|
+
it 'get item in repeat correctly' do
|
779
|
+
@slices.slices[0].repeat[0]['label'].as_text.should == 'Start from Scratch'
|
780
|
+
end
|
781
|
+
end
|
782
|
+
|
783
|
+
describe 'Boolean Field' do
|
784
|
+
it 'get html: true' do
|
785
|
+
expected_boolean_field = %[<input type="checkbox" checked="checked" />]
|
786
|
+
@booleanfield = Prismic::Fragments::BooleanField::new(true)
|
787
|
+
@booleanfield.as_html.should == expected_boolean_field
|
788
|
+
end
|
789
|
+
|
790
|
+
it 'get html: false' do
|
791
|
+
expected_boolean_field = %[<input type="checkbox" />]
|
792
|
+
@booleanfield = Prismic::Fragments::BooleanField::new(false)
|
793
|
+
@booleanfield.as_html.should == expected_boolean_field
|
794
|
+
end
|
795
|
+
|
796
|
+
it 'value' do
|
797
|
+
expected_value = true
|
798
|
+
@booleanfield = Prismic::Fragments::BooleanField::new(true)
|
799
|
+
@booleanfield.value.should == expected_value
|
800
|
+
end
|
801
|
+
|
737
802
|
end
|
data/spec/json_parsers_spec.rb
CHANGED
@@ -381,7 +381,7 @@ describe 'document_parser' do
|
|
381
381
|
end
|
382
382
|
|
383
383
|
it "correctly parses the document's fragments" do
|
384
|
-
@document.fragments.size.should ==
|
384
|
+
@document.fragments.size.should == 15
|
385
385
|
@document.fragments['name'].should be_a Prismic::Fragments::StructuredText
|
386
386
|
end
|
387
387
|
end
|
@@ -495,3 +495,20 @@ describe 'structured_text_label_parser' do
|
|
495
495
|
end
|
496
496
|
|
497
497
|
end
|
498
|
+
|
499
|
+
describe 'boolean_field_parser' do
|
500
|
+
before do
|
501
|
+
raw_json = <<json
|
502
|
+
{
|
503
|
+
"type": "Boolean",
|
504
|
+
"value": true
|
505
|
+
}
|
506
|
+
json
|
507
|
+
@json = JSON.load(raw_json)
|
508
|
+
end
|
509
|
+
|
510
|
+
it "correctly parses Boolean objects" do
|
511
|
+
bool = Prismic::JsonParser.boolean_field_parser(@json)
|
512
|
+
bool.value.should == true
|
513
|
+
end
|
514
|
+
end
|
data/spec/micro_spec.rb
CHANGED
@@ -11,7 +11,7 @@ describe 'micro' do
|
|
11
11
|
describe 'embed block in structured text fragments' do
|
12
12
|
it 'is of the right Embed object, and serializes well' do
|
13
13
|
fragment = @api.form('everything').query(%w(at document.id UrjI1gEAALOCeO5i)).submit(@master_ref)[0]['article.body']
|
14
|
-
fragment.blocks[4].is_a?(Prismic::Fragments::Embed).should == true
|
14
|
+
fragment.blocks[4].is_a?(Prismic::Fragments::StructuredText::Block::Embed).should == true
|
15
15
|
fragment.as_html(@link_resolver).gsub(/[\n\r]+/, '').gsub(/ +/, ' ').gsub(/'/, "'").should == %(<h2>The meta-micro mailing-list</h2><p>This is where you go to give feedback, and discuss the future of micro. <a href="https://groups.google.com/forum/?hl=en#!forum/micro-meta-framework">Subscribe to the list now</a>!</p><h2>The micro GitHub repository</h2><p>This is where you get truly active, by forking the project's source code, and making it better. Please always feel free to send us pull requests.</p><div data-oembed="" data-oembed-type="link" data-oembed-provider="object"><div data-type="object"><a href="https://github.com/rudyrigot/meta-micro"><h1>rudyrigot/meta-micro</h1><img src="https://avatars2.githubusercontent.com/u/552279?s=400"><p>The meta-micro-framework you simply need</p></a></div></div><h2>Report bugs on micro</h2><p>If you think micro isn't working properly in one of its features, <a href="https://github.com/rudyrigot/meta-micro/issues">open a new issue in the micro GitHub repository</a>.</p><h2>Ask for help</h2><p>Feel free to ask a new question <a href="http://stackoverflow.com/questions/tagged/meta-micro">on StackOverflow</a>.</p>)
|
16
16
|
end
|
17
17
|
end
|
data/spec/predicates_spec.rb
CHANGED
@@ -8,6 +8,19 @@ describe 'predicates' do
|
|
8
8
|
@api = Prismic.api('https://micro.prismic.io/api', nil)
|
9
9
|
@master_ref = @api.master_ref
|
10
10
|
@link_resolver = Prismic.link_resolver('master'){|doc_link| "http://localhost/#{doc_link.id}" }
|
11
|
+
@boolean_api = Prismic.api("https://a-bool.prismic.io/api", nil)
|
12
|
+
@boolean_api_master_ref = @boolean_api.master_ref
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'boolean query' do
|
16
|
+
it "can query a boolean field with value true" do
|
17
|
+
form = @boolean_api.form('everything').query(['at', 'my.bools.set_to_true', true])
|
18
|
+
form.data['q'].should == ['[[:d = at(my.bools.set_to_true, true)]]']
|
19
|
+
end
|
20
|
+
it "can query a boolean field with value false" do
|
21
|
+
form = @boolean_api.form('everything').query(['at', 'my.bools.set_to_true', false])
|
22
|
+
form.data['q'].should == ['[[:d = at(my.bools.set_to_true, false)]]']
|
23
|
+
end
|
11
24
|
end
|
12
25
|
|
13
26
|
describe 'at predicate' do
|
@@ -0,0 +1,63 @@
|
|
1
|
+
{
|
2
|
+
"id": "WPeLbyoAACsAB1Su",
|
3
|
+
"uid": null,
|
4
|
+
"type": "nav-nodejs",
|
5
|
+
"href": "http://prismicio-docs.prismic.io/api/v1/documents/search?ref=WXnqmigAALs3V7Kx&q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22WPeLbyoAACsAB1Su%22%29+%5D%5D",
|
6
|
+
"tags": [],
|
7
|
+
"first_publication_date": "2017-04-19T16:08:43+0000",
|
8
|
+
"last_publication_date": "2017-07-07T11:26:27+0000",
|
9
|
+
"slugs": ["navigation---nodejs", "navigation-nodejs"],
|
10
|
+
"data": {
|
11
|
+
"nav-nodejs": {
|
12
|
+
"display-name": {
|
13
|
+
"type": "StructuredText",
|
14
|
+
"value": [{
|
15
|
+
"type": "paragraph",
|
16
|
+
"text": "Navigation - NodeJS",
|
17
|
+
"spans": []
|
18
|
+
}]
|
19
|
+
},
|
20
|
+
"items": {
|
21
|
+
"type": "SliceZone",
|
22
|
+
"value": [{
|
23
|
+
"type": "Slice",
|
24
|
+
"slice_type": "with-submenu",
|
25
|
+
"slice_label": null,
|
26
|
+
"repeat": [{
|
27
|
+
"label": {
|
28
|
+
"type": "StructuredText",
|
29
|
+
"value": [{
|
30
|
+
"type": "paragraph",
|
31
|
+
"text": "Start from Scratch",
|
32
|
+
"spans": []
|
33
|
+
}]
|
34
|
+
},
|
35
|
+
"link": {
|
36
|
+
"type": "Link.document",
|
37
|
+
"value": {
|
38
|
+
"document": {
|
39
|
+
"id": "WPeD0SoAACsABzNC",
|
40
|
+
"type": "page-nodejs",
|
41
|
+
"tags": [],
|
42
|
+
"slug": "page---nodejs---getting-started-with-the-starter-kit",
|
43
|
+
"uid": "prismic-from-scratch-with-nodejs"
|
44
|
+
},
|
45
|
+
"isBroken": false
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}],
|
49
|
+
"non-repeat": {
|
50
|
+
"label": {
|
51
|
+
"type": "StructuredText",
|
52
|
+
"value": [{
|
53
|
+
"type": "paragraph",
|
54
|
+
"text": "Getting Started",
|
55
|
+
"spans": []
|
56
|
+
}]
|
57
|
+
}
|
58
|
+
}
|
59
|
+
}]
|
60
|
+
}
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
File without changes
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prismic.io
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Étienne Vallette d'Osia
|
8
8
|
- Erwan Loisant
|
9
9
|
- Samy Dindane
|
10
10
|
- Rudy Rigot
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2020-07-06 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: bundler
|
@@ -187,6 +187,7 @@ files:
|
|
187
187
|
- lib/prismic/experiments.rb
|
188
188
|
- lib/prismic/form.rb
|
189
189
|
- lib/prismic/fragments.rb
|
190
|
+
- lib/prismic/fragments/boolean_field.rb
|
190
191
|
- lib/prismic/fragments/color.rb
|
191
192
|
- lib/prismic/fragments/date.rb
|
192
193
|
- lib/prismic/fragments/embed.rb
|
@@ -194,6 +195,7 @@ files:
|
|
194
195
|
- lib/prismic/fragments/geopoint.rb
|
195
196
|
- lib/prismic/fragments/group.rb
|
196
197
|
- lib/prismic/fragments/image.rb
|
198
|
+
- lib/prismic/fragments/integration_field.rb
|
197
199
|
- lib/prismic/fragments/link.rb
|
198
200
|
- lib/prismic/fragments/multiple.rb
|
199
201
|
- lib/prismic/fragments/number.rb
|
@@ -218,11 +220,12 @@ files:
|
|
218
220
|
- spec/predicates_spec.rb
|
219
221
|
- spec/prismic_spec.rb
|
220
222
|
- spec/responses_mocks/api.json
|
223
|
+
- spec/responses_mocks/composite_slice.json
|
221
224
|
- spec/responses_mocks/document.json
|
222
225
|
- spec/responses_mocks/document_with_unknown_fragment.json
|
223
226
|
- spec/responses_mocks/experiments.json
|
224
227
|
- spec/responses_mocks/fragments.json
|
225
|
-
- spec/responses_mocks/
|
228
|
+
- spec/responses_mocks/simple_slice.json
|
226
229
|
- spec/responses_mocks/structured_text_heading.json
|
227
230
|
- spec/responses_mocks/structured_text_image_with_link.json
|
228
231
|
- spec/responses_mocks/structured_text_linkfile.json
|
@@ -250,8 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
250
253
|
- !ruby/object:Gem::Version
|
251
254
|
version: '0'
|
252
255
|
requirements: []
|
253
|
-
|
254
|
-
rubygems_version: 2.2.2
|
256
|
+
rubygems_version: 3.1.2
|
255
257
|
signing_key:
|
256
258
|
specification_version: 4
|
257
259
|
summary: Prismic.io development kit
|
@@ -265,11 +267,12 @@ test_files:
|
|
265
267
|
- spec/predicates_spec.rb
|
266
268
|
- spec/prismic_spec.rb
|
267
269
|
- spec/responses_mocks/api.json
|
270
|
+
- spec/responses_mocks/composite_slice.json
|
268
271
|
- spec/responses_mocks/document.json
|
269
272
|
- spec/responses_mocks/document_with_unknown_fragment.json
|
270
273
|
- spec/responses_mocks/experiments.json
|
271
274
|
- spec/responses_mocks/fragments.json
|
272
|
-
- spec/responses_mocks/
|
275
|
+
- spec/responses_mocks/simple_slice.json
|
273
276
|
- spec/responses_mocks/structured_text_heading.json
|
274
277
|
- spec/responses_mocks/structured_text_image_with_link.json
|
275
278
|
- spec/responses_mocks/structured_text_linkfile.json
|