params_ready 0.0.1

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.
Files changed (83) hide show
  1. checksums.yaml +7 -0
  2. data/lib/arel/cte_name.rb +20 -0
  3. data/lib/params_ready.rb +36 -0
  4. data/lib/params_ready/builder.rb +140 -0
  5. data/lib/params_ready/error.rb +31 -0
  6. data/lib/params_ready/extensions/class_reader_writer.rb +33 -0
  7. data/lib/params_ready/extensions/collection.rb +43 -0
  8. data/lib/params_ready/extensions/delegation.rb +25 -0
  9. data/lib/params_ready/extensions/finalizer.rb +26 -0
  10. data/lib/params_ready/extensions/freezer.rb +49 -0
  11. data/lib/params_ready/extensions/hash.rb +46 -0
  12. data/lib/params_ready/extensions/late_init.rb +38 -0
  13. data/lib/params_ready/extensions/registry.rb +44 -0
  14. data/lib/params_ready/extensions/undefined.rb +15 -0
  15. data/lib/params_ready/format.rb +130 -0
  16. data/lib/params_ready/helpers/arel_builder.rb +68 -0
  17. data/lib/params_ready/helpers/conditional_block.rb +31 -0
  18. data/lib/params_ready/helpers/find_in_hash.rb +22 -0
  19. data/lib/params_ready/helpers/key_map.rb +176 -0
  20. data/lib/params_ready/helpers/memo.rb +42 -0
  21. data/lib/params_ready/helpers/options.rb +39 -0
  22. data/lib/params_ready/helpers/parameter_definer_class_methods.rb +39 -0
  23. data/lib/params_ready/helpers/parameter_storage_class_methods.rb +36 -0
  24. data/lib/params_ready/helpers/parameter_user_class_methods.rb +31 -0
  25. data/lib/params_ready/helpers/relation_builder_wrapper.rb +35 -0
  26. data/lib/params_ready/helpers/rule.rb +57 -0
  27. data/lib/params_ready/helpers/storage.rb +30 -0
  28. data/lib/params_ready/helpers/usage_rule.rb +18 -0
  29. data/lib/params_ready/input_context.rb +31 -0
  30. data/lib/params_ready/intent.rb +70 -0
  31. data/lib/params_ready/marshaller/array_marshallers.rb +132 -0
  32. data/lib/params_ready/marshaller/builder_module.rb +9 -0
  33. data/lib/params_ready/marshaller/collection.rb +165 -0
  34. data/lib/params_ready/marshaller/definition_module.rb +63 -0
  35. data/lib/params_ready/marshaller/hash_marshallers.rb +100 -0
  36. data/lib/params_ready/marshaller/hash_set_marshallers.rb +96 -0
  37. data/lib/params_ready/marshaller/parameter_module.rb +11 -0
  38. data/lib/params_ready/marshaller/polymorph_marshallers.rb +67 -0
  39. data/lib/params_ready/marshaller/tuple_marshallers.rb +103 -0
  40. data/lib/params_ready/ordering/column.rb +60 -0
  41. data/lib/params_ready/ordering/ordering.rb +276 -0
  42. data/lib/params_ready/output_parameters.rb +127 -0
  43. data/lib/params_ready/pagination/abstract_pagination.rb +18 -0
  44. data/lib/params_ready/pagination/cursor.rb +171 -0
  45. data/lib/params_ready/pagination/direction.rb +148 -0
  46. data/lib/params_ready/pagination/keyset_pagination.rb +254 -0
  47. data/lib/params_ready/pagination/keysets.rb +70 -0
  48. data/lib/params_ready/pagination/nulls.rb +31 -0
  49. data/lib/params_ready/pagination/offset_pagination.rb +130 -0
  50. data/lib/params_ready/pagination/tendency.rb +28 -0
  51. data/lib/params_ready/parameter/abstract_hash_parameter.rb +204 -0
  52. data/lib/params_ready/parameter/array_parameter.rb +197 -0
  53. data/lib/params_ready/parameter/definition.rb +264 -0
  54. data/lib/params_ready/parameter/hash_parameter.rb +63 -0
  55. data/lib/params_ready/parameter/hash_set_parameter.rb +101 -0
  56. data/lib/params_ready/parameter/parameter.rb +456 -0
  57. data/lib/params_ready/parameter/polymorph_parameter.rb +172 -0
  58. data/lib/params_ready/parameter/state.rb +132 -0
  59. data/lib/params_ready/parameter/tuple_parameter.rb +152 -0
  60. data/lib/params_ready/parameter/value_parameter.rb +182 -0
  61. data/lib/params_ready/parameter_definer.rb +14 -0
  62. data/lib/params_ready/parameter_user.rb +43 -0
  63. data/lib/params_ready/query/array_grouping.rb +68 -0
  64. data/lib/params_ready/query/custom_predicate.rb +102 -0
  65. data/lib/params_ready/query/exists_predicate.rb +103 -0
  66. data/lib/params_ready/query/fixed_operator_predicate.rb +77 -0
  67. data/lib/params_ready/query/grouping.rb +177 -0
  68. data/lib/params_ready/query/join_clause.rb +87 -0
  69. data/lib/params_ready/query/nullness_predicate.rb +71 -0
  70. data/lib/params_ready/query/polymorph_predicate.rb +77 -0
  71. data/lib/params_ready/query/predicate.rb +203 -0
  72. data/lib/params_ready/query/predicate_operator.rb +132 -0
  73. data/lib/params_ready/query/relation.rb +337 -0
  74. data/lib/params_ready/query/structured_grouping.rb +58 -0
  75. data/lib/params_ready/query/variable_operator_predicate.rb +125 -0
  76. data/lib/params_ready/query_context.rb +21 -0
  77. data/lib/params_ready/restriction.rb +252 -0
  78. data/lib/params_ready/result.rb +109 -0
  79. data/lib/params_ready/value/coder.rb +181 -0
  80. data/lib/params_ready/value/constraint.rb +198 -0
  81. data/lib/params_ready/value/custom.rb +56 -0
  82. data/lib/params_ready/value/validator.rb +68 -0
  83. metadata +181 -0
@@ -0,0 +1,56 @@
1
+ require_relative '../parameter/value_parameter'
2
+
3
+ module ParamsReady
4
+ module Value
5
+ class DowncaseStringCoder < StringCoder
6
+ def self.coerce(value, context)
7
+ string = super
8
+ string.downcase
9
+ end
10
+ end
11
+
12
+ Parameter::ValueParameterBuilder.register_coder :downcase_string, DowncaseStringCoder
13
+
14
+ class FormattedDecimalCoder < DecimalCoder
15
+ EU = /^(\d{1,3}( \d{3})+|\d+),\d{1,2}$/.freeze
16
+ US = /^(\d{1,3}(,\d{3})+).\d{1,2}$/.freeze
17
+
18
+ def self.coerce(value, context)
19
+ value = if value.is_a? String
20
+ stripped = value.strip
21
+ if EU.match? stripped
22
+ stripped.gsub(/[ ,]/, ' ' => '', ',' => '.')
23
+ elsif US.match? stripped
24
+ stripped.delete(',')
25
+ else
26
+ stripped
27
+ end
28
+ else
29
+ value
30
+ end
31
+ super
32
+ end
33
+ end
34
+
35
+ Parameter::ValueParameterBuilder.register_coder :formatted_decimal, FormattedDecimalCoder
36
+
37
+ class CheckboxBooleanCoder < BooleanCoder
38
+ def self.format(value, format)
39
+ return value unless format.marshal? :boolean
40
+ return value ? 'true' : nil
41
+ end
42
+ end
43
+
44
+ Parameter::ValueParameterBuilder.register_coder :checkbox_boolean, CheckboxBooleanCoder
45
+
46
+ class NonEmptyStringCoder < StringCoder
47
+ def self.coerce(value, _)
48
+ return Extensions::Undefined if value.nil? || value.empty?
49
+
50
+ super
51
+ end
52
+ end
53
+
54
+ Parameter::ValueParameterBuilder.register_coder :non_empty_string, NonEmptyStringCoder
55
+ end
56
+ end
@@ -0,0 +1,68 @@
1
+ require_relative 'constraint'
2
+
3
+ module ParamsReady
4
+ module Value
5
+ class Validator
6
+ attr_reader :constraint, :strategy
7
+
8
+ def self.instance(name_or_constraint, *args, strategy: :raise, **opts, &block)
9
+ constraint = case name_or_constraint
10
+ when Value::Constraint
11
+ name_or_constraint
12
+ when Symbol
13
+ type = Value::Constraint.constraint_type(name_or_constraint)
14
+ type.build(*args, **opts, &block)
15
+ else
16
+ if name_or_constraint.respond_to?(:valid?) && name_or_constraint.respond_to?(:error_message)
17
+ name_or_constraint
18
+ else
19
+ raise ParamsReadyError, "Not a constraint: #{name_or_constraint.class.name}"
20
+ end
21
+ end
22
+ new(constraint, strategy: strategy)
23
+ end
24
+
25
+ def initialize(constraint, strategy: :raise)
26
+ @constraint = constraint
27
+ @strategy = check_strategy(constraint, strategy)
28
+ freeze
29
+ end
30
+
31
+ def check_strategy(constraint, strategy)
32
+ case strategy.to_sym
33
+ when :raise, :undefine
34
+ strategy.to_sym
35
+ when :clamp
36
+ raise ParamsReadyError, 'Clamping not applicable' unless constraint.clamp?
37
+ strategy.to_sym
38
+ else
39
+ raise ParamsReadyError, "Unexpected constraint strategy #{strategy}"
40
+ end
41
+ end
42
+
43
+ def validate(value, result)
44
+ return [value, result] if Extensions::Undefined.value_indefinite?(value)
45
+
46
+ if constraint.valid? value
47
+ [value, result]
48
+ else
49
+ case strategy
50
+ when :raise
51
+ e = Constraint::Error.new("value '#{value}' #{constraint.error_message}")
52
+ if result.nil?
53
+ raise e
54
+ else
55
+ result.error! e
56
+ end
57
+ [Extensions::Undefined, result]
58
+ when :clamp
59
+ [constraint.clamp(value), result]
60
+ else
61
+ [Extensions::Undefined, result]
62
+ end
63
+ end
64
+ end
65
+
66
+ end
67
+ end
68
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: params_ready
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Tomas Milsimer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-10-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ruby2_keywords
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '6'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: byebug
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '11'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '11'
55
+ - !ruby/object:Gem::Dependency
56
+ name: memory_profiler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.9'
69
+ description: "Create well defined controller interfaces. Preprocess, coerce and constrain
70
+ \nincoming parameters to safely populate data models, hold session state in URI
71
+ variables \nacross different locations, build SQL queries.\n"
72
+ email: tomas.milsimer@protonmail.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - lib/arel/cte_name.rb
78
+ - lib/params_ready.rb
79
+ - lib/params_ready/builder.rb
80
+ - lib/params_ready/error.rb
81
+ - lib/params_ready/extensions/class_reader_writer.rb
82
+ - lib/params_ready/extensions/collection.rb
83
+ - lib/params_ready/extensions/delegation.rb
84
+ - lib/params_ready/extensions/finalizer.rb
85
+ - lib/params_ready/extensions/freezer.rb
86
+ - lib/params_ready/extensions/hash.rb
87
+ - lib/params_ready/extensions/late_init.rb
88
+ - lib/params_ready/extensions/registry.rb
89
+ - lib/params_ready/extensions/undefined.rb
90
+ - lib/params_ready/format.rb
91
+ - lib/params_ready/helpers/arel_builder.rb
92
+ - lib/params_ready/helpers/conditional_block.rb
93
+ - lib/params_ready/helpers/find_in_hash.rb
94
+ - lib/params_ready/helpers/key_map.rb
95
+ - lib/params_ready/helpers/memo.rb
96
+ - lib/params_ready/helpers/options.rb
97
+ - lib/params_ready/helpers/parameter_definer_class_methods.rb
98
+ - lib/params_ready/helpers/parameter_storage_class_methods.rb
99
+ - lib/params_ready/helpers/parameter_user_class_methods.rb
100
+ - lib/params_ready/helpers/relation_builder_wrapper.rb
101
+ - lib/params_ready/helpers/rule.rb
102
+ - lib/params_ready/helpers/storage.rb
103
+ - lib/params_ready/helpers/usage_rule.rb
104
+ - lib/params_ready/input_context.rb
105
+ - lib/params_ready/intent.rb
106
+ - lib/params_ready/marshaller/array_marshallers.rb
107
+ - lib/params_ready/marshaller/builder_module.rb
108
+ - lib/params_ready/marshaller/collection.rb
109
+ - lib/params_ready/marshaller/definition_module.rb
110
+ - lib/params_ready/marshaller/hash_marshallers.rb
111
+ - lib/params_ready/marshaller/hash_set_marshallers.rb
112
+ - lib/params_ready/marshaller/parameter_module.rb
113
+ - lib/params_ready/marshaller/polymorph_marshallers.rb
114
+ - lib/params_ready/marshaller/tuple_marshallers.rb
115
+ - lib/params_ready/ordering/column.rb
116
+ - lib/params_ready/ordering/ordering.rb
117
+ - lib/params_ready/output_parameters.rb
118
+ - lib/params_ready/pagination/abstract_pagination.rb
119
+ - lib/params_ready/pagination/cursor.rb
120
+ - lib/params_ready/pagination/direction.rb
121
+ - lib/params_ready/pagination/keyset_pagination.rb
122
+ - lib/params_ready/pagination/keysets.rb
123
+ - lib/params_ready/pagination/nulls.rb
124
+ - lib/params_ready/pagination/offset_pagination.rb
125
+ - lib/params_ready/pagination/tendency.rb
126
+ - lib/params_ready/parameter/abstract_hash_parameter.rb
127
+ - lib/params_ready/parameter/array_parameter.rb
128
+ - lib/params_ready/parameter/definition.rb
129
+ - lib/params_ready/parameter/hash_parameter.rb
130
+ - lib/params_ready/parameter/hash_set_parameter.rb
131
+ - lib/params_ready/parameter/parameter.rb
132
+ - lib/params_ready/parameter/polymorph_parameter.rb
133
+ - lib/params_ready/parameter/state.rb
134
+ - lib/params_ready/parameter/tuple_parameter.rb
135
+ - lib/params_ready/parameter/value_parameter.rb
136
+ - lib/params_ready/parameter_definer.rb
137
+ - lib/params_ready/parameter_user.rb
138
+ - lib/params_ready/query/array_grouping.rb
139
+ - lib/params_ready/query/custom_predicate.rb
140
+ - lib/params_ready/query/exists_predicate.rb
141
+ - lib/params_ready/query/fixed_operator_predicate.rb
142
+ - lib/params_ready/query/grouping.rb
143
+ - lib/params_ready/query/join_clause.rb
144
+ - lib/params_ready/query/nullness_predicate.rb
145
+ - lib/params_ready/query/polymorph_predicate.rb
146
+ - lib/params_ready/query/predicate.rb
147
+ - lib/params_ready/query/predicate_operator.rb
148
+ - lib/params_ready/query/relation.rb
149
+ - lib/params_ready/query/structured_grouping.rb
150
+ - lib/params_ready/query/variable_operator_predicate.rb
151
+ - lib/params_ready/query_context.rb
152
+ - lib/params_ready/restriction.rb
153
+ - lib/params_ready/result.rb
154
+ - lib/params_ready/value/coder.rb
155
+ - lib/params_ready/value/constraint.rb
156
+ - lib/params_ready/value/custom.rb
157
+ - lib/params_ready/value/validator.rb
158
+ homepage: https://github.com/lame-impala/params_ready
159
+ licenses:
160
+ - MIT
161
+ metadata: {}
162
+ post_install_message:
163
+ rdoc_options: []
164
+ require_paths:
165
+ - lib
166
+ required_ruby_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ required_rubygems_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ requirements: []
177
+ rubygems_version: 3.1.4
178
+ signing_key:
179
+ specification_version: 4
180
+ summary: Define controller interfaces in Rails
181
+ test_files: []