easy_params 0.4.1 → 0.5.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c3709594b8141aa9bc0d851a2f1eabcf40b7528637ad3d055c76e3ad7db1ac8
4
- data.tar.gz: da9839e5b6f8242fe05ad074868fb23a3181840b723333b7fa66f9717efca4d7
3
+ metadata.gz: 4e5797272eae09e65c24f46558c801f19126e71e4ca940bdfaeecfaab478fe7d
4
+ data.tar.gz: 95d1a80d4f0635013658713c6dccc45058e707cae9e90ec88036313c673819ee
5
5
  SHA512:
6
- metadata.gz: 784db4e629c9800db787546346c9dd555ec277f578ecebfa9d59d5d76bb0532612d04a9e711b0f76a5040c9257673bf9e2c97ca85cb47bb1addeb67b7549310d
7
- data.tar.gz: 20ced440392006961a46feab7eea99b2a71dc752dbf4f04559041f5fb9f7aa861524faec9d50cab56b3c13ca29dff7ec9dd192012289ed84061485a7ad1f094a
6
+ metadata.gz: 1e76c8c64f7568d0ef3633eb3ca86a1cf1f03f331d528aa7a941c8197a2030dbbeb3fc77149b7dd0416b4776b3a8b547a6e0c451a6e1c3af92835b25e2d6815c
7
+ data.tar.gz: 82f361cf4ebce4db3ab3bbc9fd7ca196a3dc57a91c3156df1b2e18d443922a900998f58c43b5a12571346de047c1f9e803ad45e109dcb32c028840c44ebf0681
data/Gemfile.lock CHANGED
@@ -1,17 +1,15 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- easy_params (0.4.1)
5
- activemodel (>= 3.2, < 8)
6
- dry-struct (~> 1.4)
7
- dry-types (~> 1.5)
4
+ easy_params (0.5.0)
5
+ activemodel (>= 3.2)
8
6
 
9
7
  GEM
10
8
  remote: https://rubygems.org/
11
9
  specs:
12
- activemodel (7.1.2)
13
- activesupport (= 7.1.2)
14
- activesupport (7.1.2)
10
+ activemodel (7.1.3)
11
+ activesupport (= 7.1.3)
12
+ activesupport (7.1.3)
15
13
  base64
16
14
  bigdecimal
17
15
  concurrent-ruby (~> 1.0, >= 1.0.2)
@@ -23,40 +21,19 @@ GEM
23
21
  tzinfo (~> 2.0)
24
22
  ast (2.4.2)
25
23
  base64 (0.2.0)
26
- bigdecimal (3.1.5)
24
+ bigdecimal (3.1.6)
27
25
  coderay (1.1.3)
28
- concurrent-ruby (1.2.2)
26
+ concurrent-ruby (1.2.3)
29
27
  connection_pool (2.4.1)
30
28
  diff-lcs (1.4.4)
31
29
  docile (1.3.5)
32
30
  drb (2.2.0)
33
31
  ruby2_keywords
34
- dry-core (1.0.1)
35
- concurrent-ruby (~> 1.0)
36
- zeitwerk (~> 2.6)
37
- dry-inflector (1.0.0)
38
- dry-logic (1.5.0)
39
- concurrent-ruby (~> 1.0)
40
- dry-core (~> 1.0, < 2)
41
- zeitwerk (~> 2.6)
42
- dry-struct (1.6.0)
43
- dry-core (~> 1.0, < 2)
44
- dry-types (>= 1.7, < 2)
45
- ice_nine (~> 0.11)
46
- zeitwerk (~> 2.6)
47
- dry-types (1.7.2)
48
- bigdecimal (~> 3.0)
49
- concurrent-ruby (~> 1.0)
50
- dry-core (~> 1.0)
51
- dry-inflector (~> 1.0)
52
- dry-logic (~> 1.4)
53
- zeitwerk (~> 2.6)
54
32
  i18n (1.14.1)
55
33
  concurrent-ruby (~> 1.0)
56
- ice_nine (0.11.2)
57
34
  json (2.6.3)
58
35
  method_source (1.0.0)
59
- minitest (5.21.1)
36
+ minitest (5.21.2)
60
37
  mutex_m (0.2.0)
61
38
  parallel (1.23.0)
62
39
  parser (3.2.2.3)
@@ -108,7 +85,6 @@ GEM
108
85
  tzinfo (2.0.6)
109
86
  concurrent-ruby (~> 1.0)
110
87
  unicode-display_width (2.4.2)
111
- zeitwerk (2.6.12)
112
88
 
113
89
  PLATFORMS
114
90
  ruby
data/README.md CHANGED
@@ -4,11 +4,11 @@
4
4
  [![Maintainability](https://api.codeclimate.com/v1/badges/17872804ce576b8b0df2/maintainability)](https://codeclimate.com/github/andriy-baran/easy_params/maintainability)
5
5
  [![Test Coverage](https://api.codeclimate.com/v1/badges/17872804ce576b8b0df2/test_coverage)](https://codeclimate.com/github/andriy-baran/easy_params/test_coverage)
6
6
 
7
- Provides an easy way define structure, validation rules, type coercion and set default values for any hash-like structure. It's built on top of `dry-types`, `dry-structure` and `active_model/validations`.
7
+ Provides an easy way define structure, validation rules, type coercion and set default values for any hash-like structure. It's built on top of `active_model`.
8
8
 
9
9
  ## Types
10
10
 
11
- Dry types are wrapped by class methods. Avaliable types: `integer`, `decimal`, `float`, `bool`, `string`, `array`, `date`, `datetime`, `time`, `struct`
11
+ Dry types are wrapped by class methods. Avaliable types: `integer`, `decimal`, `float`, `bool`, `string`, `array`, `date`, `datetime`, `time`
12
12
 
13
13
  ## Installation
14
14
 
@@ -28,24 +28,39 @@ Or install it yourself as:
28
28
 
29
29
  ## Usage
30
30
 
31
+ To define attribute we have a set of methods which match types list. Ex.
32
+ ```ruby
33
+ integer(param_name, default: nil, normalize: nil, **validations)
34
+ ```
35
+ * `:default` provides a value to return if got `nil` as input or there were errors during coersion.
36
+ * `normalize` a proc or lambda that accepts single argument and changes it in some way. It's get called before coercion.
37
+ * `validations` mimics `activemodel/validation` can be any supported validation `presence: true, numericality: { only_integer: true, greater_than: 0 }`
38
+
39
+ In addition we have special option for an `array` type
40
+ * `:of` accepts `:integer`, `:decimal`, `:float`, `:bool`, `:string`, `:date`, `:datetime`, `:time` (`:array` is not supported)
41
+
42
+ There are two special types:
43
+
44
+ | type | method to define | default |
45
+ |-------------------|------------------|---------|
46
+ | :struct | has | {} |
47
+ | :array_of_structs | each | [] |
48
+
31
49
  ```ruby
32
50
  # app/params/api/v2/icqa/move_params.rb
33
51
  class Api::V1::Carts::MoveParams < EasyParams::Base
34
- attribute :receive_cart_id, integer
35
- attribute :i_am_sure, bool
36
- attribute :location_code, string.default('')
37
- attribute :sections, struct do
38
- attribute :from, string
39
- attribute :to, string
52
+ integer :receive_cart_id, presence: { message: "can't be blank" }
53
+ bool :i_am_sure
54
+ string :location_code, default: '', presence: { message: "can't be blank" }
55
+ has :section do
56
+ string :from
57
+ string :to
40
58
  end
41
- attribute :options, array.of(struct) do
42
- attribute :option_type_count, integer
43
- attribute :option_type_value, integer
44
-
45
- validates :option_type_count, :option_type_value, presence: { message: "can't be blank" }
59
+ array :variant_ids, of: :integer
60
+ each :options do
61
+ integer :option_type_count, presence: { message: "can't be blank" }
62
+ integer :option_type_value, presence: { message: "can't be blank" }
46
63
  end
47
-
48
- validates :receive_cart_id, :location_code, presence: { message: "can't be blank" }
49
64
  end
50
65
  ```
51
66
  Validation messages for nested attributes will look like this.
@@ -57,21 +72,6 @@ Validation messages for nested attributes will look like this.
57
72
  :"post.sections[0].id"=>an_instance_of(Array)
58
73
  }
59
74
  ```
60
- Optionally you can use more compact form
61
- ```ruby
62
- class MyParams < EasyParams::Base
63
- extend EasyParams::DSL
64
-
65
- quantity integer.default(1)
66
- posts each do
67
- content string.default('')
68
- end
69
- user has do
70
- role string
71
- end
72
- end
73
- ```
74
- This hovewer has some limitations: for attributes have name like `integer`, `decimal`, `float`, `bool`, `string`, `array`, `date`, `datetime`, `time`, `struct` it won't work as expected.
75
75
 
76
76
  More examples here [params_spec.rb](https://github.com/andriy-baran/easy_params/blob/master/spec/easy_params_spec.rb)
77
77
 
data/easy_params.gemspec CHANGED
@@ -29,11 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
30
  spec.require_paths = ['lib']
31
31
 
32
- version_string = ['>= 3.2', '< 8']
32
+ version_string = ['>= 3.2']
33
33
 
34
34
  spec.add_runtime_dependency 'activemodel', version_string
35
-
36
- # spec.add_dependency 'dry-logic', '~> 0.4.2'
37
- spec.add_dependency 'dry-struct', '~> 1.4'
38
- spec.add_dependency 'dry-types', '~> 1.5'
39
35
  end
@@ -2,99 +2,90 @@
2
2
 
3
3
  module EasyParams
4
4
  # Implements validations logic and nesting structures
5
- class Base < Dry::Struct
6
- include ActiveModel::Validations
5
+ class Base
6
+ include ActiveModel::Model
7
+ include EasyParams::Types::Struct
8
+ include EasyParams::Validation
7
9
 
8
- transform_keys(&:to_sym)
9
-
10
- def self.name
11
- 'EasyParams::Base'
10
+ def initialize(params = {})
11
+ self.class.schema.each do |attr, type|
12
+ public_send("#{attr}=", type.coerce(params[attr])) if params
13
+ end
12
14
  end
13
15
 
14
- validate do
15
- validate_nested
16
- end
16
+ class << self
17
+ def name
18
+ 'EasyParams::Base'
19
+ end
17
20
 
18
- # %w[Integer Decimal Float Bool String Date DateTime Time Array Struct StructDSL].each do |type|
19
- %w[Integer Decimal Float Bool String Date DateTime Time].each do |type_name|
20
- send(:define_singleton_method,
21
- type_name.underscore) do |param_name, default: nil, normalize: nil, optional: nil, **validations|
22
- type = EasyParams::Types.const_get(type_name)
23
- type = type.default(default) if default
24
- type = type.meta(omittable: true) if optional
25
- type = type.constructor { |value| value == Dry::Types::Undefined ? value : normalize.call(value) } if normalize
21
+ def attribute(param_name, type)
22
+ attr_accessor param_name
23
+
24
+ schema[param_name] = type
25
+ end
26
+
27
+ def schema
28
+ @schema ||= {}
29
+ end
30
+
31
+ def each(param_name, normalize: nil, **validations, &block)
26
32
  validates param_name, **validations if validations.any?
33
+ type = EasyParams::Types::Each.with_type(&block)
34
+ type = customize_type(type, nil, &normalize)
27
35
  public_send(:attribute, param_name, type)
28
36
  end
29
- end
30
-
31
- def self.each(param_name, normalize: nil, optional: nil, **validations, &block)
32
- validates param_name, **validations if validations.any?
33
- type = EasyParams::Types::Array.of(EasyParams::Types::Struct)
34
- type = type.meta(omittable: true) if optional
35
- type = type.constructor { |value| value == Dry::Types::Undefined ? value : normalize.call(value) } if normalize
36
- public_send(:attribute, param_name, type, &block)
37
- end
38
37
 
39
- def self.has(param_name, normalize: nil, optional: nil, **validations, &block)
40
- validates param_name, **validations if validations.any?
41
- type = EasyParams::Types::Struct
42
- type = type.meta(omittable: true) if optional
43
- type = type.constructor { |value| value == Dry::Types::Undefined ? value : normalize.call(value) } if normalize
44
- public_send(:attribute, param_name, type, &block)
45
- end
38
+ def has(param_name, normalize: nil, **validations, &block)
39
+ validates param_name, **validations if validations.any?
40
+ type = Class.new(EasyParams::Types::Struct.class).tap { |c| c.class_eval(&block) }.new
41
+ type = customize_type(type, nil, &normalize)
42
+ public_send(:attribute, param_name, type)
43
+ end
46
44
 
47
- def self.array(param_name, of:, normalize: nil, optional: nil, **validations, &block)
48
- validates param_name, **validations if validations.any?
49
- of_type = EasyParams::Types.const_get(of.to_s.camelcase)
50
- type = EasyParams::Types::Array
51
- type = type.meta(omittable: true) if optional
52
- type = type.constructor { |value| value == Dry::Types::Undefined ? value : normalize.call(value) } if normalize
53
- public_send(:attribute, param_name, type.of(of_type), &block)
54
- end
45
+ def array(param_name, of:, normalize: nil, **validations)
46
+ validates param_name, **validations if validations.any?
47
+ type = EasyParams::Types::Array.of(EasyParams::Types.const_get(of.to_s.camelcase))
48
+ type = customize_type(type, nil, &normalize)
49
+ public_send(:attribute, param_name, type)
50
+ end
55
51
 
56
- private
52
+ private
57
53
 
58
- def validate_nested
59
- attributes.each do |_, value|
60
- case value
61
- when *EasyParams::Types::ARRAY_OF_STRUCTS_TYPES_LIST
62
- value.each(&:valid?)
63
- when *EasyParams::Types::STRUCT_TYPES_LIST
64
- value.valid?
65
- end
54
+ def customize_type(type, default, &normalize)
55
+ type = type.default(default) if default
56
+ type = type.normalize(&normalize) if normalize
57
+ type
66
58
  end
67
- attributes.each(&aggregate_nested_errors)
68
59
  end
69
60
 
70
- def aggregate_nested_errors
71
- proc do |attr_name, value, array_index, error_key_prefix|
72
- case value
73
- when *EasyParams::Types::ARRAY_OF_STRUCTS_TYPES_LIST
74
- value.each.with_index do |element, i|
75
- aggregate_nested_errors[attr_name, element, "[#{i}]", error_key_prefix]
76
- end
77
- when *EasyParams::Types::STRUCT_TYPES_LIST
78
- handle_nested_errors(value, error_key_prefix, attr_name, array_index)
79
- end
61
+ %w[Integer Decimal Float Bool String Date DateTime Time].each do |type_name|
62
+ send(:define_singleton_method,
63
+ type_name.underscore) do |param_name, default: nil, normalize: nil, **validations|
64
+ validates param_name, **validations if validations.any?
65
+ type = EasyParams::Types.const_get(type_name)
66
+ type = customize_type(type, default, &normalize)
67
+ public_send(:attribute, param_name, type)
80
68
  end
81
69
  end
82
70
 
83
- def handle_nested_errors(value, error_key_prefix, attr_name, array_index)
84
- return if value.errors.blank?
71
+ def attributes
72
+ self.class.schema.to_h { |k, type| [k, type.array? ? send(k).to_a : send(k)] }
73
+ end
85
74
 
86
- error_key_components = [error_key_prefix, attr_name, array_index]
87
- attr_error_key_prefix = error_key_components.compact.join('.').gsub(/\.\[(\d+)\]/, '[\1]')
88
- add_errors_on_top_level(value, attr_error_key_prefix)
75
+ validate do
76
+ validate_nested
89
77
  end
90
78
 
91
- if defined? ActiveModel::Error
92
- def add_errors_on_top_level(value, attr_error_key_prefix)
93
- value.errors.each { |error| errors.add("#{attr_error_key_prefix}.#{error.attribute}", error.message) }
94
- end
95
- else
96
- def add_errors_on_top_level(value, attr_error_key_prefix)
97
- value.errors.each { |key, message| errors.add("#{attr_error_key_prefix}.#{key}", message) }
79
+ def to_h
80
+ attributes.each.with_object({}) do |(key, value), result|
81
+ result[key] = case value
82
+ when EasyParams::Types::StructsCollection
83
+ value.map(&:to_h)
84
+ when EasyParams::Types::Struct.class
85
+ value.to_h
86
+ else
87
+ value
88
+ end
98
89
  end
99
90
  end
100
91
  end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EasyParams
4
+ module Types
5
+ # base interface for array type
6
+ class Collection < Generic
7
+ include Enumerable
8
+
9
+ def initialize(*attrs, of: nil)
10
+ super(*attrs)
11
+ @of_type = of
12
+ end
13
+
14
+ def of(of_type)
15
+ self.class.new(@title, @default, @normalize_proc, of: of_type, &@coerce_proc)
16
+ end
17
+
18
+ def coerce(value)
19
+ value = @normalize_proc.call(Array(value)) if @normalize_proc
20
+ self.class.new(@title, Array(value).map do |v|
21
+ @of_type.coerce(v)
22
+ end, @normalize_proc, of: @of_type, &@coerce_proc)
23
+ end
24
+
25
+ def normalize(&block)
26
+ self.class.new(@title, @default, block, of: @of_type, &@coerce_proc)
27
+ end
28
+
29
+ def self.optional
30
+ self.class.new(@title, @default, @normalize_proc, of: @of_type, &@coerce_proc)
31
+ end
32
+
33
+ def default(value)
34
+ self.class.new(@title, value, @normalize_proc, of: @of_type, &@coerce_proc)
35
+ end
36
+
37
+ def each(&block)
38
+ @default.each(&block)
39
+ end
40
+ end
41
+
42
+ # base interface for array of structs type
43
+ class StructsCollection < Collection
44
+ def with_type(&block)
45
+ of_type = Class.new(EasyParams::Types::Struct.class).tap { |c| c.class_eval(&block) }.new
46
+ self.class.new(@title, @default, @normalize_proc, of: of_type)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EasyParams
4
+ module Types
5
+ # base interface for simple types
6
+ class Generic
7
+ def array?
8
+ @title == :array
9
+ end
10
+
11
+ def initialize(title, default = nil, normalize_proc = nil, &coerce_proc)
12
+ @title = title
13
+ @default = default
14
+ @coerce_proc = coerce_proc
15
+ @normalize_proc = normalize_proc
16
+ end
17
+
18
+ def default(value)
19
+ self.class.new(@title, value, @normalize_proc, &@coerce_proc)
20
+ end
21
+
22
+ def optional
23
+ self.class.new(@title, @default, @normalize_proc, &@coerce_proc)
24
+ end
25
+
26
+ def optional?
27
+ @optional
28
+ end
29
+
30
+ def normalize(&block)
31
+ self.class.new(@title, @default, block, &@coerce_proc)
32
+ end
33
+
34
+ def coerce(value)
35
+ value = @normalize_proc.call(value) if @normalize_proc
36
+ return @default if value.nil?
37
+
38
+ @coerce_proc.call(value)
39
+ rescue StandardError
40
+ @default
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EasyParams
4
+ module Types
5
+ # base interface for struct type
6
+ module Struct
7
+ def array?
8
+ false
9
+ end
10
+
11
+ def coerce(input)
12
+ return if input.blank?
13
+
14
+ self.class.new(input)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -2,18 +2,37 @@
2
2
 
3
3
  module EasyParams
4
4
  module Types
5
- Struct = EasyParams::Base
6
- Integer = Dry::Types['params.integer'].optional.default(nil)
7
- Decimal = Dry::Types['params.decimal'].optional.default(nil)
8
- Float = Dry::Types['params.float'].optional.default(nil)
9
- Bool = Dry::Types['params.bool'].optional.default(nil)
10
- String = Dry::Types['coercible.string'].optional.default(nil)
11
- Array = Dry::Types['array'].default([].freeze)
12
- Date = Dry::Types['params.date'].optional.default(nil)
13
- DateTime = Dry::Types['params.date_time'].optional.default(nil)
14
- Time = Dry::Types['params.time'].optional.default(nil)
5
+ class CoercionError < StandardError; end
15
6
 
16
- STRUCT_TYPES_LIST = [Struct].freeze
17
- ARRAY_OF_STRUCTS_TYPES_LIST = [Array.of(Struct)].freeze
7
+ BOOLEAN_MAP =
8
+ { '1' => true, 't' => true, 'true' => true, 'True' => true, 'TRUE' => true, 'T' => true }.merge(
9
+ { '0' => false, 'f' => false, 'false' => false, 'False' => false, 'FALSE' => false, 'F' => false }
10
+ ).freeze
11
+
12
+ Struct = Class.new(EasyParams::Base).new
13
+ Array = Collection.new(:array)
14
+ Each = StructsCollection.new(:array_of_structs)
15
+ Integer = Generic.new(:integer, &:to_i)
16
+ Float = Generic.new(:float, &:to_f)
17
+ String = Generic.new(:string, &:to_s)
18
+ Decimal = Generic.new(:decimal) { |v| v.to_f.to_d }
19
+ Bool = Generic.new(:bool) do |v|
20
+ BOOLEAN_MAP.fetch(v.to_s) { raise CoercionError }
21
+ end
22
+ Date = Generic.new(:date) do |v|
23
+ ::Date.parse(v)
24
+ rescue ArgumentError, RangeError
25
+ raise CoercionError, 'cannot be coerced'
26
+ end
27
+ DateTime = Generic.new(:datetime) do |v|
28
+ ::DateTime.parse(v)
29
+ rescue ArgumentError
30
+ raise CoercionError, 'cannot be coerced'
31
+ end
32
+ Time = Generic.new(:time) do |v|
33
+ ::Time.parse(v)
34
+ rescue ArgumentError
35
+ raise CoercionError, 'cannot be coerced'
36
+ end
18
37
  end
19
38
  end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EasyParams
4
+ # helpers for recursive validation
5
+ module Validation
6
+ private
7
+
8
+ def validate_nested
9
+ attributes.each_value do |value|
10
+ case value
11
+ when EasyParams::Types::StructsCollection
12
+ value.each(&:valid?)
13
+ when EasyParams::Types::Struct.class
14
+ value.valid?
15
+ end
16
+ end
17
+ attributes.each(&aggregate_nested_errors)
18
+ end
19
+
20
+ def aggregate_nested_errors
21
+ proc do |attr_name, value, array_index, error_key_prefix|
22
+ case value
23
+ when EasyParams::Types::StructsCollection
24
+ value.each.with_index do |element, i|
25
+ aggregate_nested_errors[attr_name, element, "[#{i}]", error_key_prefix]
26
+ end
27
+ when EasyParams::Types::Struct.class
28
+ handle_nested_errors(value, error_key_prefix, attr_name, array_index)
29
+ end
30
+ end
31
+ end
32
+
33
+ def handle_nested_errors(value, error_key_prefix, attr_name, array_index)
34
+ return if value.errors.blank?
35
+
36
+ error_key_components = [error_key_prefix, attr_name, array_index]
37
+ attr_error_key_prefix = error_key_components.compact.join('.').gsub(/\.\[(\d+)\]/, '[\1]')
38
+ add_errors_on_top_level(value, attr_error_key_prefix)
39
+ end
40
+
41
+ if defined? ActiveModel::Error
42
+ def add_errors_on_top_level(value, attr_error_key_prefix)
43
+ value.errors.each { |error| errors.add("#{attr_error_key_prefix}.#{error.attribute}", error.message) }
44
+ end
45
+ else
46
+ def add_errors_on_top_level(value, attr_error_key_prefix)
47
+ value.errors.each { |key, message| errors.add("#{attr_error_key_prefix}.#{key}", message) }
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EasyParams
4
- VERSION = '0.4.1'
4
+ VERSION = '0.5.0'
5
5
  end
data/lib/easy_params.rb CHANGED
@@ -1,8 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry-struct'
4
- require 'dry-types'
5
3
  require 'active_model'
4
+ require 'bigdecimal/util'
5
+ require 'easy_params/types/generic'
6
+ require 'easy_params/types/collection'
7
+ require 'easy_params/types/struct'
8
+ require 'easy_params/validation'
6
9
  require 'easy_params/base'
7
10
  require 'easy_params/types'
8
11
  require 'easy_params/version'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easy_params
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrii Baran
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-15 00:00:00.000000000 Z
11
+ date: 2024-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -17,9 +17,6 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.2'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '8'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,37 +24,6 @@ dependencies:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '3.2'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '8'
33
- - !ruby/object:Gem::Dependency
34
- name: dry-struct
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '1.4'
40
- type: :runtime
41
- prerelease: false
42
- version_requirements: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '1.4'
47
- - !ruby/object:Gem::Dependency
48
- name: dry-types
49
- requirement: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '1.5'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '1.5'
61
27
  description: Dessribe structure, validate and coerce values. Powered by dry-types
62
28
  and dry-struct
63
29
  email:
@@ -83,6 +49,10 @@ files:
83
49
  - lib/easy_params.rb
84
50
  - lib/easy_params/base.rb
85
51
  - lib/easy_params/types.rb
52
+ - lib/easy_params/types/collection.rb
53
+ - lib/easy_params/types/generic.rb
54
+ - lib/easy_params/types/struct.rb
55
+ - lib/easy_params/validation.rb
86
56
  - lib/easy_params/version.rb
87
57
  homepage: https://github.com/andriy-baran/easy_params
88
58
  licenses: