Class: Hyrax::Forms::ResourceForm

Inherits:
ChangeSet
  • Object
show all
Defined in:
app/forms/hyrax/forms/resource_form.rb

Overview

This form wraps `Hyrax::ChangeSet` in the `HydraEditor::Form` interface.

Defined Under Namespace

Classes: Permission

Constant Summary collapse

InWorksPopulator =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

lambda do |_options|
  self.in_works_ids =
    if persisted?
      Hyrax.query_service
           .find_inverse_references_by(resource: model, property: :member_ids)
           .select(&:work?)
           .map(&:id)
    else
      []
    end
end
LockKeyPopulator =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Note:

includes special handling for Wings, to support compatibility with `etag`-driven, application-side lock checks. for non-wings adapters we want to move away from application side lock validation and rely on the adapter/database features instead.

lambda do |_options|
  self.version =
    case Hyrax.
    when Wings::Valkyrie::MetadataAdapter
      model.persisted? ? Wings::ActiveFedoraConverter.convert(resource: model).etag : ''
    else
      Hyrax.logger.info 'trying to prepopulate a lock token for ' \
                        "#{self.class.inspect}, but optimistic locking isn't " \
                        "supported for the configured adapter: #{Hyrax..class}"
      ''
    end
end

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.for(work) ⇒ Object

Factory for generic, per-work froms

Examples:

monograph  = Monograph.new
change_set = Hyrax::Forms::ResourceForm.for(monograph)

139
140
141
142
143
# File 'app/forms/hyrax/forms/resource_form.rb', line 139

def for(work)
  "#{work.class}Form".constantize.new(work)
rescue NameError => _err
  Hyrax::Forms::ResourceForm(work.class).new(work)
end

.required_fieldsArray<Symbol>

Returns list of required field names as symbols.

Returns:

  • (Array<Symbol>)

    list of required field names as symbols


147
148
149
150
151
# File 'app/forms/hyrax/forms/resource_form.rb', line 147

def required_fields
  definitions
    .select { |_, definition| definition[:required] }
    .keys.map(&:to_sym)
end

.required_fields=(fields) ⇒ Array<Symbol>

Returns list of required field names as symbols.

Parameters:

  • fields (Enumerable<#to_s>)

Returns:

  • (Array<Symbol>)

    list of required field names as symbols

Raises:

  • (KeyError)

157
158
159
160
161
162
163
164
# File 'app/forms/hyrax/forms/resource_form.rb', line 157

def required_fields=(fields)
  fields = fields.map(&:to_s)
  raise(KeyError) unless fields.all? { |f| definitions.key?(f) }

  fields.each { |field| definitions[field].merge!(required: true) }

  required_fields
end

Instance Method Details

#[]=(attr, value) ⇒ Object

Returns the set value.

Parameters:

  • attr (#to_s)
  • value (Object)

Returns:

  • (Object)

    the set value


172
173
174
# File 'app/forms/hyrax/forms/resource_form.rb', line 172

def []=(attr, value)
  public_send("#{attr}=".to_sym, value)
end

#display_additional_fields?Boolean

Returns whether there are terms to display 'below-the-fold'.

Returns:

  • (Boolean)

    whether there are terms to display 'below-the-fold'


203
204
205
# File 'app/forms/hyrax/forms/resource_form.rb', line 203

def display_additional_fields?
  secondary_terms.any?
end

#model_classClass

Deprecated.

use model.class instead

Returns:

  • (Class)

180
181
182
# File 'app/forms/hyrax/forms/resource_form.rb', line 180

def model_class # rubocop:disable Rails/Delegate
  model.class
end

#primary_termsArray<Symbol>

Returns terms for display 'above-the-fold', or in the most prominent form real estate.

Returns:

  • (Array<Symbol>)

    terms for display 'above-the-fold', or in the most prominent form real estate


187
188
189
190
191
# File 'app/forms/hyrax/forms/resource_form.rb', line 187

def primary_terms
  _form_field_definitions
    .select { |_, definition| definition[:primary] }
    .keys.map(&:to_sym)
end

#secondary_termsArray<Symbol>

Returns terms for display 'below-the-fold'.

Returns:

  • (Array<Symbol>)

    terms for display 'below-the-fold'


195
196
197
198
199
# File 'app/forms/hyrax/forms/resource_form.rb', line 195

def secondary_terms
  _form_field_definitions
    .select { |_, definition| definition[:display] && !definition[:primary] }
    .keys.map(&:to_sym)
end