barkibu-kb 0.22.0 → 0.23.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 60c13170a8bc9ef25645fcdef01fc91f75210c4c37b91a6625c6556f836b85b8
4
- data.tar.gz: cff3103e0dd410df52443d5133899a7d0af5208e7122b2c55dd75526c464f842
3
+ metadata.gz: aa7e82e12cf78117dbe83ba60f544050a2f46b0c24a9dacd88ff6aac23061863
4
+ data.tar.gz: 9c5541c4cf7f89a55ae003fc75c3520e95fc798fe6d780242895da5797f7abf5
5
5
  SHA512:
6
- metadata.gz: fc81ede8d03708a18439bf9ff7c154e274cd61d37136788ad10a3361b089a8b6eb64d6b852e2e76778560133ef4f3e15c646779c9cf8cb15903521e4163abf19
7
- data.tar.gz: 03dca28d0b6b9fab0c1c7b3d66e53746dd6368db4baf7f183a1e394072d3c7b31cdd949096c05c4019f2caac67a11b3ac1b9a8e2a5ced5c573635787529c96f5
6
+ metadata.gz: f79f76c3209b161230e60e6e05522d1de24d9bc8e63c381cca6f33199b7c74ddd21dcbc3d311d866816a46abb7ba5327841919f85b820361a9e36553cea7824b
7
+ data.tar.gz: 4b58d329d5271f89649153d417838ab93f30c4e0f991060522b08d21f3e716c0333eb529723866db443776411a64336b2ec909b310e092d49980d517032145f4
data/CHANGELOG.md CHANGED
@@ -6,7 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ## [unreleased]
9
- - See diff: https://github.com/barkibu/kb-ruby/compare/v0.22.0...HEAD
9
+ - See diff: https://github.com/barkibu/kb-ruby/compare/v0.23.0...HEAD
10
+
11
+ # [0.23.0]
12
+ - Add support for `.search` method on `PetContract`
10
13
 
11
14
  # [0.22.0]
12
15
  - Fix error parsing if HTTP client returns no response
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- barkibu-kb (0.22.0)
4
+ barkibu-kb (0.23.0)
5
5
  activemodel (>= 4.0.2)
6
6
  activerecord
7
7
  activesupport (>= 3.0.0)
@@ -10,8 +10,8 @@ PATH
10
10
  faraday-http
11
11
  faraday_middleware
12
12
  i18n
13
- barkibu-kb-fake (0.22.0)
14
- barkibu-kb (= 0.22.0)
13
+ barkibu-kb-fake (0.23.0)
14
+ barkibu-kb (= 0.23.0)
15
15
  countries
16
16
  sinatra
17
17
  webmock
@@ -178,4 +178,4 @@ DEPENDENCIES
178
178
  webmock
179
179
 
180
180
  BUNDLED WITH
181
- 2.4.12
181
+ 2.4.19
data/README.md CHANGED
@@ -117,7 +117,7 @@ KB.config.log_level = :debugger # :info by default
117
117
  - returns all the KB::PetContract associated with this pet
118
118
  - `upsert`
119
119
  - updates KB:Pet if exists a Pet with same name for its PetParent
120
- - creates a new KB:Pet if not exists a Pet with same name for its PetParent
120
+ - creates a new KB:Pet if not exists a Pet with same name for its PetParent
121
121
 
122
122
  #### PetContract 📝
123
123
 
@@ -138,6 +138,15 @@ KB.config.log_level = :debugger # :info by default
138
138
  - `save!`
139
139
  - persists (create or update) the entity to the Knowledge Base
140
140
  - throws an `KB::Error` exception if something went wrong
141
+ - `search`
142
+ - arg: `filters` hash. Currently, KB API supports these keys:
143
+ - `page`: results page number. Default 0.
144
+ - `size`: amount of results per page. Default 10.
145
+ - `chip`: searches contracts by insured pet chip
146
+ - returns: a hash including:
147
+ - `total`: total amount of contracts found
148
+ - `page`: current page number
149
+ - `elements`: array of PetContract instances matching the filters
141
150
 
142
151
  #### Plan đŸ—ș
143
152
 
@@ -234,12 +243,18 @@ You should be able to use the API seemlessly and the calls to the API will be in
234
243
  ## Development & Testing
235
244
 
236
245
  ```bash
237
- docker run -it --rm -v $(pwd):/app --workdir=/app ruby:2.6.5 bash
238
-
239
- > bundle install
240
- > rspec
246
+ docker run -it --rm -v $(pwd):/app --workdir=/app ruby:2.7.2 bash
247
+ > bundle install
248
+ > rspec
241
249
  ```
242
250
 
251
+ You can also start an interactive console if needed:
252
+ ```bash
253
+ KB_API_URL_TEMPLATE=https://example.com/%{version}/%{entity} \
254
+ KB_API_KEY=YourKbApiKey \
255
+ KB_PARTNER_KEY=YourKbPartnerKey \
256
+ bin/console
257
+ ```
243
258
  ## Contributing
244
259
 
245
260
  Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/kb. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
@@ -0,0 +1,18 @@
1
+ module BoundedContext
2
+ module Paginable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ def paginate(list)
7
+ list = list.to_a
8
+ page = params.fetch('page', 1).to_i
9
+ page_size = params.fetch('size', 10).to_i
10
+ offset = (page - 1) * page_size
11
+
12
+ { total: list.size,
13
+ page: page,
14
+ elements: list[offset, page_size] }
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,12 +1,15 @@
1
1
  require 'kb/fake/bounded_context/rest_resource'
2
+ require 'kb/fake/bounded_context/paginable'
2
3
 
3
4
  module BoundedContext
4
5
  module PetFamily
5
6
  module PetContracts
6
7
  extend ActiveSupport::Concern
7
8
 
9
+ # rubocop:disable Metrics/BlockLength
8
10
  included do
9
11
  include RestResource
12
+ include Paginable
10
13
 
11
14
  get '/v1/petcontracts/contractnumber/:contract_number' do
12
15
  resource = resource_state(:petcontracts).detect do |contract|
@@ -17,8 +20,24 @@ module BoundedContext
17
20
  json_response 200, resource
18
21
  end
19
22
 
23
+ get '/v1/petcontracts/search' do
24
+ return json_response 400, {} unless params['chip']
25
+
26
+ pet_by_chip = resource_state(:pets).detect do |pet|
27
+ pet['chip'] == params['chip']
28
+ end
29
+ return json_response 200, paginate([]) if pet_by_chip.nil?
30
+
31
+ contracts = resource_state(:petcontracts).select do |contract|
32
+ contract['petKey'] == pet_by_chip['key']
33
+ end
34
+
35
+ json_response 200, paginate(contracts)
36
+ end
37
+
20
38
  resource :petcontracts, except: %i[index destroy]
21
39
  end
40
+ # rubocop:enable Metrics/BlockLength
22
41
  end
23
42
  end
24
43
  end
@@ -0,0 +1,19 @@
1
+ module KB
2
+ module Searchable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ include Queryable
7
+ end
8
+
9
+ module ClassMethods
10
+ def search(filters)
11
+ response = kb_client.request('search', filters: filters).symbolize_keys
12
+ elements = response[:elements].map { |contract| from_api(contract) }
13
+ KB::SearchResult.new(**response.merge(elements: elements))
14
+ rescue Faraday::Error => e
15
+ raise KB::Error.from_faraday(e)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -8,3 +8,4 @@ require 'kb/models/concerns/upsertable'
8
8
  require 'kb/models/concerns/updatable'
9
9
  require 'kb/models/concerns/listable'
10
10
  require 'kb/models/concerns/destroyable'
11
+ require 'kb/models/concerns/searchable'
@@ -3,6 +3,7 @@ module KB
3
3
  include Findable
4
4
  include Creatable
5
5
  include Updatable
6
+ include Searchable
6
7
 
7
8
  kb_api :pet_contract
8
9
 
@@ -0,0 +1,11 @@
1
+ module KB
2
+ class SearchResult
3
+ attr_reader :elements, :total, :page
4
+
5
+ def initialize(elements:, total:, page:)
6
+ @elements = elements
7
+ @total = total
8
+ @page = page
9
+ end
10
+ end
11
+ end
data/lib/kb/models.rb CHANGED
@@ -14,3 +14,4 @@ require 'kb/models/breed'
14
14
 
15
15
  require 'kb/models/hubspot_relationship'
16
16
  require 'kb/models/referral'
17
+ require 'kb/models/search_result'
data/lib/kb/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module KB
2
- VERSION = '0.22.0'.freeze
2
+ VERSION = '0.23.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: barkibu-kb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.0
4
+ version: 0.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - LĂ©o Figea
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-09 00:00:00.000000000 Z
11
+ date: 2023-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-configurable
@@ -276,6 +276,7 @@ files:
276
276
  - lib/kb/errors/unprocessable_entity_error.rb
277
277
  - lib/kb/fake.rb
278
278
  - lib/kb/fake/api.rb
279
+ - lib/kb/fake/bounded_context/paginable.rb
279
280
  - lib/kb/fake/bounded_context/pet_family/breeds.rb
280
281
  - lib/kb/fake/bounded_context/pet_family/hubspot_relationship.rb
281
282
  - lib/kb/fake/bounded_context/pet_family/pet_contracts.rb
@@ -296,6 +297,7 @@ files:
296
297
  - lib/kb/models/concerns/inspectionable.rb
297
298
  - lib/kb/models/concerns/listable.rb
298
299
  - lib/kb/models/concerns/queryable.rb
300
+ - lib/kb/models/concerns/searchable.rb
299
301
  - lib/kb/models/concerns/updatable.rb
300
302
  - lib/kb/models/concerns/upsertable.rb
301
303
  - lib/kb/models/condition.rb
@@ -306,6 +308,7 @@ files:
306
308
  - lib/kb/models/plan.rb
307
309
  - lib/kb/models/product.rb
308
310
  - lib/kb/models/referral.rb
311
+ - lib/kb/models/search_result.rb
309
312
  - lib/kb/models/symptom.rb
310
313
  - lib/kb/type/array_of_conditions_type.rb
311
314
  - lib/kb/type/array_of_strings_type.rb