c80_shared 0.1.67 → 0.1.68

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/app/getboat/schemas/base.rb +67 -0
  3. data/app/getboat/schemas/base_boat_schema.rb +233 -0
  4. data/app/getboat/schemas/central_agent/save_boat_schema.rb +55 -0
  5. data/app/getboat/schemas/site/lease/create_personal_inquiry_schema.rb +187 -0
  6. data/app/repositories/accounts/central_agent_account_repository.rb +46 -0
  7. data/app/repositories/accounts/client_account_repository.rb +43 -0
  8. data/app/services/abstract_prices_service.rb +70 -0
  9. data/app/services/boats/boat_prices_save_service.rb +79 -0
  10. data/app/services/boats/boat_sale_prices_save_service.rb +58 -0
  11. data/app/services/central_agent/save_boat_service.rb +117 -0
  12. data/app/services/dimension_service.rb +42 -0
  13. data/app/services/lease/create_broadcast_inquiry_service.rb +68 -0
  14. data/config/initializers/core_ext/string.rb +62 -0
  15. data/lib/c80_shared/version.rb +1 -1
  16. data/lib/c80_shared.rb +27 -0
  17. data/lib/dry/errors.rb +77 -0
  18. data/lib/dry/rule.rb +69 -0
  19. data/lib/dry/rules/and.rb +11 -0
  20. data/lib/dry/rules/between.rb +18 -0
  21. data/lib/dry/rules/binary.rb +16 -0
  22. data/lib/dry/rules/collection.rb +16 -0
  23. data/lib/dry/rules/composite.rb +19 -0
  24. data/lib/dry/rules/equal.rb +18 -0
  25. data/lib/dry/rules/format.rb +18 -0
  26. data/lib/dry/rules/greater_than.rb +18 -0
  27. data/lib/dry/rules/greater_than_or_equal.rb +18 -0
  28. data/lib/dry/rules/included.rb +18 -0
  29. data/lib/dry/rules/length_between.rb +18 -0
  30. data/lib/dry/rules/length_equal.rb +18 -0
  31. data/lib/dry/rules/less_than.rb +18 -0
  32. data/lib/dry/rules/less_than_or_equal.rb +18 -0
  33. data/lib/dry/rules/max_length.rb +18 -0
  34. data/lib/dry/rules/min_length.rb +18 -0
  35. data/lib/dry/rules/not_equal.rb +18 -0
  36. data/lib/dry/rules/or.rb +13 -0
  37. data/lib/dry/rules/present.rb +21 -0
  38. data/lib/dry/rules/then.rb +13 -0
  39. data/lib/dry/rules_factory.rb +118 -0
  40. data/lib/dry/schema.rb +148 -0
  41. metadata +39 -2
@@ -0,0 +1,11 @@
1
+ module Dry
2
+ module Rules
3
+ class And < Dry::Rules::Composite
4
+
5
+ def valid?
6
+ left.valid? && right.valid? ? true : false
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ module Dry
2
+ module Rules
3
+ class Between < Dry::Rules::Binary
4
+
5
+ def valid?
6
+ return true if right.include? left
7
+ add_error
8
+ false
9
+ end
10
+
11
+
12
+ def name
13
+ 'between'
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ module Dry
2
+ module Rules
3
+ class Binary < Dry::Rule
4
+
5
+ def right
6
+ args[:right]
7
+ end
8
+
9
+
10
+ def left
11
+ value
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Dry
2
+ module Rules
3
+ class Collection < Dry::Rules::Binary
4
+
5
+ def valid?
6
+ is_valid = true
7
+ [left, right].each do |rule|
8
+ res = rule.valid?
9
+ is_valid = res unless res
10
+ end
11
+ is_valid
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ module Dry
2
+ module Rules
3
+ class Composite < Dry::Rules::Binary
4
+
5
+ private
6
+
7
+
8
+ def lt
9
+ @lt ||= left.clone
10
+ end
11
+
12
+
13
+ def rt
14
+ @rt ||= right.clone
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ module Dry
2
+ module Rules
3
+ class Equal < Dry::Rules::Binary
4
+
5
+ def valid?
6
+ return true if left.eql?(right)
7
+ add_error
8
+ false
9
+ end
10
+
11
+
12
+ def name
13
+ 'eq'
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Dry
2
+ module Rules
3
+ class Format < Dry::Rules::Binary
4
+
5
+ def valid?
6
+ return true if left.to_s.match(right).present?
7
+ add_error
8
+ false
9
+ end
10
+
11
+
12
+ def name
13
+ 'format'
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Dry
2
+ module Rules
3
+ class GreaterThan < Dry::Rules::Binary
4
+
5
+ def valid?
6
+ return true if left > right
7
+ add_error
8
+ false
9
+ end
10
+
11
+
12
+ def name
13
+ 'gt'
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Dry
2
+ module Rules
3
+ class GreaterThanOrEqual < Dry::Rules::Binary
4
+
5
+ def valid?
6
+ return true if left >= right
7
+ add_error
8
+ false
9
+ end
10
+
11
+
12
+ def name
13
+ 'gt_eq'
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Dry
2
+ module Rules
3
+ class Included < Dry::Rules::Binary
4
+
5
+ def valid?
6
+ return true if right.include?(left)
7
+ add_error
8
+ false
9
+ end
10
+
11
+
12
+ def name
13
+ 'included'
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Dry
2
+ module Rules
3
+ class LengthBetween < Dry::Rules::Binary
4
+
5
+ def valid?
6
+ return true if right.include? left.size
7
+ add_error
8
+ false
9
+ end
10
+
11
+
12
+ def name
13
+ 'length_between'
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Dry
2
+ module Rules
3
+ class LengthEqual < Dry::Rules::Binary
4
+
5
+ def valid?
6
+ return true if left.size == right
7
+ add_error
8
+ false
9
+ end
10
+
11
+
12
+ def name
13
+ 'length_equal'
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Dry
2
+ module Rules
3
+ class LessThan < Dry::Rules::Binary
4
+
5
+ def valid?
6
+ return true if left < right
7
+ add_error
8
+ false
9
+ end
10
+
11
+
12
+ def name
13
+ 'lt'
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Dry
2
+ module Rules
3
+ class LessThanOrEqual < Dry::Rules::Binary
4
+
5
+ def valid?
6
+ return true if left <= right
7
+ add_error
8
+ false
9
+ end
10
+
11
+
12
+ def name
13
+ 'lt_eq'
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Dry
2
+ module Rules
3
+ class MaxLength < Dry::Rules::Binary
4
+
5
+ def valid?
6
+ return true if left.size <= right
7
+ add_error
8
+ false
9
+ end
10
+
11
+
12
+ def name
13
+ 'max_length'
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Dry
2
+ module Rules
3
+ class MinLength < Dry::Rules::Binary
4
+
5
+ def valid?
6
+ return true if left.size >= right
7
+ add_error
8
+ false
9
+ end
10
+
11
+
12
+ def name
13
+ 'min_length'
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Dry
2
+ module Rules
3
+ class NotEqual < Dry::Rules::Binary
4
+
5
+ def valid?
6
+ return true unless left.eql?(right)
7
+ add_error
8
+ false
9
+ end
10
+
11
+
12
+ def name
13
+ 'not_eq'
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ module Dry
2
+ module Rules
3
+ class Or < Dry::Rules::Composite
4
+
5
+ def valid?
6
+ return true if lt.valid? || rt.valid?
7
+ [lt.errors, rt.errors].each { |e| errors.merge!(e) if e.any? }
8
+ false
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ module Dry
2
+ module Rules
3
+ class Present < Dry::Rule
4
+
5
+ def valid?
6
+ return true if value.present?
7
+ add_error
8
+ false
9
+ end
10
+
11
+
12
+ private
13
+
14
+
15
+ def name
16
+ 'present'
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ module Dry
2
+ module Rules
3
+ class Then < Dry::Rules::Composite
4
+
5
+ def valid?
6
+ return true if (!lt.valid? || rt.valid?)
7
+ errors.merge!(rt.errors)
8
+ false
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,118 @@
1
+ module Dry
2
+ class RulesFactory
3
+
4
+ attr_reader :value, :errors, :args
5
+
6
+ def initialize(value, errors = Dry::Errors.new, **args)
7
+ @value = value
8
+ @errors = errors
9
+ @args = args.symbolize_keys
10
+ end
11
+
12
+
13
+ def present?
14
+ Dry::Rules::Present.new(value, errors, args)
15
+ end
16
+
17
+
18
+ def equal?(right)
19
+ Dry::Rules::Equal.new(value, errors, build_args(right))
20
+ end
21
+ alias :eq? :equal?
22
+
23
+
24
+ def not_equal?(right)
25
+ Dry::Rules::NotEqual.new(value, errors, build_args(right))
26
+ end
27
+ alias :not_eq? :not_equal?
28
+
29
+
30
+ def greater_than?(right)
31
+ Dry::Rules::GreaterThan.new(value, errors, build_args(right))
32
+ end
33
+ alias :gt? :greater_than?
34
+
35
+
36
+ def greater_than_or_equal?(right)
37
+ Dry::Rules::GreaterThanOrEqual.new(value, errors, build_args(right))
38
+ end
39
+ alias :gt_eq? :greater_than_or_equal?
40
+
41
+
42
+ def less_than?(right)
43
+ Dry::Rules::LessThan.new(value, errors, build_args(right))
44
+ end
45
+ alias :lt? :less_than?
46
+
47
+
48
+ def less_than_or_equal?(right)
49
+ Dry::Rules::LessThanOrEqual.new(value, errors, build_args(right))
50
+ end
51
+ alias :lt_eq? :less_than_or_equal?
52
+
53
+
54
+ def included?(right)
55
+ Dry::Rules::Included.new(value, errors, build_args(right))
56
+ end
57
+
58
+
59
+ def length_equal?(right)
60
+ Dry::Rules::LengthEqual.new(value, errors, build_args(right))
61
+ end
62
+
63
+
64
+ def min_length?(right)
65
+ Dry::Rules::MinLength.new(value, errors, build_args(right))
66
+ end
67
+
68
+
69
+ def max_length?(right)
70
+ Dry::Rules::MaxLength.new(value, errors, build_args(right))
71
+ end
72
+
73
+
74
+ def between?(right)
75
+ Dry::Rules::Between.new(value, errors, build_args(right))
76
+ end
77
+
78
+
79
+ def length_between?(right)
80
+ Dry::Rules::LengthBetween.new(value, errors, build_args(right))
81
+ end
82
+
83
+
84
+ def format?(right)
85
+ Dry::Rules::Format.new(value, errors, build_args(right))
86
+ end
87
+
88
+
89
+ def each(&block)
90
+ return if value.blank?
91
+ value.inject(nil) do |rule, e|
92
+ _rule = self.class.new(e, errors, args).instance_exec(&block)
93
+ rule = rule ? rule & _rule : _rule
94
+ rule
95
+ end
96
+ end
97
+
98
+
99
+ def each_value(&block)
100
+ return if value.blank?
101
+ value.inject(nil) do |rule, (k, v)|
102
+ _rule = self.class.new(v, errors, args).instance_exec(&block)
103
+ rule = rule ? rule & _rule : _rule
104
+ rule
105
+ end
106
+ end
107
+
108
+
109
+ private
110
+
111
+
112
+ def build_args(right)
113
+ rt = right.is_a?(self.class) ? right.value : right
114
+ args.merge(right: rt)
115
+ end
116
+
117
+ end
118
+ end
data/lib/dry/schema.rb ADDED
@@ -0,0 +1,148 @@
1
+ module Dry
2
+ module Schema
3
+
4
+ attr_reader :attributes, :errors
5
+
6
+ def initialize(params)
7
+ @errors = Dry::Errors.new
8
+ @attributes = cast({ wrap: params }.deep_symbolize_keys[:wrap], schema)
9
+ JSON::Validator.validate!(schema, attributes)
10
+ end
11
+
12
+
13
+ def [](key)
14
+ attributes[key.to_sym]
15
+ end
16
+
17
+
18
+ def valid?
19
+ validate_attributes(attributes, schema)
20
+ validate_additional
21
+ !errors.any?
22
+ end
23
+
24
+
25
+ def schema
26
+ raise NotImplemented
27
+ end
28
+
29
+
30
+ private
31
+
32
+
33
+ def validate_additional
34
+ end
35
+
36
+
37
+ def validate_attributes(props, schema, parents = [], key = nil)
38
+ case props
39
+ when Dry::Schema
40
+ errors.merge!(props.errors, (parents + [key]).compact.join('.')) unless props.valid?
41
+ else
42
+ [schema[:rule]].flatten.compact.each do |rule|
43
+ rule = rule.arity == 0 ? rule(key, parents, &rule) : rule.call(parents)
44
+ rule.valid? if rule
45
+ end
46
+ end
47
+
48
+ if schema[:properties]
49
+ (schema[:properties] || {}).each do |_key, data|
50
+ validate_attributes((props.present? ? props : {})[_key.to_sym], data, (parents + [key]).compact, _key)
51
+ end
52
+ elsif schema[:items]
53
+ (props.present? ? props : []).each_with_index do |e, i|
54
+ validate_attributes(e, schema[:items], (parents + [key]).compact, i)
55
+ end
56
+ end
57
+
58
+ if schema[:oneOf] || schema[:allOf] || schema[:anyOf]
59
+ [:oneOf, :allOf, :anyOf].each do |k|
60
+ s = schema[k]
61
+ case s
62
+ when Hash
63
+ validate_attributes(props, s, parents, key)
64
+ when Array
65
+ s.each { |_s| validate_attributes(props, _s, parents, key) if _s.is_a?(Hash) }
66
+ else
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+
73
+ def cast(params, schema)
74
+ props = schema.is_a?(Hash) && schema[:cast] ? schema[:cast].call(params) : params
75
+
76
+ case props
77
+ when Hash
78
+ props.each_with_object({}) do |(key, value), result|
79
+ result[key] = find_schemas_for_attribute(key, schema).inject((value.dup rescue value)) do
80
+ |_value, _schema| _value = cast(_value, _schema); _value
81
+ end
82
+ end
83
+ when Array
84
+ props.map { |e| cast(e, (schema[:items] rescue nil)) }
85
+ else
86
+ props
87
+ end
88
+ end
89
+
90
+
91
+ def rule(attrs, parents, messages = {}, name = nil, &block)
92
+ if block.arity == 0
93
+ _attrs = [attrs].flatten.compact
94
+ raise 'Invalid rule' if _attrs.size > 1
95
+ single_rule(parents + _attrs, messages, &block)
96
+ else
97
+ multi_rule(attrs, parents, messages, name, &block)
98
+ end
99
+ end
100
+
101
+
102
+ def single_rule(keys, messages = {}, &block)
103
+ value = attributes.dig(*keys) rescue nil
104
+ factory = Dry::RulesFactory.new(value, errors, key: keys.join('.'), messages: messages)
105
+ factory.instance_exec &block
106
+ end
107
+
108
+
109
+ def multi_rule(keys, parents, messages = {}, name = nil, &block)
110
+ _keys = [keys].flatten.compact
111
+ data = parents.present? ? attributes.dig(*parents) : attributes
112
+
113
+ data = _keys.inject({}) do |res, key|
114
+ res[key.to_sym] = data[key.to_sym] rescue nil; res
115
+ end
116
+
117
+ factories = data.map do |key, value|
118
+ _key = name || key
119
+ _key = (parents + [_key]).join('.')
120
+ Dry::RulesFactory.new(value, errors, key: _key, messages: messages)
121
+ end
122
+
123
+ block.call *factories
124
+ end
125
+
126
+
127
+ def find_schemas_for_attribute(key, schema, schemas = [])
128
+ case schema
129
+ when Hash
130
+ s = schema[:properties][key] rescue nil
131
+ schemas << s if s
132
+ [:allOf, :anyOf, :oneOf].each { |k| find_schemas_for_attribute(key, schema[k], schemas) }
133
+ when Array
134
+ schema.each { |s| find_schemas_for_attribute(key, s, schemas) }
135
+ else
136
+ end
137
+
138
+
139
+ schemas
140
+ end
141
+
142
+
143
+ def method_missing(method)
144
+ attributes[method.to_sym]
145
+ end
146
+
147
+ end
148
+ end