statinize 0.4.4 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a2a7fe61fb4cc14c6a74ff3847b650a365688269d1e0ef34d7f1d061cd17a7a9
4
- data.tar.gz: 9c8fe51192997a3e22bc15d392a1a7df7489e080dc6c6c8db6e615d40807961d
3
+ metadata.gz: dd5a1c15473a68cad29248c698c58fb190a37e432bfeb41d8622594904e79060
4
+ data.tar.gz: 7120d733e7389966c5378b924beb2a638eb2bfc283437020cd5bdf8601608fd5
5
5
  SHA512:
6
- metadata.gz: e81d152b1d3e596147d5d39ca4afdc701345cd6310b667823c824c3c88331081e4cbb3913914d48fade0b496e1b2ea5bdc32beafa6514ffdc54d679523dce1c4
7
- data.tar.gz: ae3a96d472a35a3ccd04c6b52b62cbd1aedf66676006335442e3ef5a4c9f44a75b448dfd7e66a99fb6c3fd6b194ec178a2a6ad7254a96092588b04ddcda1b043
6
+ metadata.gz: c67c423f48b274dd35b0ca582ea90e7081fb732ecf1252e97e5242ba2dfbbfc2434c93484eb2752d291ab19eeaaaf28b878925e2bd30a082709d2b64449932a5
7
+ data.tar.gz: af01616f0a9a41c3799c3384285ea741dee5301f88beb5d2b6afc5c762f0219b85d16c5eb5c2a6d0994bd72034db0d0e74ebf8548cec68df08f0fd796b66fad2
@@ -2,7 +2,7 @@ module Statinize
2
2
  class Attribute
3
3
  include Comparable
4
4
 
5
- attr_reader :klass, :name, :default, :arg_name
5
+ attr_reader :klass, :name, :default, :default_exec, :arg_name
6
6
  attr_accessor :options_collection, :options
7
7
 
8
8
  def initialize(klass, name, options)
@@ -13,6 +13,7 @@ module Statinize
13
13
  @options_collection << options.clone.extend(Options) unless options.empty?
14
14
 
15
15
  @default = options[:default] if options.key?(:default)
16
+ @default_exec = options[:default_exec] if options.key?(:default_exec)
16
17
  @arg_name = name
17
18
  @name = options[:name] || name
18
19
  end
@@ -72,6 +72,10 @@ module Statinize
72
72
  statinizer.attributes.select { |a| a.options.key?(:default) }.each do |attribute|
73
73
  public_send("#{attribute.name}=", attribute.default.deep_dup)
74
74
  end
75
+
76
+ statinizer.attributes.select { |a| a.options.key?(:default_exec) }.each do |attribute|
77
+ public_send("#{attribute.name}=", attribute.default_exec.call)
78
+ end
75
79
  end
76
80
  end
77
81
 
@@ -50,7 +50,7 @@ module Statinize
50
50
 
51
51
  def populate(attrs)
52
52
  attrs.each do |attr|
53
- attribute attr.arg_name, name: attr.name, default: attr.default
53
+ attribute attr.arg_name, name: attr.name, default: attr.default, default_exec: attr.default_exec
54
54
  attributes.find { _1.name == attr.name }.tap do |attr_to_populate|
55
55
  attr_to_populate.options_collection = attr.options_collection.clone
56
56
  attr_to_populate.options = attr.options.clone
@@ -43,7 +43,7 @@ module Statinize
43
43
  attr_value = instance.public_send(attr.name)
44
44
 
45
45
  option.validators.each do |validator_class, validator_value|
46
- validator_instance = validator_class.new(attr_value, validator_value)
46
+ validator_instance = validator_class.new(attr_value, validator_value, instance)
47
47
 
48
48
  if option[:type] && option.should_cast? && attr_value.nil? && (option[:presence] || option[:nil] == false)
49
49
  cast(attr, option)
@@ -1,12 +1,13 @@
1
1
  module Statinize
2
2
  class Validator
3
- NOT_VALIDATORS = %i[force cast if unless default name]
3
+ NOT_VALIDATORS = %i[force cast if unless default default_exec name]
4
4
 
5
- attr_accessor :attr_value, :validator_value
5
+ attr_accessor :attr_value, :validator_value, :instance
6
6
 
7
- def initialize(attr_value, validator_value)
7
+ def initialize(attr_value, validator_value, instance)
8
8
  @attr_value = attr_value
9
9
  @validator_value = validator_value
10
+ @instance = instance
10
11
  end
11
12
 
12
13
  def valid?
@@ -1,7 +1,11 @@
1
1
  module Statinize
2
2
  class TypeValidator < Validator
3
3
  def valid?
4
- attr_value.is_a?(validator_value) || attr_value.nil?
4
+ if validator_value.is_a? Class
5
+ attr_value.is_a?(validator_value)
6
+ elsif validator_value.is_a? Proc
7
+ attr_value.is_a? instance.instance_exec(&validator_value)
8
+ end || attr_value.nil?
5
9
  end
6
10
 
7
11
  def error
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: statinize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Barseek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-17 00:00:00.000000000 Z
11
+ date: 2022-11-24 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Statinization gem. Allows for creation of attributes for a class with
14
14
  a given type.