level_travel 0.5.0 → 0.6.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/hot_tours/get.rb +12 -0
- data/lib/level_travel/hot_tours/params.rb +33 -0
- data/lib/level_travel/hot_tours/params_contract.rb +95 -0
- data/lib/level_travel/search/params.rb +11 -11
- data/lib/level_travel/version.rb +1 -1
- data/lib/level_travel.rb +4 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0844303ab184bf8b8ceaa7896691acf40a9489fe03ef48985a6e359aa492e84
|
4
|
+
data.tar.gz: 2ee5a79a248d9848570897a952da85031df371bcc934df1e691d202c5000c098
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c31fab7d9e96887687307a12e93d577b168eb41134bd18fe5655f5d43a5302ed34f1ffc167126019dbc41b754b821c82ec699cc8de1b9a999bb82769b9fc22ea
|
7
|
+
data.tar.gz: 46267bd8d0b94ee6862e8ef1bef36f7e8fff56cbfe9b894b7653c999adb5aedec0c5cb9fce896a8ef15ab47ad41dca9d285dad2fc2ca328be10daf900f778502
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LevelTravel
|
4
|
+
module HotTours
|
5
|
+
class Get
|
6
|
+
# @param hot_tours_params [LevelTravel::HotTours::Params] Request params for getting hot tours
|
7
|
+
def self.call(hot_tours_params)
|
8
|
+
::LevelTravel::Request.get('/hot/tours', hot_tours_params.to_h)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LevelTravel
|
4
|
+
module HotTours
|
5
|
+
class Params < Dry::Struct
|
6
|
+
attribute? :countries, Types::Array.of(Types::Strict::String)
|
7
|
+
attribute :start_date, Types::Strict::Date
|
8
|
+
attribute :end_date, Types::Strict::Date
|
9
|
+
attribute? :nights, Types::Array.of(Types::Strict::Integer)
|
10
|
+
attribute? :stars, Types::Array.of(Types::Strict::Integer)
|
11
|
+
attribute? :adults, Types::Strict::Integer
|
12
|
+
attribute? :pansions, Types::Array.of(Types::Strict::String)
|
13
|
+
attribute :sort_by, ParamsContract::SORT_VARIANTS
|
14
|
+
attribute? :min_price, Types::Strict::Integer
|
15
|
+
attribute? :max_price, Types::Strict::Integer
|
16
|
+
attribute? :per_page, Types::Strict::Integer
|
17
|
+
attribute? :page, Types::Strict::Integer
|
18
|
+
|
19
|
+
def to_h
|
20
|
+
result = super.merge(
|
21
|
+
start_date: start_date.strftime('%d.%m.%Y'),
|
22
|
+
end_date: end_date.strftime('%d.%m.%Y')
|
23
|
+
)
|
24
|
+
|
25
|
+
%i[countries nights stars pansions].each do |attr|
|
26
|
+
result = result.merge(attr => public_send(attr).join(',')) if result[attr]
|
27
|
+
end
|
28
|
+
|
29
|
+
result
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LevelTravel
|
4
|
+
module HotTours
|
5
|
+
# :reek:RepeatedConditional
|
6
|
+
class ParamsContract < Dry::Validation::Contract
|
7
|
+
config.messages.default_locale = :en
|
8
|
+
config.messages.top_namespace = 'level_travel'
|
9
|
+
config.messages.load_paths << File.expand_path('../../../config/errors.yml', __dir__).freeze
|
10
|
+
|
11
|
+
RANGES = {
|
12
|
+
stars: (1..5).freeze,
|
13
|
+
nights: (0..30).freeze
|
14
|
+
}.freeze
|
15
|
+
PANSIONS = {
|
16
|
+
RO: 'Без питания',
|
17
|
+
BB: 'Завтрак',
|
18
|
+
HB: 'Завтрак и ужин',
|
19
|
+
FB: 'Завтрак, обед, ужин',
|
20
|
+
AI: 'Всё включено',
|
21
|
+
UAI: 'Ультра всё включено',
|
22
|
+
AI24: 'Всё включено 24 часа',
|
23
|
+
'HB+': 'Завтрак и ужин +',
|
24
|
+
BBL: 'Континентальный завтрак (лёгкий)',
|
25
|
+
HBL: 'Завтрак и обед',
|
26
|
+
DNR: 'Ужин'
|
27
|
+
}.freeze
|
28
|
+
PANSIONS_VARIANTS = PANSIONS.keys.map(&:to_s).freeze
|
29
|
+
SORT_VARIANTS = Types::String.enum('prices', 'dates')
|
30
|
+
|
31
|
+
# TODO: from_city, to_country, and to_city are also possible to be an ID
|
32
|
+
params do
|
33
|
+
optional(:countries).value(Types::Array.of(Types::Strict::String))
|
34
|
+
required(:start_date).value(:date)
|
35
|
+
required(:end_date).value(:date)
|
36
|
+
optional(:nights).value(Types::ArrayOfIntegers)
|
37
|
+
optional(:stars).value(Types::ArrayOfIntegers)
|
38
|
+
optional(:adults).value(:integer)
|
39
|
+
optional(:pansions).filled(Types::Array.of(Types::Strict::String))
|
40
|
+
required(:sort_by).filled(SORT_VARIANTS)
|
41
|
+
optional(:min_price).filled(:integer)
|
42
|
+
optional(:max_price).value(:integer)
|
43
|
+
optional(:per_page).value(:integer)
|
44
|
+
optional(:page).value(:integer)
|
45
|
+
end
|
46
|
+
|
47
|
+
rule(:start_date) do
|
48
|
+
key.failure(:invalid) if value <= Date.today
|
49
|
+
end
|
50
|
+
|
51
|
+
rule(:end_date) do
|
52
|
+
key.failure(:invalid) if value <= values[:start_date]
|
53
|
+
end
|
54
|
+
|
55
|
+
rule(:adults) do
|
56
|
+
if key?
|
57
|
+
key.failure(:invalid) unless value.positive?
|
58
|
+
key.failure(:invalid) if value > 10
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
rule(:pansions) do
|
63
|
+
key.failure(:invalid) if key? && value.any? { |pansion| !PANSIONS_VARIANTS.include?(pansion) }
|
64
|
+
end
|
65
|
+
|
66
|
+
rule(:stars) do
|
67
|
+
if key? && value.any? { |rating| !RANGES.fetch(:stars).include?(rating) }
|
68
|
+
key.failure(:not_in_range, range: RANGES.fetch(:stars))
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
rule(:min_price) do
|
73
|
+
key.failure(:invalid) if key? && !value.positive?
|
74
|
+
end
|
75
|
+
|
76
|
+
rule(:max_price) do
|
77
|
+
if key?
|
78
|
+
key.failure(:invalid) unless value.positive?
|
79
|
+
key.failure(:invalid) if value < values[:min_price]
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
rule(:nights) do
|
84
|
+
if key?
|
85
|
+
key.failure(:invalid) if value.size != 2
|
86
|
+
key.failure(:invalid) if value[0] > value[1]
|
87
|
+
|
88
|
+
if value.any? { |nights| !RANGES.fetch(:nights).include?(nights) }
|
89
|
+
key.failure(:not_in_range, range: RANGES.fetch(:nights))
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -3,17 +3,17 @@
|
|
3
3
|
module LevelTravel
|
4
4
|
module Search
|
5
5
|
class Params < Dry::Struct
|
6
|
-
attribute :from_city,
|
7
|
-
attribute :to_country,
|
8
|
-
attribute? :to_city,
|
9
|
-
attribute? :hotel_ids,
|
10
|
-
attribute :nights,
|
11
|
-
attribute :adults,
|
12
|
-
attribute :start_date,
|
13
|
-
attribute? :kids,
|
14
|
-
attribute? :kids_ages,
|
15
|
-
attribute? :stars_from,
|
16
|
-
attribute? :stars_to,
|
6
|
+
attribute :from_city, Types::Strict::String
|
7
|
+
attribute :to_country, Types::Strict::String
|
8
|
+
attribute? :to_city, Types::Strict::String
|
9
|
+
attribute? :hotel_ids, Types.Array(Types::Strict::Integer)
|
10
|
+
attribute :nights, Types::Strict::Integer
|
11
|
+
attribute :adults, Types::Strict::Integer
|
12
|
+
attribute :start_date, Types::Strict::Date
|
13
|
+
attribute? :kids, Types::Strict::Integer
|
14
|
+
attribute? :kids_ages, Types.Array(Types::Strict::Integer)
|
15
|
+
attribute? :stars_from, Types::Strict::Integer
|
16
|
+
attribute? :stars_to, Types::Strict::Integer
|
17
17
|
|
18
18
|
def to_h
|
19
19
|
result = super.merge(start_date: start_date.strftime('%d.%m.%Y'))
|
data/lib/level_travel/version.rb
CHANGED
data/lib/level_travel.rb
CHANGED
@@ -16,3 +16,7 @@ require 'level_travel/references'
|
|
16
16
|
require 'level_travel/search/params_contract'
|
17
17
|
require 'level_travel/search/params'
|
18
18
|
require 'level_travel/search/request'
|
19
|
+
|
20
|
+
require 'level_travel/hot_tours/params_contract'
|
21
|
+
require 'level_travel/hot_tours/params'
|
22
|
+
require 'level_travel/hot_tours/get'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: level_travel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Rodionov
|
@@ -220,6 +220,9 @@ files:
|
|
220
220
|
- bin/setup
|
221
221
|
- bin/test
|
222
222
|
- lib/level_travel.rb
|
223
|
+
- lib/level_travel/hot_tours/get.rb
|
224
|
+
- lib/level_travel/hot_tours/params.rb
|
225
|
+
- lib/level_travel/hot_tours/params_contract.rb
|
223
226
|
- lib/level_travel/references.rb
|
224
227
|
- lib/level_travel/request.rb
|
225
228
|
- lib/level_travel/search/params.rb
|