prismic.io 1.0.4 → 1.0.5

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: f1a922f0e6ee8a7f0deabb7e1c6e9d301634b82c
4
- data.tar.gz: aeba97f56cd7799118b38779eb244fd544157b66
3
+ metadata.gz: fd49e594dff30e85b1dce2393707441e716c88f6
4
+ data.tar.gz: 18838f06eb596494d16fcac5bc461cbef642a12b
5
5
  SHA512:
6
- metadata.gz: c36746c2c5c6dd0238e04c1b42fc933853a60785bb64c6019c30eaa81f0a283e4b4f652163db79f810c46cc5f35a84e410f7e437fc6dd5fab6ca6a69276278d8
7
- data.tar.gz: 5c16360d81add7976f534ba3a5fa479bb503be2eb49e346e90bc72160291b8d485984ac53a77a348678bdb007faea611e2de69905b6023fc9f8508469ad7b249
6
+ metadata.gz: c2da8f9c018d2cb305d139d4a176a3d20efcb4024a40c0da9add1d8d1c60118840e283c368b2d880b6095e54aa1437c0a1e3fdf6b928aba6374bade151f1fff9
7
+ data.tar.gz: a5aa83e595426ab090d6dfc97409b3d1705f2e8eb0d9a0a2854a79e2da9bbf60eca38e22ae947213cf99dbfa1ed360474e01d1a468edeaedcd1631265b7ab732
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  coverage/
2
2
  pkg/*.gem
3
+ *.gem
3
4
  .bundle/
4
5
  .idea/
5
6
  .yardoc/
data/.travis.yml CHANGED
@@ -18,4 +18,4 @@ deploy:
18
18
  on:
19
19
  tags: true
20
20
  all_branches: true
21
- repo: prismicio/ruby-kit
21
+
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- prismic.io (1.0.4)
4
+ prismic.io (1.0.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/lib/prismic.rb CHANGED
@@ -5,6 +5,8 @@ require 'uri'
5
5
 
6
6
  require 'json' unless defined?(JSON)
7
7
 
8
+ require 'prismic/with_fragments'
9
+
8
10
  module Prismic
9
11
 
10
12
  # These exception can contains an error cause and is able to show them
@@ -306,11 +308,13 @@ module Prismic
306
308
  # @return [SearchForm] self
307
309
  def set(field_name, value)
308
310
  field = @form.fields[field_name]
309
- if field && field.repeatable?
310
- data[field_name] = [] unless data.include? field_name
311
- data[field_name] << value.to_s
312
- else
313
- data[field_name] = value.to_s
311
+ unless value == nil
312
+ if field && field.repeatable?
313
+ data[field_name] = [] unless data.include? field_name
314
+ data[field_name] << value.to_s
315
+ else
316
+ data[field_name] = value.to_s
317
+ end
314
318
  end
315
319
  self
316
320
  end
@@ -345,8 +349,25 @@ module Prismic
345
349
  alias :repeatable? :repeatable
346
350
  end
347
351
 
352
+ # Paginated response to a Prismic.io query. Note that you may not get all documents in the first page,
353
+ # and may need to retrieve more pages or increase the page size.
348
354
  class Response
349
- attr_accessor :page, :results_per_page, :results_size, :total_results_size, :total_pages, :next_page, :prev_page, :results
355
+ # @return [Number] current page, starting at 1
356
+ attr_accessor :page
357
+ # @return [Number]
358
+ attr_accessor :results_per_page
359
+ # @return [Number]
360
+ attr_accessor :results_size
361
+ # @return [Number]
362
+ attr_accessor :total_results_size
363
+ # @return [Number]
364
+ attr_accessor :total_pages
365
+ # @return [String] URL to the next page - nil if current page is the last page
366
+ attr_accessor :next_page
367
+ # @return [String] URL to the previous page - nil if current page is the first page
368
+ attr_accessor :prev_page
369
+ # @return [Array<Document>] Documents of the current page
370
+ attr_accessor :results
350
371
 
351
372
  # To be able to use Kaminari as a paginator in Rails out of the box
352
373
  alias :current_page :page
@@ -364,6 +385,7 @@ module Prismic
364
385
  end
365
386
 
366
387
  # Accessing the i-th document in the results
388
+ # @return [Document]
367
389
  def [](i)
368
390
  @results[i]
369
391
  end
@@ -400,62 +422,32 @@ module Prismic
400
422
  end
401
423
  end
402
424
 
403
- class Document
404
- attr_accessor :id, :type, :href, :tags, :slugs, :linked_documents, :fragments
425
+ class Document < Prismic::WithFragments
426
+ # @return [String]
427
+ attr_accessor :id
428
+ # @return [String]
429
+ attr_accessor :type
430
+ # @return [String]
431
+ attr_accessor :href
432
+ # @return [Array<String>]
433
+ attr_accessor :tags
434
+ # @return [Array<String>]
435
+ attr_accessor :slugs
436
+ # @return [Array<LinkedDocument>]
437
+ attr_accessor :linked_documents
405
438
 
406
439
  def initialize(id, type, href, tags, slugs, linked_documents, fragments)
440
+ super(fragments)
407
441
  @id = id
408
442
  @type = type
409
443
  @href = href
410
444
  @tags = tags
411
445
  @slugs = slugs
412
446
  @linked_documents = linked_documents
413
- @fragments = (fragments.is_a? Hash) ? parse_fragments(fragments) : fragments
414
- end
415
-
416
- # Returns the document's slug
417
- #
418
- # @return [String]
419
- def slug
420
- slugs.empty? ? '-' : slugs.first
421
- end
422
-
423
- # Generate an HTML representation of the entire document
424
- #
425
- # @param link_resolver [LinkResolver] The LinkResolver used to build
426
- # application's specific URL
427
- #
428
- # @return [String] the HTML representation
429
- def as_html(link_resolver)
430
- fragments.map { |field, fragment|
431
- %(<section data-field="#{field}">#{fragment.as_html(link_resolver)}</section>)
432
- }.join("\n")
433
- end
434
-
435
- # Finds the first highest title in a document (if any)
436
- #
437
- # @return [String]
438
- def first_title
439
- # It is impossible to reuse the StructuredText.first_title method, since
440
- # we need to test the highest title across the whole document
441
- title = false
442
- max_level = 6 # any title with a higher level kicks the current one out
443
- @fragments.each do |_, fragment|
444
- if fragment.is_a? Prismic::Fragments::StructuredText
445
- fragment.blocks.each do |block|
446
- if block.is_a?(Prismic::Fragments::StructuredText::Block::Heading)
447
- if block.level < max_level
448
- title = block.text
449
- max_level = block.level # new maximum
450
- end
451
- end
452
- end
453
- end
454
- end
455
- title
456
447
  end
457
448
 
458
449
  # Get a document's field
450
+ # @return [Fragments::Fragment]
459
451
  def [](field)
460
452
  array = field.split('.')
461
453
  if array.length != 2
@@ -466,65 +458,13 @@ module Prismic
466
458
  end
467
459
  alias :get :[]
468
460
 
469
- def get_text(field)
470
- fragment = self[field]
471
- return nil unless fragment.is_a? Prismic::Fragments::Text
472
- fragment
473
- end
474
-
475
- def get_number(field)
476
- fragment = self[field]
477
- return nil unless fragment.is_a? Prismic::Fragments::Number
478
- fragment
479
- end
480
-
481
- def get_date(field)
482
- fragment = self[field]
483
- return nil unless fragment.is_a? Prismic::Fragments::Date
484
- fragment
485
- end
486
-
487
- def get_timestamp(field)
488
- fragment = self[field]
489
- return nil unless fragment.is_a? Prismic::Fragments::Timestamp
490
- fragment
491
- end
492
-
493
- def get_group(field)
494
- fragment = self[field]
495
- return nil unless fragment.is_a? Prismic::Fragments::Group
496
- fragment
497
- end
498
-
499
- def get_link(field)
500
- fragment = self[field]
501
- return nil unless fragment.is_a? Prismic::Fragments::Link
502
- fragment
503
- end
504
-
505
- def get_embed(field)
506
- fragment = self[field]
507
- return nil unless fragment.is_a? Prismic::Fragments::Embed
508
- fragment
509
- end
510
-
511
- def get_color(field)
512
- fragment = self[field]
513
- return nil unless fragment.is_a? Prismic::Fragments::Color
514
- fragment
515
- end
516
-
517
- def get_geopoint(field)
518
- fragment = self[field]
519
- return nil unless fragment.is_a? Prismic::Fragments::GeoPoint
520
- fragment
461
+ # Returns the document's slug
462
+ #
463
+ # @return [String]
464
+ def slug
465
+ slugs.empty? ? '-' : slugs.first
521
466
  end
522
467
 
523
- private
524
-
525
- def parse_fragments(fragments)
526
- fragments
527
- end
528
468
  end
529
469
 
530
470
 
@@ -573,6 +513,8 @@ module Prismic
573
513
 
574
514
  # The LinkResolver will help to build URL specific to an application, based
575
515
  # on a generic prismic.io's {Fragments::DocumentLink Document link}.
516
+ #
517
+ # The {Prismic.link_resolver} function is the recommended way to create a LinkResolver.
576
518
  class LinkResolver
577
519
  attr_reader :ref
578
520
 
@@ -592,6 +534,9 @@ module Prismic
592
534
  end
593
535
  end
594
536
 
537
+ # A class to override the default was to serialize HTML. Only needed if you want to override the default HTML serialization.
538
+ #
539
+ # The {Prismic.html_serializer} function is the recommended way to create an HtmlSerializer.
595
540
  class HtmlSerializer
596
541
  def initialize(&blk)
597
542
  @blk = blk
data/lib/prismic/api.rb CHANGED
@@ -6,8 +6,19 @@ module Prismic
6
6
  @@warned_create_search_form = false
7
7
  @@warned_oauth_initiate_url = false
8
8
  @@warned_oauth_check_token = false
9
- attr_reader :json, :access_token, :http_client
10
- attr_accessor :refs, :bookmarks, :forms, :tags, :types, :experiments, :oauth, :cache
9
+ attr_reader :json
10
+ # @return [String]
11
+ attr_reader :access_token
12
+ attr_reader :http_client
13
+ # @return [Hash{String => Ref}] list of references, as label -> reference
14
+ attr_accessor :refs
15
+ # @return [Hash{String => String}] list of bookmarks, as name -> documentId
16
+ attr_accessor :bookmarks
17
+ # @return [Hash{String => SearchForm}] list of bookmarks, as name -> documentId
18
+ attr_accessor :forms
19
+ attr_accessor :tags, :types, :oauth, :cache
20
+ # @return [Experiments] list of all experiments from Prismic
21
+ attr_accessor :experiments
11
22
 
12
23
  # Is the cache enabled on this API object?
13
24
  #
@@ -47,9 +58,9 @@ module Prismic
47
58
 
48
59
  # Get a bookmark by its name
49
60
  # @api
50
- # @param name [String] The bookmark's name
61
+ # @param name [String] The bookmark's name
51
62
  #
52
- # @return [Hash] The bookmark
63
+ # @return [String] The bookmark document id
53
64
  def bookmark(name)
54
65
  bookmarks[name]
55
66
  end
@@ -63,7 +74,7 @@ module Prismic
63
74
  refs[name.downcase]
64
75
  end
65
76
 
66
- # Returns a {Prismic::SearchForm search form} by its name
77
+ # Returns a {Prismic::SearchForm search form} by its name. This is where you start to query a repository.
67
78
  # @api
68
79
  # @param name [String] The name of the form
69
80
  # @param data [Hash] Default values
@@ -77,7 +88,7 @@ module Prismic
77
88
 
78
89
  # @deprecated Use {#form} instead.
79
90
  def create_search_form(name, data={}, ref={})
80
- if !@@warned_create_search_form
91
+ unless @@warned_create_search_form
81
92
  warn "[DEPRECATION] `create_search_form` is deprecated. Please use `form` instead."
82
93
  @@warned_create_search_form = true
83
94
  end
@@ -88,10 +99,11 @@ module Prismic
88
99
  @json
89
100
  end
90
101
 
102
+ # Fetch the API information from the Prismic.io server
91
103
  def self.get(url, access_token=nil, http_client=Prismic::DefaultHTTPClient, api_cache=Prismic::DefaultApiCache)
92
104
  data = {}
93
- data["access_token"] = access_token if access_token
94
- cache_key = url + (access_token ? ("#" + access_token) : "")
105
+ data['access_token'] = access_token if access_token
106
+ cache_key = url + (access_token ? ('#' + access_token) : '')
95
107
  api_cache.get_or_set(cache_key, nil, 5) {
96
108
  res = http_client.get(url, data, 'Accept' => 'application/json')
97
109
  case res.code
@@ -221,11 +233,11 @@ module Prismic
221
233
  @token = token
222
234
  end
223
235
  def initiate_url(opts)
224
- initiate + "?" + {
225
- "client_id" => opts.fetch(:client_id),
226
- "redirect_uri" => opts.fetch(:redirect_uri),
227
- "scope" => opts.fetch(:scope),
228
- }.map{|kv| kv.map{|e| CGI.escape(e) }.join("=") }.join("&")
236
+ initiate + '?' + {
237
+ 'client_id' => opts.fetch(:client_id),
238
+ 'redirect_uri' => opts.fetch(:redirect_uri),
239
+ 'scope' => opts.fetch(:scope),
240
+ }.map{|kv| kv.map{|e| CGI.escape(e) }.join('=') }.join('&')
229
241
  end
230
242
  def check_token(params)
231
243
  res = http_client.post(token, params)
@@ -2,7 +2,10 @@
2
2
  module Prismic
3
3
 
4
4
  class Experiments
5
- attr_reader :draft, :running
5
+ # @return [Array<Experiment>] list of all experiments from Prismic
6
+ attr_reader :draft
7
+ # @return [Array<Experiments>] list of all experiments from Prismic
8
+ attr_reader :running
6
9
 
7
10
  def initialize(draft, running)
8
11
  @draft = draft
@@ -31,6 +34,7 @@ module Prismic
31
34
  nil
32
35
  end
33
36
 
37
+ # @return [Experiments]
34
38
  def self.parse(data)
35
39
  draft = []
36
40
  running = []
@@ -48,7 +52,14 @@ module Prismic
48
52
  end
49
53
 
50
54
  class Experiment
51
- attr_reader :id, :google_id, :name, :variations
55
+ # @return [String]
56
+ attr_reader :id
57
+ # @return [String]
58
+ attr_reader :google_id
59
+ # @return [String]
60
+ attr_reader :name
61
+ # @return [Array<Variation>]
62
+ attr_reader :variations
52
63
 
53
64
  def initialize(id, google_id, name, variations)
54
65
  @id = id
@@ -57,6 +68,7 @@ module Prismic
57
68
  @variations = variations
58
69
  end
59
70
 
71
+ # @return [Experiment]
60
72
  def self.parse(data)
61
73
  new(data['id'], data['googleId'], data['name'], data['variations'].map { |variation|
62
74
  Variation.parse(variation)
@@ -65,7 +77,12 @@ module Prismic
65
77
  end
66
78
 
67
79
  class Variation
68
- attr_reader :id, :ref, :label
80
+ # @return [String]
81
+ attr_reader :id
82
+ # @return [String]
83
+ attr_reader :ref
84
+ # @return [String]
85
+ attr_reader :label
69
86
 
70
87
  def initialize(id, ref, label)
71
88
  @id = id
@@ -73,6 +90,7 @@ module Prismic
73
90
  @label = label
74
91
  end
75
92
 
93
+ # @return [Variation]
76
94
  def self.parse(data)
77
95
  new(data['id'], data['ref'], data['label'])
78
96
  end
@@ -10,27 +10,28 @@ module Prismic
10
10
  # the first image will look like this: `group[0]['image']`.
11
11
  class Group < Fragment
12
12
 
13
- # The array of the fragment lists
14
- attr_accessor :fragment_list_array
13
+ # The array of group documents
14
+ attr_accessor :group_documents
15
15
 
16
- def initialize(fragment_list_array)
17
- @fragment_list_array = fragment_list_array
16
+ def initialize(group_documents)
17
+ @group_documents = group_documents
18
18
  end
19
19
 
20
- # Accessing the i-th item (fragment list) of the group: `group[i]`
21
- def [](i)
22
- @fragment_list_array[i]
20
+ # Get the group document corresponding to index
21
+ # @return [Prismic::WithFragments]
22
+ def [](index)
23
+ @group_documents[index]
23
24
  end
24
- alias :get :[]
25
25
 
26
- # @yieldparam fragment [Fragment]
26
+ alias :get :[]
27
+ # @yieldparam group_doc [WithFragment]
27
28
  def each(&blk)
28
- @fragment_list_array.each(&blk)
29
+ @group_documents.each(&blk)
29
30
  end
30
31
  include Enumerable # adds map, select, etc
31
32
 
32
33
  def length
33
- @fragment_list_array.length
34
+ @group_documents.length
34
35
  end
35
36
  alias :size :length
36
37
 
@@ -41,64 +42,16 @@ module Prismic
41
42
  #
42
43
  # @return [String] the HTML representation
43
44
  def as_html(link_resolver = nil)
44
- @fragment_list_array.map { |fl| fl.as_html(link_resolver) }.join("\n")
45
+ @group_documents.map { |doc| doc.as_html(link_resolver) }.join("\n")
45
46
  end
46
47
 
47
48
  # Generate an text representation of the group
48
49
  #
49
50
  # @return [String] the text representation
50
51
  def as_text
51
- @fragment_list_array.map { |fl| fl.as_text }.join("\n")
52
+ @group_documents.map { |doc| doc.as_text }.join("\n")
52
53
  end
53
54
 
54
-
55
- class FragmentMapping
56
-
57
- # a hash containing all the fragments in the fragment list
58
- attr_accessor :fragments
59
-
60
- def initialize(fragments)
61
- @fragments = fragments
62
- end
63
-
64
- # Accessing the right fragment of the fragment list: `fl['caption']`
65
- def [](name)
66
- @fragments[name]
67
- end
68
- alias :get :[]
69
-
70
- # @yieldparam name [String]
71
- # @yieldparam fragment [Fragment]
72
- def each(&blk)
73
- @fragments.each(&blk)
74
- end
75
- include Enumerable # adds map, select, etc
76
-
77
- # @return [Fixum]
78
- def length
79
- @fragments.length
80
- end
81
- alias :size :length
82
-
83
- # Generate an HTML representation of the fragments
84
- #
85
- # @param link_resolver [LinkResolver] The LinkResolver used to build
86
- # application's specific URL
87
- #
88
- # @return [String] the HTML representation
89
- def as_html(link_resolver = nil)
90
- @fragments.map { |name, fragment|
91
- %(<section data-field="#{name}">#{fragment.as_html(link_resolver)}</section>)
92
- }.join("\n")
93
- end
94
-
95
- # Generate a text representation of the fragment
96
- #
97
- # @return [String] the text representation
98
- def as_text
99
- @fragments.values.map { |fragment| fragment.as_text }.join("\n")
100
- end
101
- end
102
55
  end
103
56
  end
104
57
  end
@@ -31,6 +31,10 @@ module Prismic
31
31
  # it is not advised to override this method if you want to change the HTML output, you should
32
32
  # override the as_html method at the block level (like {Heading.as_html}, or {Preformatted.as_html},
33
33
  # for instance).
34
+ # @param link_resolver [LinkResolver]
35
+ # @param html_serializer [HtmlSerializer]
36
+ # @return [String] the resulting html snippet
37
+
34
38
  def as_html(link_resolver, html_serializer=nil)
35
39
  # Defining blocks that deserve grouping, assigning them "group kind" names
36
40
  block_group = ->(block){
@@ -91,7 +95,10 @@ module Prismic
91
95
  end
92
96
 
93
97
  class Span
94
- attr_accessor :start, :end
98
+ # @return [Number]
99
+ attr_accessor :start
100
+ # @return [Number]
101
+ attr_accessor :end
95
102
 
96
103
  def initialize(start, finish)
97
104
  @start = start
@@ -99,6 +106,7 @@ module Prismic
99
106
  end
100
107
 
101
108
  class Label < Span
109
+ # @return [String]
102
110
  attr_accessor :label
103
111
  def initialize(start, finish, label)
104
112
  super(start, finish)
@@ -149,7 +157,12 @@ module Prismic
149
157
  end
150
158
 
151
159
  class Text
152
- attr_accessor :text, :spans, :label
160
+ # @return [String]
161
+ attr_accessor :text
162
+ # @return [Array<Span>]
163
+ attr_accessor :spans
164
+ # @return [String] may be nil
165
+ attr_accessor :label
153
166
 
154
167
  def initialize(text, spans, label = nil)
155
168
  @text = text
@@ -192,7 +192,7 @@ module Prismic
192
192
  fragment_list_array = []
193
193
  json['value'].each do |group|
194
194
  fragments = Hash[ group.map {|name, fragment| [name, parsers[fragment['type']].call(fragment)] }]
195
- fragment_list_array << Prismic::Fragments::Group::FragmentMapping.new(fragments)
195
+ fragment_list_array << Prismic::WithFragments.new(fragments)
196
196
  end
197
197
  Prismic::Fragments::Group.new(fragment_list_array)
198
198
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  module Prismic
3
3
 
4
- VERSION = '1.0.4'
4
+ VERSION = '1.0.5'
5
5
 
6
6
  end
@@ -0,0 +1,140 @@
1
+ # encoding: utf-8
2
+ module Prismic
3
+
4
+ # A document with Fragments: usually a Prismic.io Document, or a Document within a Group
5
+ class WithFragments
6
+ # @return [Hash{String => Fragment}]
7
+ attr_accessor :fragments
8
+
9
+ def initialize(fragments)
10
+ @fragments = fragments
11
+ end
12
+
13
+ # Generate an HTML representation of the entire document
14
+ #
15
+ # @param link_resolver [LinkResolver] The LinkResolver used to build
16
+ # application's specific URL
17
+ #
18
+ # @return [String] the HTML representation
19
+ def as_html(link_resolver)
20
+ fragments.map { |field, fragment|
21
+ %(<section data-field="#{field}">#{fragment.as_html(link_resolver)}</section>)
22
+ }.join("\n")
23
+ end
24
+
25
+ # Finds the first highest title in a document (if any)
26
+ #
27
+ # @return [String]
28
+ def first_title
29
+ # It is impossible to reuse the StructuredText.first_title method, since
30
+ # we need to test the highest title across the whole document
31
+ title = false
32
+ max_level = 6 # any title with a higher level kicks the current one out
33
+ @fragments.each do |_, fragment|
34
+ if fragment.is_a? Prismic::Fragments::StructuredText
35
+ fragment.blocks.each do |block|
36
+ if block.is_a?(Prismic::Fragments::StructuredText::Block::Heading)
37
+ if block.level < max_level
38
+ title = block.text
39
+ max_level = block.level # new maximum
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ title
46
+ end
47
+
48
+ # Get a document's field
49
+ # @return [Fragments::Fragment]
50
+ def [](field)
51
+ @fragments[field]
52
+ end
53
+ alias :get :[]
54
+
55
+ # @yieldparam name [String]
56
+ # @yieldparam fragment [Fragment]
57
+ def each(&blk)
58
+ @fragments.each(&blk)
59
+ end
60
+ include Enumerable # adds map, select, etc
61
+
62
+ # @return [Fixum]
63
+ def length
64
+ @fragments.length
65
+ end
66
+ alias :size :length
67
+
68
+ # @return [Fragments::Text]
69
+ def get_text(field)
70
+ fragment = self[field]
71
+ return nil unless fragment.is_a? Prismic::Fragments::Text
72
+ fragment
73
+ end
74
+
75
+ # @return [Fragments::Number]
76
+ def get_number(field)
77
+ fragment = self[field]
78
+ return nil unless fragment.is_a? Prismic::Fragments::Number
79
+ fragment
80
+ end
81
+
82
+ # @return [Fragments::Image]
83
+ def get_image(field)
84
+ fragment = self[field]
85
+ return nil unless fragment.is_a? Prismic::Fragments::Image
86
+ fragment
87
+ end
88
+
89
+ # @return [Fragments::Date]
90
+ def get_date(field)
91
+ fragment = self[field]
92
+ return nil unless fragment.is_a? Prismic::Fragments::Date
93
+ fragment
94
+ end
95
+
96
+ # @return [Fragments::Timestamp]
97
+ def get_timestamp(field)
98
+ fragment = self[field]
99
+ return nil unless fragment.is_a? Prismic::Fragments::Timestamp
100
+ fragment
101
+ end
102
+
103
+ # @return [Fragments::Group]
104
+ def get_group(field)
105
+ fragment = self[field]
106
+ return nil unless fragment.is_a? Prismic::Fragments::Group
107
+ fragment
108
+ end
109
+
110
+ # @return [Fragments::Link]
111
+ def get_link(field)
112
+ fragment = self[field]
113
+ return nil unless fragment.is_a? Prismic::Fragments::Link
114
+ fragment
115
+ end
116
+
117
+ # @return [Fragments::Embed]
118
+ def get_embed(field)
119
+ fragment = self[field]
120
+ return nil unless fragment.is_a? Prismic::Fragments::Embed
121
+ fragment
122
+ end
123
+
124
+ # @return [Fragments::Color]
125
+ def get_color(field)
126
+ fragment = self[field]
127
+ return nil unless fragment.is_a? Prismic::Fragments::Color
128
+ fragment
129
+ end
130
+
131
+ # @return [Fragments::GeoPoint]
132
+ def get_geopoint(field)
133
+ fragment = self[field]
134
+ return nil unless fragment.is_a? Prismic::Fragments::GeoPoint
135
+ fragment
136
+ end
137
+
138
+ end
139
+
140
+ end
data/spec/doc_spec.rb CHANGED
@@ -140,6 +140,22 @@ describe 'Documentation' do
140
140
  price.should == 2.5
141
141
  end
142
142
 
143
+ it 'images' do
144
+ api = Prismic::api('https://lesbonneschoses.prismic.io/api')
145
+ response = api.form('everything')
146
+ .query(Predicates::at('document.id', 'UlfoxUnM0wkXYXbO'))
147
+ .ref(api.master_ref)
148
+ .submit
149
+ doc = response[0]
150
+ # startgist:825fa25b66355ce758fe:prismic-images.rb
151
+ # Accessing image fields
152
+ image = doc.get_image('product.image')
153
+ # Most of the time you will be using the "main" view
154
+ url = image.main.url
155
+ # endgist
156
+ url.should == 'https://prismic-io.s3.amazonaws.com/lesbonneschoses/f606ad513fcc2a73b909817119b84d6fd0d61a6d.png'
157
+ end
158
+
143
159
  it 'date and timestamp' do
144
160
  api = Prismic::api('https://lesbonneschoses.prismic.io/api')
145
161
  response = api.form('everything')
@@ -3,20 +3,20 @@ require 'spec_helper'
3
3
 
4
4
  describe 'LesBonnesChoses' do
5
5
  before do
6
- @api = Prismic.api("https://lesbonneschoses.prismic.io/api", nil)
6
+ @api = Prismic.api('https://lesbonneschoses.prismic.io/api', nil)
7
7
  @master_ref = @api.master_ref
8
8
  end
9
9
 
10
10
  describe '/api' do
11
- it "API works" do
11
+ it 'API works' do
12
12
  @api.should_not be_nil
13
13
  end
14
14
  end
15
15
 
16
16
  describe 'query' do
17
- it "queries everything and returns 20 documents" do
18
- @api.form("everything").submit(@master_ref).size.should == 20
19
- @api.form("everything").submit(@master_ref).results.size.should == 20
17
+ it 'queries everything and returns 20 documents' do
18
+ @api.form('everything').submit(@master_ref).size.should == 20
19
+ @api.form('everything').submit(@master_ref).results.size.should == 20
20
20
  end
21
21
 
22
22
  it "queries macarons (using a predicate) and returns 7 documents" do
@@ -54,6 +54,16 @@ describe 'LesBonnesChoses' do
54
54
  documents.next_page.should == "https://lesbonneschoses.prismic.io/api/documents/search?ref=UlfoxUnM08QWYXdl&page=2&pageSize=20"
55
55
  documents.prev_page.should == nil
56
56
  end
57
+ it "works when passing nil" do
58
+ documents = @api.form("everything").page(nil).submit(@master_ref)
59
+ documents.page.should == 1
60
+ documents.results_per_page.should == 20
61
+ documents.results_size.should == 20
62
+ documents.total_results_size.should == 40
63
+ documents.total_pages.should == 2
64
+ documents.next_page.should == "https://lesbonneschoses.prismic.io/api/documents/search?ref=UlfoxUnM08QWYXdl&page=2&pageSize=20"
65
+ documents.prev_page.should == nil
66
+ end
57
67
  it "works on page 2" do
58
68
  documents = @api.form("everything").page("2").submit(@master_ref)
59
69
  documents.page.should == 2
@@ -74,6 +84,16 @@ describe 'LesBonnesChoses' do
74
84
  documents.next_page.should == "https://lesbonneschoses.prismic.io/api/documents/search?ref=UlfoxUnM08QWYXdl&page=3&pageSize=10"
75
85
  documents.prev_page.should == "https://lesbonneschoses.prismic.io/api/documents/search?ref=UlfoxUnM08QWYXdl&page=1&pageSize=10"
76
86
  end
87
+ it "works when passing nil" do
88
+ documents = @api.form("everything").page(nil).submit(@master_ref)
89
+ documents.page.should == 1
90
+ documents.results_per_page.should == 20
91
+ documents.results_size.should == 20
92
+ documents.total_results_size.should == 40
93
+ documents.total_pages.should == 2
94
+ documents.next_page.should == "https://lesbonneschoses.prismic.io/api/documents/search?ref=UlfoxUnM08QWYXdl&page=2&pageSize=20"
95
+ documents.prev_page.should == nil
96
+ end
77
97
  end
78
98
 
79
99
  describe 'API::Document' do
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.0.4
4
+ version: 1.0.5
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: 2014-10-28 00:00:00.000000000 Z
14
+ date: 2014-10-31 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -109,6 +109,7 @@ files:
109
109
  - lib/prismic/json_parsers.rb
110
110
  - lib/prismic/predicates.rb
111
111
  - lib/prismic/version.rb
112
+ - lib/prismic/with_fragments.rb
112
113
  - package.json
113
114
  - prismic.gemspec
114
115
  - spec/cache_spec.rb