prismic.io 1.0.0.rc2 → 1.0.0.rc3

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: 6f3ceb1f0344bdcb62956f4f7a5cc1726f7bd71d
4
- data.tar.gz: 15093ac28e13027b611f19dcf0ef5d0711b9e6f0
3
+ metadata.gz: 406a3849f94ecdfd3516db68fa2ee0d36ecf1c6a
4
+ data.tar.gz: f6988c94934d3a900af92cf6973dbb3c8d46d135
5
5
  SHA512:
6
- metadata.gz: f01b158ca5911cca23adeb97c1a5113d17d5e40e4a548074fe787ec7737c1b44e6676d56156a808d215ec6e834a7f1fc57c08aad759c7cc1ba49e110f76a3abb
7
- data.tar.gz: b62bfd8113a345921a3700e797d1839f49f0257fbd5f68313fdd392a417aa80c5e0244175a7dbfbb5696312f8198aeda44bfc6bc6ce3a4312c83a09183657eee
6
+ metadata.gz: 4f69e94c2b76f58b859ab8fac98c5a7a2ad09f2330fc05e1cf66daebf2d5913ac4d7f514d65f44833a4c10d8e98a3253bd0c6c7716e3bb9351a8218269dfc86b
7
+ data.tar.gz: 2f09cbb004acd083ffb16ab02dc19ab2e4862d019b105456d658de1f066528c1151a9c41695573dc6d98f7e147bf7eecb4bb9b68d4b55b6939bab041d781aa1e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- prismic.io (1.0.0.rc2)
4
+ prismic.io (1.0.0.rc3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/lib/prismic.rb CHANGED
@@ -161,7 +161,7 @@ module Prismic
161
161
  #
162
162
  # @param ref [Ref, String] The {Ref reference} to use (if not already defined)
163
163
  #
164
- # @return [Array<Document>] The results
164
+ # @return [Documents] The results (array of Document object + pagination specifics)
165
165
  def submit(ref = nil)
166
166
  self.ref(ref) if ref
167
167
  raise NoRefSetException unless @ref
@@ -174,7 +174,7 @@ module Prismic
174
174
  response = api.http_client.get(form_action, data, 'Accept' => 'application/json')
175
175
 
176
176
  if response.code.to_s == "200"
177
- Prismic::JsonParser.results_parser(JSON.parse(response.body))
177
+ Prismic::JsonParser.documents_parser(JSON.parse(response.body))
178
178
  else
179
179
  body = JSON.parse(response.body) rescue nil
180
180
  error = body.is_a?(Hash) ? body['error'] : response.body
@@ -234,6 +234,36 @@ module Prismic
234
234
  alias :repeatable? :repeatable
235
235
  end
236
236
 
237
+ class Documents
238
+ attr_accessor :page, :results_per_page, :results_size, :total_results_size, :total_pages, :next_page, :prev_page, :results
239
+
240
+ def initialize(page, results_per_page, results_size, total_results_size, total_pages, next_page, prev_page, results)
241
+ @page = page
242
+ @results_per_page = results_per_page
243
+ @results_size = results_size
244
+ @total_results_size = total_results_size
245
+ @total_pages = total_pages
246
+ @next_page = next_page
247
+ @prev_page = prev_page
248
+ @results = results
249
+ end
250
+
251
+ # Accessing the i-th document in the results
252
+ def [](i)
253
+ @results[i]
254
+ end
255
+
256
+ def each(&blk)
257
+ @results.each(&blk)
258
+ end
259
+ include Enumerable # adds map, select, etc
260
+
261
+ def length
262
+ @results.length
263
+ end
264
+ alias :size :length
265
+ end
266
+
237
267
  class Document
238
268
  attr_accessor :id, :type, :href, :tags, :slugs, :fragments
239
269
 
@@ -204,14 +204,26 @@ module Prismic
204
204
  json['slugs'], fragments)
205
205
  end
206
206
 
207
- def results_parser(result)
208
- result = {'results' => result} if result.is_a?(Array)
209
- raise FormSearchException, "Error : #{result['error']}" if result['error']
210
- result['results'].map do |doc|
207
+ def results_parser(results)
208
+ results.map do |doc|
211
209
  document_parser(doc)
212
210
  end
213
211
  end
214
212
 
213
+ def documents_parser(documents)
214
+ raise FormSearchException, "Error : #{documents['error']}" if documents['error']
215
+ Prismic::Documents.new(
216
+ documents['page'],
217
+ documents['results_per_page'],
218
+ documents['results_size'],
219
+ documents['total_results_size'],
220
+ documents['total_pages'],
221
+ documents['next_page'],
222
+ documents['prev_page'],
223
+ results_parser(documents['results'])
224
+ )
225
+ end
226
+
215
227
  private
216
228
 
217
229
  def link_parser(json)
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  module Prismic
3
3
 
4
- VERSION = "1.0.0.rc2"
4
+ VERSION = "1.0.0.rc3"
5
5
 
6
6
  end
@@ -316,18 +316,26 @@ describe 'document_parser' do
316
316
  end
317
317
  end
318
318
 
319
- describe 'results_parser' do
320
-
321
- it "accepts results as an array" do
322
- @json = JSON.parse('[]')
323
- @results = Prismic::JsonParser.results_parser(@json)
324
- @results.should == []
325
- end
326
-
327
- it "accepts results as an object" do
328
- @json = JSON.parse('{"results":[]}')
329
- @results = Prismic::JsonParser.results_parser(@json)
330
- @results.should == []
319
+ describe 'documents_parser' do
320
+
321
+ it "accepts basic documents response" do
322
+ @json = JSON.parse('{ "page": 1,
323
+ "results_per_page": 20,
324
+ "results_size": 20,
325
+ "total_results_size": 40,
326
+ "total_pages": 2,
327
+ "next_page": "https://lesbonneschoses.prismic.io/api/documents/search?ref=UkL0hcuvzYUANCrm&page=2&pageSize=20",
328
+ "prev_page": null,
329
+ "results":[]}')
330
+ @documents = Prismic::JsonParser.documents_parser(@json)
331
+ @documents.results.should == []
332
+ @documents.page.should == 1
333
+ @documents.results_per_page.should == 20
334
+ @documents.results_size.should == 20
335
+ @documents.total_results_size.should == 40
336
+ @documents.total_pages.should == 2
337
+ @documents.next_page.should == "https://lesbonneschoses.prismic.io/api/documents/search?ref=UkL0hcuvzYUANCrm&page=2&pageSize=20"
338
+ @documents.prev_page.should == nil
331
339
  end
332
340
 
333
341
  end
@@ -16,25 +16,66 @@ describe 'LesBonnesChoses' do
16
16
  describe 'query' do
17
17
  it "queries everything and returns 20 documents" do
18
18
  @api.form("everything").submit(@master_ref).size.should == 20
19
+ @api.form("everything").submit(@master_ref).results.size.should == 20
19
20
  end
20
21
 
21
22
  it "queries macarons (using a predicate) and returns 7 documents" do
23
+ @api.form("everything")
24
+ .query(%([[:d = any(document.tags, ["Macaron"])]]))
25
+ .submit(@master_ref).results.size.should == 7
22
26
  @api.form("everything")
23
27
  .query(%([[:d = any(document.tags, ["Macaron"])]]))
24
28
  .submit(@master_ref).size.should == 7
25
29
  end
26
30
 
27
31
  it "queries macarons (using a form) and returns 7 documents" do
32
+ @api.form("macarons").submit(@master_ref).results.size.should == 7
28
33
  @api.form("macarons").submit(@master_ref).size.should == 7
29
34
  end
30
35
 
31
36
  it "queries macarons or cupcakes (using a form + a predicate) and returns 11 documents" do
37
+ @api.form("products")
38
+ .query(%([[:d = any(document.tags, ["Cupcake", "Macaron"])]]))
39
+ .submit(@master_ref).results.size.should == 11
32
40
  @api.form("products")
33
41
  .query(%([[:d = any(document.tags, ["Cupcake", "Macaron"])]]))
34
42
  .submit(@master_ref).size.should == 11
35
43
  end
36
44
  end
37
45
 
46
+ describe 'pagination' do
47
+ it "works in basic cases" do
48
+ documents = @api.form("everything").submit(@master_ref)
49
+ documents.page.should == 1
50
+ documents.results_per_page.should == 20
51
+ documents.results_size.should == 20
52
+ documents.total_results_size.should == 40
53
+ documents.total_pages.should == 2
54
+ documents.next_page.should == "https://lesbonneschoses.prismic.io/api/documents/search?ref=UkL0hcuvzYUANCrm&page=2&pageSize=20"
55
+ documents.prev_page.should == nil
56
+ end
57
+ it "works on page 2" do
58
+ documents = @api.form("everything").page("2").submit(@master_ref)
59
+ documents.page.should == 2
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 == nil
65
+ documents.prev_page.should == "https://lesbonneschoses.prismic.io/api/documents/search?ref=UkL0hcuvzYUANCrm&page=1&pageSize=20"
66
+ end
67
+ it "works on page 2 with a pagination step of 10" do
68
+ documents = @api.form("everything").page("2").page_size("10").submit(@master_ref)
69
+ documents.page.should == 2
70
+ documents.results_per_page.should == 10
71
+ documents.results_size.should == 10
72
+ documents.total_results_size.should == 40
73
+ documents.total_pages.should == 4
74
+ documents.next_page.should == "https://lesbonneschoses.prismic.io/api/documents/search?ref=UkL0hcuvzYUANCrm&page=3&pageSize=10"
75
+ documents.prev_page.should == "https://lesbonneschoses.prismic.io/api/documents/search?ref=UkL0hcuvzYUANCrm&page=1&pageSize=10"
76
+ end
77
+ end
78
+
38
79
  describe 'API::Document' do
39
80
  before do
40
81
  @document = @api.form('everything').query(%([[:d = at(document.id, "UkL0gMuvzYUANCpf")]])).submit(@master_ref)[0]
@@ -55,6 +96,28 @@ describe 'LesBonnesChoses' do
55
96
  end
56
97
  end
57
98
 
99
+ describe 'API::Documents' do
100
+ before do
101
+ @documents = @api.form('everything').submit(@master_ref)
102
+ end
103
+
104
+ it 'has a working [] operator' do
105
+ @documents[0].slug.should == @documents.results[0].slug
106
+ end
107
+ it 'has a proper size' do
108
+ @documents.length.should == 20
109
+ @documents.size.should == 20
110
+ end
111
+ it 'has a proper each method' do
112
+ array = []
113
+ @documents.each {|document| array << document.slug }
114
+ array.join(' ').should == 'pastry-dresser exotic-kiwi-pie apricot-pie sweet-strawberry-pie woodland-cherry-pie cool-coconut-macaron salted-caramel-macaron the-end-of-a-chapter-the-beginning-of-a-new-one get-the-right-approach-to-ganache one-day-in-the-life-of-a-les-bonnes-choses-pastry les-bonnes-chosess-internship-a-testimony our-world-famous-pastry-art-brainstorm-event tips-to-dress-a-pastry triple-chocolate-cupcake dont-be-a-stranger about-us wedding-gift-box art-director store-intern content-director'
115
+ end
116
+ it 'is a proper Enumerable' do
117
+ @documents.map {|document| document.slug }.join(' ').should == 'pastry-dresser exotic-kiwi-pie apricot-pie sweet-strawberry-pie woodland-cherry-pie cool-coconut-macaron salted-caramel-macaron the-end-of-a-chapter-the-beginning-of-a-new-one get-the-right-approach-to-ganache one-day-in-the-life-of-a-les-bonnes-choses-pastry les-bonnes-chosess-internship-a-testimony our-world-famous-pastry-art-brainstorm-event tips-to-dress-a-pastry triple-chocolate-cupcake dont-be-a-stranger about-us wedding-gift-box art-director store-intern content-director'
118
+ end
119
+ end
120
+
58
121
  describe 'Fragments' do
59
122
  before do
60
123
  @link_resolver = Prismic.link_resolver("master"){|doc_link| "http://localhost/#{doc_link.id}" }
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.0.rc2
4
+ version: 1.0.0.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Étienne Vallette d'Osia
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-12 00:00:00.000000000 Z
12
+ date: 2014-02-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler