Class: HasHelpers::Cards::CardBuilder::DefinitionContext

Inherits:
Object
  • Object
show all
Defined in:
app/models/has_helpers/cards/card_builder/definition_context.rb

Instance Method Summary collapse

Constructor Details

#initialize(owner_class) ⇒ DefinitionContext

Returns a new instance of DefinitionContext.



7
8
9
10
11
12
# File 'app/models/has_helpers/cards/card_builder/definition_context.rb', line 7

def initialize(owner_class)
  @owner_class        = owner_class
  @resource_builder   = ResourceBuilder.new
  @card_builders      = []
  @next_card_position = 10
end

Instance Method Details

#build_eachObject

Builds an array of normalized hashes (one per card).



60
61
62
63
64
65
66
67
68
69
70
# File 'app/models/has_helpers/cards/card_builder/definition_context.rb', line 60

def build_each
  if @resource_builder.resources.empty?
    raise ArgumentError, "At least one resource must be defined with `resources do ... end`"
  end

  if @card_builders.empty?
    raise ArgumentError, "No cards defined in #{@owner_class.name}"
  end

  @card_builders.flat_map(&:build)
end

#card(name, relationship: nil, relationship_klass: nil, identifier: nil, layout:, variant: nil, virtual: false, hover_only: nil, is_customizable: true, default_visibility: true, default_position: nil, scope: nil, icon_name: nil, icon_color: nil, &block) ⇒ Object

DSL:

card "Demographics", relationship: "demographics", identifier: "CardIdentifier::DEMOGRAPHICS", layout: LayoutType::KEY_VALUE, variant: VariantType::EMAILS



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'app/models/has_helpers/cards/card_builder/definition_context.rb', line 33

def card(name, relationship: nil, relationship_klass: nil, identifier: nil, layout:, variant: nil, virtual: false, hover_only: nil, is_customizable: true, default_visibility: true, default_position: nil, scope: nil, icon_name: nil, icon_color: nil, &block)
  default_position ||= next_card_position!

  builder = CardDefinitionBuilder.new(
    name:             name,
    relationship:     relationship,
    relationship_klass:     relationship_klass,
    identifier:       identifier,
    layout:           layout,
    resources:        @resource_builder.resources,
    variant:          variant,
    virtual:          virtual,
    hover_only:       hover_only,
    is_customizable:    is_customizable,
    default_visibility: default_visibility,
    default_position:   default_position,
    scope:              scope,
    icon_name:          icon_name,
    icon_color:         icon_color,
    owner_class:        @owner_class
  )

  builder.instance_eval(&block) if block
  @card_builders << builder
end

#resources(&block) ⇒ Object

DSL:

resources do add Advisor add Client end

Raises:

  • (ArgumentError)


20
21
22
23
24
# File 'app/models/has_helpers/cards/card_builder/definition_context.rb', line 20

def resources(&block)
  raise ArgumentError, "resources block required" unless block

  @resource_builder.instance_eval(&block)
end