Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .rspec_status
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,11 @@ example_id | status | run_tim
./spec/castkit/ext/data_object/serialization_spec.rb[1:3:1] | passed | 0.00004 seconds |
./spec/castkit/ext/data_object/serialization_spec.rb[1:4:1] | passed | 0.00003 seconds |
./spec/castkit/ext/data_object/serialization_spec.rb[1:4:2] | passed | 0.00003 seconds |
./spec/castkit/validators/boolean_validator_spec.rb[1:1:1] | passed | 0.00054 seconds |
./spec/castkit/validators/boolean_validator_spec.rb[1:1:2] | passed | 0.00004 seconds |
./spec/castkit/validators/boolean_validator_spec.rb[1:1:3] | passed | 0.00003 seconds |
./spec/castkit/validators/boolean_validator_spec.rb[1:1:4] | passed | 0.00068 seconds |
./spec/castkit/validators/boolean_validator_spec.rb[1:2:1] | passed | 0.00004 seconds |
./spec/castkit/validators/numeric_validator_spec.rb[1:1:1:1] | passed | 0.00005 seconds |
./spec/castkit/validators/numeric_validator_spec.rb[1:1:2:1] | passed | 0.00009 seconds |
./spec/castkit/validators/numeric_validator_spec.rb[1:1:3:1] | passed | 0.00003 seconds |
Expand Down
6 changes: 3 additions & 3 deletions lib/castkit/validators/boolean_validator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ module Validators
# validator.call("true", _options: {}, context: :enabled) # => true
# validator.call("0", _options: {}, context: :enabled) # => false
# validator.call("nope", _options: {}, context: :enabled) # raises Castkit::AttributeError
class BooleanValidator
class BooleanValidator < Castkit::Validators::Base
# Validates the Boolean value.
#
# @param value [Object] the input to validate
# @param _options [Hash] unused, provided for consistency with other validators
# @param options [Hash] unused, provided for consistency with other validators
# @param context [Symbol, String] the attribute name or path for error messages
# @return [Boolean]
# @raise [Castkit::AttributeError] if the value is not a recognizable boolean
def call(value, _options:, context:)
def call(value, options:, context:) # rubocop:disable Lint/UnusedMethodArgument
case value.to_s.downcase
when "true", "1"
true
Expand Down
34 changes: 34 additions & 0 deletions spec/castkit/validators/boolean_validator_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# frozen_string_literal: true

require "spec_helper"
require "castkit/validators/boolean_validator"

RSpec.describe Castkit::Validators::BooleanValidator do
subject(:validator) { described_class.new }

describe "#call" do
it "returns true for truthy strings" do
expect(validator.call("true", options: {}, context: :enabled)).to be(true)
end

it "returns true for actual booleans" do
expect(validator.call(true, options: {}, context: :enabled)).to be(true)
end

it "returns false for falsy numeric strings" do
expect(validator.call("0", options: {}, context: :enabled)).to be(false)
end

it "raises for unrecognized values" do
expect do
validator.call("maybe", options: {}, context: :enabled)
end.to raise_error(Castkit::AttributeError, /enabled must be a boolean/)
end
end

describe ".call" do
it "instantiates and validates via class-level call" do
expect(described_class.call("1", options: {}, context: :enabled)).to be(true)
end
end
end