Class: Airview::Resource

Inherits:
Object
  • Object
show all
Defined in:
lib/airview/resource.rb,
sig/airview.rbs

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key, model:) ⇒ Resource

Returns a new instance of Resource.

Parameters:

  • key (Symbol, String)
  • model: (String)


8
9
10
11
12
13
14
# File 'lib/airview/resource.rb', line 8

def initialize(key, model:)
  @key = key.to_sym
  @model = model
  @label = key.to_s.humanize
  @label_method = :to_s
  @fields = {}
end

Instance Attribute Details

#fieldsHash[Symbol, Field] (readonly)

Returns the value of attribute fields.

Returns:



6
7
8
# File 'lib/airview/resource.rb', line 6

def fields
  @fields
end

#keySymbol (readonly)

Returns the value of attribute key.

Returns:

  • (Symbol)


6
7
8
# File 'lib/airview/resource.rb', line 6

def key
  @key
end

#labelString

Returns the value of attribute label.

Returns:

  • (String)


5
6
7
# File 'lib/airview/resource.rb', line 5

def label
  @label
end

#label_methodSymbol

Returns the value of attribute label_method.

Returns:

  • (Symbol)


5
6
7
# File 'lib/airview/resource.rb', line 5

def label_method
  @label_method
end

#modelString (readonly)

Returns the value of attribute model.

Returns:

  • (String)


6
7
8
# File 'lib/airview/resource.rb', line 6

def model
  @model
end

Instance Method Details

#default_fieldsObject



37
38
39
# File 'lib/airview/resource.rb', line 37

def default_fields
  fields.values.select(&:default_visible?)
end

#editable_fieldsArray[Field]

Returns:



33
34
35
# File 'lib/airview/resource.rb', line 33

def editable_fields
  fields.values.select(&:editable?)
end

#field(name, type:, label: nil, **options) ⇒ Field

Parameters:

  • name (Symbol, String)
  • type: (Symbol, String)
  • label: (String, nil) (defaults to: nil)
  • options (Object)

Returns:



16
17
18
19
20
21
# File 'lib/airview/resource.rb', line 16

def field(name, type:, label: nil, **options)
  definition = Field.new(name, type:, label:, **options)
  definition.validate!
  fields[definition.name] = definition
  definition
end

#field!(name) ⇒ Field

Parameters:

  • name (Symbol, String)

Returns:



27
28
29
30
31
# File 'lib/airview/resource.rb', line 27

def field!(name)
  fields.fetch(name.to_sym) do
    raise ConfigurationError, "Unknown Airview field #{name.inspect} for #{key}"
  end
end

#model_classObject

Returns:

  • (Object)


23
24
25
# File 'lib/airview/resource.rb', line 23

def model_class
  model.to_s.constantize
end

#record_label(record) ⇒ String

Parameters:

  • record (Object)

Returns:

  • (String)


47
48
49
# File 'lib/airview/resource.rb', line 47

def record_label(record)
  Airview.record_label(record, label_method)
end

#validate!void

This method returns an undefined value.

Raises:



41
42
43
44
45
# File 'lib/airview/resource.rb', line 41

def validate!
  raise ConfigurationError, "Airview resource #{key} must define at least one field" if fields.empty?

  fields.each_value(&:validate!)
end