Add null: false option for GraphQL-style non-null semantics#17
Merged
hakanensari merged 2 commits intomainfrom Oct 16, 2025
Merged
Add null: false option for GraphQL-style non-null semantics#17hakanensari merged 2 commits intomainfrom
hakanensari merged 2 commits intomainfrom
Conversation
Implements issue #15 by adding a `null` keyword parameter to both `attribute` and `attribute?` methods. When set to false, Structure will raise an ArgumentError if the coerced value is nil. - attribute(:id, String, null: false) enforces non-null on required keys - attribute?(:name, String, null: false) enforces non-null on optional keys when present (missing keys are allowed) This matches GraphQL's non-null type modifier semantics and makes Structure ideal for parsing GraphQL responses. Changes: - Add @non_nullable Set to Builder to track null: false attributes - Add null: true parameter to attribute and attribute? methods - Add Builder#non_nullable accessor method - Update Structure metadata to include non_nullable - Add validation in parse method after coercion - Add comprehensive test suite (18 tests) - Update RBS type signatures 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Adds a User fixture demonstrating the null: false feature: - id: required + non-null - name: optional + non-null when present - bio: optional + nullable This fixture serves as both a test and documentation of the feature, and ensures Steep type checking works correctly with the new option. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements #15 by adding a
nullkeyword parameter to bothattributeandattribute?methods. When set to false, Structure will raise anArgumentErrorif the coerced value is nil.Usage
Changes
@non_nullableSet to Builder to tracknull: falseattributesnull: trueparameter toattributeandattribute?methodsBuilder#non_nullableaccessor methodnon_nullableDesign Decisions
null: true: Backward compatible, most attributes allow nilattribute?(:name, String, null: false)raises only if key exists but value is nil"cannot be null: :attr"- lowercase, consistent with parse-time errorsTest Coverage
Closes #15
🤖 Generated with Claude Code