prismic.io 1.0.0.preview.3 → 1.0.0.preview.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/lib/prismic/api.rb +10 -3
- data/lib/prismic/form.rb +7 -2
- data/lib/prismic/fragments/block.rb +1 -0
- data/lib/prismic/fragments/color.rb +1 -0
- data/lib/prismic/fragments/date.rb +1 -0
- data/lib/prismic/fragments/embed.rb +1 -0
- data/lib/prismic/fragments/image.rb +1 -0
- data/lib/prismic/fragments/link.rb +1 -0
- data/lib/prismic/fragments/multiple.rb +1 -0
- data/lib/prismic/fragments/number.rb +1 -0
- data/lib/prismic/fragments/select.rb +1 -0
- data/lib/prismic/fragments/structured_text.rb +1 -0
- data/lib/prismic/fragments/text.rb +1 -0
- data/lib/prismic/fragments.rb +1 -0
- data/lib/prismic/json_parsers.rb +8 -1
- data/lib/prismic/version.rb +2 -1
- data/lib/prismic.rb +31 -17
- data/spec/fragments_spec.rb +1 -0
- data/spec/json_parsers_spec.rb +17 -0
- data/spec/prismic_spec.rb +69 -19
- data/spec/spec_helper.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e3f3af94b5219971b0b0dbdd62b195a0bb9a5ae
|
4
|
+
data.tar.gz: 157a7210a64dbf0e1a3f5de9b722b6222c7002a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 88eb3ea747a31a8226c3fb5f5c364e046e85e08013061510d7f5d55eb369bed64e56ef86bcb2f72220134975923fd7ea8becd557303823efc4e6ef9462cc3a95
|
7
|
+
data.tar.gz: 870e6c272bd7efe97346cdc4186e533a4332c5e2c940e30e183949278b89ccdf22d68942e3731d8d7f4ca61add02119b9ac60659ec7f332f7636a24f67c112d9
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -30,7 +30,7 @@ require 'prismic'
|
|
30
30
|
|
31
31
|
#### API Documentation
|
32
32
|
|
33
|
-
You can browse the [API Documentation](
|
33
|
+
You can browse the [API Documentation](https://developers.prismic.io/documentation/UjBe8bGIJ3EKtgBZ/api-documentation).
|
34
34
|
|
35
35
|
#### Use it
|
36
36
|
|
data/lib/prismic/api.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module Prismic
|
2
3
|
class API
|
3
4
|
attr_reader :json, :access_token
|
@@ -27,6 +28,11 @@ module Prismic
|
|
27
28
|
forms[name]
|
28
29
|
end
|
29
30
|
|
31
|
+
def create_search_form(name, data={}, ref={})
|
32
|
+
form = self.form(name)
|
33
|
+
form and form.create_search_form(data, ref)
|
34
|
+
end
|
35
|
+
|
30
36
|
def as_json
|
31
37
|
@json
|
32
38
|
end
|
@@ -56,16 +62,17 @@ module Prismic
|
|
56
62
|
new(data, access_token) {|api|
|
57
63
|
api.bookmarks = data['bookmarks']
|
58
64
|
api.forms = Hash[data_forms.map { |k, form|
|
59
|
-
[k,
|
65
|
+
[k, Form.new(
|
66
|
+
api,
|
60
67
|
form['name'],
|
61
68
|
Hash[form['fields'].map { |k2, field|
|
62
|
-
[k2, Field.new(field['type'], field['default'])]
|
69
|
+
[k2, Field.new(field['type'], field['default'], k2 == 'q')]
|
63
70
|
}],
|
64
71
|
form['method'],
|
65
72
|
form['rel'],
|
66
73
|
form['enctype'],
|
67
74
|
form['action'],
|
68
|
-
)
|
75
|
+
)]
|
69
76
|
}]
|
70
77
|
api.refs = Hash[data_refs.map { |ref|
|
71
78
|
scheduled_at = ref['scheduledAt']
|
data/lib/prismic/form.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module Prismic
|
2
3
|
class Form
|
3
4
|
attr_accessor :name, :form_method, :rel, :enctype, :action, :fields
|
4
5
|
|
5
|
-
def initialize(name, fields, form_method, rel, enctype, action)
|
6
|
+
def initialize(api, name, fields, form_method, rel, enctype, action)
|
7
|
+
@api = api
|
6
8
|
@name = name
|
7
9
|
@fields = fields
|
8
10
|
@form_method = form_method
|
@@ -12,8 +14,11 @@ module Prismic
|
|
12
14
|
end
|
13
15
|
|
14
16
|
def default_data
|
15
|
-
Hash[fields.map{|key, field| [key, field.default] }.compact]
|
17
|
+
Hash[fields.map{|key, field| [key, field.default] if field.default }.compact]
|
16
18
|
end
|
17
19
|
|
20
|
+
def create_search_form(data={}, ref=nil)
|
21
|
+
SearchForm.new(@api, self, data, ref)
|
22
|
+
end
|
18
23
|
end
|
19
24
|
end
|
data/lib/prismic/fragments.rb
CHANGED
data/lib/prismic/json_parsers.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module Prismic
|
2
3
|
module JsonParser
|
3
4
|
class << self
|
@@ -165,7 +166,13 @@ module Prismic
|
|
165
166
|
json['slugs'], fragments)
|
166
167
|
end
|
167
168
|
|
168
|
-
|
169
|
+
def results_parser(results)
|
170
|
+
results = results['results'] unless results.is_a?(Array)
|
171
|
+
results.map do |doc|
|
172
|
+
raise FormSearchException, "Error : #{doc['error']}" if doc.include?('error')
|
173
|
+
document_parser(doc)
|
174
|
+
end
|
175
|
+
end
|
169
176
|
|
170
177
|
private
|
171
178
|
|
data/lib/prismic/version.rb
CHANGED
data/lib/prismic.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'net/http'
|
2
3
|
require 'uri'
|
3
4
|
|
@@ -30,12 +31,13 @@ module Prismic
|
|
30
31
|
end
|
31
32
|
|
32
33
|
class SearchForm
|
33
|
-
attr_accessor :api, :form, :data
|
34
|
+
attr_accessor :api, :form, :data, :ref
|
34
35
|
|
35
|
-
def initialize(api, form, data={})
|
36
|
+
def initialize(api, form, data={}, ref=nil)
|
36
37
|
@api = api
|
37
38
|
@form = form
|
38
39
|
@data = form.default_data.merge(data)
|
40
|
+
@ref = ref
|
39
41
|
end
|
40
42
|
|
41
43
|
def name
|
@@ -62,17 +64,18 @@ module Prismic
|
|
62
64
|
form.fields
|
63
65
|
end
|
64
66
|
|
65
|
-
def submit(ref)
|
67
|
+
def submit(ref = @ref)
|
68
|
+
raise NoRefSetException unless @ref
|
69
|
+
|
66
70
|
if form_method == "GET" && enctype == "application/x-www-form-urlencoded"
|
67
71
|
data['ref'] = ref
|
68
|
-
data
|
72
|
+
data['access_token'] = api.access_token if api.access_token
|
73
|
+
data.delete_if { |k, v| v.nil? }
|
69
74
|
|
70
75
|
uri = URI(action)
|
71
76
|
uri.query = URI.encode_www_form(data)
|
72
77
|
|
73
|
-
|
74
|
-
request_uri += (request_uri =~ /\?/ ? '&' : '?') + "access_token=#{api.access_token}" if api.access_token
|
75
|
-
request = Net::HTTP::Get.new(request_uri)
|
78
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
76
79
|
request.add_field('Accept', 'application/json')
|
77
80
|
|
78
81
|
response = Net::HTTP.new(uri.host, uri.port).start do |http|
|
@@ -83,35 +86,47 @@ module Prismic
|
|
83
86
|
|
84
87
|
raise FormSearchException, "Error : #{response.body}" if response.code != "200"
|
85
88
|
|
86
|
-
JSON.parse(response.body)
|
87
|
-
raise FormSearchException, "Error : #{doc['error']}" if doc.include?('error')
|
88
|
-
Prismic::JsonParser.document_parser(doc)
|
89
|
-
end
|
89
|
+
Prismic::JsonParser.results_parser(JSON.parse(response.body))
|
90
90
|
else
|
91
91
|
raise UnsupportedFormKind, "Unsupported kind of form: #{form_method} / #{enctype}"
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
95
|
def query(query)
|
96
|
-
|
97
|
-
previous_query = form.fields['q'] ? form.fields['q'].default.to_s : ''
|
98
|
-
data['q'] = "[%s%s]" % [strip_brakets.(previous_query), strip_brakets.(query)]
|
96
|
+
set('q', query)
|
99
97
|
self
|
100
98
|
end
|
101
99
|
|
100
|
+
def set(field_name, value)
|
101
|
+
field = @form.fields[field_name]
|
102
|
+
if field.repeatable?
|
103
|
+
data[field_name] = [] unless data.include? field_name
|
104
|
+
data[field_name] << value
|
105
|
+
else
|
106
|
+
data[field_name] = value
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def ref(ref)
|
111
|
+
@ref = ref
|
112
|
+
end
|
113
|
+
|
114
|
+
class NoRefSetException < Error ; end
|
102
115
|
class UnsupportedFormKind < Error ; end
|
103
116
|
class RefNotFoundException < Error ; end
|
104
117
|
class FormSearchException < Error ; end
|
105
118
|
end
|
106
119
|
|
107
120
|
class Field
|
108
|
-
attr_accessor :field_type, :default
|
121
|
+
attr_accessor :field_type, :default, :repeatable
|
109
122
|
|
110
|
-
def initialize(field_type, default)
|
123
|
+
def initialize(field_type, default, repeatable = false)
|
111
124
|
@field_type = field_type
|
112
125
|
@default = default
|
126
|
+
@repeatable = repeatable
|
113
127
|
end
|
114
128
|
|
129
|
+
alias :repeatable? :repeatable
|
115
130
|
end
|
116
131
|
|
117
132
|
class Document
|
@@ -170,7 +185,6 @@ module Prismic
|
|
170
185
|
def self.link_resolver(ref, &blk)
|
171
186
|
LinkResolver.new(ref, &blk)
|
172
187
|
end
|
173
|
-
|
174
188
|
end
|
175
189
|
|
176
190
|
require 'prismic/api'
|
data/spec/fragments_spec.rb
CHANGED
data/spec/json_parsers_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
describe 'document_link_parser' do
|
2
3
|
before do
|
3
4
|
raw_json = <<json
|
@@ -277,6 +278,22 @@ describe 'document_parser' do
|
|
277
278
|
end
|
278
279
|
end
|
279
280
|
|
281
|
+
describe 'results_parser' do
|
282
|
+
|
283
|
+
it "accepts results as an array" do
|
284
|
+
@json = JSON.parse('[]')
|
285
|
+
@results = Prismic::JsonParser.results_parser(@json)
|
286
|
+
@results.should == []
|
287
|
+
end
|
288
|
+
|
289
|
+
it "accepts results as an object" do
|
290
|
+
@json = JSON.parse('{"results":[]}')
|
291
|
+
@results = Prismic::JsonParser.results_parser(@json)
|
292
|
+
@results.should == []
|
293
|
+
end
|
294
|
+
|
295
|
+
end
|
296
|
+
|
280
297
|
describe 'multiple_parser' do
|
281
298
|
before do
|
282
299
|
raw_json = <<json
|
data/spec/prismic_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
describe 'Api' do
|
@@ -15,10 +16,10 @@ describe 'Api' do
|
|
15
16
|
'key4' => Prismic::Ref.new('ref4', 'label4'),
|
16
17
|
}
|
17
18
|
api.forms = {
|
18
|
-
'form1' => Prismic::
|
19
|
-
'form2' => Prismic::
|
20
|
-
'form3' => Prismic::
|
21
|
-
'form4' => Prismic::
|
19
|
+
'form1' => Prismic::Form.new(@api, 'form1', {}, nil, nil, nil, nil),
|
20
|
+
'form2' => Prismic::Form.new(@api, 'form2', {}, nil, nil, nil, nil),
|
21
|
+
'form3' => Prismic::Form.new(@api, 'form3', {}, nil, nil, nil, nil),
|
22
|
+
'form4' => Prismic::Form.new(@api, 'form4', {}, nil, nil, nil, nil),
|
22
23
|
}
|
23
24
|
api.oauth = Prismic::API::OAuth.new(@oauth_initiate_url, "https://lesbonneschoses.prismic.io/auth/token")
|
24
25
|
}
|
@@ -44,7 +45,14 @@ describe 'Api' do
|
|
44
45
|
|
45
46
|
describe 'form' do
|
46
47
|
it "return the right Form" do
|
47
|
-
@api.form('form2').
|
48
|
+
@api.form('form2').name.should == 'form2'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe 'create_search_form' do
|
53
|
+
it "create a new search form for the right form" do
|
54
|
+
@form = @api.create_search_form('form2')
|
55
|
+
@form.form.name.should == 'form2'
|
48
56
|
end
|
49
57
|
end
|
50
58
|
|
@@ -157,6 +165,15 @@ describe 'Api' do
|
|
157
165
|
@parsed.forms['pies'].fields['q'].default.should ==
|
158
166
|
'[[at(document.tags, ["Pie"])][any(document.type, ["product"])]]'
|
159
167
|
end
|
168
|
+
|
169
|
+
it "create fields (other than 'q') as non repeatable" do
|
170
|
+
@parsed.forms['pies'].fields['ref'].repeatable.should be_false
|
171
|
+
end
|
172
|
+
|
173
|
+
it "create 'q' fields as repeatable" do
|
174
|
+
@parsed.forms['pies'].fields['q'].repeatable.should be_true
|
175
|
+
end
|
176
|
+
|
160
177
|
end
|
161
178
|
|
162
179
|
describe 'as_json' do
|
@@ -236,34 +253,67 @@ end
|
|
236
253
|
|
237
254
|
describe 'SearchForm' do
|
238
255
|
before do
|
256
|
+
@field = Prismic::Field.new('String', ['foo'], true)
|
239
257
|
@api = nil
|
240
|
-
@field = Prismic::Field.new('String', '[foo]')
|
241
258
|
end
|
242
259
|
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
260
|
+
def create_form(fields)
|
261
|
+
form = Prismic::Form.new(nil, 'form1', fields, nil, nil, nil, nil)
|
262
|
+
form.create_search_form
|
263
|
+
end
|
264
|
+
|
265
|
+
describe 'set() for queries' do
|
266
|
+
|
267
|
+
it "append value for repeatable fields" do
|
268
|
+
@field = Prismic::Field.new('String', ['foo'], true)
|
269
|
+
@form = create_form('q' => @field)
|
270
|
+
@form.set('q', 'bar')
|
271
|
+
@form.data.should == { 'q' => ['foo', 'bar'] } # test the 1st call
|
272
|
+
@form.set('q', 'baz')
|
273
|
+
@form.data.should == { 'q' => ['foo', 'bar', 'baz'] } # test an other
|
248
274
|
end
|
249
275
|
|
250
|
-
it "
|
251
|
-
@
|
252
|
-
@form
|
253
|
-
@form.
|
276
|
+
it "replace value for non repeatable fields" do
|
277
|
+
@field = Prismic::Field.new('String', 'foo', false)
|
278
|
+
@form = create_form('q' => @field)
|
279
|
+
@form.set('q', 'bar')
|
280
|
+
@form.data.should == { 'q' => 'bar' } # test the 1st call
|
281
|
+
@form.set('q', 'baz')
|
282
|
+
@form.data.should == { 'q' => 'baz' } # test an other
|
283
|
+
end
|
284
|
+
|
285
|
+
it "create value array for repeatable fields without value" do
|
286
|
+
@field = Prismic::Field.new('String', nil, true)
|
287
|
+
@form = create_form('q' => @field)
|
288
|
+
@form.set('q', 'bar')
|
289
|
+
@form.data.should == { 'q' => ['bar'] }
|
290
|
+
end
|
291
|
+
|
292
|
+
it "create value for non repeatable fields without value" do
|
293
|
+
@field = Prismic::Field.new('String', nil, false)
|
294
|
+
@form = create_form('q' => @field)
|
295
|
+
@form.set('q', 'bar')
|
296
|
+
@form.data.should == { 'q' => 'bar' }
|
254
297
|
end
|
255
298
|
|
256
299
|
it "returns the form itself" do
|
257
|
-
@form =
|
258
|
-
@form.query('
|
300
|
+
@form = create_form('q' => @field)
|
301
|
+
@form.query('foo').should equal @form
|
259
302
|
end
|
260
303
|
|
261
304
|
it "merge user defined params into default ones" do
|
262
305
|
field = ->(value){ Prismic::Field.new('String', value) }
|
263
306
|
default_params = {'param1' => field.('a'), 'param2' => field.('b')}
|
264
|
-
|
265
|
-
@form
|
307
|
+
@form = create_form(default_params)
|
308
|
+
@form.set('param1', 'a2')
|
266
309
|
@form.data.should == {'param1' => 'a2', 'param2' => 'b'}
|
267
310
|
end
|
268
311
|
end
|
312
|
+
|
313
|
+
describe 'submit' do
|
314
|
+
it "raises an exception if no ref is set" do
|
315
|
+
@form = create_form('q' => @field)
|
316
|
+
expect { @form.submit }.to raise_error Prismic::SearchForm::NoRefSetException
|
317
|
+
end
|
318
|
+
end
|
269
319
|
end
|
data/spec/spec_helper.rb
CHANGED
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.preview.
|
4
|
+
version: 1.0.0.preview.5
|
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: 2013-
|
12
|
+
date: 2013-11-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|