attribool 2.0.0 → 2.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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +12 -20
- data/Gemfile.lock +7 -1
- data/attribool.gemspec +1 -0
- data/lib/attribool/validator_service.rb +19 -0
- data/lib/attribool/validators/condition_validator.rb +17 -0
- data/lib/attribool/validators/method_name_validator.rb +1 -2
- data/lib/attribool/validators/nil_attribute_validator.rb +1 -2
- data/lib/attribool/validators/strict_boolean_validator.rb +1 -2
- data/lib/attribool/value.rb +15 -0
- data/lib/attribool/version.rb +1 -1
- data/lib/attribool.rb +8 -6
- metadata +19 -3
- data/lib/attribool/validators/validator.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f70889d0edf2407bfaee163da31ab791d35bea5921024e54fbab658792c81d46
|
4
|
+
data.tar.gz: 0ed3735087e12402627c1773564efa42e2710696d9e932dcd5073a369cf0f6d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df790e07a5164be0da050dce51747bfa73a5884637304854706ffc5948347fc4faf3cb300a8cef35849b3ad65f145813ee8dc3a98fde5234fb8fb0fd7c493a36
|
7
|
+
data.tar.gz: b6740fa6386e012e9a39040abde54e9e091f194ac3c1b7bc1a4127d72cd4eff829b27d76a1ee1c34e507330dfcb0804555d7aba98980608851b7e4ccf6522f88
|
data/.github/workflows/ruby.yml
CHANGED
@@ -1,11 +1,4 @@
|
|
1
|
-
|
2
|
-
# They are provided by a third-party and are governed by
|
3
|
-
# separate terms of service, privacy policy, and support
|
4
|
-
# documentation.
|
5
|
-
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
-
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
-
|
8
|
-
name: Ruby
|
1
|
+
name: Ruby CI
|
9
2
|
|
10
3
|
on:
|
11
4
|
push:
|
@@ -17,19 +10,18 @@ jobs:
|
|
17
10
|
test:
|
18
11
|
|
19
12
|
runs-on: ubuntu-latest
|
13
|
+
|
20
14
|
strategy:
|
21
15
|
matrix:
|
22
|
-
ruby-version: ['2.
|
16
|
+
ruby-version: ['3.2', '3.1', '3.0', '2.7', '2.6']
|
23
17
|
|
24
18
|
steps:
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
- name: Run tests
|
35
|
-
run: bundle exec rake
|
19
|
+
- uses: actions/checkout@v3
|
20
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
21
|
+
uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1
|
22
|
+
with:
|
23
|
+
ruby-version: ${{ matrix.ruby-version }}
|
24
|
+
- name: Install dependencies
|
25
|
+
run: bundle install
|
26
|
+
- name: Run tests
|
27
|
+
run: bundle exec rake
|
data/Gemfile.lock
CHANGED
@@ -1,19 +1,24 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
attribool (2.0.
|
4
|
+
attribool (2.0.1)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
9
|
ast (2.4.2)
|
10
|
+
coderay (1.1.3)
|
10
11
|
docile (1.3.5)
|
11
12
|
json (2.6.3)
|
12
13
|
language_server-protocol (3.17.0.2)
|
14
|
+
method_source (1.0.0)
|
13
15
|
parallel (1.22.1)
|
14
16
|
parser (3.1.3.0)
|
15
17
|
ast (~> 2.4.1)
|
16
18
|
power_assert (2.0.0)
|
19
|
+
pry (0.14.2)
|
20
|
+
coderay (~> 1.1)
|
21
|
+
method_source (~> 1.0)
|
17
22
|
rainbow (3.1.1)
|
18
23
|
rake (13.0.3)
|
19
24
|
regexp_parser (2.6.1)
|
@@ -53,6 +58,7 @@ PLATFORMS
|
|
53
58
|
|
54
59
|
DEPENDENCIES
|
55
60
|
attribool!
|
61
|
+
pry
|
56
62
|
rake (~> 13.0, >= 13.0.1)
|
57
63
|
simplecov
|
58
64
|
standard
|
data/attribool.gemspec
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.bindir = "bin"
|
28
28
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
29
29
|
spec.require_paths = ["lib"]
|
30
|
+
spec.add_development_dependency "pry"
|
30
31
|
spec.add_development_dependency "rake", "~> 13.0", ">= 13.0.1"
|
31
32
|
spec.add_development_dependency "simplecov"
|
32
33
|
spec.add_development_dependency "standard"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Attribool
|
4
|
+
class ValidatorService
|
5
|
+
def self.call(validator, *args)
|
6
|
+
new(validator, *args).validate
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(validator, *args)
|
10
|
+
@validator = ::Attribool::Validators.const_get(
|
11
|
+
"#{validator.to_s.split("_").map(&:capitalize).join}Validator"
|
12
|
+
).new(*args)
|
13
|
+
end
|
14
|
+
|
15
|
+
def validate
|
16
|
+
@validator.valid? || raise(@validator.error)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Attribool::Validators
|
4
|
+
class ConditionValidator
|
5
|
+
def initialize(condition)
|
6
|
+
@condition = condition
|
7
|
+
end
|
8
|
+
|
9
|
+
def valid?
|
10
|
+
@condition.nil? || @condition.is_a?(Proc)
|
11
|
+
end
|
12
|
+
|
13
|
+
def error
|
14
|
+
ArgumentError.new("Condition is not a proc")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -4,11 +4,10 @@ module Attribool::Validators
|
|
4
4
|
##
|
5
5
|
# Ensures that if multiple attributes are being defined, and +method_name+
|
6
6
|
# is provided, that +method_name+ is a +Proc+.
|
7
|
-
class MethodNameValidator
|
7
|
+
class MethodNameValidator
|
8
8
|
def initialize(method_name, number_of_attributes)
|
9
9
|
@method_name = method_name
|
10
10
|
@number_of_attributes = number_of_attributes
|
11
|
-
super
|
12
11
|
end
|
13
12
|
|
14
13
|
def valid?
|
@@ -1,12 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Attribool::Validators
|
4
|
-
class NilAttributeValidator
|
4
|
+
class NilAttributeValidator
|
5
5
|
def initialize(ivar, value, allow_nil)
|
6
6
|
@ivar = ivar
|
7
7
|
@value = value
|
8
8
|
@allow_nil = allow_nil
|
9
|
-
super
|
10
9
|
end
|
11
10
|
|
12
11
|
def valid?
|
@@ -1,11 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Attribool::Validators
|
4
|
-
class StrictBooleanValidator
|
4
|
+
class StrictBooleanValidator
|
5
5
|
def initialize(value, strict)
|
6
6
|
@value = value
|
7
7
|
@strict = strict
|
8
|
-
super
|
9
8
|
end
|
10
9
|
|
11
10
|
def valid?
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Attribool
|
4
|
+
class Value
|
5
|
+
def initialize(value, condition = nil)
|
6
|
+
ValidatorService.call(:condition, condition)
|
7
|
+
@value = value
|
8
|
+
@condition = condition
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_boolean
|
12
|
+
!!(@condition ? @condition.call(@value) : @value)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/attribool/version.rb
CHANGED
data/lib/attribool.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "attribool/version"
|
4
|
+
require_relative "attribool/value"
|
4
5
|
require_relative "attribool/attribute"
|
5
6
|
require_relative "attribool/reader_name"
|
6
7
|
require_relative "attribool/attribute_list"
|
7
|
-
require_relative "attribool/
|
8
|
+
require_relative "attribool/validator_service"
|
9
|
+
require_relative "attribool/validators/condition_validator"
|
8
10
|
require_relative "attribool/validators/method_name_validator"
|
9
11
|
require_relative "attribool/validators/nil_attribute_validator"
|
10
12
|
require_relative "attribool/validators/strict_boolean_validator"
|
@@ -40,14 +42,14 @@ module Attribool
|
|
40
42
|
#
|
41
43
|
# @kwarg [Symbol, String, Proc] method_name
|
42
44
|
def bool_reader(*attributes, allow_nil: true, method_name: nil, condition: nil)
|
43
|
-
|
45
|
+
ValidatorService.call(:method_name, method_name, attributes.size)
|
44
46
|
|
45
47
|
AttributeList.new(*attributes, method_name: method_name).each do |attribute|
|
46
48
|
define_method(attribute.reader) do
|
47
49
|
instance_variable_get(attribute.ivar).then do |value|
|
48
|
-
|
50
|
+
ValidatorService.call(:nil_attribute, attribute.ivar, value, allow_nil)
|
49
51
|
|
50
|
-
|
52
|
+
Value.new(value, condition).to_boolean
|
51
53
|
end
|
52
54
|
end
|
53
55
|
end
|
@@ -63,9 +65,9 @@ module Attribool
|
|
63
65
|
def bool_writer(*attributes, strict: false)
|
64
66
|
AttributeList.new(*attributes).each do |attribute|
|
65
67
|
define_method(attribute.writer) do |value|
|
66
|
-
|
68
|
+
ValidatorService.call(:strict_boolean, value, strict)
|
67
69
|
|
68
|
-
instance_variable_set(attribute.ivar,
|
70
|
+
instance_variable_set(attribute.ivar, Value.new(value).to_boolean)
|
69
71
|
end
|
70
72
|
end
|
71
73
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: attribool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evan Gray
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: pry
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rake
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -96,10 +110,12 @@ files:
|
|
96
110
|
- lib/attribool/attribute.rb
|
97
111
|
- lib/attribool/attribute_list.rb
|
98
112
|
- lib/attribool/reader_name.rb
|
113
|
+
- lib/attribool/validator_service.rb
|
114
|
+
- lib/attribool/validators/condition_validator.rb
|
99
115
|
- lib/attribool/validators/method_name_validator.rb
|
100
116
|
- lib/attribool/validators/nil_attribute_validator.rb
|
101
117
|
- lib/attribool/validators/strict_boolean_validator.rb
|
102
|
-
- lib/attribool/
|
118
|
+
- lib/attribool/value.rb
|
103
119
|
- lib/attribool/version.rb
|
104
120
|
homepage: https://github.com/evanthegrayt/attribool
|
105
121
|
licenses:
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Attribool::Validators
|
4
|
-
class Validator
|
5
|
-
def self.validate(*args)
|
6
|
-
new(*args).validate
|
7
|
-
end
|
8
|
-
|
9
|
-
def initialize(*)
|
10
|
-
raise "#{self.class} is an abstract class" if base_class?
|
11
|
-
end
|
12
|
-
|
13
|
-
def validate
|
14
|
-
valid? || raise(error)
|
15
|
-
end
|
16
|
-
|
17
|
-
def valid?
|
18
|
-
raise NoMethodError, "Validator must implement `valid?'"
|
19
|
-
end
|
20
|
-
|
21
|
-
def error
|
22
|
-
raise NoMethodError, "Validator must implement `error'"
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def base_class?
|
28
|
-
instance_of?(Attribool::Validators::Validator)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|