ruby-lokalise-api 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|