level_travel 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/level_travel/request.rb +0 -1
- data/lib/level_travel/search/params.rb +27 -0
- data/lib/level_travel/search/params_contract.rb +56 -0
- data/lib/level_travel/search/request.rb +17 -0
- data/lib/level_travel/types.rb +4 -1
- data/lib/level_travel/version.rb +1 -1
- data/lib/level_travel.rb +8 -0
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 130213408e85057cbe6f3d37751fa02729c24b9b2b6ec29d3370d32bc910d2cb
|
4
|
+
data.tar.gz: 8c70e07d8b93a2b72095c5f3c6563d714f5d80f2d620da2ec7b8b3a32e74470a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8609b7c56d0ea5dffe9a26349a27863678ef1aa7a2d62c023462b41ac730b2b225f6e6f9a0ea186201d1617bf10be576e4bc88fa6a4fa9e3eba1cde853e53419
|
7
|
+
data.tar.gz: 2a077800dc672071ad254f57410ea4722cf4e801f24dea32b9cbe13bac36288842e5329f7b94263dc40e469b9caca29b7ff2df27e9eba1ffb6713a20cfbb1c96
|
data/lib/level_travel/request.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LevelTravel
|
4
|
+
module Search
|
5
|
+
class Params < Dry::Struct
|
6
|
+
attribute :from_city, ::LevelTravel::Types::Strict::String
|
7
|
+
attribute :to_country, ::LevelTravel::Types::Strict::String
|
8
|
+
attribute? :to_city, ::LevelTravel::Types::Strict::String.optional
|
9
|
+
attribute? :hotel_ids, ::LevelTravel::Types.Array(::LevelTravel::Types::Strict::Integer).optional
|
10
|
+
attribute :nights, ::LevelTravel::Types::Strict::Integer
|
11
|
+
attribute :adults, ::LevelTravel::Types::Strict::Integer
|
12
|
+
attribute :start_date, ::LevelTravel::Types::Strict::Date
|
13
|
+
attribute? :kids, ::LevelTravel::Types::Strict::Integer.optional
|
14
|
+
attribute? :kids_ages, ::LevelTravel::Types.Array(::LevelTravel::Types::Strict::Integer).optional
|
15
|
+
attribute? :stars_from, ::LevelTravel::Types::Strict::Integer.optional
|
16
|
+
attribute? :stars_to, ::LevelTravel::Types::Strict::Integer.optional
|
17
|
+
|
18
|
+
def to_h
|
19
|
+
result = super.merge(start_date: start_date.strftime('%d.%m.%Y'))
|
20
|
+
result = result.merge(hotel_ids: hotel_ids.join(',')) if result[:hotel_ids]
|
21
|
+
result = result.merge(kids_ages: kids_ages.join(',')) if result[:kids_ages]
|
22
|
+
|
23
|
+
result
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LevelTravel
|
4
|
+
module Search
|
5
|
+
class ParamsContract < Dry::Validation::Contract
|
6
|
+
config.messages.default_locale = :en
|
7
|
+
config.messages.top_namespace = 'level_travel'
|
8
|
+
config.messages.load_paths << File.expand_path('../../../config/errors.yml', __dir__).freeze
|
9
|
+
|
10
|
+
RANGES = {
|
11
|
+
stars: (1..5).freeze,
|
12
|
+
kids_age: (0..12).freeze
|
13
|
+
}.freeze
|
14
|
+
|
15
|
+
# TODO: from_city, to_country, and to_city are also possible to be an ID
|
16
|
+
params do
|
17
|
+
required(:from_city).filled(:string)
|
18
|
+
required(:to_country).value(:string)
|
19
|
+
required(:nights).value(:integer)
|
20
|
+
required(:adults).value(:integer)
|
21
|
+
required(:start_date).value(:date)
|
22
|
+
|
23
|
+
optional(:to_city).value(:string)
|
24
|
+
optional(:hotel_ids).value(Types::ArrayOfIntegers)
|
25
|
+
optional(:kids).value(:integer)
|
26
|
+
optional(:kids_ages).value(Types::ArrayOfIntegers)
|
27
|
+
optional(:stars_from).value(:integer)
|
28
|
+
optional(:stars_to).value(:integer)
|
29
|
+
end
|
30
|
+
|
31
|
+
rule(:start_date) do
|
32
|
+
key.failure(:invalid) if value <= Date.today
|
33
|
+
end
|
34
|
+
|
35
|
+
rule(:stars_from) do
|
36
|
+
key.failure(:not_in_range, range: RANGES.fetch(:stars)) if key? && !RANGES.fetch(:stars).include?(value)
|
37
|
+
end
|
38
|
+
|
39
|
+
rule(:stars_to) do
|
40
|
+
key.failure(:not_in_range, range: RANGES.fetch(:stars)) if key? && !RANGES.fetch(:stars).include?(value)
|
41
|
+
end
|
42
|
+
|
43
|
+
rule(:kids_ages) do
|
44
|
+
key.failure(:required) if key? && values[:kids] && value.empty?
|
45
|
+
|
46
|
+
if key? && value.any? { |age| !RANGES.fetch(:kids_age).include?(age) }
|
47
|
+
key.failure(:not_in_range, range: RANGES.fetch(:kids_age))
|
48
|
+
end
|
49
|
+
|
50
|
+
if key? && !value.empty? && value.size != values[:kids].to_i
|
51
|
+
key.failure(:not_equal_to_kids, actual: value.size, needed: values[:kids].to_i)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LevelTravel
|
4
|
+
module Search
|
5
|
+
class Request
|
6
|
+
# @param search_params [LevelTravel::Search::Params] Request params for search
|
7
|
+
def self.enqueue(search_params)
|
8
|
+
::LevelTravel::Request.get('/search/enqueue', search_params.to_h)
|
9
|
+
end
|
10
|
+
|
11
|
+
# @param request_id [String] Request ID from the `enqueue` request
|
12
|
+
def self.status(request_id)
|
13
|
+
::LevelTravel::Request.get('/search/status', request_id: request_id)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/level_travel/types.rb
CHANGED
@@ -4,6 +4,9 @@ require 'dry-types'
|
|
4
4
|
|
5
5
|
module LevelTravel
|
6
6
|
module Types
|
7
|
-
include Dry.Types(
|
7
|
+
include Dry.Types()
|
8
|
+
|
9
|
+
StrippedString = Types::Strict::String.constructor(&:strip)
|
10
|
+
ArrayOfIntegers = Types.Array(Types::Coercible::Integer)
|
8
11
|
end
|
9
12
|
end
|
data/lib/level_travel/version.rb
CHANGED
data/lib/level_travel.rb
CHANGED
@@ -3,8 +3,16 @@
|
|
3
3
|
module LevelTravel
|
4
4
|
end
|
5
5
|
|
6
|
+
require 'date'
|
7
|
+
require 'dry-struct'
|
8
|
+
require 'dry-validation'
|
9
|
+
|
6
10
|
require 'level_travel/version'
|
7
11
|
require 'level_travel/types'
|
8
12
|
require 'level_travel/settings'
|
9
13
|
require 'level_travel/request'
|
10
14
|
require 'level_travel/references'
|
15
|
+
|
16
|
+
require 'level_travel/search/params_contract'
|
17
|
+
require 'level_travel/search/params'
|
18
|
+
require 'level_travel/search/request'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: level_travel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Rodionov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-01-
|
11
|
+
date: 2020-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-struct
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: dry-validation
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.4'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.4'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: faraday
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -208,6 +222,9 @@ files:
|
|
208
222
|
- lib/level_travel.rb
|
209
223
|
- lib/level_travel/references.rb
|
210
224
|
- lib/level_travel/request.rb
|
225
|
+
- lib/level_travel/search/params.rb
|
226
|
+
- lib/level_travel/search/params_contract.rb
|
227
|
+
- lib/level_travel/search/request.rb
|
211
228
|
- lib/level_travel/settings.rb
|
212
229
|
- lib/level_travel/types.rb
|
213
230
|
- lib/level_travel/version.rb
|