contemble 0.1.4 → 0.1.6

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
  SHA256:
3
- metadata.gz: d24648e5804b56f09d868bc242a5111a94e1d933105c358f3ed97663e1c1a954
4
- data.tar.gz: 82a446c690a080657b2fb3c82e9bac37bb84aa1313c437eebb912bf7e82e3d61
3
+ metadata.gz: b058a19e98e56f6ba9c49430fee756b676cbd3e48366ea721cc4719bb37f870e
4
+ data.tar.gz: c05b723a8c44d7c664af4d919d8b8e6efa4be1e076d7522038876bb3206b67c1
5
5
  SHA512:
6
- metadata.gz: 1c4332db2ccc94acda3db69fcf3819db356639fa5e49217e396a952045ece72f00a40483c084c2b0bba022bedf2a88b4b32676c51c015c68b4dacea2bc8f5388
7
- data.tar.gz: 325fdc43ec857e1f5778d4e3868e0f07a20d5f231b8c1d3e5bd2e2de9f38ab9828a1a8a2529c0acb54d79617dd46d47354f86fc5dadd1976c21e32d675c39c2c
6
+ metadata.gz: a7360c02eba0e5865fcb207d8e9e2058b1a9423d4e6ccbc7867eb5b52a74586349698d8a64d2a7ca0debd914f38f6ff7e7da51f7da833b1042edb33233f1a16f
7
+ data.tar.gz: 10ab0a8c84cfe29c3f3edb38227d8143e9d29164a5a9bd171f8484b4b664f3b66a155a0206f3599e68767ec37ca0f19eacee7404471d0f9cbaafb295f675b8aa
data/README.md CHANGED
@@ -37,6 +37,13 @@ posts = client.collections.posts
37
37
  # Get posts from specific collection
38
38
  posts = client.collections.posts(collection_name: "blog")
39
39
 
40
+ # Get posts with pagination
41
+ result = client.collections.posts(collection_name: "blog", page: 2, per_page: 50)
42
+ result["data"] # Array of posts
43
+ result["meta"]["pagination"]["page"] # Current page
44
+ result["meta"]["pagination"]["pageCount"] # Total pages
45
+ result["meta"]["pagination"]["total"] # Total posts
46
+
40
47
  # Get individual post
41
48
  post = client.posts.show(slug: "post-slug")
42
49
 
@@ -68,6 +75,48 @@ article_schema = client.schema.article(slug: "post-slug")
68
75
 
69
76
  Each post includes a `url` field for easy linking based on your configured `post_path`.
70
77
 
78
+ ### Pagination
79
+
80
+ By default, `posts()` returns the first 20 posts. Pagination metadata is included in the response body.
81
+
82
+ ```ruby
83
+ # Get page 2 with 50 posts per page
84
+ result = client.collections.posts(collection_name: "blog", page: 2, per_page: 50)
85
+
86
+ # Access posts
87
+ result["data"]
88
+
89
+ # Access pagination metadata
90
+ result["meta"]["pagination"]["page"] # Current page (2)
91
+ result["meta"]["pagination"]["pageSize"] # Posts per page (50)
92
+ result["meta"]["pagination"]["pageCount"] # Total pages available
93
+ result["meta"]["pagination"]["total"] # Total number of posts
94
+ ```
95
+
96
+ Response format:
97
+
98
+ ```json
99
+ {
100
+ "data": [
101
+ {
102
+ "slug": "post-slug",
103
+ "title": "Post Title",
104
+ ...
105
+ }
106
+ ],
107
+ "meta": {
108
+ "pagination": {
109
+ "page": 2,
110
+ "pageSize": 50,
111
+ "pageCount": 10,
112
+ "total": 500
113
+ }
114
+ }
115
+ }
116
+ ```
117
+
118
+ Maximum posts per page is 100. Defaults: `page: 1`, `per_page: 20`.
119
+
71
120
  **Sitemap XML** returns ready-to-use XML that can be saved to a file, proxied through your server, or included in your sitemap index.
72
121
 
73
122
  ### Sitemap Usage
@@ -11,25 +11,32 @@ module Contemble
11
11
  @client.get("/collections")
12
12
  end
13
13
 
14
- def posts(collection_name: nil)
15
- posts = if collection_name
16
- @client.get("/collections/#{collection_name}")
17
- else
18
- collections = list
19
- all_posts = []
14
+ def posts(collection_name: nil, page: 1, per_page: 20)
15
+ if collection_name
16
+ encoded_name = URI.encode_www_form_component(collection_name)
17
+ response = @client.get("/collections/#{encoded_name}?page=#{page}&per_page=#{per_page}")
20
18
 
21
- collections.each do |collection|
22
- posts = @client.get("/collections/#{collection["name"]}")
23
- all_posts.concat(posts)
24
- end
19
+ posts_data = response["data"].map do |post|
20
+ post.merge("url" => "#{Contemble.post_path}/#{post["slug"]}")
21
+ end
25
22
 
26
- all_posts
27
- end
23
+ {
24
+ "data" => posts_data,
25
+ "meta" => response["meta"]
26
+ }
27
+ else
28
+ collections = list
29
+ all_posts = []
30
+
31
+ collections.each do |collection|
32
+ encoded_name = URI.encode_www_form_component(collection["name"])
33
+ response = @client.get("/collections/#{encoded_name}?page=#{page}&per_page=#{per_page}")
34
+ all_posts.concat(response["data"])
35
+ end
28
36
 
29
- posts.map do |post|
30
- post.merge(
31
- "url" => "#{Contemble.post_path}/#{post["slug"]}"
32
- )
37
+ all_posts.map do |post|
38
+ post.merge("url" => "#{Contemble.post_path}/#{post["slug"]}")
39
+ end
33
40
  end
34
41
  end
35
42
  end
@@ -40,7 +47,9 @@ module Contemble
40
47
  end
41
48
 
42
49
  def show(slug:)
43
- @client.get("/posts/#{slug}")
50
+ encoded_slug = URI.encode_www_form_component(slug)
51
+ response = @client.get("/posts/#{encoded_slug}")
52
+ response["data"]
44
53
  end
45
54
  end
46
55
 
@@ -60,7 +69,8 @@ module Contemble
60
69
  end
61
70
 
62
71
  def article(slug:)
63
- @client.get("/posts/#{slug}/schema")
72
+ encoded_slug = URI.encode_www_form_component(slug)
73
+ @client.get("/posts/#{encoded_slug}/schema")
64
74
  end
65
75
  end
66
76
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Contemble
4
- VERSION = "0.1.4"
4
+ VERSION = "0.1.6"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contemble
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - contemble