ruby-lokalise-api 1.0.1 → 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/CHANGELOG.md +8 -0
- data/README.md +18 -0
- data/lib/ruby-lokalise-api/collections/base.rb +60 -8
- data/lib/ruby-lokalise-api/request.rb +3 -2
- data/lib/ruby-lokalise-api/resources/base.rb +10 -4
- data/lib/ruby-lokalise-api/version.rb +1 -1
- data/spec/lib/ruby-lokalise-api/rest/comments_spec.rb +8 -0
- data/spec/lib/ruby-lokalise-api/rest/contributors_spec.rb +5 -0
- data/spec/lib/ruby-lokalise-api/rest/files_spec.rb +3 -0
- data/spec/lib/ruby-lokalise-api/rest/keys_spec.rb +12 -3
- data/spec/lib/ruby-lokalise-api/rest/projects_spec.rb +5 -0
- data/spec/lib/ruby-lokalise-api/rest/snapshots_spec.rb +5 -0
- data/spec/lib/ruby-lokalise-api/rest/translations_spec.rb +32 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5258f1c07fdb9ffa68ab473b4bddf714f42874a049fa6657f1c3791f3cad3f6b
|
4
|
+
data.tar.gz: '05957d96074c503f46c49fb0a88292e6b5a30248c643d094b5dbabfa51dbb7b3'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5539b8cf6ab910c93ffe47b1ffd1b47ac4d323c971560d869fdf7dd0531e81b2312bbc45f1d4c6ea3d30af4fd451726bd14333a440bec0d8fb85ffc5c30caa62
|
7
|
+
data.tar.gz: c02b44af1ca82999d596e278fa65c7831590080f64168ab16b7d9f407e04087fdbe92e4d7177ab41bb56cedde30624277dce8fb2bf22873439c9160372bf83a4
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.1.0
|
4
|
+
|
5
|
+
* Added methods to work with pagination (`next_page?`, `last_page?`, `prev_page?`, `first_page?`, `next_page`, `prev_page`)
|
6
|
+
|
7
|
+
## 1.0.1 (10-Dec-18)
|
8
|
+
|
9
|
+
* Fixed incorrect build
|
10
|
+
|
3
11
|
## 1.0.0 (10-Dec-18)
|
4
12
|
|
5
13
|
* Initial release
|
data/README.md
CHANGED
@@ -99,11 +99,29 @@ Collections respond to the following methods:
|
|
99
99
|
* `#total_results`
|
100
100
|
* `#results_per_page`
|
101
101
|
* `#current_page`
|
102
|
+
* `#next_page?`
|
103
|
+
* `#last_page?`
|
104
|
+
* `#prev_page?`
|
105
|
+
* `#first_page?`
|
102
106
|
|
103
107
|
For example:
|
104
108
|
|
105
109
|
```ruby
|
106
110
|
projects.current_page #=> 3
|
111
|
+
projects.last_page? #=> true, this is the last page and there are no more projects available
|
112
|
+
```
|
113
|
+
|
114
|
+
On top of that, you may easily fetch the next or the previous page of the collection by using:
|
115
|
+
|
116
|
+
* `#next_page`
|
117
|
+
* `#prev_page`
|
118
|
+
|
119
|
+
These methods return instances of the same collection class or `nil` if the next/previous page is unavailable. Methods respect the parameters you've initially passed:
|
120
|
+
|
121
|
+
```ruby
|
122
|
+
translations = @client.translations 'project_id', limit: 4, page: 2, disable_references: 0 # => we passed three parameters here
|
123
|
+
|
124
|
+
translations.prev_page # => will load the previous page while preserving the `limit` and `disable_references` params
|
107
125
|
```
|
108
126
|
|
109
127
|
## Available Resources
|
@@ -5,29 +5,81 @@ module Lokalise
|
|
5
5
|
extend Lokalise::Utils::AttributeHelpers
|
6
6
|
include Lokalise::Utils::AttributeHelpers
|
7
7
|
|
8
|
-
attr_reader :
|
9
|
-
:project_id, :team_id
|
8
|
+
attr_reader :total_pages, :total_results, :results_per_page, :current_page, :collection,
|
9
|
+
:project_id, :team_id, :request_params, :client, :ids
|
10
10
|
|
11
|
-
|
11
|
+
# Initializes a new collection based on the response
|
12
|
+
#
|
13
|
+
# @param response [Hash]
|
14
|
+
# @param params [Hash]
|
15
|
+
# @param ids [Array, Integer, String]
|
16
|
+
# @return [Lokalise::Collections::Base]
|
17
|
+
def initialize(response, params = {}, *ids)
|
12
18
|
produce_collection_for response
|
13
|
-
|
14
|
-
@total_pages = response['x-pagination-page-count'].to_i
|
15
|
-
@results_per_page = response['x-pagination-limit'].to_i
|
16
|
-
@current_page = response['x-pagination-page'].to_i
|
19
|
+
populate_pagination_data_for response
|
17
20
|
# Project and team id may not be present in some cases
|
18
21
|
@project_id = response['content']['project_id']
|
19
22
|
@team_id = response['content']['team_id']
|
23
|
+
@request_params = params
|
24
|
+
@client = response['client']
|
25
|
+
@ids = ids
|
20
26
|
end
|
21
27
|
|
22
28
|
class << self
|
23
29
|
# Performs a batch query fetching multiple records
|
24
30
|
def all(client, params = {}, *ids)
|
25
|
-
new get(endpoint(*ids), client, params)
|
31
|
+
new get(endpoint(*ids), client, params),
|
32
|
+
params, *ids
|
26
33
|
end
|
27
34
|
end
|
28
35
|
|
36
|
+
# @return [Boolean]
|
37
|
+
def next_page?
|
38
|
+
@current_page.positive? && @current_page < @total_pages
|
39
|
+
end
|
40
|
+
|
41
|
+
# @return [Boolean]
|
42
|
+
def last_page?
|
43
|
+
!next_page?
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [Boolean]
|
47
|
+
def prev_page?
|
48
|
+
@current_page > 1
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Boolean]
|
52
|
+
def first_page?
|
53
|
+
!prev_page?
|
54
|
+
end
|
55
|
+
|
56
|
+
def next_page
|
57
|
+
return nil if last_page?
|
58
|
+
|
59
|
+
fetch_page @current_page + 1
|
60
|
+
end
|
61
|
+
|
62
|
+
def prev_page
|
63
|
+
return nil if first_page?
|
64
|
+
|
65
|
+
fetch_page @current_page - 1
|
66
|
+
end
|
67
|
+
|
29
68
|
private
|
30
69
|
|
70
|
+
def populate_pagination_data_for(response)
|
71
|
+
@total_results = response['x-pagination-total-count'].to_i
|
72
|
+
@total_pages = response['x-pagination-page-count'].to_i
|
73
|
+
@results_per_page = response['x-pagination-limit'].to_i
|
74
|
+
@current_page = response['x-pagination-page'].to_i
|
75
|
+
end
|
76
|
+
|
77
|
+
def fetch_page(page_num)
|
78
|
+
self.class.all @client,
|
79
|
+
@request_params.merge(page: page_num),
|
80
|
+
*@ids
|
81
|
+
end
|
82
|
+
|
31
83
|
# Dynamically produces collection of resources based on the given response
|
32
84
|
# Collection example: `{ "content": {"comments": [ ... ]} }`
|
33
85
|
def produce_collection_for(response)
|
@@ -39,7 +39,7 @@ module Lokalise
|
|
39
39
|
private
|
40
40
|
|
41
41
|
def prepare(path)
|
42
|
-
path.gsub
|
42
|
+
path.gsub %r{//}, '/'
|
43
43
|
end
|
44
44
|
|
45
45
|
def respond_with(response, client)
|
@@ -47,8 +47,9 @@ module Lokalise
|
|
47
47
|
respond_with_error(response.status, body) if body.respond_to?(:has_key?) && body.key?('error')
|
48
48
|
response.
|
49
49
|
headers.
|
50
|
+
to_h.
|
50
51
|
keep_if { |k, _v| PAGINATION_HEADERS.include?(k) }.
|
51
|
-
merge(content
|
52
|
+
merge('content' => body, 'client' => client)
|
52
53
|
end
|
53
54
|
|
54
55
|
def respond_with_error(code, body)
|
@@ -7,6 +7,10 @@ module Lokalise
|
|
7
7
|
|
8
8
|
attr_reader :raw_data, :project_id, :client
|
9
9
|
|
10
|
+
# Initializes a new resource based on the response
|
11
|
+
#
|
12
|
+
# @param response [Hash]
|
13
|
+
# @return [Lokalise::Resources::Base]
|
10
14
|
def initialize(response)
|
11
15
|
populate_attributes_for response['content']
|
12
16
|
|
@@ -42,7 +46,7 @@ module Lokalise
|
|
42
46
|
client,
|
43
47
|
body_from(params, object_key))
|
44
48
|
|
45
|
-
object_from response
|
49
|
+
object_from response, params, endpoint_ids
|
46
50
|
end
|
47
51
|
|
48
52
|
# Updates one or multiple records
|
@@ -51,7 +55,7 @@ module Lokalise
|
|
51
55
|
client,
|
52
56
|
body_from(params, object_key))
|
53
57
|
|
54
|
-
object_from response
|
58
|
+
object_from response, params, endpoint_ids
|
55
59
|
end
|
56
60
|
|
57
61
|
# Destroys records by given ids
|
@@ -83,12 +87,14 @@ module Lokalise
|
|
83
87
|
end
|
84
88
|
|
85
89
|
# Instantiates a new resource or collection based on the given response
|
86
|
-
def object_from(response)
|
90
|
+
def object_from(response, params, endpoint_ids)
|
87
91
|
model_class = name.base_class_name
|
88
92
|
data_key_plural = data_key_for model_class, true
|
89
93
|
|
90
94
|
if response['content'].key? data_key_plural
|
91
|
-
Module.const_get("Lokalise::Collections::#{model_class}").new response
|
95
|
+
Module.const_get("Lokalise::Collections::#{model_class}").new response,
|
96
|
+
params,
|
97
|
+
endpoint_ids
|
92
98
|
else
|
93
99
|
new response
|
94
100
|
end
|
@@ -22,6 +22,14 @@ RSpec.describe Lokalise::Client do
|
|
22
22
|
expect(comments.results_per_page).to eq(1)
|
23
23
|
expect(comments.current_page).to eq(2)
|
24
24
|
expect(comments.collection.first.comment).to eq('demo comment')
|
25
|
+
|
26
|
+
expect(comments.next_page?).to eq(true)
|
27
|
+
expect(comments.last_page?).to eq(false)
|
28
|
+
expect(comments.prev_page?).to eq(true)
|
29
|
+
expect(comments.first_page?).to eq(false)
|
30
|
+
|
31
|
+
expect(comments.ids).to include(project_id, key_id)
|
32
|
+
expect(comments.client).to be_an_instance_of(Lokalise::Client)
|
25
33
|
end
|
26
34
|
end
|
27
35
|
|
@@ -22,6 +22,11 @@ RSpec.describe Lokalise::Client do
|
|
22
22
|
expect(contributors.total_pages).to eq(2)
|
23
23
|
expect(contributors.results_per_page).to eq(1)
|
24
24
|
expect(contributors.current_page).to eq(2)
|
25
|
+
|
26
|
+
expect(contributors.next_page?).to eq(false)
|
27
|
+
expect(contributors.last_page?).to eq(true)
|
28
|
+
expect(contributors.prev_page?).to eq(true)
|
29
|
+
expect(contributors.first_page?).to eq(false)
|
25
30
|
end
|
26
31
|
end
|
27
32
|
|
@@ -22,6 +22,11 @@ RSpec.describe Lokalise::Client do
|
|
22
22
|
expect(keys.total_pages).to eq(1)
|
23
23
|
expect(keys.results_per_page).to eq(1)
|
24
24
|
expect(keys.current_page).to eq(1)
|
25
|
+
|
26
|
+
expect(keys.next_page?).to eq(false)
|
27
|
+
expect(keys.last_page?).to eq(true)
|
28
|
+
expect(keys.prev_page?).to eq(false)
|
29
|
+
expect(keys.first_page?).to eq(true)
|
25
30
|
end
|
26
31
|
end
|
27
32
|
|
@@ -85,10 +90,14 @@ RSpec.describe Lokalise::Client do
|
|
85
90
|
tags: %w[bulk upd]
|
86
91
|
}
|
87
92
|
]
|
88
|
-
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# `update_keys` returns a collection but it should not be paginated
|
96
|
+
expect(keys.next_page?).to eq(false)
|
97
|
+
expect(keys.prev_page?).to eq(false)
|
89
98
|
|
90
|
-
first_key = keys.first
|
91
|
-
second_key = keys[1]
|
99
|
+
first_key = keys.collection.first
|
100
|
+
second_key = keys.collection[1]
|
92
101
|
|
93
102
|
expect(first_key.key_id).to eq(key_id)
|
94
103
|
expect(first_key.key_name['ios']).to eq('test')
|
@@ -22,6 +22,11 @@ RSpec.describe Lokalise::Client do
|
|
22
22
|
expect(projects.total_pages).to eq(5)
|
23
23
|
expect(projects.results_per_page).to eq(1)
|
24
24
|
expect(projects.current_page).to eq(2)
|
25
|
+
|
26
|
+
expect(projects.next_page?).to eq(true)
|
27
|
+
expect(projects.last_page?).to eq(false)
|
28
|
+
expect(projects.prev_page?).to eq(true)
|
29
|
+
expect(projects.first_page?).to eq(false)
|
25
30
|
end
|
26
31
|
end
|
27
32
|
|
@@ -28,6 +28,11 @@ RSpec.describe Lokalise::Client do
|
|
28
28
|
expect(snapshots.total_pages).to eq(2)
|
29
29
|
expect(snapshots.results_per_page).to eq(1)
|
30
30
|
expect(snapshots.current_page).to eq(2)
|
31
|
+
|
32
|
+
expect(snapshots.next_page?).to eq(false)
|
33
|
+
expect(snapshots.last_page?).to eq(true)
|
34
|
+
expect(snapshots.prev_page?).to eq(true)
|
35
|
+
expect(snapshots.first_page?).to eq(false)
|
31
36
|
end
|
32
37
|
end
|
33
38
|
|
@@ -13,7 +13,7 @@ RSpec.describe Lokalise::Client do
|
|
13
13
|
|
14
14
|
it 'should support pagination' do
|
15
15
|
translations = VCR.use_cassette('all_translations_pagination') do
|
16
|
-
test_client.translations project_id, limit: 4, page: 2
|
16
|
+
test_client.translations project_id, limit: 4, page: 2, disable_references: 0
|
17
17
|
end
|
18
18
|
|
19
19
|
expect(translations.collection.count).to eq(4)
|
@@ -21,6 +21,37 @@ RSpec.describe Lokalise::Client do
|
|
21
21
|
expect(translations.total_pages).to eq(3)
|
22
22
|
expect(translations.results_per_page).to eq(4)
|
23
23
|
expect(translations.current_page).to eq(2)
|
24
|
+
expect(translations.request_params[:page]).to eq(2)
|
25
|
+
expect(translations.request_params[:disable_references]).to eq(0)
|
26
|
+
expect(translations.ids).to eq([project_id])
|
27
|
+
|
28
|
+
next_page_trans = VCR.use_cassette('translations_next_page') do
|
29
|
+
translations.next_page
|
30
|
+
end
|
31
|
+
|
32
|
+
expect(next_page_trans).to be_an_instance_of(Lokalise::Collections::Translation)
|
33
|
+
expect(next_page_trans.client).to be_an_instance_of(Lokalise::Client)
|
34
|
+
expect(next_page_trans.request_params[:page]).to eq(3)
|
35
|
+
expect(next_page_trans.request_params[:disable_references]).to eq(0)
|
36
|
+
expect(next_page_trans.total_results).to eq(9)
|
37
|
+
expect(next_page_trans.current_page).to eq(3)
|
38
|
+
expect(next_page_trans.ids).to eq([project_id])
|
39
|
+
expect(next_page_trans.next_page?).to eq(false)
|
40
|
+
expect(next_page_trans.prev_page?).to eq(true)
|
41
|
+
|
42
|
+
prev_page_trans = VCR.use_cassette('translations_prev_page') do
|
43
|
+
translations.prev_page
|
44
|
+
end
|
45
|
+
|
46
|
+
expect(prev_page_trans).to be_an_instance_of(Lokalise::Collections::Translation)
|
47
|
+
expect(prev_page_trans.client).to be_an_instance_of(Lokalise::Client)
|
48
|
+
expect(prev_page_trans.request_params[:page]).to eq(1)
|
49
|
+
expect(next_page_trans.request_params[:disable_references]).to eq(0)
|
50
|
+
expect(prev_page_trans.total_results).to eq(9)
|
51
|
+
expect(prev_page_trans.current_page).to eq(1)
|
52
|
+
expect(prev_page_trans.next_page?).to eq(true)
|
53
|
+
expect(prev_page_trans.prev_page?).to eq(false)
|
54
|
+
expect(prev_page_trans.ids).to eq([project_id])
|
24
55
|
end
|
25
56
|
end
|
26
57
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-lokalise-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya Bodrov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|