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

Class Attribute Details

.loggerObject



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

.configurationObject



27
28
29
# File 'lib/zodra.rb', line 27

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



31
32
33
# File 'lib/zodra.rb', line 31

def configure
  yield configuration
end

.contract(name, &block) ⇒ Object



57
58
59
60
61
# File 'lib/zodra.rb', line 57

def contract(name, &block)
  contract = ContractRegistry.global.register(name)
  ContractBuilder.new(contract).instance_eval(&block) if block
  contract
end

.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