Class: Super::Form::SchemaTypes

Inherits:
Object
  • Object
show all
Defined in:
lib/super/form/schema_types.rb

Defined Under Namespace

Classes: Direct, Generic

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(fields:) ⇒ SchemaTypes

Returns a new instance of SchemaTypes.



96
97
98
# File 'lib/super/form/schema_types.rb', line 96

def initialize(fields:)
  @fields = fields
end

Class Method Details

.define_schema_type_for(method_name) ⇒ Object



144
145
146
147
148
149
150
# File 'lib/super/form/schema_types.rb', line 144

def self.define_schema_type_for(method_name)
  class_eval(<<~RUBY)
    def #{method_name}(*args, **kwargs)
      Direct.new(super_builder: true, method_name: :#{method_name}!, args: args, kwargs: kwargs)
    end
  RUBY
end

Instance Method Details

#_destroy(**extras) ⇒ Object



136
137
138
139
140
141
142
# File 'lib/super/form/schema_types.rb', line 136

def _destroy(**extras)
  Generic.new(
    partial_path: "form_field__destroy",
    extras: extras,
    nested: {}
  )
end

#direct(method_name, *args, super_builder: true, **kwargs) ⇒ Object



104
105
106
# File 'lib/super/form/schema_types.rb', line 104

def direct(method_name, *args, super_builder: true, **kwargs)
  Direct.new(super_builder: super_builder, method_name: method_name, args: args, kwargs: kwargs)
end

#has_many(reader, **extras) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/super/form/schema_types.rb', line 108

def has_many(reader, **extras)
  subfields = Schema::Fields.new
  @fields.nested do
    yield subfields
  end

  Generic.new(
    partial_path: "form_has_many",
    extras: extras.merge(reader: reader),
    nested: subfields.to_h
  )
end

#has_one(reader, **extras) ⇒ Object Also known as: belongs_to



121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/super/form/schema_types.rb', line 121

def has_one(reader, **extras)
  subfields = Schema::Fields.new
  @fields.nested do
    yield subfields
  end

  Generic.new(
    partial_path: "form_has_one",
    extras: extras.merge(reader: reader),
    nested: subfields.to_h
  )
end

#partial(partial_path, **extras) ⇒ Object



100
101
102
# File 'lib/super/form/schema_types.rb', line 100

def partial(partial_path, **extras)
  Generic.new(partial_path: partial_path, extras: extras, nested: {})
end