This gem registers a model parser with grape-swagger that converts Grape::Entity classes into OpenAPI schema definitions.
lib/grape-swagger/entity/
├── parser.rb # Main parser - converts Entity to OpenAPI schema
├── attribute_parser.rb # Parses individual exposure attributes
├── helper.rb # Utility methods for model naming, discriminators
└── version.rb # Gem version
Entry point for entity parsing. Responsibilities:
- Extract exposures from Grape::Entity
- Handle nested entities and
using:references - Process
merge: trueexposures - Handle inheritance with
allOfand discriminators - Determine required fields
Converts individual exposure options to OpenAPI property schema:
- Maps Ruby types to OpenAPI types
- Handles arrays (
is_array: true) - Processes enums (
values:) - Adds constraints (min/max, minLength/maxLength)
Utilities for:
- Model name resolution (strips Entity/Entities suffix)
- Discriminator detection for inheritance
- Root exposure extraction
Grape::Entity class
│
▼
Parser.call
│
├── extract_params (get exposures)
│
├── parse_grape_entity_params
│ │
│ ├── AttributeParser (per exposure)
│ │
│ └── parse_nested (for nested blocks)
│
└── handle_discriminator (inheritance)
│
▼
[properties_hash, required_array]
Registered with grape-swagger in lib/grape-swagger/entity.rb:
GrapeSwagger.model_parsers.register(GrapeSwagger::Entity::Parser, Grape::Entity)grape-swagger calls Parser.new(model, endpoint).call when it encounters a Grape::Entity subclass.