spooky 1.0.0 → 1.1.0
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/README.md +43 -10
- data/lib/spooky/client.rb +32 -13
- data/lib/spooky/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a7b33039d9c8c5fc23d9cd5bd0d9f4b378b587695ebe3af8f0f5e23308f71bc7
|
4
|
+
data.tar.gz: ec4b539ae09724a1a95b7f42a8e2662bc6246172173827c27bfb8c75805f762c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08bb92cc697e8ad5d80851658d595df20fb3844ca62eba13fcb3f99f8237054166fd114954f6d2b2c47fababd5922c6d24a6bed001f68da578a895590b74d7ac'
|
7
|
+
data.tar.gz: 5b2161ec5915e1c9f71796c1b362f290bf9742813c7a444dfb1e90eb73339315d5d01dc655f5a9454a638b9f136abbae8e812a727ecc6897b0a731dbdeadf846
|
data/README.md
CHANGED
@@ -47,33 +47,66 @@ client = Spooky::Client.new
|
|
47
47
|
```
|
48
48
|
### Fetching Posts
|
49
49
|
|
50
|
-
Spooky operates primarily on posts.
|
50
|
+
Spooky operates primarily on posts. Methods that return a collection also return a pagination object, if there is one.
|
51
51
|
|
52
52
|
#### Get all posts
|
53
|
-
|
53
|
+
```ruby
|
54
|
+
posts, pagination = client.posts
|
55
|
+
```
|
54
56
|
|
55
|
-
Returns an array of `Spooky::Post`s.
|
57
|
+
Returns an array of `Spooky::Post`s and a pagination meta hash.
|
56
58
|
|
57
59
|
#### Get all posts and include tags and authors
|
58
|
-
|
60
|
+
```ruby
|
61
|
+
posts, pagination = client.posts(tags: true, authors: true)
|
62
|
+
```
|
59
63
|
|
60
|
-
Returns an array of `Spooky::Post`s with `Spooky::Tag`s and `Spooky::Author`s where appropriate.
|
64
|
+
Returns an array of `Spooky::Post`s with `Spooky::Tag`s and `Spooky::Author`s where appropriate and a pagination meta hash.
|
61
65
|
|
62
66
|
#### Get a post by ID or slug
|
63
67
|
|
64
|
-
|
68
|
+
```ruby
|
69
|
+
post = client.post_by(id: 'abc123')
|
70
|
+
```
|
65
71
|
|
66
|
-
|
72
|
+
```ruby
|
73
|
+
post = client.post_by(slug: 'this-is-a-slug')
|
74
|
+
```
|
67
75
|
|
68
76
|
Both return a `Spooky::Post`.
|
69
77
|
|
70
78
|
#### Get posts with a filter applied
|
71
79
|
|
72
|
-
Filtering accepts simple hashes as conditions or NQL strings for more complex filters.
|
80
|
+
Filtering accepts simple hashes as conditions or [NQL strings for more complex filters](https://ghost.org/docs/api/v3/content/#syntax-reference).
|
73
81
|
|
74
|
-
|
82
|
+
```ruby
|
83
|
+
featured_posts, pagination = client.posts(filter: { featured: true })
|
84
|
+
```
|
75
85
|
|
76
|
-
|
86
|
+
```ruby
|
87
|
+
welcome_posts, pagination = client.posts(filter: "title:Welcome")
|
88
|
+
```
|
89
|
+
|
90
|
+
You can exclude a post using NQL operators, note the `-`:
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
posts_without_welcome, pagination = client.posts(tags: true, filter: "title:-Welcome")
|
94
|
+
```
|
95
|
+
|
96
|
+
### Pagination
|
97
|
+
|
98
|
+
If applicable, Spooky will return the pagination meta hash directly from Ghost. It looks like this:
|
99
|
+
|
100
|
+
```ruby
|
101
|
+
{
|
102
|
+
"page" => 1,
|
103
|
+
"limit" => 3,
|
104
|
+
"pages" => 3,
|
105
|
+
"total" => 7,
|
106
|
+
"next" => 2,
|
107
|
+
"prev" => nil
|
108
|
+
}
|
109
|
+
```
|
77
110
|
|
78
111
|
## Development
|
79
112
|
|
data/lib/spooky/client.rb
CHANGED
@@ -21,20 +21,23 @@ module Spooky
|
|
21
21
|
@error = response["errors"]
|
22
22
|
false
|
23
23
|
else
|
24
|
-
response[resource.split("/").first]
|
24
|
+
collection = response[resource.split("/").first]
|
25
|
+
pagination = response.dig("meta", "pagination")
|
26
|
+
|
27
|
+
[collection, pagination]
|
25
28
|
end
|
26
29
|
end
|
27
30
|
|
28
31
|
def fetch(resource, options = {})
|
29
32
|
resource_name = resource.split("/").first
|
30
|
-
response = fetch_json(resource, options)
|
33
|
+
response, pagination = fetch_json(resource, options)
|
31
34
|
|
32
35
|
resource_class = "Spooky::#{resource_name.singularize.classify}".constantize
|
33
36
|
|
34
|
-
response.present? && response.map { |attrs| resource_class.send(:new, attrs) }
|
37
|
+
response.present? && [response.map { |attrs| resource_class.send(:new, attrs) }, pagination]
|
35
38
|
end
|
36
39
|
|
37
|
-
def posts(tags: false, authors: false, filter: false)
|
40
|
+
def posts(tags: false, authors: false, filter: false, page: false, limit: false)
|
38
41
|
inc = []
|
39
42
|
inc << "tags" if tags
|
40
43
|
inc << "authors" if authors
|
@@ -42,13 +45,8 @@ module Spooky
|
|
42
45
|
options = {}
|
43
46
|
options[:include] = inc if inc.present?
|
44
47
|
|
45
|
-
|
46
|
-
|
47
|
-
options[:filter] = filter.map { |k, v| "#{k}:#{v}" }.join
|
48
|
-
else
|
49
|
-
options[:filter] = filter
|
50
|
-
end
|
51
|
-
end
|
48
|
+
options = apply_filter(options, filter)
|
49
|
+
options = apply_pagination(options, { page: page, limit: limit })
|
52
50
|
|
53
51
|
fetch("posts", options)
|
54
52
|
end
|
@@ -62,14 +60,35 @@ module Spooky
|
|
62
60
|
options[:include] = inc if inc.present?
|
63
61
|
|
64
62
|
if id.present?
|
65
|
-
response = fetch("posts/#{id}", options)
|
63
|
+
response, _ = fetch("posts/#{id}", options)
|
66
64
|
response.present? && response.first
|
67
65
|
elsif slug.present?
|
68
|
-
response = fetch("posts/slug/#{slug}", options)
|
66
|
+
response, _ = fetch("posts/slug/#{slug}", options)
|
69
67
|
response.present? && response.first
|
70
68
|
else
|
71
69
|
false
|
72
70
|
end
|
73
71
|
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def apply_filter(options, filter)
|
76
|
+
if filter.present?
|
77
|
+
if filter.is_a?(Hash)
|
78
|
+
options[:filter] = filter.map { |k, v| "#{k}:#{v}" }.join("+")
|
79
|
+
else
|
80
|
+
options[:filter] = filter
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
options
|
85
|
+
end
|
86
|
+
|
87
|
+
def apply_pagination(options, pagination)
|
88
|
+
options[:page] = pagination[:page] if pagination[:page]
|
89
|
+
options[:limit] = pagination[:limit] if pagination[:limit]
|
90
|
+
|
91
|
+
options
|
92
|
+
end
|
74
93
|
end
|
75
94
|
end
|
data/lib/spooky/version.rb
CHANGED