Module: Zodra
- Defined in:
- lib/zodra.rb,
lib/zodra/action.rb,
lib/zodra/export.rb,
lib/zodra/router.rb,
lib/zodra/railtie.rb,
lib/zodra/variant.rb,
lib/zodra/version.rb,
lib/zodra/contract.rb,
lib/zodra/resource.rb,
lib/zodra/attribute.rb,
lib/zodra/controller.rb,
lib/zodra/definition.rb,
lib/zodra/api_builder.rb,
lib/zodra/scalar_type.rb,
lib/zodra/api_registry.rb,
lib/zodra/route_helper.rb,
lib/zodra/type_builder.rb,
lib/zodra/type_deriver.rb,
lib/zodra/configuration.rb,
lib/zodra/export/writer.rb,
lib/zodra/params_parser.rb,
lib/zodra/type_registry.rb,
lib/zodra/union_builder.rb,
lib/zodra/action_builder.rb,
lib/zodra/api_definition.rb,
lib/zodra/params_coercer.rb,
lib/zodra/scalar_registry.rb,
lib/zodra/variant_builder.rb,
lib/zodra/contract_builder.rb,
lib/zodra/params_validator.rb,
lib/zodra/resource_builder.rb,
lib/zodra/contract_registry.rb,
lib/zodra/export/zod_mapper.rb,
lib/zodra/response_serializer.rb,
lib/zodra/export/type_analysis.rb,
lib/zodra/export/contract_mapper.rb,
lib/zodra/export/surface_resolver.rb,
lib/zodra/export/type_script_mapper.rb,
lib/generators/zodra/install_generator.rb
Defined Under Namespace
Modules: Controller, Export, ParamsCoercer, ParamsParser, ParamsValidator, ResponseSerializer, RouteHelper
Classes: Action, ActionBuilder, ApiBuilder, ApiDefinition, ApiRegistry, Attribute, Configuration, ConfigurationError, Contract, ContractBuilder, ContractRegistry, Definition, DuplicateTypeError, Error, InstallGenerator, ParamsError, Railtie, Resource, ResourceBuilder, Router, ScalarRegistry, ScalarType, TypeBuilder, TypeDeriver, TypeRegistry, UnionBuilder, Variant, VariantBuilder
Constant Summary
collapse
- VERSION =
'0.1.0'
Class Attribute Summary collapse
Class Method Summary
collapse
-
.api(base_path, &block) ⇒ Object
-
.configuration ⇒ Object
-
.configure {|configuration| ... } ⇒ Object
-
.contract(name, &block) ⇒ Object
-
.enum(name, values:) ⇒ Object
-
.load_definitions! ⇒ Object
-
.resolve_routes! ⇒ Object
-
.scalar(name, base:, &coercer) ⇒ Object
-
.type(name, from: nil, pick: nil, omit: nil, partial: false, &block) ⇒ Object
-
.union(name, discriminator:, &block) ⇒ Object
Class Attribute Details
.logger ⇒ Object
21
22
23
|
# File 'lib/zodra.rb', line 21
def logger
@logger || (defined?(Rails) ? Rails.logger : nil)
end
|
Class Method Details
.api(base_path, &block) ⇒ Object
63
64
65
66
67
|
# File 'lib/zodra.rb', line 63
def api(base_path, &block)
api_definition = ApiRegistry.global.register(base_path)
ApiBuilder.new(api_definition).instance_eval(&block) if block
api_definition
end
|
.configuration ⇒ Object
27
28
29
|
# File 'lib/zodra.rb', line 27
def configuration
@configuration ||= Configuration.new
end
|
31
32
33
|
# File 'lib/zodra.rb', line 31
def configure
yield configuration
end
|
.contract(name, &block) ⇒ Object
.enum(name, values:) ⇒ Object
47
48
49
|
# File 'lib/zodra.rb', line 47
def enum(name, values:)
TypeRegistry.global.register(name, kind: :enum, values:)
end
|
.load_definitions! ⇒ Object
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/zodra.rb', line 73
def load_definitions!
return unless defined?(Rails)
ScalarRegistry.global.clear!
TypeRegistry.global.clear!
ContractRegistry.global.clear!
ApiRegistry.global.clear!
load_definition_dir(Rails.root.join('app/types'))
load_definition_dir(Rails.root.join('app/contracts'))
load_definition_dir(Rails.root.join('config/apis'))
resolve_routes!
end
|
.resolve_routes! ⇒ Object
88
89
90
91
92
93
94
|
# File 'lib/zodra.rb', line 88
def resolve_routes!
ApiRegistry.global.each do |api_definition|
api_definition.resources.each do |resource|
resolve_resource_routes(resource, api_definition.base_path)
end
end
end
|
.scalar(name, base:, &coercer) ⇒ Object
69
70
71
|
# File 'lib/zodra.rb', line 69
def scalar(name, base:, &coercer)
ScalarRegistry.global.register(name, base:, coercer:)
end
|
.type(name, from: nil, pick: nil, omit: nil, partial: false, &block) ⇒ Object
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/zodra.rb', line 35
def type(name, from: nil, pick: nil, omit: nil, partial: false, &block)
definition = TypeRegistry.global.register(name, kind: :object)
if from
source = TypeRegistry.global.find!(from)
TypeDeriver.new(source, pick:, omit:, partial:).apply(definition)
end
TypeBuilder.new(definition).instance_eval(&block) if block
definition
end
|
.union(name, discriminator:, &block) ⇒ Object
51
52
53
54
55
|
# File 'lib/zodra.rb', line 51
def union(name, discriminator:, &block)
definition = TypeRegistry.global.register(name, kind: :union, discriminator:)
UnionBuilder.new(definition).instance_eval(&block) if block
definition
end
|