kudago-client 0.8.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d172d4306e2c5302513269cedda202a5d819ec3e49d5ccfd43bdf08b43ce145e
4
- data.tar.gz: 3377bb184b176245a1989fd7c6aaf7fce7566820da183474cfa1e09cd2ed51f8
3
+ metadata.gz: a064b20ce3e42cac11a30427e80e410ba5cba33d4f54daeba36e6565cdc4a3da
4
+ data.tar.gz: 6f7fee6b4cf5fd59973546e25069d6d64df7f74bd18434e1cc9baec3024e9b86
5
5
  SHA512:
6
- metadata.gz: e42d427a3ad2145c895be7f6efdae423c3873520c50b77f35e8d81681e237d066152acdc685259cfa3b289fd44f0e6148880196f37fbe383314581cecb58b94f
7
- data.tar.gz: dea42a306ad020a78fb0fbba888d34d4a853cb7471678bfc1bddd4044dfbe6c90326e504282c44f79b5fcc4d113079bfb2c6dac189a8fabedbbd9f8e759cad74
6
+ metadata.gz: 556dcfc8a75ed780da3524e9169fa0638cc22ab658fed50a425efa28cf0d00b3ad6fa10a4162af820b6a5021a9dc15c978e8bcc7ba3a1b26c192ef587b06cd66
7
+ data.tar.gz: da9ee8fb91f303efade8b47d9c145ab999b6c8094080c525fd0c807e7955f79768840629e58b7a02119def3e4bcd1d7aa29192f0a81ce07e0bd52f40466b9ae7
data/CHANGELOG.md CHANGED
@@ -14,3 +14,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
14
14
  ### Added
15
15
 
16
16
  - all requests from [kudago api](https://docs.kudago.com/api/#)
17
+
18
+
19
+ ## [1.0] - 2025.09.06
20
+
21
+ ### Added
22
+
23
+ - client's methods to get next/previous page for list
24
+ - setting for default language for client
25
+ - dependency of activesupport
26
+ - Entities::Agent#participations returns `Participation` struct
27
+
28
+ ### Changed
29
+
30
+ - CI split into lint and test
data/README.md CHANGED
@@ -1,11 +1,107 @@
1
1
  # KudagoClient
2
2
 
3
+ API client for [kudago api](https://docs.kudago.com/api/#)
4
+
3
5
  ## Installation
4
6
 
7
+ Just add this line to your Gemfile
8
+
9
+ ```ruby
10
+ gem "kudago-client"
11
+ ```
12
+
13
+ And then (I'll fix it, like autoload or smt)
14
+ ```ruby
15
+ require "kudago_client"
16
+ ```
17
+
5
18
  ## Usage
6
19
 
20
+ This is an open API, so no key is required
21
+
22
+
23
+ ### Client
24
+
25
+ id/slug is required, params isn't required
26
+
27
+ ```ruby
28
+ client = KudagoClient::Client.new(lang: "ru")
29
+
30
+ # get entity
31
+ client.agent(agent_id, {}) # KudagoClient::Entities::Agent
32
+ client.location(slug, {}) # KudagoClient::Entities::Location
33
+ client.role(role_id, {}) # KudagoClient::Entities::Role
34
+ client.event_category(event_category_id, {}) # KudagoClient::Entities::EventCategory
35
+ client.place_category(place_category_id, {}) # KudagoClient::Entities::PlaceCategory
36
+ client.movie(movie_id, {}) # KudagoClient::Entities::Movie
37
+ client.showing(showing_id, {}) # KudagoClient::Entities::MovieShowing
38
+ client.place(place_id, {}) # KudagoClient::Entities::Place
39
+ client.piece_news(news_id, {}) # KudagoClient::Entities::News
40
+ client.news_comment(news_id, comment_id, {}) # KudagoClient::Entities::Comment
41
+ client.event(event_id, {}) # KudagoClient::Entities::Event
42
+ client.event_comment(event_id, comment_id, {}) # KudagoClient::Entities::Comment
43
+ client.list(list_id, {}) # KudagoClient::Entities::List
44
+ client.list_comment(list_id, comment_id, {}) # KudagoClient::Entities::Comment
45
+
46
+ # get entity list
47
+ client.agents({}) # KudagoClient::EntitiesList::AgentList
48
+ client.locations({}) # KudagoClient::EntitiesList::LocationList
49
+ client.roles({}) # KudagoClient::EntitiesList::RoleList
50
+ client.event_categories({}) # KudagoClient::EntitiesList::EventCategoriesList
51
+ client.place_categories({}) # KudagoClient::EntitiesList::PlaceCategoriesList
52
+ client.movies({}) # KudagoClient::EntitiesList::MovieList
53
+ client.movie_comments(movie_id, {}) # KudagoClient::EntitiesList::CommentList
54
+ client.showings({}) # KudagoClient::EntitiesList::MovieShowingList
55
+ client.movie_showings(movie_id, {}) # KudagoClient::EntitiesList::MovieShowingList
56
+ client.places({}) # KudagoClient::EntitiesList::PlaceList
57
+ client.place_comments(place_id, {}) # KudagoClient::EntitiesList::CommentList
58
+ client.news({}) # KudagoClient::EntitiesList::NewsList
59
+ client.news_comments(news_id, {}) # KudagoClient::EntitiesList::CommentList
60
+ client.events({}) # KudagoClient::EntitiesList::EventList
61
+ client.event_comments(event_id, {}) # KudagoClient::EntitiesList::CommentList
62
+ client.events_of_the_day({}) # KudagoClient::EntitiesList::EventList
63
+ client.lists({}) # KudagoClient::EntitiesList::ListList
64
+ client.list_comments(list_id, {}) # KudagoClient::EntitiesList::CommentList
65
+ client.search(query, {}) # KudagoClient::EntitiesList::MultipleList
66
+
67
+ # get another page of list
68
+ client.next_page(list, {})
69
+ client.previous_page(list, {})
70
+ ```
71
+
72
+
73
+ ### Lists
74
+
75
+ ```ruby
76
+ list = KudagoClient::EntitiesList::BaseList.new
77
+
78
+ list.count # get count of all items
79
+ list.next_url # url to next page
80
+ list.previous_url # url to previous page
81
+ list.items # items on page
82
+ list.lang # lang of request
83
+ ```
84
+
85
+
86
+ ### Error
87
+
88
+ ```ruby
89
+ begin
90
+ KudagoClient::Client.new.search("new", {page: 999}) # KudagoClient::Error
91
+ rescue KudagoClient::Error => error
92
+ error.message # "Неправильная страница"
93
+ error.status # 404
94
+ error.reason # "Not Found"
95
+ end
96
+ ```
97
+
7
98
  ## Development
8
99
 
100
+ You can contribute to this gem :)
101
+
102
+ Just fork the repo and then make PR
103
+
104
+ I wrote a simple [To Do list](./to_do.md)
9
105
 
10
106
  ## Contributing
11
107
 
@@ -13,6 +13,7 @@ require_relative "requests/event_request"
13
13
  require_relative "requests/event_of_the_day_request"
14
14
  require_relative "requests/list_request"
15
15
  require_relative "requests/search_request"
16
+ require_relative "requests/base_request"
16
17
 
17
18
  require_relative "entities/location"
18
19
  require_relative "entities/agent"
@@ -43,182 +44,203 @@ require_relative "entities_list/multiple_list"
43
44
 
44
45
  module KudagoClient
45
46
  class Client
46
- attr_accessor :api_version
47
+ attr_accessor :lang
47
48
 
48
- LANG = "ru"
49
+ class << self
50
+ attr_accessor :default_lang
49
51
 
50
- def initialize(lang: LANG)
51
- @api_version = api_version
52
- @lang = lang
52
+ def config &blk
53
+ blk.call(self) if block_given?
54
+ end
55
+ end
56
+
57
+ def initialize(lang: nil)
58
+ @lang = lang || self.class.default_lang
59
+ end
60
+
61
+ # PAGE METHODS
62
+
63
+ def next_page(list, params = {})
64
+ return nil if list.next_url.nil?
65
+
66
+ res = Requests::BaseRequest.get(list.next_url, params)
67
+ list.class.new(**res.data, lang: entity_lang(params))
68
+ end
69
+
70
+ def previous_page(list, params = {})
71
+ return nil if list.previous_url.nil?
72
+
73
+ res = Requests::BaseRequest.get(list.previous_url, params)
74
+ list.class.new(**res.data, lang: entity_lang(params))
53
75
  end
54
76
 
55
77
  # ENTITY METHODS
56
78
 
57
79
  def agent(agent_id, params = {})
58
80
  res = Requests::AgentRequest.find(agent_id, params)
59
- KudagoClient::Entities::Agent.new(**res, lang: entity_lang(params))
81
+ KudagoClient::Entities::Agent.new(**res.data, lang: entity_lang(params))
60
82
  end
61
83
 
62
84
  def location(slug, params = {})
63
85
  res = Requests::LocationRequest.find(slug, params)
64
- KudagoClient::Entities::Location.new(**res, lang: entity_lang(params))
86
+ KudagoClient::Entities::Location.new(**res.data, lang: entity_lang(params))
65
87
  end
66
88
 
67
89
  def role(role_id, params = {})
68
90
  res = Requests::RoleRequest.find(role_id, params)
69
- KudagoClient::Entities::Role.new(**res, lang: entity_lang(params))
91
+ KudagoClient::Entities::Role.new(**res.data, lang: entity_lang(params))
70
92
  end
71
93
 
72
94
  def event_category(event_category_id, params = {})
73
95
  res = Requests::EventCategoryRequest.find(event_category_id, params)
74
- KudagoClient::Entities::EventCategory.new(**res, lang: entity_lang(params))
96
+ KudagoClient::Entities::EventCategory.new(**res.data, lang: entity_lang(params))
75
97
  end
76
98
 
77
99
  def place_category(place_category_id, params = {})
78
100
  res = Requests::PlaceCategoryRequest.find(place_category_id, params)
79
- KudagoClient::Entities::PlaceCategory.new(**res, lang: entity_lang(params))
101
+ KudagoClient::Entities::PlaceCategory.new(**res.data, lang: entity_lang(params))
80
102
  end
81
103
 
82
104
  def movie(movie_id, params = {})
83
105
  res = Requests::MovieRequest.find(movie_id, params)
84
- KudagoClient::Entities::Movie.new(**res, lang: entity_lang(params))
106
+ KudagoClient::Entities::Movie.new(**res.data, lang: entity_lang(params))
85
107
  end
86
108
 
87
109
  def showing(showing_id, params = {})
88
110
  res = Requests::MovieShowingRequest.find(showing_id, params)
89
- KudagoClient::Entities::MovieShowing.new(**res, lang: entity_lang(params))
111
+ KudagoClient::Entities::MovieShowing.new(**res.data, lang: entity_lang(params))
90
112
  end
91
113
 
92
114
  def place(place_id, params = {})
93
115
  res = Requests::PlaceRequest.find(place_id, params)
94
- KudagoClient::Entities::Place.new(**res, lang: entity_lang(params))
116
+ KudagoClient::Entities::Place.new(**res.data, lang: entity_lang(params))
95
117
  end
96
118
 
97
119
  def piece_news(news_id, params = {})
98
120
  res = Requests::NewsRequest.find(news_id, params)
99
- KudagoClient::Entities::News.new(**res, lang: entity_lang(params))
121
+ KudagoClient::Entities::News.new(**res.data, lang: entity_lang(params))
100
122
  end
101
123
 
102
124
  def news_comment(news_id, comment_id, params = {})
103
125
  res = Requests::NewsRequest.comment(news_id, comment_id, params)
104
- KudagoClient::Entities::Comment.new(**res, lang: entity_lang(params))
126
+ KudagoClient::Entities::Comment.new(**res.data, lang: entity_lang(params))
105
127
  end
106
128
 
107
129
  def event(event_id, params = {})
108
130
  res = Requests::EventRequest.find(event_id, params)
109
- KudagoClient::Entities::Event.new(**res, lang: entity_lang(params))
131
+ KudagoClient::Entities::Event.new(**res.data, lang: entity_lang(params))
110
132
  end
111
133
 
112
134
  def event_comment(event_id, comment_id, params = {})
113
135
  res = Requests::EventRequest.comment(event_id, comment_id, params)
114
- KudagoClient::Entities::Comment.new(**res, lang: entity_lang(params))
136
+ KudagoClient::Entities::Comment.new(**res.data, lang: entity_lang(params))
115
137
  end
116
138
 
117
139
  def list(list_id, params = {})
118
140
  res = Requests::ListRequest.find(list_id, params)
119
- KudagoClient::Entities::List.new(**res, lang: entity_lang(params))
141
+ KudagoClient::Entities::List.new(**res.data, lang: entity_lang(params))
120
142
  end
121
143
 
122
144
  def list_comment(list_id, comment_id, params = {})
123
145
  res = Requests::ListRequest.comment(list_id, comment_id, params)
124
- KudagoClient::Entities::Comment.new(**res, lang: entity_lang(params))
146
+ KudagoClient::Entities::Comment.new(**res.data, lang: entity_lang(params))
125
147
  end
126
148
 
127
149
  # LIST METHODS
128
150
 
129
151
  def agents(params = {})
130
152
  res = Requests::AgentRequest.list(params)
131
- KudagoClient::EntitiesList::AgentList.new(**res, lang: entity_lang(params))
153
+ KudagoClient::EntitiesList::AgentList.new(**res.data, lang: entity_lang(params))
132
154
  end
133
155
 
134
156
  def locations(params = {})
135
157
  res = Requests::LocationRequest.list(params)
136
- KudagoClient::EntitiesList::LocationList.new(**res, lang: entity_lang(params))
158
+ KudagoClient::EntitiesList::LocationList.new(**res.data, lang: entity_lang(params))
137
159
  end
138
160
 
139
161
  def roles(params = {})
140
162
  res = Requests::RoleRequest.list(params)
141
- KudagoClient::EntitiesList::RoleList.new(**res, lang: entity_lang(params))
163
+ KudagoClient::EntitiesList::RoleList.new(**res.data, lang: entity_lang(params))
142
164
  end
143
165
 
144
166
  def event_categories(params = {})
145
167
  res = Requests::EventCategoryRequest.list(params)
146
- KudagoClient::EntitiesList::EventCategoriesList.new(**res, lang: entity_lang(params))
168
+ KudagoClient::EntitiesList::EventCategoriesList.new(**res.data, lang: entity_lang(params))
147
169
  end
148
170
 
149
171
  def place_categories(params = {})
150
172
  res = Requests::PlaceCategoryRequest.list(params)
151
- KudagoClient::EntitiesList::PlaceCategoriesList.new(**res, lang: entity_lang(params))
173
+ KudagoClient::EntitiesList::PlaceCategoriesList.new(**res.data, lang: entity_lang(params))
152
174
  end
153
175
 
154
176
  def movies(params = {})
155
177
  res = Requests::MovieRequest.list(params)
156
- KudagoClient::EntitiesList::MovieList.new(**res, lang: entity_lang(params))
178
+ KudagoClient::EntitiesList::MovieList.new(**res.data, lang: entity_lang(params))
157
179
  end
158
180
 
159
181
  def movie_comments(movie_id, params = {})
160
182
  res = Requests::MovieRequest.comments(movie_id, params)
161
- KudagoClient::EntitiesList::CommentList.new(**res, lang: entity_lang(params))
183
+ KudagoClient::EntitiesList::CommentList.new(**res.data, lang: entity_lang(params))
162
184
  end
163
185
 
164
186
  def showings(params = {})
165
187
  res = Requests::MovieShowingRequest.list(params)
166
- KudagoClient::EntitiesList::MovieShowingList.new(**res, lang: entity_lang(params))
188
+ KudagoClient::EntitiesList::MovieShowingList.new(**res.data, lang: entity_lang(params))
167
189
  end
168
190
 
169
191
  def movie_showings(movie_id, params = {})
170
192
  res = Requests::MovieRequest.showings(movie_id, params)
171
- KudagoClient::EntitiesList::MovieShowingList.new(**res, item_params: {movie: {id: movie_id}}, lang: entity_lang(params))
193
+ KudagoClient::EntitiesList::MovieShowingList.new(**res.data, item_params: {movie: {id: movie_id}}, lang: entity_lang(params))
172
194
  end
173
195
 
174
196
  def places(params = {})
175
197
  res = Requests::PlaceRequest.list(params)
176
- KudagoClient::EntitiesList::PlaceList.new(**res, lang: entity_lang(params))
198
+ KudagoClient::EntitiesList::PlaceList.new(**res.data, lang: entity_lang(params))
177
199
  end
178
200
 
179
201
  def place_comments(place_id, params = {})
180
202
  res = Requests::PlaceRequest.comments(place_id, params)
181
- KudagoClient::EntitiesList::CommentList.new(**res, lang: entity_lang(params))
203
+ KudagoClient::EntitiesList::CommentList.new(**res.data, lang: entity_lang(params))
182
204
  end
183
205
 
184
206
  def news(params = {})
185
207
  res = Requests::NewsRequest.list(params)
186
- KudagoClient::EntitiesList::NewsList.new(**res, lang: entity_lang(params))
208
+ KudagoClient::EntitiesList::NewsList.new(**res.data, lang: entity_lang(params))
187
209
  end
188
210
 
189
211
  def news_comments(news_id, params = {})
190
212
  res = Requests::NewsRequest.comments(news_id, params)
191
- KudagoClient::EntitiesList::CommentList.new(**res, lang: entity_lang(params))
213
+ KudagoClient::EntitiesList::CommentList.new(**res.data, lang: entity_lang(params))
192
214
  end
193
215
 
194
216
  def events(params = {})
195
217
  res = Requests::EventRequest.list(params)
196
- KudagoClient::EntitiesList::EventList.new(**res, lang: entity_lang(params))
218
+ KudagoClient::EntitiesList::EventList.new(**res.data, lang: entity_lang(params))
197
219
  end
198
220
 
199
221
  def event_comments(event_id, params = {})
200
222
  res = Requests::EventRequest.comments(event_id, params)
201
- KudagoClient::EntitiesList::CommentList.new(**res, lang: entity_lang(params))
223
+ KudagoClient::EntitiesList::CommentList.new(**res.data, lang: entity_lang(params))
202
224
  end
203
225
 
204
226
  def events_of_the_day(params = {})
205
227
  res = Requests::EventOfTheDayRequest.list(params)
206
- KudagoClient::EntitiesList::EventList.new(**res, lang: entity_lang(params))
228
+ KudagoClient::EntitiesList::EventList.new(**res.data, lang: entity_lang(params))
207
229
  end
208
230
 
209
231
  def lists(params = {})
210
232
  res = Requests::ListRequest.list(params)
211
- KudagoClient::EntitiesList::ListList.new(**res, lang: entity_lang(params))
233
+ KudagoClient::EntitiesList::ListList.new(**res.data, lang: entity_lang(params))
212
234
  end
213
235
 
214
236
  def list_comments(list_id, params = {})
215
237
  res = Requests::ListRequest.comments(list_id, params)
216
- KudagoClient::EntitiesList::CommentList.new(**res, lang: entity_lang(params))
238
+ KudagoClient::EntitiesList::CommentList.new(**res.data, lang: entity_lang(params))
217
239
  end
218
240
 
219
241
  def search(query, params = {})
220
242
  res = Requests::SearchRequest.search(query, params)
221
- KudagoClient::EntitiesList::MultipleList.new(**res, lang: entity_lang(params))
243
+ KudagoClient::EntitiesList::MultipleList.new(**res.data, lang: entity_lang(params))
222
244
  end
223
245
 
224
246
  private
@@ -1,6 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "faraday"
2
4
  require "oj"
3
5
 
6
+ require_relative "version"
7
+
4
8
  module KudagoClient
5
9
  class Connection
6
10
  BASE_URL = "https://kudago.com/public-api/v1.4/"
@@ -20,6 +20,8 @@ module KudagoClient
20
20
  # rank - рейтинг объекта
21
21
  # participations - список участий агента
22
22
 
23
+ Participation = Struct.new(:role, :event)
24
+
23
25
  attr_reader :lang, :id, :title, :slug, :favorites_count, :comments_count, :description, :body_text,
24
26
  :site_url, :disable_comments, :ctype, :images, :agent_type, :rank, :participations, :text_format, :is_stub
25
27
 
@@ -39,7 +41,6 @@ module KudagoClient
39
41
  @disable_comments = disable_comments
40
42
  @favorites_count = favorites_count
41
43
  @is_stub = is_stub
42
- @participations = participations # participant entity ???
43
44
  @rank = rank
44
45
  @site_url = site_url
45
46
  @slug = slug
@@ -49,6 +50,12 @@ module KudagoClient
49
50
  @images = images&.map do |image|
50
51
  KudagoClient::Entities::Image.new(image: image[:image], thumbnails: image[:thumbnails], source: image[:source])
51
52
  end
53
+ @participations = participations&.map do |participation|
54
+ Participation.new(
55
+ Role.new(**participation[:role], lang: lang),
56
+ (participation[:item][:ctype] == "event") ? Event.new(**participation[:item].except(:ctype), lang: lang) : nil
57
+ )
58
+ end
52
59
  end
53
60
  end
54
61
  end
@@ -5,8 +5,8 @@ module KudagoClient
5
5
 
6
6
  def initialize(count:, next_url:, previous_url:, results:, lang: "ru", item_params: {})
7
7
  @count = count
8
- @next = next_url
9
- @previous = previous_url
8
+ @next_url = next_url
9
+ @previous_url = previous_url
10
10
  @lang = lang
11
11
 
12
12
  @items = results.map do |item|
@@ -9,7 +9,7 @@ module KudagoClient
9
9
 
10
10
  def self.list(params = {})
11
11
  params.slice!(:lang, :text_format, :ids, :fields, :agent_type, :expand, :tags)
12
- parse_response_urls(get(PATH, params))
12
+ get(PATH, params)
13
13
  end
14
14
 
15
15
  def self.find(agent_id, params = {})
@@ -1,7 +1,8 @@
1
1
  require_relative "../connection"
2
2
  require_relative "../error"
3
+ require_relative "../response"
3
4
 
4
- require "active_support/core_ext/hash"
5
+ require "active_support/core_ext/hash/slice"
5
6
 
6
7
  module KudagoClient
7
8
  module Requests
@@ -10,7 +11,7 @@ module KudagoClient
10
11
  response = connection.get(path, params)
11
12
 
12
13
  if response.success?
13
- response.body
14
+ Response.new(response.body)
14
15
  else
15
16
  message = response.body.is_a?(String) ? [response.reason_phrase, response.status].join(" ") : response.body[:detail]
16
17
  raise KudagoClient::Error.new(message:, status: response.status, reason: response.reason_phrase)
@@ -22,13 +23,6 @@ module KudagoClient
22
23
  def self.connection
23
24
  @@connection ||= Connection.connection
24
25
  end
25
-
26
- def self.parse_response_urls(res)
27
- res[:next_url] = res.delete :next
28
- res[:previous_url] = res.delete :previous
29
-
30
- res
31
- end
32
26
  end
33
27
  end
34
28
  end
@@ -9,9 +9,7 @@ module KudagoClient
9
9
 
10
10
  def self.list(params = {})
11
11
  params.slice!(:lang, :fields, :order_by)
12
- res = get(PATH, params)
13
-
14
- parse_response_urls({results: res, count: res.size})
12
+ get(PATH, params)
15
13
  end
16
14
 
17
15
  def self.find(event_category_id, params = {})
@@ -12,11 +12,18 @@ module KudagoClient
12
12
  params.slice!(:lang, :page, :page_size, :fields, :expand, :text_format, :location, :date)
13
13
  res = get(PATH, params)
14
14
 
15
- res[:results] = res[:results].map do |event_data|
16
- parse_event_data(event_data)
17
- end
18
-
19
- parse_response_urls(res)
15
+ # looks bad a little :(
16
+ results = res.data[:results]
17
+ res.data[:results] =
18
+ if results.nil?
19
+ []
20
+ else
21
+ res.data[:results] = res.data[:results].map do |event_data|
22
+ parse_event_data(event_data)
23
+ end
24
+ end
25
+
26
+ res
20
27
  end
21
28
 
22
29
  private_class_method
@@ -11,7 +11,7 @@ module KudagoClient
11
11
  params.slice!(:lang, :page, :page_size, :fields, :expand, :order_by, :text_format, :ids, :location,
12
12
  :actual_since, :actual_until, :place_id, :parent_id, :is_free, :categories, :tags, :lon, :lat, :radius)
13
13
 
14
- parse_response_urls(get(PATH, params))
14
+ get(PATH, params)
15
15
  end
16
16
 
17
17
  def self.find(event_id, params = {})
@@ -21,7 +21,7 @@ module KudagoClient
21
21
 
22
22
  def self.comments(event_id, params = {})
23
23
  params.slice!(:lang, :page, :page_size, :fields, :order_by, :ids)
24
- parse_response_urls(get("#{PATH}#{event_id}/comments/", params))
24
+ get("#{PATH}#{event_id}/comments/", params)
25
25
  end
26
26
 
27
27
  def self.comment(event_id, comment_id, params = {})
@@ -9,7 +9,7 @@ module KudagoClient
9
9
 
10
10
  def self.list(params = {})
11
11
  params.slice!(:lang, :page, :page_size, :fields, :expand, :order_by, :text_format, :ids, :tags, :location)
12
- parse_response_urls(get(PATH, params))
12
+ get(PATH, params)
13
13
  end
14
14
 
15
15
  def self.find(list_id, params = {})
@@ -19,7 +19,7 @@ module KudagoClient
19
19
 
20
20
  def self.comments(list_id, params = {})
21
21
  params.slice!(:lang, :page, :page_size, :fields, :order_by, :ids)
22
- parse_response_urls(get("#{PATH}#{list_id}/comments/", params))
22
+ get("#{PATH}#{list_id}/comments/", params)
23
23
  end
24
24
 
25
25
  def self.comment(list_id, comment_id, params = {})
@@ -9,9 +9,7 @@ module KudagoClient
9
9
 
10
10
  def self.list(params = {})
11
11
  params.slice!(:lang, :fields, :order_by)
12
- res = get(PATH, params)
13
-
14
- parse_response_urls({results: res, count: res.size})
12
+ get(PATH, params)
15
13
  end
16
14
 
17
15
  def self.find(slug, params = {})
@@ -11,7 +11,7 @@ module KudagoClient
11
11
  params.slice!(:lang, :page, :page_size, :fields, :expand, :order_by, :text_format, :ids, :tags,
12
12
  :location, :premiering_in_location, :is_free, :place_id, :actual_since, :actual_until)
13
13
 
14
- parse_response_urls(get(PATH, params))
14
+ get(PATH, params)
15
15
  end
16
16
 
17
17
  def self.find(movie_id, params = {})
@@ -23,12 +23,12 @@ module KudagoClient
23
23
  params.slice!(:lang, :page, :page_size, :fields, :expand, :order_by, :location,
24
24
  :actual_since, :actual_until, :place, :is_free)
25
25
 
26
- parse_response_urls(get("#{PATH}#{movie_id}/showings/", params))
26
+ get("#{PATH}#{movie_id}/showings/", params)
27
27
  end
28
28
 
29
29
  def self.comments(movie_id, params = {})
30
30
  params.slice!(:lang, :page, :page_size, :fields, :order_by, :ids)
31
- parse_response_urls(get("#{PATH}#{movie_id}/comments/", params))
31
+ get("#{PATH}#{movie_id}/comments/", params)
32
32
  end
33
33
  end
34
34
  end
@@ -11,7 +11,7 @@ module KudagoClient
11
11
  params.slice!(:lang, :page, :page_size, :fields, :expand, :order_by, :ids,
12
12
  :location, :actual_since, :actual_until, :place_id, :is_free)
13
13
 
14
- parse_response_urls(get(PATH, params))
14
+ get(PATH, params)
15
15
  end
16
16
 
17
17
  def self.find(showing_id, params = {})
@@ -11,7 +11,7 @@ module KudagoClient
11
11
  params.slice!(:lang, :page, :page_size, :fields, :expand, :order_by, :text_format, :ids, :tags,
12
12
  :location, :place_id, :actual_only)
13
13
 
14
- parse_response_urls(get(PATH, params))
14
+ get(PATH, params)
15
15
  end
16
16
 
17
17
  def self.find(news_id, params = {})
@@ -21,7 +21,7 @@ module KudagoClient
21
21
 
22
22
  def self.comments(news_id, params = {})
23
23
  params.slice!(:lang, :page, :page_size, :fields, :order_by, :ids)
24
- parse_response_urls(get("#{PATH}#{news_id}/comments/", params))
24
+ get("#{PATH}#{news_id}/comments/", params)
25
25
  end
26
26
 
27
27
  def self.comment(news_id, comment_id, params = {})
@@ -9,9 +9,7 @@ module KudagoClient
9
9
 
10
10
  def self.list(params = {})
11
11
  params.slice!(:lang, :fields, :order_by)
12
- res = get(PATH, params)
13
-
14
- parse_response_urls({results: res, count: res.size})
12
+ get(PATH, params)
15
13
  end
16
14
 
17
15
  def self.find(place_category_id, params = {})
@@ -9,10 +9,9 @@ module KudagoClient
9
9
 
10
10
  def self.list(params = {})
11
11
  params.slice!(:lang, :fields, :page, :page_size, :expand, :order_by, :text_format, :ids, :location,
12
- :has_showings, :showing_since, :showing_until, :is_free, :categories, :tags, :parent_id,
13
- :lon, :lat, :radius)
12
+ :has_showings, :showing_since, :showing_until, :is_free, :categories, :tags, :parent_id, :lon, :lat, :radius)
14
13
 
15
- parse_response_urls(get(PATH, params))
14
+ get(PATH, params)
16
15
  end
17
16
 
18
17
  def self.find(place_id, params = {})
@@ -22,7 +21,7 @@ module KudagoClient
22
21
 
23
22
  def self.comments(place_id, params = {})
24
23
  params.slice!(:lang, :place_id, :page, :page_size, :fields, :order_by, :ids)
25
- parse_response_urls(get("#{PATH}#{place_id}/comments/", params))
24
+ get("#{PATH}#{place_id}/comments/", params)
26
25
  end
27
26
  end
28
27
  end
@@ -9,7 +9,7 @@ module KudagoClient
9
9
 
10
10
  def self.list(params = {})
11
11
  params.slice!(:lang, :fields)
12
- parse_response_urls(get(PATH, params))
12
+ get(PATH, params)
13
13
  end
14
14
 
15
15
  def self.find(agent_id, params = {})
@@ -11,7 +11,7 @@ module KudagoClient
11
11
  params.slice!(:lang, :page, :page_size, :expand, :location, :ctype, :is_free, :include_inactual, :lat, :lon, :radius)
12
12
  params[:q] = query
13
13
 
14
- parse_response_urls(get(PATH, params))
14
+ get(PATH, params)
15
15
  end
16
16
  end
17
17
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext/hash"
4
+
5
+ module KudagoClient
6
+ class Response
7
+ attr_reader :list, :data
8
+
9
+ def initialize(response_body)
10
+ @list = true
11
+
12
+ prepared_data =
13
+ if response_body.is_a? Array
14
+ data_with_count = parse_with_count(response_body)
15
+ parse_response_urls(data_with_count)
16
+ elsif response_body.is_a?(Hash) && response_body.key?(:count)
17
+ parse_response_urls(response_body)
18
+ else
19
+ @list = false
20
+ response_body
21
+ end
22
+
23
+ @data = prepared_data
24
+ end
25
+
26
+ def list?
27
+ list
28
+ end
29
+
30
+ private
31
+
32
+ def parse_response_urls(res)
33
+ res[:next_url] = res.delete :next
34
+ res[:previous_url] = res.delete :previous
35
+
36
+ res
37
+ end
38
+
39
+ def parse_with_count(res)
40
+ {results: res, count: res.size}
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KudagoClient
4
+ VERSION = "1.0"
5
+ end
data/lib/kudago_client.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require_relative "kudago_client/client"
2
2
 
3
3
  module KudagoClient
4
- VERSION = "0.8.0"
5
4
  end
data/to_do.md ADDED
@@ -0,0 +1,6 @@
1
+ # To Do and Notes
2
+
3
+ * EventOfTheDayRequest parse data very bad
4
+ * client work with lang (params or default) very bad too
5
+ * there are no tests :)
6
+ * add a params parser/validator for requests
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kudago-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: '1.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - andrew-kh8
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-08-23 00:00:00.000000000 Z
11
+ date: 2025-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.16'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '6.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '6.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: standard
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -112,7 +140,10 @@ files:
112
140
  - lib/kudago_client/requests/place_request.rb
113
141
  - lib/kudago_client/requests/role_request.rb
114
142
  - lib/kudago_client/requests/search_request.rb
143
+ - lib/kudago_client/response.rb
144
+ - lib/kudago_client/version.rb
115
145
  - sig/kudago_client/client.rbs
146
+ - to_do.md
116
147
  homepage: https://github.com/andrew-kh8/kudago-client
117
148
  licenses:
118
149
  - MIT