prismic.io 1.2.1 → 1.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2ee3bfcd4ea5ad701435ae58de5bc1ef89fef1ee
4
- data.tar.gz: 0d10d02860bc3353331d0994be4cf606cad248dd
3
+ metadata.gz: 7ddebf7e0c8efd6eb548e0c2311e5021611320ef
4
+ data.tar.gz: 396c64eadc4b74c2355a70cc60723c9a1a7252af
5
5
  SHA512:
6
- metadata.gz: 2846d41756d623ef7d12ed48643c06f3c9181d9057198e2a7a2814afeca4220ccdd57e0030fa4ab43d6120028eda3bac917a38130f2a15642ce5878b1e41cbfb
7
- data.tar.gz: fef0bdb5040e2a46b0705d4557bf85ea4e9871902716c753b722f0573f4d8fa102f81cfc7baea26592d50235532fdf67eec7c6a01207850b5ae8a5cc7aee07dc
6
+ metadata.gz: 9781e89122d946b0ee9d4c1a11869ec6887e00e8b5c9921e996c537607ce483d9723c27cf789e258ce99cf7f5c837b46956d5a3309883d11b2eefaadad472787
7
+ data.tar.gz: 97402b3c5ffad257575f73f2583d615028646dcf7d106093e4ecdeb38c2897b7d27022c0d815432c0177370077d189e99d6c41a1115d495c5f45a3269ab48e40
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- prismic.io (1.2.1)
4
+ prismic.io (1.3.0)
5
5
  hashery (~> 2.1.1)
6
6
 
7
7
  GEM
@@ -13,3 +13,4 @@ require 'prismic/fragments/select'
13
13
  require 'prismic/fragments/structured_text'
14
14
  require 'prismic/fragments/text'
15
15
  require 'prismic/fragments/timestamp'
16
+ require 'prismic/fragments/slices'
@@ -13,6 +13,10 @@ module Prismic
13
13
  main.as_html(link_resolver)
14
14
  end
15
15
 
16
+ def as_text
17
+ ""
18
+ end
19
+
16
20
  def get_view(key)
17
21
  if key == 'main'
18
22
  main
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+ module Prismic
3
+ module Fragments
4
+
5
+ # A fragment of type Slice, an item in a SliceZone
6
+ class Slice < Fragment
7
+ attr_accessor :slice_type
8
+ attr_accessor :value
9
+
10
+ def initialize(slice_type, value)
11
+ @slice_type = slice_type
12
+ @value = value
13
+ end
14
+
15
+ # Generate an text representation of the group
16
+ #
17
+ # @return [String] the text representation
18
+ def as_text
19
+ @value.as_text
20
+ end
21
+
22
+ # Generate an HTML representation of the group
23
+ #
24
+ # @param link_resolver [LinkResolver] The LinkResolver used to build
25
+ # application's specific URL
26
+ #
27
+ # @return [String] the HTML representation
28
+ def as_html(link_resolver=nil)
29
+ @value.as_html(link_resolver)
30
+ end
31
+ end
32
+
33
+ class SliceZone < Fragment
34
+ attr_accessor :slices
35
+
36
+ def initialize(slices)
37
+ @slices = slices
38
+ end
39
+
40
+ # Generate an text representation of the group
41
+ #
42
+ # @return [String] the text representation
43
+ def as_text
44
+ @slices.map { |slice| slice.as_text }.join("\n")
45
+ end
46
+
47
+ # Generate an HTML representation of the group
48
+ #
49
+ # @param link_resolver [LinkResolver] The LinkResolver used to build
50
+ # application's specific URL
51
+ #
52
+ # @return [String] the HTML representation
53
+ def as_html(link_resolver=nil)
54
+ @slices.map { |slice| slice.as_html(link_resolver) }.join("\n")
55
+ end
56
+ end
57
+
58
+ end
59
+ end
@@ -23,7 +23,8 @@ module Prismic
23
23
  'StructuredText' => method(:structured_text_parser),
24
24
  'Select' => method(:select_parser),
25
25
  'Multiple' => method(:multiple_parser),
26
- 'Group' => method(:group_parser)
26
+ 'Group' => method(:group_parser),
27
+ 'SliceZone' => method(:slices_parser)
27
28
  }
28
29
  end
29
30
 
@@ -199,6 +200,24 @@ module Prismic
199
200
  Prismic::Fragments::Group.new(fragment_list_array)
200
201
  end
201
202
 
203
+ def slices_parser(json)
204
+ slices = []
205
+ json['value'].each do |data|
206
+ slice_type = data['slice_type']
207
+ fragment = data['value']
208
+ slices << Prismic::Fragments::Slice.new(slice_type, fragment_parser(fragment))
209
+ end
210
+ Prismic::Fragments::SliceZone.new(slices)
211
+ end
212
+
213
+ def fragment_parser(fragment)
214
+ if fragment.is_a? Array
215
+ multiple_parser(fragment)
216
+ else
217
+ parsers[fragment['type']].call(fragment)
218
+ end
219
+ end
220
+
202
221
  def document_parser(json)
203
222
  data_json = json['data'].values.first # {"doc_type": data}
204
223
 
@@ -213,11 +232,7 @@ module Prismic
213
232
  }
214
233
 
215
234
  fragments = Hash[data_json.map { |name, fragment|
216
- if fragment.is_a? Array
217
- [name, multiple_parser(fragment)]
218
- else
219
- [name, parsers[fragment['type']].call(fragment)]
220
- end
235
+ [name, fragment_parser(fragment)]
221
236
  }]
222
237
 
223
238
  Prismic::Document.new(
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  module Prismic
3
3
 
4
- VERSION = '1.2.1'
4
+ VERSION = '1.3.0'
5
5
 
6
6
  end
@@ -6,6 +6,13 @@ module Prismic
6
6
  # @return [Hash{String => Fragment}]
7
7
  attr_accessor :fragments
8
8
 
9
+ # Generate a Text representation of the entire document
10
+ #
11
+ # @return [String] the text representation
12
+ def as_text
13
+ fragments.map { |field, fragment| fragment.as_text }.join("\n")
14
+ end
15
+
9
16
  # Generate an HTML representation of the entire document
10
17
  #
11
18
  # @param link_resolver [LinkResolver] The LinkResolver used to build
@@ -143,6 +150,12 @@ module Prismic
143
150
  fragment
144
151
  end
145
152
 
153
+ def get_slice_zone(field)
154
+ fragment = self[field]
155
+ return nil unless fragment.is_a? Prismic::Fragments::SliceZone
156
+ fragment
157
+ end
158
+
146
159
  # @return [Array<LinkedDocument>]
147
160
  def linked_documents
148
161
  self.fragments.map { |name, fragment|
@@ -485,8 +485,8 @@ describe 'Image' do
485
485
  end
486
486
 
487
487
  describe 'as_text' do
488
- it 'raises an NotImplementedError' do
489
- expect { @image.as_text }.to raise_error NotImplementedError
488
+ it 'is empty' do
489
+ @image.as_text.should == ""
490
490
  end
491
491
  end
492
492
  end
@@ -701,3 +701,19 @@ describe 'Group' do
701
701
  end
702
702
 
703
703
  end
704
+
705
+ describe 'Slices' do
706
+ before do
707
+ @raw_json_slices = File.read("#{File.dirname(__FILE__)}/responses_mocks/slices.json")
708
+ @json_slices = JSON.load(@raw_json_slices)
709
+ @doc = Prismic::JsonParser.document_parser(@json_slices)
710
+ @slices = @doc.get_slice_zone("article.blocks")
711
+ @link_resolver = Prismic.link_resolver('master'){|doc_link| "http://localhost/#{doc_link.link_type}/#{doc_link.id}" }
712
+ end
713
+
714
+ it 'parses correctly' do
715
+ @slices.as_text.should == "\nc'est un bloc features\nC'est un bloc content"
716
+ @slices.as_html(@link_resolver).should == %[<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&#39;est un bloc features</span></section>\n<p>C&#39;est un bloc content</p>]
717
+ end
718
+
719
+ end
@@ -0,0 +1,96 @@
1
+ {
2
+ "id":"VQ_hV31Za5EAy02H",
3
+ "uid":null,
4
+ "type":"article",
5
+ "href":"http://toto.wroom.dev/api/documents/search?ref=VQ_uWX1Za0oCy46m&q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22VQ_hV31Za5EAy02H%22%29+%5D%5D",
6
+ "tags":[],
7
+ "slugs":["une-activite"],
8
+ "linked_documents":[],
9
+ "data":{
10
+ "article":{
11
+ "activities":{
12
+ "type":"Group",
13
+ "value":[{
14
+ "title":{
15
+ "type":"StructuredText",
16
+ "value":[{
17
+ "type":"paragraph",
18
+ "text":"Une activité",
19
+ "spans":[]
20
+ }]
21
+ },
22
+ "image":{
23
+ "type":"Image",
24
+ "value":{
25
+ "main":{
26
+ "url":"https://wroomdev.s3.amazonaws.com/toto/ce3f52b933c4934a13422e09ed0ff6ad03a29621_hsf_evilsquall.jpg",
27
+ "alt":"",
28
+ "copyright":"",
29
+ "dimensions":{"width":860,"height":640}
30
+ },
31
+ "views":{
32
+ "headline":{
33
+ "url":"https://wroomdev.s3.amazonaws.com/toto/5445d2dcd2b0c541b0406ca867ab3d07b309c944_hsf_evilsquall.jpg",
34
+ "alt":"",
35
+ "copyright":"",
36
+ "dimensions":{"width":570,"height":400}
37
+ }
38
+ }
39
+ }
40
+ },
41
+ "body":{
42
+ "type":"StructuredText",
43
+ "value":[{
44
+ "type":"paragraph",
45
+ "text":"elle est bien",
46
+ "spans":[]
47
+ }]
48
+ }
49
+ }]
50
+ },
51
+ "un_champ_texte":{
52
+ "type":"Text",
53
+ "value":"stuffgg"
54
+ },
55
+ "blocks":{
56
+ "type":"SliceZone",
57
+ "value":[{
58
+ "type":"Slice",
59
+ "slice_type": "features",
60
+ "value":{
61
+ "type":"Group",
62
+ "value":[{
63
+ "illustration":{
64
+ "type":"Image",
65
+ "value":{
66
+ "main":{
67
+ "url":"https://wroomdev.s3.amazonaws.com/toto/db3775edb44f9818c54baa72bbfc8d3d6394b6ef_hsf_evilsquall.jpg",
68
+ "alt":"",
69
+ "copyright":"",
70
+ "dimensions":{"width":4285,"height":709}
71
+ },
72
+ "views":{}
73
+ }
74
+ },
75
+ "title":{
76
+ "type":"Text",
77
+ "value":"c'est un bloc features"
78
+ }
79
+ }]
80
+ }
81
+ },{
82
+ "type":"Slice",
83
+ "slice_type":"text",
84
+ "value":{
85
+ "type":"StructuredText",
86
+ "value":[{
87
+ "type":"paragraph",
88
+ "text":"C'est un bloc content",
89
+ "spans":[]
90
+ }]
91
+ }
92
+ }]
93
+ }
94
+ }
95
+ }
96
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prismic.io
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Étienne Vallette d'Osia
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-06-08 00:00:00.000000000 Z
14
+ date: 2015-07-09 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -116,6 +116,7 @@ files:
116
116
  - lib/prismic/fragments/multiple.rb
117
117
  - lib/prismic/fragments/number.rb
118
118
  - lib/prismic/fragments/select.rb
119
+ - lib/prismic/fragments/slices.rb
119
120
  - lib/prismic/fragments/structured_text.rb
120
121
  - lib/prismic/fragments/text.rb
121
122
  - lib/prismic/fragments/timestamp.rb
@@ -140,6 +141,7 @@ files:
140
141
  - spec/responses_mocks/document_with_unknown_fragment.json
141
142
  - spec/responses_mocks/experiments.json
142
143
  - spec/responses_mocks/fragments.json
144
+ - spec/responses_mocks/slices.json
143
145
  - spec/responses_mocks/structured_text_heading.json
144
146
  - spec/responses_mocks/structured_text_linkfile.json
145
147
  - spec/responses_mocks/structured_text_paragraph.json
@@ -186,6 +188,7 @@ test_files:
186
188
  - spec/responses_mocks/document_with_unknown_fragment.json
187
189
  - spec/responses_mocks/experiments.json
188
190
  - spec/responses_mocks/fragments.json
191
+ - spec/responses_mocks/slices.json
189
192
  - spec/responses_mocks/structured_text_heading.json
190
193
  - spec/responses_mocks/structured_text_linkfile.json
191
194
  - spec/responses_mocks/structured_text_paragraph.json