Class: ForestAdminDatasourceCustomizer::DSL::ExecutionContext

Inherits:
Object
  • Object
show all
Defined in:
lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb

Overview

ExecutionContext provides a cleaner API for action execution blocks It wraps the context and result_builder to provide direct access to common methods

Examples:

collection.action :export do
  execute do
    format = form_value(:format)
    data = generate_export(format)
    file content: data, name: "export.#{format}"
  end
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(context, result_builder) ⇒ ExecutionContext

Returns a new instance of ExecutionContext.



19
20
21
22
23
# File 'lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb', line 19

def initialize(context, result_builder)
  @context = context
  @result_builder = result_builder
  @result = nil
end

Instance Attribute Details

#contextObject (readonly)

Returns the value of attribute context.



17
18
19
# File 'lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb', line 17

def context
  @context
end

#resultObject (readonly)

Returns the value of attribute result.



17
18
19
# File 'lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb', line 17

def result
  @result
end

#result_builderObject (readonly)

Returns the value of attribute result_builder.



17
18
19
# File 'lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb', line 17

def result_builder
  @result_builder
end

Instance Method Details

#callerObject

Access caller information (user, permissions, etc.)

Returns:

  • (Object)

    the caller context



54
55
56
# File 'lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb', line 54

def caller
  @context.caller
end

#datasourceObject

Access the datasource for querying other collections

Returns:

  • (Object)

    the datasource



48
49
50
# File 'lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb', line 48

def datasource
  @context.datasource
end

#error(message = 'Error', html: nil) ⇒ Hash

Return an error result

Parameters:

  • message (String) (defaults to: 'Error')

    error message

  • html (String) (defaults to: nil)

    optional HTML content

Returns:

  • (Hash)

    the error result



78
79
80
81
82
83
84
85
86
# File 'lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb', line 78

def error(message = 'Error', html: nil)
  options = {}
  options[:html] = html if html

  @result = @result_builder.error(
    message: message,
    options: options
  )
end

#file(content:, name: 'file', mime_type: 'application/octet-stream') ⇒ Hash

Return a file download result

Parameters:

  • content (String)

    file content

  • name (String) (defaults to: 'file')

    file name

  • mime_type (String) (defaults to: 'application/octet-stream')

    MIME type

Returns:

  • (Hash)

    the file result



93
94
95
96
97
98
99
# File 'lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb', line 93

def file(content:, name: 'file', mime_type: 'application/octet-stream')
  @result = @result_builder.file(
    content: content,
    name: name,
    mime_type: mime_type
  )
end

#form_value(key) ⇒ Object

Access form values by field name

Parameters:

  • key (String, Symbol)

    the field name

Returns:

  • (Object)

    the form field value



28
29
30
# File 'lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb', line 28

def form_value(key)
  @context.get_form_value(key.to_s)
end

#record(fields = []) ⇒ Hash

Get a single record (for single actions)

Parameters:

  • fields (Array<String>) (defaults to: [])

    fields to retrieve

Returns:

  • (Hash)

    the record



35
36
37
# File 'lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb', line 35

def record(fields = [])
  @context.get_record(fields)
end

#records(fields = []) ⇒ Array<Hash>

Get multiple records (for bulk actions)

Parameters:

  • fields (Array<String>) (defaults to: [])

    fields to retrieve

Returns:

  • (Array<Hash>)

    the records



42
43
44
# File 'lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb', line 42

def records(fields = [])
  @context.get_records(fields)
end

#redirect(path) ⇒ Hash

Return a redirect result

Parameters:

  • path (String)

    redirect path

Returns:

  • (Hash)

    the redirect result



119
120
121
# File 'lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb', line 119

def redirect(path)
  @result = @result_builder.redirect_to(path: path)
end

#success(message = 'Success', invalidated: nil, html: nil) ⇒ Hash

Return a success result

Parameters:

  • message (String) (defaults to: 'Success')

    success message

  • invalidated (Array<String>) (defaults to: nil)

    collections to invalidate

  • html (String) (defaults to: nil)

    optional HTML content

Returns:

  • (Hash)

    the success result



63
64
65
66
67
68
69
70
71
72
# File 'lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb', line 63

def success(message = 'Success', invalidated: nil, html: nil)
  options = {}
  options[:invalidated] = invalidated if invalidated && !invalidated.empty?
  options[:html] = html if html

  @result = @result_builder.success(
    message: message,
    options: options
  )
end

#webhook(url, method: 'POST', headers: {}, body: {}) ⇒ Hash

Return a webhook result

Parameters:

  • url (String)

    webhook URL

  • method (String) (defaults to: 'POST')

    HTTP method

  • headers (Hash) (defaults to: {})

    HTTP headers

  • body (Hash) (defaults to: {})

    request body

Returns:

  • (Hash)

    the webhook result



107
108
109
110
111
112
113
114
# File 'lib/forest_admin_datasource_customizer/dsl/context/execution_context.rb', line 107

def webhook(url, method: 'POST', headers: {}, body: {})
  @result = @result_builder.webhook(
    url: url,
    method: method,
    headers: headers,
    body: body
  )
end