Class: IS::YARD::Sequel::FieldsHandler

Inherits:
YARD::Handlers::Ruby::Base
  • Object
show all
Defined in:
lib/yard-is-sequel/fields.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.databaseObject



59
60
61
# File 'lib/yard-is-sequel/fields.rb', line 59

def database
  @database ||= setup_database
end

Instance Method Details

#processObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/yard-is-sequel/fields.rb', line 10

def process
  table_name = statement.parameters.first.jump(:symbol, :string).source.delete(':"\'')
  database = self.class.database
  return unless database
  table_schema = database.schema(table_name)
  return unless table_schema

  table_schema.each do |column_name, info|
    type = [ map_type(info[:db_type]) ]
    type << 'nil' unless info[:allow_null] == false

    object = YARD::CodeObjects::MethodObject.new(namespace, column_name) do |o|
      o.source = statement.source
      o.parameters = []
      o.docstring = 'Sequel data field'
      o.docstring.add_tag YARD::Tags::Tag::new(:return, '', type)
      o.docstring.add_tag YARD::Tags::Tag::new(:sequel_field, '')
      o.is_attribute = true
      o.group = 'Sequel Fields'
    end
    register object
    namespace.attributes[:instance][column_name] = {
      read: object,
      write: object
    }
  end
end