buttercms-ruby 1.3.2 → 1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +45 -7
- data/VERSION +1 -1
- data/lib/buttercms-ruby.rb +57 -7
- data/lib/buttercms/butter_resource.rb +25 -0
- data/lib/buttercms/errors.rb +3 -0
- data/lib/buttercms/version.rb +1 -1
- 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: 6892f2c65b2714c507d356db4c7a0fa1ca0efe53
|
4
|
+
data.tar.gz: aeee01cf3ad4a68c8fe365124db34e494dbf9ca1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f71a3ae6a84b213bc03c42c96b0217d1241a8f812c4f1b9acb8ef968293a4d5a5db6e727316e5f5b290dabd3c5219df02ef58a03360cf4bd845bf199e9a4d12
|
7
|
+
data.tar.gz: 7a3afc5ae7c6a3c7f0d3c41b48a63bbdd43bd4107cfbffb7cad501ba40d8461168f2d95726bb45d40509938fb7495a741d4f6994c410f9abc96877ee5fd200d1
|
data/README.md
CHANGED
@@ -30,26 +30,31 @@ To setup your project, follow these steps:
|
|
30
30
|
|
31
31
|
## Pages
|
32
32
|
|
33
|
+
https://buttercms.com/docs/api/?ruby#pages
|
34
|
+
|
35
|
+
|
33
36
|
```ruby
|
34
|
-
params = {
|
37
|
+
params = {page: 1, page_size: 10, locale: 'en', preview: 1, fields.headline: 'foo bar', levels: 2} # optional
|
35
38
|
pages = ButterCMS::Page.list('news', params)
|
36
39
|
page = ButterCMS::Page.get('news', 'hello-world', params)
|
37
40
|
```
|
38
41
|
|
39
|
-
##
|
42
|
+
## Collections
|
40
43
|
|
41
|
-
|
42
|
-
ButterCMS::Content.fetch(['homepage_headline'])
|
44
|
+
https://buttercms.com/docs/api/?ruby#retrieve-a-collection
|
43
45
|
|
44
|
-
|
45
|
-
|
46
|
+
```ruby
|
47
|
+
params = {page: 1, page_size: 10, locale: 'en', preview: 1, fields.headline: 'foo bar', levels: 2} # optional
|
48
|
+
ButterCMS::Content.fetch(['testimonials'], params)
|
46
49
|
|
47
|
-
# Test mode can be used to setup a staging website for previewing
|
50
|
+
# Test mode can be used to setup a staging website for previewing Collections or for testing content during local development. To fetch content from test mode add the following configuration:
|
48
51
|
ButterCMS::test_mode = true
|
49
52
|
```
|
50
53
|
|
51
54
|
## Blog Engine
|
52
55
|
|
56
|
+
https://buttercms.com/docs/api/?ruby#blog-engine
|
57
|
+
|
53
58
|
```ruby
|
54
59
|
posts = ButterCMS::Post.all({:page => 1, :page_size => 10})
|
55
60
|
puts posts.first.title
|
@@ -61,6 +66,39 @@ puts posts.first.title
|
|
61
66
|
post = ButterCMS::Post.find("post-slug")
|
62
67
|
puts post.title
|
63
68
|
|
69
|
+
# Create a Post.
|
70
|
+
ButterCMS::write_api_token = "YourWriteToken"
|
71
|
+
ButterCMS::Post.create({
|
72
|
+
slug: 'blog-slug',
|
73
|
+
title: 'blog-title'
|
74
|
+
})
|
75
|
+
|
76
|
+
# Update a Post
|
77
|
+
ButterCMS::Post.update('blog-slug', {
|
78
|
+
title: 'blog-title-v2'
|
79
|
+
})
|
80
|
+
|
81
|
+
# Create a page
|
82
|
+
ButterCMS::Page.create({
|
83
|
+
slug: 'page-slug',
|
84
|
+
title: 'page-title',
|
85
|
+
status: 'published',
|
86
|
+
"page-type": 'page_type',
|
87
|
+
fields: {
|
88
|
+
meta_title: 'test meta title'
|
89
|
+
}
|
90
|
+
})
|
91
|
+
|
92
|
+
# update a Page
|
93
|
+
ButterCMS::Page.update('page-slug-2', {
|
94
|
+
status: 'published',
|
95
|
+
fields: {
|
96
|
+
meta_title: 'test meta title'
|
97
|
+
}
|
98
|
+
})
|
99
|
+
|
100
|
+
|
101
|
+
|
64
102
|
author = ButterCMS::Author.find("author-slug")
|
65
103
|
puts author.first_name
|
66
104
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.4
|
data/lib/buttercms-ruby.rb
CHANGED
@@ -27,6 +27,7 @@ module ButterCMS
|
|
27
27
|
|
28
28
|
class << self
|
29
29
|
attr_accessor :api_token
|
30
|
+
attr_accessor :write_api_token
|
30
31
|
attr_accessor :test_mode
|
31
32
|
attr_accessor :read_timeout
|
32
33
|
attr_reader :data_store
|
@@ -71,13 +72,6 @@ module ButterCMS
|
|
71
72
|
|
72
73
|
path = "#{@api_url.path}#{URI.encode(path)}?#{URI.encode_www_form(query)}"
|
73
74
|
|
74
|
-
http_options = {
|
75
|
-
open_timeout: 2.0,
|
76
|
-
read_timeout: read_timeout || 5.0,
|
77
|
-
ssl_timeout: 2.0,
|
78
|
-
use_ssl: @api_url.scheme == "https",
|
79
|
-
}
|
80
|
-
|
81
75
|
response =
|
82
76
|
Net::HTTP.start(@api_url.host, @api_url.port, http_options) do |http|
|
83
77
|
request = Net::HTTP::Get.new(path)
|
@@ -128,4 +122,60 @@ module ButterCMS
|
|
128
122
|
|
129
123
|
return JSON.parse(result)
|
130
124
|
end
|
125
|
+
|
126
|
+
def self.write_request(path, options = {})
|
127
|
+
raise ArgumentError.new "Please set your write API token" unless write_api_token
|
128
|
+
result = write_api_request(path, options)
|
129
|
+
|
130
|
+
return JSON.parse(result)
|
131
|
+
end
|
132
|
+
|
133
|
+
def self.write_api_request(path, options = {})
|
134
|
+
query = options.dup
|
135
|
+
token_for_request = query.delete(:auth_token) || write_api_token
|
136
|
+
|
137
|
+
path = "#{@api_url.path}#{URI.encode(path)}"
|
138
|
+
|
139
|
+
response =
|
140
|
+
Net::HTTP.start(@api_url.host, @api_url.port, http_options) do |http|
|
141
|
+
write_type = query.delete(:method) || "Post"
|
142
|
+
request_type = "Net::HTTP::#{write_type}".constantize
|
143
|
+
request = request_type.new(path)
|
144
|
+
request["User-Agent"] = "ButterCMS/Ruby #{ButterCMS::VERSION}"
|
145
|
+
request["Accept"] = "application/json"
|
146
|
+
request["Content-Type"] = "application/json"
|
147
|
+
request["Authorization"] = "Token #{token_for_request}"
|
148
|
+
request.body = query.except(:auth_token).to_json
|
149
|
+
|
150
|
+
http.request(request)
|
151
|
+
end
|
152
|
+
|
153
|
+
case response
|
154
|
+
when Net::HTTPNotFound
|
155
|
+
raise ::ButterCMS::NotFound, JSON.parse(response.body)["detail"]
|
156
|
+
when Net::HTTPBadRequest
|
157
|
+
parsed_body = JSON.parse(response.body)
|
158
|
+
errors = if parsed_body.is_a?(Array)
|
159
|
+
parsed_body.join(' ')
|
160
|
+
else
|
161
|
+
parsed_body.map do |k, v|
|
162
|
+
"#{k}: #{v}"
|
163
|
+
end.join(" ")
|
164
|
+
end
|
165
|
+
raise ::ButterCMS::BadRequest, errors
|
166
|
+
end
|
167
|
+
|
168
|
+
response.body
|
169
|
+
end
|
170
|
+
|
171
|
+
private
|
172
|
+
|
173
|
+
def self.http_options
|
174
|
+
{
|
175
|
+
open_timeout: 2.0,
|
176
|
+
read_timeout: read_timeout || 5.0,
|
177
|
+
ssl_timeout: 2.0,
|
178
|
+
use_ssl: @api_url.scheme == "https",
|
179
|
+
}
|
180
|
+
end
|
131
181
|
end
|
@@ -25,6 +25,12 @@ module ButterCMS
|
|
25
25
|
# API expects all endpoints to include trailing slashes
|
26
26
|
resource_path + (id ? "#{id}/" : '')
|
27
27
|
end
|
28
|
+
|
29
|
+
def self.patch_endpoint(id)
|
30
|
+
# Append trailing slash when id is added to path because
|
31
|
+
# API expects all endpoints to include trailing slashes
|
32
|
+
resource_path + "*/#{id}/"
|
33
|
+
end
|
28
34
|
|
29
35
|
def self.resource_path
|
30
36
|
raise "resource_path must be set"
|
@@ -41,6 +47,25 @@ module ButterCMS
|
|
41
47
|
|
42
48
|
self.create_object(response)
|
43
49
|
end
|
50
|
+
|
51
|
+
def self.create(options = {})
|
52
|
+
options[:method] = 'Post'
|
53
|
+
response = ButterCMS.write_request(self.endpoint, options)
|
54
|
+
|
55
|
+
self.create_object(response)
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.update(id, options = {})
|
59
|
+
options[:method] = 'Patch'
|
60
|
+
_endpoint = if resource_path.include?("/pages/")
|
61
|
+
self.patch_endpoint(id)
|
62
|
+
else
|
63
|
+
self.endpoint(id)
|
64
|
+
end
|
65
|
+
response = ButterCMS.write_request(_endpoint, options)
|
66
|
+
|
67
|
+
self.create_object(response)
|
68
|
+
end
|
44
69
|
|
45
70
|
private
|
46
71
|
|
data/lib/buttercms/errors.rb
CHANGED
data/lib/buttercms/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: buttercms-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: '1.4'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ButterCMS
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|