Class: Valkyrie::ChangeSet

Inherits:
Reform::Form
  • Object
show all
Includes:
Reform::Form::ActiveModel::Validations, Reform::Form::ModelReflections, Reform::Form::ORM
Defined in:
lib/valkyrie/change_set.rb

Overview

Standard change set object for Valkyrie. ChangeSets are a way to group together properties that should be applied to an underlying resource. They are often used for powering HTML Forms or storing virtual attributes for special synchronization with a resource.

Examples:

Define a change set

class BookChangeSet < Valkyrie::ChangeSet
  self.fields = [:title, :author]
  validates :title, presence: true
  property :title, multiple: false, required: true
end

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.fields=(fields) ⇒ Object

Quick setter for fields that should be in a changeset. Defaults to multiple, not required, with an empty array default.

Parameters:

  • fields (Array<Symbol>)


53
54
55
56
57
58
59
60
61
62
63
# File 'lib/valkyrie/change_set.rb', line 53

def self.fields=(fields)
  singleton_class.class_eval do
    remove_possible_method(:fields)
    define_method(:fields) { fields }
  end

  fields.each do |field|
    property field, default: []
  end
  fields
end

Instance Method Details

#[](key) ⇒ Object

Returns value for a given property.

Parameters:

  • key (Symbol)


67
68
69
# File 'lib/valkyrie/change_set.rb', line 67

def [](key)
  send(key) if respond_to?(key)
end

#append_id=(append_id) ⇒ Object

Set ID of record this one should be appended to. We use append_id to add a member/child onto an existing list of members.

Parameters:



29
30
31
# File 'lib/valkyrie/change_set.rb', line 29

def append_id=(append_id)
  super(Valkyrie::ID.new(append_id))
end

#multiple?(field_name) ⇒ Boolean

Returns whether or not a given field has multiple values. Multiple values are useful for fields like creator, author, title, etc. where there may be more than one value for a field that is stored and returned in the UI

Parameters:

  • field_name (Symbol)

Returns:

  • (Boolean)


38
39
40
# File 'lib/valkyrie/change_set.rb', line 38

def multiple?(field_name)
  field(field_name)[:multiple] != false
end

#prepopulate!(_options = {}) ⇒ Object

Prepopulates all fields with defaults defined in the changeset. This is an override of Reform::Form’s method to allow for single-valued fields to prepopulate appropriately.



78
79
80
81
82
83
84
85
# File 'lib/valkyrie/change_set.rb', line 78

def prepopulate!(_options = {})
  self.class.definitions.select { |_field, definition| definition[:multiple] == false }.each_key do |field|
    value = Array.wrap(send(field.to_s)).first
    send("#{field}=", value)
  end
  super
  self
end

#required?(field_name) ⇒ Boolean

Returns whether or not a given field is required. Useful for distinguishing required fields in a form and for validation

Parameters:

  • field_name (Symbol)

Returns:

  • (Boolean)


46
47
48
# File 'lib/valkyrie/change_set.rb', line 46

def required?(field_name)
  field(field_name)[:required] == true
end

#resourceObject



87
88
89
# File 'lib/valkyrie/change_set.rb', line 87

def resource
  model
end

#valid?Boolean

Returns:

  • (Boolean)


91
92
93
94
# File 'lib/valkyrie/change_set.rb', line 91

def valid?
  errors.clear
  super
end