Module: Legion::Extensions::Lex::Runners::Extension

Includes:
Helpers::Lex
Defined in:
lib/legion/extensions/lex/runners/extension.rb

Instance Method Summary collapse

Instance Method Details

#create(name:, namespace:, active: true, **opts) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/legion/extensions/lex/runners/extension.rb', line 10

def create(name:, namespace:, active: true, **opts)
  existing = find_cached_extension(name)
  return update(extension_id: existing.values[:id], namespace: namespace, active: active, **opts) if existing # rubocop:disable Legion/Extension/RunnerReturnHash

  insert = { name: name, namespace: namespace, active: active }
  insert[:exchange] = opts.fetch(:exchange, name)
  insert[:uri] = opts.fetch(:uri, name)
  id = Legion::Data::Model::Extension.insert(insert)
  reload_static_caches
  { success: true, extension_id: id }
end

#delete(extension_id:, **_opts) ⇒ Object



52
53
54
55
56
57
58
59
# File 'lib/legion/extensions/lex/runners/extension.rb', line 52

def delete(extension_id:, **_opts)
  record = Legion::Data::Model::Extension[extension_id]
  return { success: false, reason: 'not found' } if record.nil?

  record.delete
  reload_static_caches
  { success: true, extension_id: extension_id }
end

#get(extension_id: nil, name: nil, namespace: nil, **_opts) ⇒ Object



41
42
43
44
45
46
47
48
49
50
# File 'lib/legion/extensions/lex/runners/extension.rb', line 41

def get(extension_id: nil, name: nil, namespace: nil, **_opts)
  dataset = Legion::Data::Model::Extension
  dataset = dataset.where(id: extension_id) if extension_id
  dataset = dataset.where(name: name) if name
  dataset = dataset.where(namespace: namespace) if namespace
  record = dataset.first
  return { success: false, reason: 'not found' } if record.nil?

  { success: true, values: record.values }
end

#update(extension_id:, **opts) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/legion/extensions/lex/runners/extension.rb', line 22

def update(extension_id:, **opts)
  extension = Legion::Data::Model::Extension[extension_id]
  return { success: false, reason: 'extension not found' } if extension.nil?

  changes = {}
  %i[name namespace active exchange uri].each do |column|
    next unless opts.key?(column)
    next if extension.values[column] == opts[column]

    changes[column] = opts[column]
  end

  return { success: true, changed: false, extension_id: extension_id } if changes.empty?

  extension.update(changes)
  reload_static_caches
  { success: true, changed: true, updates: changes, extension_id: extension_id }
end