Class: CardDB::Resources::ScanTemplates

Inherits:
Base
  • Object
show all
Defined in:
lib/carddb/resources/scan_templates.rb

Overview

Scan template resource for publisher-managed scan layouts.

Constant Summary collapse

SCOPE_KEY_MAP =
{
  publisher_slug: 'publisherSlug',
  game_key: 'gameKey',
  dataset_key: 'datasetKey',
  template_id: 'templateId',
  include_archived: 'includeArchived'
}.freeze
TEMPLATE_KEY_MAP =
SCOPE_KEY_MAP.merge(
  is_default: 'isDefault',
  example_file_id: 'exampleFileId',
  card_aspect_ratio: 'cardAspectRatio',
  region_ocr_hints: 'regionOcrHints'
).freeze
REGION_KEY_MAP =
{
  sort_order: 'sortOrder',
  shape_type: 'shapeType',
  semantic_type: 'semanticType',
  extraction_mode: 'extractionMode',
  lookup_mode: 'lookupMode',
  is_required: 'isRequired'
}.freeze

Instance Attribute Summary

Attributes inherited from Base

#client, #config, #connection

Instance Method Summary collapse

Methods inherited from Base

#initialize

Constructor Details

This class inherits a constructor from CardDB::Resources::Base

Instance Method Details

#create(input = nil, **params) ⇒ Object

Create a publisher-managed scan template. Requires a server-side secret credential.



56
57
58
59
60
61
62
63
# File 'lib/carddb/resources/scan_templates.rb', line 56

def create(input = nil, **params)
  config.require_secret_credential!('scan_templates.create')

  request = template_input(coerce_input(input, params))
  data = connection.execute(QueryBuilder.create_scan_template, { input: request })

  ScanTemplatePayload.new(data['createScanTemplate'], client: client)
end

#list(input = nil, **params) ⇒ Object

List publisher-managed scan templates for a game or dataset scope.



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/carddb/resources/scan_templates.rb', line 43

def list(input = nil, **params)
  request = scoped_input(graphql_input(coerce_input(input, params), SCOPE_KEY_MAP))
  key = cache_key('scan_templates', 'list', **request)

  with_cache(key, resource: :scan_templates, cache: params[:cache]) do
    data = connection.execute(QueryBuilder.scan_templates, { input: request })
    (data.dig('scanTemplates', 'templates') || []).map do |template|
      ScanTemplate.new(template, client: client)
    end
  end
end

#preview(input = nil, **params) ⇒ Object

Validate a draft scan template and normalize provided region OCR hints.



79
80
81
82
83
84
# File 'lib/carddb/resources/scan_templates.rb', line 79

def preview(input = nil, **params)
  request = template_input(coerce_input(input, params))
  data = connection.execute(QueryBuilder.preview_scan_template, { input: request })

  ScanTemplatePreview.new(data['previewScanTemplate'], client: client)
end

#resolve(input = nil, **params) ⇒ Object

Resolve the active scan template for a game or dataset scope.



32
33
34
35
36
37
38
39
40
# File 'lib/carddb/resources/scan_templates.rb', line 32

def resolve(input = nil, **params)
  request = scoped_input(graphql_input(coerce_input(input, params), SCOPE_KEY_MAP))
  key = cache_key('scan_templates', 'resolve', **request)

  with_cache(key, resource: :scan_templates, cache: params[:cache]) do
    data = connection.execute(QueryBuilder.resolve_scan_template, { input: request })
    ScanTemplateResolution.new(data['resolveScanTemplate'], client: client)
  end
end

#update(id = nil, input = nil, **params) ⇒ Object

Replace a publisher-managed scan template. Requires a server-side secret credential.

Raises:

  • (ArgumentError)


66
67
68
69
70
71
72
73
74
75
76
# File 'lib/carddb/resources/scan_templates.rb', line 66

def update(id = nil, input = nil, **params)
  config.require_secret_credential!('scan_templates.update')

  id, request_source = update_args(id, input, params)
  raise ArgumentError, 'scan template id is required' unless id

  request = template_input(request_source)
  data = connection.execute(QueryBuilder.update_scan_template, { id: id, input: request })

  ScanTemplatePayload.new(data['updateScanTemplate'], client: client)
end