Module: AnkiConnect::Client::Models

Included in:
AnkiConnect::Client
Defined in:
lib/anki_connect/models.rb

Overview

Methods to create and modify note types (models).

Instance Method Summary collapse

Instance Method Details

#add_field(model_name, field_name, index: nil) ⇒ nil

Adds a field to a model.

Parameters:

  • model_name (String)

    Model name

  • field_name (String)

    Field name

  • index (Integer, nil) (defaults to: nil)

    Position (defaults to end)

Returns:

  • (nil)


192
193
194
195
196
# File 'lib/anki_connect/models.rb', line 192

def add_field(model_name, field_name, index: nil)
  params = { modelName: model_name, fieldName: field_name }
  params[:index] = index if index
  request(:modelFieldAdd, **params)
end

#add_template(model_name, template) ⇒ nil

Adds a template to a model.

Parameters:

  • model_name (String)

    Model name

  • template (Hash)

    Template with Name, Front, Back

Returns:

  • (nil)


153
154
155
# File 'lib/anki_connect/models.rb', line 153

def add_template(model_name, template)
  request(:modelTemplateAdd, modelName: model_name, template: template)
end

#create_model(name:, fields:, templates:, css: nil, is_cloze: false) ⇒ Hash

Creates a new model.

Parameters:

  • name (String)

    Model name

  • fields (Array<String>)

    Field names in order

  • templates (Array<Hash>)

    Template objects with Name, Front, Back

  • css (String, nil) (defaults to: nil)

    CSS styling

  • is_cloze (Boolean) (defaults to: false)

    true for cloze type

Returns:

  • (Hash)

    Complete model object



77
78
79
80
81
# File 'lib/anki_connect/models.rb', line 77

def create_model(name:, fields:, templates:, css: nil, is_cloze: false)
  params = { modelName: name, inOrderFields: fields, cardTemplates: templates, isCloze: is_cloze }
  params[:css] = css if css
  request(:createModel, **params)
end

#find_and_replace_in_model(model_name:, find:, replace:, front: true, back: true, css: true) ⇒ Integer

Find and replace in model templates/CSS.

Parameters:

  • model_name (String)

    Model name

  • find (String)

    Text to find

  • replace (String)

    Replacement text

  • front (Boolean) (defaults to: true)

    Search front templates

  • back (Boolean) (defaults to: true)

    Search back templates

  • css (Boolean) (defaults to: true)

    Search CSS

Returns:

  • (Integer)

    Number of replacements made



121
122
123
124
125
126
# File 'lib/anki_connect/models.rb', line 121

def find_and_replace_in_model(model_name:, find:, replace:, front: true, back: true, css: true)
  request(:findAndReplaceInModels, model: {
            modelName: model_name, findText: find, replaceText: replace,
            front: front, back: back, css: css
          })
end

#get_field_descriptions(model_name) ⇒ Array<String>

Gets field descriptions for a model.

Parameters:

  • model_name (String)

    Model name

Returns:

  • (Array<String>)

    Array of description strings



49
50
51
# File 'lib/anki_connect/models.rb', line 49

def get_field_descriptions(model_name)
  request(:modelFieldDescriptions, modelName: model_name)
end

#get_field_fonts(model_name) ⇒ Hash

Gets field fonts and sizes for a model.

Parameters:

  • model_name (String)

    Model name

Returns:

  • (Hash)

    Field names mapped to { font:, size: }



57
58
59
# File 'lib/anki_connect/models.rb', line 57

def get_field_fonts(model_name)
  request(:modelFieldFonts, modelName: model_name)
end

#get_field_names(model_name) ⇒ Array<String>

Gets field names for a model.

Parameters:

  • model_name (String)

    Model name

Returns:

  • (Array<String>)

    Array of field names in order



41
42
43
# File 'lib/anki_connect/models.rb', line 41

def get_field_names(model_name)
  request(:modelFieldNames, modelName: model_name)
end

#get_fields_on_templates(model_name) ⇒ Hash

Gets fields used on templates.

Parameters:

  • model_name (String)

    Model name

Returns:

  • (Hash)

    Template names mapped to [questionFields, answerFields]



65
66
67
# File 'lib/anki_connect/models.rb', line 65

def get_fields_on_templates(model_name)
  request(:modelFieldsOnTemplates, modelName: model_name)
end

#get_models_by_id(ids) ⇒ Array<Hash>

Gets models by ID.

Parameters:

  • ids (Array<Integer>)

    Array of model IDs

Returns:

  • (Array<Hash>)

    Array of model objects



25
26
27
# File 'lib/anki_connect/models.rb', line 25

def get_models_by_id(ids)
  request(:findModelsById, modelIds: ids)
end

#get_models_by_name(names) ⇒ Array<Hash>

Gets models by name.

Parameters:

  • names (Array<String>)

    Array of model names

Returns:

  • (Array<Hash>)

    Array of model objects



33
34
35
# File 'lib/anki_connect/models.rb', line 33

def get_models_by_name(names)
  request(:findModelsByName, modelNames: names)
end

#get_styling(model_name) ⇒ Hash

Gets CSS styling for a model.

Parameters:

  • model_name (String)

    Model name

Returns:

  • (Hash)

    Object with css property



95
96
97
# File 'lib/anki_connect/models.rb', line 95

def get_styling(model_name)
  request(:modelStyling, modelName: model_name)
end

#get_templates(model_name) ⇒ Hash

Gets templates for a model.

Parameters:

  • model_name (String)

    Model name

Returns:

  • (Hash)

    Template names mapped to { Front:, Back: }



87
88
89
# File 'lib/anki_connect/models.rb', line 87

def get_templates(model_name)
  request(:modelTemplates, modelName: model_name)
end

#model_namesArray<String>

Gets complete list of model names.

Returns:

  • (Array<String>)

    Array of model name strings



10
11
12
# File 'lib/anki_connect/models.rb', line 10

def model_names
  request(:modelNames)
end

#model_names_and_idsHash

Gets model names with their IDs.

Returns:

  • (Hash)

    Model names mapped to IDs



17
18
19
# File 'lib/anki_connect/models.rb', line 17

def model_names_and_ids
  request(:modelNamesAndIds)
end

#remove_field(model_name, field_name) ⇒ nil

Removes a field from a model.

Parameters:

  • model_name (String)

    Model name

  • field_name (String)

    Field name

Returns:

  • (nil)


203
204
205
# File 'lib/anki_connect/models.rb', line 203

def remove_field(model_name, field_name)
  request(:modelFieldRemove, modelName: model_name, fieldName: field_name)
end

#remove_template(model_name, template_name) ⇒ nil

Removes a template from a model.

Parameters:

  • model_name (String)

    Model name

  • template_name (String)

    Template name

Returns:

  • (nil)


162
163
164
# File 'lib/anki_connect/models.rb', line 162

def remove_template(model_name, template_name)
  request(:modelTemplateRemove, modelName: model_name, templateName: template_name)
end

#rename_field(model_name, from:, to:) ⇒ nil

Renames a field.

Parameters:

  • model_name (String)

    Model name

  • from (String)

    Current field name

  • to (String)

    New field name

Returns:

  • (nil)


172
173
174
# File 'lib/anki_connect/models.rb', line 172

def rename_field(model_name, from:, to:)
  request(:modelFieldRename, modelName: model_name, oldFieldName: from, newFieldName: to)
end

#rename_template(model_name, from:, to:) ⇒ nil

Renames a template.

Parameters:

  • model_name (String)

    Model name

  • from (String)

    Current template name

  • to (String)

    New template name

Returns:

  • (nil)


134
135
136
# File 'lib/anki_connect/models.rb', line 134

def rename_template(model_name, from:, to:)
  request(:modelTemplateRename, modelName: model_name, oldTemplateName: from, newTemplateName: to)
end

#reposition_field(model_name, field_name, index) ⇒ nil

Moves a field to a new position.

Parameters:

  • model_name (String)

    Model name

  • field_name (String)

    Field name

  • index (Integer)

    New position (0-based)

Returns:

  • (nil)


182
183
184
# File 'lib/anki_connect/models.rb', line 182

def reposition_field(model_name, field_name, index)
  request(:modelFieldReposition, modelName: model_name, fieldName: field_name, index: index)
end

#reposition_template(model_name, template_name, index) ⇒ nil

Moves a template to a new position.

Parameters:

  • model_name (String)

    Model name

  • template_name (String)

    Template name

  • index (Integer)

    New position (0-based)

Returns:

  • (nil)


144
145
146
# File 'lib/anki_connect/models.rb', line 144

def reposition_template(model_name, template_name, index)
  request(:modelTemplateReposition, modelName: model_name, templateName: template_name, index: index)
end

#set_field_description(model_name, field_name, description) ⇒ Boolean

Sets description for a field.

Parameters:

  • model_name (String)

    Model name

  • field_name (String)

    Field name

  • description (String)

    Description text

Returns:

  • (Boolean)

    true on success



233
234
235
# File 'lib/anki_connect/models.rb', line 233

def set_field_description(model_name, field_name, description)
  request(:modelFieldSetDescription, modelName: model_name, fieldName: field_name, description: description)
end

#set_field_font(model_name, field_name, font) ⇒ nil

Sets font for a field.

Parameters:

  • model_name (String)

    Model name

  • field_name (String)

    Field name

  • font (String)

    Font name

Returns:

  • (nil)


213
214
215
# File 'lib/anki_connect/models.rb', line 213

def set_field_font(model_name, field_name, font)
  request(:modelFieldSetFont, modelName: model_name, fieldName: field_name, font: font)
end

#set_field_font_size(model_name, field_name, size) ⇒ nil

Sets font size for a field.

Parameters:

  • model_name (String)

    Model name

  • field_name (String)

    Field name

  • size (Integer)

    Font size

Returns:

  • (nil)


223
224
225
# File 'lib/anki_connect/models.rb', line 223

def set_field_font_size(model_name, field_name, size)
  request(:modelFieldSetFontSize, modelName: model_name, fieldName: field_name, fontSize: size)
end

#update_model(name, templates: nil, css: nil) ⇒ nil

Updates a model’s templates and/or CSS.

Parameters:

  • name (String)

    Model name

  • templates (Hash, nil) (defaults to: nil)

    Template names mapped to Front/Back

  • css (String, nil) (defaults to: nil)

    CSS styling

Returns:

  • (nil)


105
106
107
108
109
110
# File 'lib/anki_connect/models.rb', line 105

def update_model(name, templates: nil, css: nil)
  request(:updateModelTemplates, model: { name: name, templates: templates }) if templates
  return unless css

  request(:updateModelStyling, model: { name: name, css: css })
end