easy_params 0.3.1 → 0.4.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: 38358431f3a00f55f6a46aaa72941c1cbe0fe5f81d6a2fd898a019e09c2cf069
4
- data.tar.gz: 218c09133f6cc7220545fe2fbdf34deefc8a6ab4941d6ef9e729d264f6ecca93
3
+ metadata.gz: 8a23a79fb06b0d9c02b836dc314e420f1339b20473d740f4427a6f1a9e740efe
4
+ data.tar.gz: e1ddbee8e7b5aa08fb3e9f1f2dc925ecc179a8f95ac3276e2aeb839f7e3cbe9d
5
5
  SHA512:
6
- metadata.gz: 8674d76046f76b6ce08e0e1a7c2a1d8c12f55bf549b4ea580fcfcf1b6a5b50cda6caa6621b684fd94a41a8bad3a25044de5ea2b8b2f68e7496e6dec00e86d3ea
7
- data.tar.gz: 268b513fff84704447102ee24f1cfef76e271c73a7ab7379eef1fc1093307c69d462d0679eb387d85bc90031e588d399b53ba2c233c94829e335efe4abf7eee6
6
+ metadata.gz: 9a9968cc2201493bd774562cc9590d47537b870238ac5b64b33167c9b084feb14c067b6b4ee9a36f54abdff18a198c8d99474b8dc531fab45ebbffd61ae08c11
7
+ data.tar.gz: 11d7e883cc4a229c14b9323e94f8372e2f38d2c238e883884c2fe733bab4918be6ad62c13da09621fbb0e8b5b85405d7d2d9cb8197abc3cbf0d762b6657c2a7d
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- easy_params (0.3.1)
4
+ easy_params (0.4.0)
5
5
  activemodel (>= 3.2, < 8)
6
6
  dry-struct (~> 1.4)
7
7
  dry-types (~> 1.5)
@@ -9,46 +9,55 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- activemodel (7.0.6)
13
- activesupport (= 7.0.6)
14
- activesupport (7.0.6)
12
+ activemodel (7.1.2)
13
+ activesupport (= 7.1.2)
14
+ activesupport (7.1.2)
15
+ base64
16
+ bigdecimal
15
17
  concurrent-ruby (~> 1.0, >= 1.0.2)
18
+ connection_pool (>= 2.2.5)
19
+ drb
16
20
  i18n (>= 1.6, < 2)
17
21
  minitest (>= 5.1)
22
+ mutex_m
18
23
  tzinfo (~> 2.0)
19
24
  ast (2.4.2)
25
+ base64 (0.2.0)
26
+ bigdecimal (3.1.5)
20
27
  coderay (1.1.3)
21
28
  concurrent-ruby (1.2.2)
29
+ connection_pool (2.4.1)
22
30
  diff-lcs (1.4.4)
23
31
  docile (1.3.5)
24
- dry-configurable (0.14.0)
32
+ drb (2.2.0)
33
+ ruby2_keywords
34
+ dry-core (1.0.1)
25
35
  concurrent-ruby (~> 1.0)
26
- dry-core (~> 0.6)
27
- dry-container (0.9.0)
36
+ zeitwerk (~> 2.6)
37
+ dry-inflector (1.0.0)
38
+ dry-logic (1.5.0)
28
39
  concurrent-ruby (~> 1.0)
29
- dry-configurable (~> 0.13, >= 0.13.0)
30
- dry-core (0.7.1)
31
- concurrent-ruby (~> 1.0)
32
- dry-inflector (0.3.0)
33
- dry-logic (1.2.0)
34
- concurrent-ruby (~> 1.0)
35
- dry-core (~> 0.5, >= 0.5)
36
- dry-struct (1.4.0)
37
- dry-core (~> 0.5, >= 0.5)
38
- dry-types (~> 1.5)
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)
39
45
  ice_nine (~> 0.11)
40
- dry-types (1.5.1)
46
+ zeitwerk (~> 2.6)
47
+ dry-types (1.7.2)
48
+ bigdecimal (~> 3.0)
41
49
  concurrent-ruby (~> 1.0)
42
- dry-container (~> 0.3)
43
- dry-core (~> 0.5, >= 0.5)
44
- dry-inflector (~> 0.1, >= 0.1.2)
45
- dry-logic (~> 1.0, >= 1.0.2)
50
+ dry-core (~> 1.0)
51
+ dry-inflector (~> 1.0)
52
+ dry-logic (~> 1.4)
53
+ zeitwerk (~> 2.6)
46
54
  i18n (1.14.1)
47
55
  concurrent-ruby (~> 1.0)
48
56
  ice_nine (0.11.2)
49
57
  json (2.6.3)
50
58
  method_source (1.0.0)
51
- minitest (5.18.1)
59
+ minitest (5.20.0)
60
+ mutex_m (0.2.0)
52
61
  parallel (1.23.0)
53
62
  parser (3.2.2.3)
54
63
  ast (~> 2.4.1)
@@ -89,6 +98,7 @@ GEM
89
98
  rubocop-ast (1.29.0)
90
99
  parser (>= 3.2.1.0)
91
100
  ruby-progressbar (1.13.0)
101
+ ruby2_keywords (0.0.5)
92
102
  simplecov (0.21.2)
93
103
  docile (~> 1.1)
94
104
  simplecov-html (~> 0.11)
@@ -98,6 +108,7 @@ GEM
98
108
  tzinfo (2.0.6)
99
109
  concurrent-ruby (~> 1.0)
100
110
  unicode-display_width (2.4.2)
111
+ zeitwerk (2.6.12)
101
112
 
102
113
  PLATFORMS
103
114
  ruby
@@ -11,14 +11,51 @@ module EasyParams
11
11
  'EasyParams::Base'
12
12
  end
13
13
 
14
- %w[Integer Decimal Float Bool String Array Date DateTime Time Struct StructDSL].each do |type|
15
- send(:define_singleton_method, type.underscore) { EasyParams::Types.const_get(type) }
16
- end
17
-
18
14
  validate do
19
15
  validate_nested
20
16
  end
21
17
 
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, type_name.underscore) do |param_name, default: nil, normalize: nil, **validations|
21
+ type = EasyParams::Types.const_get(type_name)
22
+ type = type.default(default) if default
23
+ type = type.constructor { |value| value == Dry::Types::Undefined ? value : normalize.call(value) } if normalize
24
+ validates param_name, **validations if validations.any?
25
+ public_send(:attribute, param_name, type)
26
+ end
27
+ end
28
+
29
+ def self.each(param_name, normalize: nil, **validations, &block)
30
+ validates param_name, **validations if validations.any?
31
+ type = EasyParams::Types::Each
32
+ type = type.constructor { |value| value == Dry::Types::Undefined ? value : normalize.call(value) } if normalize
33
+ public_send(:attribute, param_name, type, &block)
34
+ end
35
+
36
+ def self.has(param_name, normalize: nil, **validations, &block)
37
+ validates param_name, **validations if validations.any?
38
+ type = EasyParams::Types::Struct
39
+ type = type.constructor { |value| value == Dry::Types::Undefined ? value : normalize.call(value) } if normalize
40
+ public_send(:attribute, param_name, type, &block)
41
+ end
42
+
43
+ def self.array(param_name, of:, normalize: nil, **validations, &block)
44
+ validates param_name, **validations if validations.any?
45
+ of_type = EasyParams::Types.const_get(of.to_s.camelcase)
46
+ type = EasyParams::Types::Array
47
+ type = type.constructor { |value| value == Dry::Types::Undefined ? value : normalize.call(value) } if normalize
48
+ public_send(:attribute, param_name, type.of(of_type), &block)
49
+ end
50
+
51
+ def self.param(method_name, type_name, of: nil, default: nil, **validations, &block)
52
+ type = EasyParams::Types.const_get(type_name.to_s.camelcase)
53
+ type = type.default(default) if default
54
+ type = type.of(EasyParams::Types.const_get(of.to_s.camelcase)) if of && type_name != :each
55
+ validates method_name, **validations if validations.any?
56
+ public_send(:attribute, method_name, type, &block)
57
+ end
58
+
22
59
  private
23
60
 
24
61
  def validate_nested
@@ -3,18 +3,19 @@
3
3
  module EasyParams
4
4
  module Types
5
5
  Struct = EasyParams::Base.meta(omittable: true)
6
- StructDSL = ::Class.new(EasyParams::Base).extend(EasyParams::DSL).meta(omittable: true)
6
+ Has = EasyParams::Base.meta(omittable: true)
7
7
  Integer = Dry::Types['params.integer'].optional.meta(omittable: true).default(nil)
8
8
  Decimal = Dry::Types['params.decimal'].optional.meta(omittable: true).default(nil)
9
9
  Float = Dry::Types['params.float'].optional.meta(omittable: true).default(nil)
10
- Bool = Dry::Types['strict.bool'].optional.meta(omittable: true).default(nil)
10
+ Bool = Dry::Types['params.bool'].optional.meta(omittable: true).default(nil)
11
11
  String = Dry::Types['string'].optional.meta(omittable: true).default(nil)
12
12
  Array = Dry::Types['array'].meta(omittable: true).default([])
13
+ Each = Dry::Types['array'].of(Struct).meta(omittable: true).default([])
13
14
  Date = Dry::Types['params.date'].optional.meta(omittable: true).default(nil)
14
15
  DateTime = Dry::Types['params.date_time'].optional.meta(omittable: true).default(nil)
15
16
  Time = Dry::Types['params.time'].optional.meta(omittable: true).default(nil)
16
17
 
17
- STRUCT_TYPES_LIST = [Struct, StructDSL].freeze
18
- ARRAY_OF_STRUCTS_TYPES_LIST = [Array.of(Struct), Array.of(StructDSL)].freeze
18
+ STRUCT_TYPES_LIST = [Struct, Has].freeze
19
+ ARRAY_OF_STRUCTS_TYPES_LIST = [Array.of(Struct), Each].freeze
19
20
  end
20
21
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EasyParams
4
- VERSION = '0.3.1'
4
+ VERSION = '0.4.0'
5
5
  end
data/lib/easy_params.rb CHANGED
@@ -4,7 +4,6 @@ require 'dry-struct'
4
4
  require 'dry-types'
5
5
  require 'active_model'
6
6
  require 'easy_params/base'
7
- require 'easy_params/dsl'
8
7
  require 'easy_params/types'
9
8
  require 'easy_params/version'
10
9
 
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.3.1
4
+ version: 0.4.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: 2023-07-28 00:00:00.000000000 Z
11
+ date: 2024-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -82,7 +82,6 @@ files:
82
82
  - easy_params.gemspec
83
83
  - lib/easy_params.rb
84
84
  - lib/easy_params/base.rb
85
- - lib/easy_params/dsl.rb
86
85
  - lib/easy_params/types.rb
87
86
  - lib/easy_params/version.rb
88
87
  homepage: https://github.com/andriy-baran/easy_params
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module EasyParams
4
- # Makes definition more compact
5
- # Do not use if your attributes have name like
6
- # integer, decimal, float, bool, string, array, date, datetime, time, struct
7
- module DSL
8
- def each(&block)
9
- array.of(struct_dsl, &block)
10
- end
11
-
12
- def has(&block)
13
- struct_dsl(&block)
14
- end
15
-
16
- def method_missing(method_name, *args, &block)
17
- public_send(:attribute, method_name, *args, &block)
18
- end
19
-
20
- def respond_to_missing?(*)
21
- true
22
- end
23
- end
24
- end