prismic.io 1.0.0.preview.1 → 1.0.0.preview.2
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 +4 -4
- data/.travis.yml +11 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +6 -3
- data/README.md +5 -1
- data/lib/prismic.rb +19 -6
- data/lib/prismic/api.rb +61 -35
- data/lib/prismic/fragments/structured_text.rb +7 -1
- data/lib/prismic/json_parsers.rb +23 -16
- data/lib/prismic/version.rb +1 -1
- data/prismic.gemspec +0 -1
- data/spec/fragments_spec.rb +71 -3
- data/spec/json_parsers_spec.rb +16 -0
- data/spec/prismic_spec.rb +43 -19
- data/spec/responses_mocks/api.json +13 -11
- data/spec/spec_helper.rb +5 -1
- metadata +4 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 70b17b4fc1bdb46920e3ffb4fd498bfee2b104aa
|
4
|
+
data.tar.gz: 817d91632efa91c0a7473ab3aaf982a0589f0ffc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aeedce9389e490287de28bae3cd068a864ee6fccc840692581c3939d33c6ec7bf5024bbd7302003146722c977488008a86df61f3a3fad2a7b6b9afc6b0b02513
|
7
|
+
data.tar.gz: cb48dfa12ff2548695f13e1d73d923d6303eda650c430e30b07c7f2ada659a2396bb1b3124f0751ad5a64f09a01d8f45810fe4c67a270fcf93a476f336668787
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
|
4
|
+
prismic.io (1.0.0.preview.2)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -11,6 +11,8 @@ GEM
|
|
11
11
|
multi_json (1.8.0)
|
12
12
|
nokogiri (1.6.0)
|
13
13
|
mini_portile (~> 0.5.0)
|
14
|
+
nokogiri (1.6.0-java)
|
15
|
+
mini_portile (~> 0.5.0)
|
14
16
|
rspec (2.14.1)
|
15
17
|
rspec-core (~> 2.14.0)
|
16
18
|
rspec-expectations (~> 2.14.0)
|
@@ -26,12 +28,13 @@ GEM
|
|
26
28
|
yajl-ruby (1.1.0)
|
27
29
|
|
28
30
|
PLATFORMS
|
31
|
+
java
|
29
32
|
ruby
|
30
33
|
|
31
34
|
DEPENDENCIES
|
32
|
-
Prismic!
|
33
35
|
bundler (~> 1.3)
|
34
36
|
nokogiri (~> 1.6)
|
37
|
+
prismic.io!
|
35
38
|
rspec (~> 2.14)
|
36
39
|
simplecov (~> 0.7)
|
37
|
-
yajl-ruby
|
40
|
+
yajl-ruby
|
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
## Ruby development kit for prismic.io
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/prismic.io)
|
4
|
+
[](https://travis-ci.org/prismicio/ruby-kit)
|
5
|
+
[](https://codeclimate.com/github/prismicio/ruby-kit)
|
6
|
+
|
3
7
|
### Getting Started
|
4
8
|
|
5
9
|
#### Install using bundler
|
@@ -15,7 +19,7 @@ gem 'prismic.io', require: 'prismic'
|
|
15
19
|
Run in shell:
|
16
20
|
|
17
21
|
```sh
|
18
|
-
gem install prismic.io
|
22
|
+
gem install prismic.io --pre
|
19
23
|
```
|
20
24
|
|
21
25
|
then add in your code:
|
data/lib/prismic.rb
CHANGED
@@ -30,9 +30,10 @@ module Prismic
|
|
30
30
|
end
|
31
31
|
|
32
32
|
class SearchForm
|
33
|
-
attr_accessor :form, :data
|
33
|
+
attr_accessor :api, :form, :data
|
34
34
|
|
35
|
-
def initialize(form, data=form.default_data)
|
35
|
+
def initialize(api, form, data=form.default_data)
|
36
|
+
@api = api
|
36
37
|
@form = form
|
37
38
|
@data = data
|
38
39
|
end
|
@@ -69,7 +70,9 @@ module Prismic
|
|
69
70
|
uri = URI(action)
|
70
71
|
uri.query = URI.encode_www_form(data)
|
71
72
|
|
72
|
-
|
73
|
+
request_uri = uri.request_uri
|
74
|
+
request_uri += (request_uri =~ /\?/ ? '&' : '?') + "access_token=#{api.access_token}" if api.access_token
|
75
|
+
request = Net::HTTP::Get.new(request_uri)
|
73
76
|
request.add_field('Accept', 'application/json')
|
74
77
|
|
75
78
|
response = Net::HTTP.new(uri.host, uri.port).start do |http|
|
@@ -78,7 +81,10 @@ module Prismic
|
|
78
81
|
|
79
82
|
raise RefNotFoundException, "Ref #{ref} not found" if response.code == "404"
|
80
83
|
|
84
|
+
raise FormSearchException, "Error : #{response.body}" if response.code != "200"
|
85
|
+
|
81
86
|
JSON.parse(response.body).map do |doc|
|
87
|
+
raise FormSearchException, "Error : #{doc['error']}" if doc.include?('error')
|
82
88
|
Prismic::JsonParser.document_parser(doc)
|
83
89
|
end
|
84
90
|
else
|
@@ -96,6 +102,7 @@ module Prismic
|
|
96
102
|
|
97
103
|
class UnsupportedFormKind < Error ; end
|
98
104
|
class RefNotFoundException < Error ; end
|
105
|
+
class FormSearchException < Error ; end
|
99
106
|
end
|
100
107
|
|
101
108
|
class Field
|
@@ -138,12 +145,13 @@ module Prismic
|
|
138
145
|
end
|
139
146
|
|
140
147
|
class Ref
|
141
|
-
attr_accessor :ref, :label, :is_master, :
|
148
|
+
attr_accessor :ref, :label, :is_master, :scheduled_at
|
142
149
|
|
143
|
-
def initialize(ref, label, is_master = false)
|
150
|
+
def initialize(ref, label, is_master = false, scheduled_at = nil)
|
144
151
|
@ref = ref
|
145
|
-
@label = label
|
152
|
+
@label = label
|
146
153
|
@is_master = is_master
|
154
|
+
@scheduled_at = scheduled_at
|
147
155
|
end
|
148
156
|
|
149
157
|
alias :master? :is_master
|
@@ -159,6 +167,11 @@ module Prismic
|
|
159
167
|
@blk.call(doc_link)
|
160
168
|
end
|
161
169
|
end
|
170
|
+
|
171
|
+
def self.link_resolver(ref, &blk)
|
172
|
+
LinkResolver.new(ref, &blk)
|
173
|
+
end
|
174
|
+
|
162
175
|
end
|
163
176
|
|
164
177
|
require 'prismic/api'
|
data/lib/prismic/api.rb
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
module Prismic
|
2
2
|
class API
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
@
|
8
|
-
@
|
9
|
-
|
10
|
-
|
11
|
-
@types = args.fetch(:types)
|
12
|
-
self.master = refs.values.map { |ref| ref if ref.master? }.compact.first
|
3
|
+
attr_reader :json, :access_token
|
4
|
+
attr_accessor :refs, :bookmarks, :forms, :master, :tags, :types, :oauth
|
5
|
+
|
6
|
+
def initialize(json, access_token=nil)
|
7
|
+
@json = json
|
8
|
+
@access_token = access_token
|
9
|
+
yield self if block_given?
|
10
|
+
self.master = refs.values && refs.values.map { |ref| ref if ref.master? }.compact.first
|
13
11
|
raise BadPrismicResponseError, "No master Ref found" unless master
|
14
12
|
end
|
15
13
|
|
@@ -18,11 +16,11 @@ module Prismic
|
|
18
16
|
end
|
19
17
|
|
20
18
|
def ref(name)
|
21
|
-
refs[name]
|
19
|
+
refs[name.downcase]
|
22
20
|
end
|
23
21
|
|
24
|
-
def
|
25
|
-
|
22
|
+
def master_ref
|
23
|
+
ref('master')
|
26
24
|
end
|
27
25
|
|
28
26
|
def form(name)
|
@@ -33,13 +31,10 @@ module Prismic
|
|
33
31
|
@json
|
34
32
|
end
|
35
33
|
|
36
|
-
def self.get(url,
|
37
|
-
|
38
|
-
puts url
|
39
|
-
uri = URI(url)
|
34
|
+
def self.get(url, access_token=nil)
|
35
|
+
uri = URI(access_token ? "#{url}?access_token=#{access_token}" : url)
|
40
36
|
http = Net::HTTP.new(uri.host)
|
41
|
-
|
42
|
-
req = Net::HTTP::Get.new(path, 'Accept' => 'application/json')
|
37
|
+
req = Net::HTTP::Get.new(uri.path, 'Accept' => 'application/json')
|
43
38
|
res = http.request(req)
|
44
39
|
|
45
40
|
if res.code == '200'
|
@@ -49,20 +44,19 @@ module Prismic
|
|
49
44
|
end
|
50
45
|
end
|
51
46
|
|
52
|
-
def self.start(url,
|
53
|
-
resp = get(url,
|
47
|
+
def self.start(url, access_token=nil)
|
48
|
+
resp = get(url, access_token)
|
54
49
|
json = JSON.load(resp.body)
|
55
|
-
parse_api_response(json)
|
50
|
+
parse_api_response(json, access_token)
|
56
51
|
end
|
57
52
|
|
58
|
-
def self.parse_api_response(data)
|
53
|
+
def self.parse_api_response(data, access_token=nil)
|
59
54
|
data_forms = data['forms'] || []
|
60
55
|
data_refs = data.fetch('refs'){ raise BadPrismicResponseError, "No refs given" }
|
61
|
-
new({
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
[k, SearchForm.new(Form.new(
|
56
|
+
new(data, access_token) {|api|
|
57
|
+
api.bookmarks = data['bookmarks']
|
58
|
+
api.forms = Hash[data_forms.map { |k, form|
|
59
|
+
[k, SearchForm.new(api, Form.new(
|
66
60
|
form['name'],
|
67
61
|
Hash[form['fields'].map { |k2, field|
|
68
62
|
[k2, Field.new(field['type'], field['default'])]
|
@@ -72,13 +66,37 @@ module Prismic
|
|
72
66
|
form['enctype'],
|
73
67
|
form['action'],
|
74
68
|
))]
|
75
|
-
}]
|
76
|
-
refs
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
69
|
+
}]
|
70
|
+
api.refs = Hash[data_refs.map { |ref|
|
71
|
+
scheduled_at = ref['scheduledAt']
|
72
|
+
[ref['label'].downcase, Ref.new(ref['ref'], ref['label'], ref['isMasterRef'], scheduled_at && Time.at(scheduled_at / 1000.0))]
|
73
|
+
}]
|
74
|
+
api.tags = data['tags']
|
75
|
+
api.types = data['types']
|
76
|
+
api.oauth = OAuth.new(data['oauth_initiate'], data['oauth_token'])
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
def oauth_initiate_url(opts)
|
81
|
+
oauth.initiate + "?" + {
|
82
|
+
"client_id" => opts.fetch(:client_id),
|
83
|
+
"redirect_uri" => opts.fetch(:redirect_uri),
|
84
|
+
"scope" => opts.fetch(:scope),
|
85
|
+
}.map{|kv| kv.map{|e| CGI.escape(e) }.join("=") }.join("&")
|
86
|
+
end
|
87
|
+
|
88
|
+
def oauth_check_token(params)
|
89
|
+
uri = URI(oauth.token)
|
90
|
+
res = Net::HTTP.post_form(uri, params)
|
91
|
+
if res.code == '200'
|
92
|
+
begin
|
93
|
+
JSON.parse(res.body)['access_token']
|
94
|
+
rescue Exception => e
|
95
|
+
raise PrismicWSConnectionError.new(res, e)
|
96
|
+
end
|
97
|
+
else
|
98
|
+
raise PrismicWSConnectionError, res
|
99
|
+
end
|
82
100
|
end
|
83
101
|
|
84
102
|
private
|
@@ -90,5 +108,13 @@ module Prismic
|
|
90
108
|
super("Can't connect to Prismic's API: #{resp.code} #{resp.message}", cause)
|
91
109
|
end
|
92
110
|
end
|
111
|
+
|
112
|
+
class OAuth
|
113
|
+
attr_reader :initiate, :token
|
114
|
+
def initialize(initiate, token)
|
115
|
+
@initiate = initiate
|
116
|
+
@token = token
|
117
|
+
end
|
118
|
+
end
|
93
119
|
end
|
94
120
|
end
|
@@ -80,7 +80,7 @@ module Prismic
|
|
80
80
|
end
|
81
81
|
def start_html(link_resolver)
|
82
82
|
# Quick-and-dirty way to generate the right <a> tag
|
83
|
-
link.as_html(link_resolver).sub(/(<
|
83
|
+
link.as_html(link_resolver).sub(/(<[^>]+>).*/, '\1')
|
84
84
|
end
|
85
85
|
def end_html(link_resolver=nil)
|
86
86
|
"</a>"
|
@@ -144,6 +144,12 @@ module Prismic
|
|
144
144
|
end
|
145
145
|
end
|
146
146
|
|
147
|
+
class Preformatted < Text
|
148
|
+
def as_html(link_resolver=nil)
|
149
|
+
%(<pre>#{super}</pre>)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
147
153
|
class ListItem < Text
|
148
154
|
attr_accessor :ordered
|
149
155
|
alias :ordered? :ordered
|
data/lib/prismic/json_parsers.rb
CHANGED
@@ -18,11 +18,12 @@ module Prismic
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def document_link_parser(json)
|
21
|
+
doc = json['value']['document']
|
21
22
|
Prismic::Fragments::DocumentLink.new(
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
doc['id'],
|
24
|
+
doc['type'],
|
25
|
+
doc['tags'],
|
26
|
+
doc['slug'],
|
26
27
|
json['value']['isBroken'])
|
27
28
|
end
|
28
29
|
|
@@ -47,12 +48,13 @@ module Prismic
|
|
47
48
|
end
|
48
49
|
|
49
50
|
def embed_parser(json)
|
51
|
+
oembed = json['value']['oembed']
|
50
52
|
Prismic::Fragments::Embed.new(
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
53
|
+
oembed['type'],
|
54
|
+
oembed['provider_name'],
|
55
|
+
oembed['provider_url'],
|
56
|
+
oembed['html'],
|
57
|
+
oembed
|
56
58
|
)
|
57
59
|
end
|
58
60
|
|
@@ -94,12 +96,16 @@ module Prismic
|
|
94
96
|
when 'paragraph'
|
95
97
|
spans = block['spans'].map {|span| span_parser(span) }
|
96
98
|
Prismic::Fragments::StructuredText::Block::Paragraph.new(block['text'], spans)
|
97
|
-
when
|
99
|
+
when 'preformatted'
|
100
|
+
spans = block['spans'].map {|span| span_parser(span) }
|
101
|
+
Prismic::Fragments::StructuredText::Block::Preformatted.new(block['text'], spans)
|
102
|
+
when /^heading(\d+)$/
|
103
|
+
heading = $1
|
98
104
|
spans = block['spans'].map {|span| span_parser(span) }
|
99
105
|
Prismic::Fragments::StructuredText::Block::Heading.new(
|
100
106
|
block['text'],
|
101
107
|
spans,
|
102
|
-
|
108
|
+
heading.to_i
|
103
109
|
)
|
104
110
|
when 'o-list-item'
|
105
111
|
spans = block['spans'].map {|span| span_parser(span) }
|
@@ -123,12 +129,13 @@ module Prismic
|
|
123
129
|
)
|
124
130
|
Prismic::Fragments::StructuredText::Block::Image.new(view)
|
125
131
|
when 'embed'
|
132
|
+
boembed = block['oembed']
|
126
133
|
embed = Prismic::Fragments::Embed.new(
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
134
|
+
boembed['type'],
|
135
|
+
boembed['provider_name'],
|
136
|
+
boembed['provider_url'],
|
137
|
+
boembed['html'],
|
138
|
+
boembed
|
132
139
|
)
|
133
140
|
Prismic::Fragments::StructuredText::Block::Image.new(embed)
|
134
141
|
else
|
data/lib/prismic/version.rb
CHANGED
data/prismic.gemspec
CHANGED
@@ -19,7 +19,6 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
-
spec.add_development_dependency "yajl-ruby", "~> 1.1"
|
23
22
|
spec.add_development_dependency "rspec", "~> 2.14"
|
24
23
|
spec.add_development_dependency "nokogiri", "~> 1.6"
|
25
24
|
spec.add_development_dependency "simplecov", "~> 0.7"
|
data/spec/fragments_spec.rb
CHANGED
@@ -90,7 +90,7 @@ end
|
|
90
90
|
|
91
91
|
describe 'Date' do
|
92
92
|
before do
|
93
|
-
@date = Prismic::Fragments::Date.new(
|
93
|
+
@date = Prismic::Fragments::Date.new(Time.new(2013, 8, 7, 11, 13, 7, '+02:00'))
|
94
94
|
end
|
95
95
|
|
96
96
|
describe 'as_html' do
|
@@ -323,6 +323,54 @@ describe 'Image' do
|
|
323
323
|
end
|
324
324
|
end
|
325
325
|
|
326
|
+
describe 'StructuredText::Heading' do
|
327
|
+
before do
|
328
|
+
@text = "This is a simple test."
|
329
|
+
@spans = [
|
330
|
+
Prismic::Fragments::StructuredText::Span::Em.new(5, 7),
|
331
|
+
Prismic::Fragments::StructuredText::Span::Strong.new(8, 9),
|
332
|
+
]
|
333
|
+
end
|
334
|
+
it 'generates valid h1 html' do
|
335
|
+
@heading = 1
|
336
|
+
@block = Prismic::Fragments::StructuredText::Block::Heading.new(@text, @spans, @heading)
|
337
|
+
@block.as_html(nil).should == "<h1>This <em>is</em> <b>a</b> simple test.</h1>"
|
338
|
+
end
|
339
|
+
it 'generates valid h2 html' do
|
340
|
+
@heading = 2
|
341
|
+
@block = Prismic::Fragments::StructuredText::Block::Heading.new(@text, @spans, @heading)
|
342
|
+
@block.as_html(nil).should == "<h2>This <em>is</em> <b>a</b> simple test.</h2>"
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
describe 'StructuredText::Paragraph' do
|
347
|
+
before do
|
348
|
+
@text = "This is a simple test."
|
349
|
+
@spans = [
|
350
|
+
Prismic::Fragments::StructuredText::Span::Em.new(5, 7),
|
351
|
+
Prismic::Fragments::StructuredText::Span::Strong.new(8, 9),
|
352
|
+
]
|
353
|
+
@block = Prismic::Fragments::StructuredText::Block::Paragraph.new(@text, @spans)
|
354
|
+
end
|
355
|
+
it 'generates valid html' do
|
356
|
+
@block.as_html(nil).should == "<p>This <em>is</em> <b>a</b> simple test.</p>"
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
describe 'StructuredText::Preformatted' do
|
361
|
+
before do
|
362
|
+
@text = "This is a simple test."
|
363
|
+
@spans = [
|
364
|
+
Prismic::Fragments::StructuredText::Span::Em.new(5, 7),
|
365
|
+
Prismic::Fragments::StructuredText::Span::Strong.new(8, 9),
|
366
|
+
]
|
367
|
+
@block = Prismic::Fragments::StructuredText::Block::Preformatted.new(@text, @spans)
|
368
|
+
end
|
369
|
+
it 'generates valid html' do
|
370
|
+
@block.as_html(nil).should == "<pre>This <em>is</em> <b>a</b> simple test.</pre>"
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
326
374
|
describe 'StructuredText::Image' do
|
327
375
|
before do
|
328
376
|
@view = Prismic::Fragments::Image::View.new('my_url', 10, 10)
|
@@ -348,8 +396,28 @@ describe 'StructuredText::Image' do
|
|
348
396
|
end
|
349
397
|
end
|
350
398
|
|
351
|
-
describe 'StructuredText::
|
352
|
-
|
399
|
+
describe 'StructuredText::Hyperlink' do
|
400
|
+
before do
|
401
|
+
@link = Prismic::Fragments::DocumentLink.new(
|
402
|
+
"UdUjvt_mqVNObPeO",
|
403
|
+
"product",
|
404
|
+
["Macaron"],
|
405
|
+
"dark-chocolate-macaron",
|
406
|
+
false # broken
|
407
|
+
)
|
408
|
+
@hyperlink = Prismic::Fragments::StructuredText::Span::Hyperlink.new(0, 0, @link)
|
409
|
+
@link_resolver = Prismic.link_resolver("master"){|doc_link| "http://localhost/#{doc_link.id}" }
|
410
|
+
end
|
411
|
+
|
412
|
+
describe 'as_html' do
|
413
|
+
it "can generate valid link" do
|
414
|
+
@hyperlink.start_html(@link_resolver).should == '<a href="http://localhost/UdUjvt_mqVNObPeO">'
|
415
|
+
end
|
416
|
+
it "can generate valid html for broken link" do
|
417
|
+
@link.broken = true
|
418
|
+
@hyperlink.start_html(@link_resolver).should == "<span>"
|
419
|
+
end
|
420
|
+
end
|
353
421
|
end
|
354
422
|
|
355
423
|
describe 'DocumentLink' do
|
data/spec/json_parsers_spec.rb
CHANGED
@@ -206,6 +206,22 @@ describe 'structured_text_parser' do
|
|
206
206
|
@structured_text_heading.blocks[0].level.should == 1
|
207
207
|
end
|
208
208
|
|
209
|
+
it "correctly parses >h9 heading" do
|
210
|
+
json_heading = JSON.parse(<<-JSON)
|
211
|
+
{
|
212
|
+
"type": "StructuredText",
|
213
|
+
"value": [{
|
214
|
+
"type": "heading10",
|
215
|
+
"text": "Salted Caramel Macaron",
|
216
|
+
"spans": []
|
217
|
+
}]
|
218
|
+
}
|
219
|
+
JSON
|
220
|
+
@structured_text_heading = Prismic::JsonParser.structured_text_parser(json_heading)
|
221
|
+
@structured_text_heading.blocks[0].should be_a Prismic::Fragments::StructuredText::Block::Heading
|
222
|
+
@structured_text_heading.blocks[0].level.should == 10
|
223
|
+
end
|
224
|
+
|
209
225
|
it "parses all the spans" do
|
210
226
|
@structured_text_heading.blocks[0].spans.size.should == 1
|
211
227
|
end
|
data/spec/prismic_spec.rb
CHANGED
@@ -3,24 +3,25 @@ require 'spec_helper'
|
|
3
3
|
describe 'Api' do
|
4
4
|
before do
|
5
5
|
json_representation = '{"foo": "bar"}'
|
6
|
-
@
|
7
|
-
|
8
|
-
bookmarks
|
9
|
-
tags
|
10
|
-
types
|
11
|
-
refs
|
6
|
+
@oauth_initiate_url = "https://lesbonneschoses.prismic.io/auth"
|
7
|
+
@api = Prismic::API.new(json_representation){|api|
|
8
|
+
api.bookmarks = {}
|
9
|
+
api.tags = {}
|
10
|
+
api.types = {}
|
11
|
+
api.refs = {
|
12
12
|
'key1' => Prismic::Ref.new('ref1', 'label1'),
|
13
13
|
'key2' => Prismic::Ref.new('ref2', 'label2'),
|
14
14
|
'key3' => Prismic::Ref.new('ref3', 'label3', true),
|
15
15
|
'key4' => Prismic::Ref.new('ref4', 'label4'),
|
16
|
-
}
|
17
|
-
forms
|
18
|
-
'form1' => Prismic::SearchForm.new(Prismic::Form.new('form1', {}, nil, nil, nil, nil)),
|
19
|
-
'form2' => Prismic::SearchForm.new(Prismic::Form.new('form2', {}, nil, nil, nil, nil)),
|
20
|
-
'form3' => Prismic::SearchForm.new(Prismic::Form.new('form3', {}, nil, nil, nil, nil)),
|
21
|
-
'form4' => Prismic::SearchForm.new(Prismic::Form.new('form4', {}, nil, nil, nil, nil)),
|
22
|
-
}
|
23
|
-
|
16
|
+
}
|
17
|
+
api.forms = {
|
18
|
+
'form1' => Prismic::SearchForm.new(@api, Prismic::Form.new('form1', {}, nil, nil, nil, nil)),
|
19
|
+
'form2' => Prismic::SearchForm.new(@api, Prismic::Form.new('form2', {}, nil, nil, nil, nil)),
|
20
|
+
'form3' => Prismic::SearchForm.new(@api, Prismic::Form.new('form3', {}, nil, nil, nil, nil)),
|
21
|
+
'form4' => Prismic::SearchForm.new(@api, Prismic::Form.new('form4', {}, nil, nil, nil, nil)),
|
22
|
+
}
|
23
|
+
api.oauth = Prismic::API::OAuth.new(@oauth_initiate_url, "https://lesbonneschoses.prismic.io/auth/token")
|
24
|
+
}
|
24
25
|
end
|
25
26
|
|
26
27
|
describe 'ref' do
|
@@ -37,7 +38,7 @@ describe 'Api' do
|
|
37
38
|
|
38
39
|
describe 'ref_id_by_label' do
|
39
40
|
it "returns the id of the ref" do
|
40
|
-
@api.
|
41
|
+
@api.ref('key4').ref == 'ref4'
|
41
42
|
end
|
42
43
|
end
|
43
44
|
|
@@ -141,7 +142,7 @@ describe 'Api' do
|
|
141
142
|
end
|
142
143
|
|
143
144
|
it "creates the right form's action" do
|
144
|
-
@parsed.forms['pies'].action.should == 'http://lesbonneschoses.
|
145
|
+
@parsed.forms['pies'].action.should == 'http://lesbonneschoses.prismic.io/api/documents/search'
|
145
146
|
end
|
146
147
|
|
147
148
|
it "creates forms with the right fields" do
|
@@ -171,6 +172,28 @@ describe 'Api' do
|
|
171
172
|
JSON.parse(@json).size.should == 1
|
172
173
|
end
|
173
174
|
end
|
175
|
+
|
176
|
+
describe "oauth_initiate_url" do
|
177
|
+
before do
|
178
|
+
@client_id = "client_id"
|
179
|
+
@redirect_uri = "http://website/callback"
|
180
|
+
@scope = "none"
|
181
|
+
end
|
182
|
+
def oauth_initiate_url
|
183
|
+
@api.oauth_initiate_url({
|
184
|
+
client_id: @client_id,
|
185
|
+
redirect_uri: @redirect_uri,
|
186
|
+
scope: @scope,
|
187
|
+
})
|
188
|
+
end
|
189
|
+
def redirect_uri_encoded
|
190
|
+
CGI.escape(@redirect_uri)
|
191
|
+
end
|
192
|
+
it "build a valid url" do
|
193
|
+
oauth_initiate_url.should == "#@oauth_initiate_url?client_id=#@client_id&redirect_uri=#{redirect_uri_encoded}&scope=#@scope"
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
174
197
|
end
|
175
198
|
|
176
199
|
describe 'Document' do
|
@@ -213,24 +236,25 @@ end
|
|
213
236
|
|
214
237
|
describe 'SearchForm' do
|
215
238
|
before do
|
239
|
+
@api = nil
|
216
240
|
@field = Prismic::Field.new('String', '[foo]')
|
217
241
|
end
|
218
242
|
|
219
243
|
describe 'query' do
|
220
244
|
it "adds the query to the form's data" do
|
221
|
-
@form = Prismic::SearchForm.new(Prismic::Form.new('form1', {}, nil, nil, nil, nil), {})
|
245
|
+
@form = Prismic::SearchForm.new(@api, Prismic::Form.new('form1', {}, nil, nil, nil, nil), {})
|
222
246
|
@form.query('[bar]')
|
223
247
|
@form.data.should == { 'q' => '[bar]' }
|
224
248
|
end
|
225
249
|
|
226
250
|
it "adds existant non-nil queries (in fields) to the form's data" do
|
227
|
-
@form = Prismic::SearchForm.new(Prismic::Form.new('form1', {'q' => @field}, nil, nil, nil, nil), {})
|
251
|
+
@form = Prismic::SearchForm.new(@api, Prismic::Form.new('form1', {'q' => @field}, nil, nil, nil, nil), {})
|
228
252
|
@form.query('[bar]')
|
229
253
|
@form.data.should == { 'q' => '[foobar]' }
|
230
254
|
end
|
231
255
|
|
232
256
|
it "returns the form itself" do
|
233
|
-
@form = Prismic::SearchForm.new(Prismic::Form.new('form1', {'q' => @field}, nil, nil, nil, nil), {})
|
257
|
+
@form = Prismic::SearchForm.new(@api, Prismic::Form.new('form1', {'q' => @field}, nil, nil, nil, nil), {})
|
234
258
|
@form.query('[foo]').should == @form
|
235
259
|
end
|
236
260
|
end
|
@@ -36,7 +36,7 @@
|
|
36
36
|
"method":"GET",
|
37
37
|
"rel":"collection",
|
38
38
|
"enctype":"application/x-www-form-urlencoded",
|
39
|
-
"action":"http://lesbonneschoses.
|
39
|
+
"action":"http://lesbonneschoses.prismic.io/api/documents/search",
|
40
40
|
"fields":{
|
41
41
|
"ref":{
|
42
42
|
"type":"String"
|
@@ -52,7 +52,7 @@
|
|
52
52
|
"method":"GET",
|
53
53
|
"rel":"collection",
|
54
54
|
"enctype":"application/x-www-form-urlencoded",
|
55
|
-
"action":"http://lesbonneschoses.
|
55
|
+
"action":"http://lesbonneschoses.prismic.io/api/documents/search",
|
56
56
|
"fields":{
|
57
57
|
"ref":{
|
58
58
|
"type":"String"
|
@@ -68,7 +68,7 @@
|
|
68
68
|
"method":"GET",
|
69
69
|
"rel":"collection",
|
70
70
|
"enctype":"application/x-www-form-urlencoded",
|
71
|
-
"action":"http://lesbonneschoses.
|
71
|
+
"action":"http://lesbonneschoses.prismic.io/api/documents/search",
|
72
72
|
"fields":{
|
73
73
|
"ref":{
|
74
74
|
"type":"String"
|
@@ -84,7 +84,7 @@
|
|
84
84
|
"method":"GET",
|
85
85
|
"rel":"collection",
|
86
86
|
"enctype":"application/x-www-form-urlencoded",
|
87
|
-
"action":"http://lesbonneschoses.
|
87
|
+
"action":"http://lesbonneschoses.prismic.io/api/documents/search",
|
88
88
|
"fields":{
|
89
89
|
"ref":{
|
90
90
|
"type":"String"
|
@@ -100,7 +100,7 @@
|
|
100
100
|
"method":"GET",
|
101
101
|
"rel":"collection",
|
102
102
|
"enctype":"application/x-www-form-urlencoded",
|
103
|
-
"action":"http://lesbonneschoses.
|
103
|
+
"action":"http://lesbonneschoses.prismic.io/api/documents/search",
|
104
104
|
"fields":{
|
105
105
|
"ref":{
|
106
106
|
"type":"String"
|
@@ -116,7 +116,7 @@
|
|
116
116
|
"method":"GET",
|
117
117
|
"rel":"collection",
|
118
118
|
"enctype":"application/x-www-form-urlencoded",
|
119
|
-
"action":"http://lesbonneschoses.
|
119
|
+
"action":"http://lesbonneschoses.prismic.io/api/documents/search",
|
120
120
|
"fields":{
|
121
121
|
"ref":{
|
122
122
|
"type":"String"
|
@@ -132,7 +132,7 @@
|
|
132
132
|
"method":"GET",
|
133
133
|
"rel":"collection",
|
134
134
|
"enctype":"application/x-www-form-urlencoded",
|
135
|
-
"action":"http://lesbonneschoses.
|
135
|
+
"action":"http://lesbonneschoses.prismic.io/api/documents/search",
|
136
136
|
"fields":{
|
137
137
|
"ref":{
|
138
138
|
"type":"String"
|
@@ -148,7 +148,7 @@
|
|
148
148
|
"method":"GET",
|
149
149
|
"rel":"collection",
|
150
150
|
"enctype":"application/x-www-form-urlencoded",
|
151
|
-
"action":"http://lesbonneschoses.
|
151
|
+
"action":"http://lesbonneschoses.prismic.io/api/documents/search",
|
152
152
|
"fields":{
|
153
153
|
"ref":{
|
154
154
|
"type":"String"
|
@@ -164,7 +164,7 @@
|
|
164
164
|
"method":"GET",
|
165
165
|
"rel":"collection",
|
166
166
|
"enctype":"application/x-www-form-urlencoded",
|
167
|
-
"action":"http://lesbonneschoses.
|
167
|
+
"action":"http://lesbonneschoses.prismic.io/api/documents/search",
|
168
168
|
"fields":{
|
169
169
|
"ref":{
|
170
170
|
"type":"String"
|
@@ -178,7 +178,7 @@
|
|
178
178
|
"everything":{
|
179
179
|
"method":"GET",
|
180
180
|
"enctype":"application/x-www-form-urlencoded",
|
181
|
-
"action":"http://lesbonneschoses.
|
181
|
+
"action":"http://lesbonneschoses.prismic.io/api/documents/search",
|
182
182
|
"fields":{
|
183
183
|
"ref":{
|
184
184
|
"type":"String"
|
@@ -188,5 +188,7 @@
|
|
188
188
|
}
|
189
189
|
}
|
190
190
|
}
|
191
|
-
}
|
191
|
+
},
|
192
|
+
"oauth_initiate": "https://lesbonneschoses.prismic.io/auth",
|
193
|
+
"oauth_token": "https://lesbonneschoses.prismic.io/auth/token"
|
192
194
|
}
|
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.2
|
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-10-
|
12
|
+
date: 2013-10-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -25,20 +25,6 @@ dependencies:
|
|
25
25
|
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '1.3'
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: yajl-ruby
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - ~>
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: '1.1'
|
35
|
-
type: :development
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - ~>
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '1.1'
|
42
28
|
- !ruby/object:Gem::Dependency
|
43
29
|
name: rspec
|
44
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -89,6 +75,7 @@ extensions: []
|
|
89
75
|
extra_rdoc_files: []
|
90
76
|
files:
|
91
77
|
- .gitignore
|
78
|
+
- .travis.yml
|
92
79
|
- Gemfile
|
93
80
|
- Gemfile.lock
|
94
81
|
- README.md
|
@@ -140,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
127
|
version: 1.3.1
|
141
128
|
requirements: []
|
142
129
|
rubyforge_project:
|
143
|
-
rubygems_version: 2.0.
|
130
|
+
rubygems_version: 2.0.6
|
144
131
|
signing_key:
|
145
132
|
specification_version: 4
|
146
133
|
summary: Prismic.io development kit
|
@@ -154,4 +141,3 @@ test_files:
|
|
154
141
|
- spec/responses_mocks/structured_text_heading.json
|
155
142
|
- spec/responses_mocks/structured_text_paragraph.json
|
156
143
|
- spec/spec_helper.rb
|
157
|
-
has_rdoc:
|