Class: ActsAsTable::Record

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/acts_as_table/record.rb

Overview

ActsAsTable record.

Instance Attribute Summary collapse

Belongs to collapse

Has many collapse

Instance Attribute Details

#positionInteger

Returns the position of this ActsAsTable record.

Returns:

  • (Integer)


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'app/models/acts_as_table/record.rb', line 20

class Record < ::ActiveRecord::Base
  # @!parse
  #   include ActsAsTable::ValueProvider
  #   include ActsAsTable::ValueProviderAssociationMethods

  self.table_name = ActsAsTable.records_table

  # Returns the record for this ActsAsTable record or `nil`.
  #
  # @return [ActiveRecord::Base, nil]
  belongs_to :base, **{
    polymorphic: true,
    required: false,
  }

  # Returns the ActsAsTable record model for this ActsAsTable record.
  belongs_to :record_model, **{
    class_name: 'ActsAsTable::RecordModel',
    inverse_of: :records,
    required: true,
  }

  # Returns the ActsAsTable table for this ActsAsTable record.
  belongs_to :table, **{
    class_name: 'ActsAsTable::Table',
    counter_cache: 'records_count',
    inverse_of: :records,
    required: true,
  }

  # Returns the ActsAsTable record errors for this ActsAsTable record.
  has_many :record_errors, -> { order(attribute_name: :asc, message: :asc) }, **{
    autosave: true,
    class_name: 'ActsAsTable::RecordError',
    dependent: :destroy,
    foreign_key: 'record_id',
    inverse_of: :record,
    validate: true,
  }

  # Returns the ActsAsTable values for this ActsAsTable record.
  has_many :values, -> { order(position: :asc) }, **{
    autosave: true,
    class_name: 'ActsAsTable::Value',
    dependent: :destroy,
    foreign_key: 'record_id',
    inverse_of: :record,
    validate: true,
  }

  validates :position, **{
    numericality: {
      greater_than_or_equal_to: 1,
      only_integer: true,
    },
    presence: true,
    uniqueness: {
      scope: ['table_id', 'record_model_id'],
    },
  }

  # validates :record_model_changed, **{}

  validate :base_must_be_valid_class, :record_model_must_belong_to_row_model_for_table, **{
    if: ::Proc.new { |record| record.record_model.present? },
  }

  private

  # @return [void]
  def base_must_be_valid_class
    self.base_type.try { |base_type|
      unless base_type.nil? || base_type.eql?(self.record_model.class_name)
        self.errors.add('base_type', :invalid)
      end
    }
  end

  # @return [void]
  def record_model_must_belong_to_row_model_for_table
    self.table.try(:row_model).try(:record_models).try { |record_models|
      unless record_models.include?(self.record_model)
        self.errors.add('record_model_id', :invalid)
      end
    }

    return
  end
end

#record_errors_countInteger (readonly)

Returns the number of ActsAsTable record errors for this ActsAsTable record.

Returns:

  • (Integer)


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'app/models/acts_as_table/record.rb', line 20

class Record < ::ActiveRecord::Base
  # @!parse
  #   include ActsAsTable::ValueProvider
  #   include ActsAsTable::ValueProviderAssociationMethods

  self.table_name = ActsAsTable.records_table

  # Returns the record for this ActsAsTable record or `nil`.
  #
  # @return [ActiveRecord::Base, nil]
  belongs_to :base, **{
    polymorphic: true,
    required: false,
  }

  # Returns the ActsAsTable record model for this ActsAsTable record.
  belongs_to :record_model, **{
    class_name: 'ActsAsTable::RecordModel',
    inverse_of: :records,
    required: true,
  }

  # Returns the ActsAsTable table for this ActsAsTable record.
  belongs_to :table, **{
    class_name: 'ActsAsTable::Table',
    counter_cache: 'records_count',
    inverse_of: :records,
    required: true,
  }

  # Returns the ActsAsTable record errors for this ActsAsTable record.
  has_many :record_errors, -> { order(attribute_name: :asc, message: :asc) }, **{
    autosave: true,
    class_name: 'ActsAsTable::RecordError',
    dependent: :destroy,
    foreign_key: 'record_id',
    inverse_of: :record,
    validate: true,
  }

  # Returns the ActsAsTable values for this ActsAsTable record.
  has_many :values, -> { order(position: :asc) }, **{
    autosave: true,
    class_name: 'ActsAsTable::Value',
    dependent: :destroy,
    foreign_key: 'record_id',
    inverse_of: :record,
    validate: true,
  }

  validates :position, **{
    numericality: {
      greater_than_or_equal_to: 1,
      only_integer: true,
    },
    presence: true,
    uniqueness: {
      scope: ['table_id', 'record_model_id'],
    },
  }

  # validates :record_model_changed, **{}

  validate :base_must_be_valid_class, :record_model_must_belong_to_row_model_for_table, **{
    if: ::Proc.new { |record| record.record_model.present? },
  }

  private

  # @return [void]
  def base_must_be_valid_class
    self.base_type.try { |base_type|
      unless base_type.nil? || base_type.eql?(self.record_model.class_name)
        self.errors.add('base_type', :invalid)
      end
    }
  end

  # @return [void]
  def record_model_must_belong_to_row_model_for_table
    self.table.try(:row_model).try(:record_models).try { |record_models|
      unless record_models.include?(self.record_model)
        self.errors.add('record_model_id', :invalid)
      end
    }

    return
  end
end

#record_model_changedBoolean

Returns true if the ActsAsTable record model changed the record for this ActsAsTable record. Otherwise, returns false.

Returns:

  • (Boolean)


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'app/models/acts_as_table/record.rb', line 20

class Record < ::ActiveRecord::Base
  # @!parse
  #   include ActsAsTable::ValueProvider
  #   include ActsAsTable::ValueProviderAssociationMethods

  self.table_name = ActsAsTable.records_table

  # Returns the record for this ActsAsTable record or `nil`.
  #
  # @return [ActiveRecord::Base, nil]
  belongs_to :base, **{
    polymorphic: true,
    required: false,
  }

  # Returns the ActsAsTable record model for this ActsAsTable record.
  belongs_to :record_model, **{
    class_name: 'ActsAsTable::RecordModel',
    inverse_of: :records,
    required: true,
  }

  # Returns the ActsAsTable table for this ActsAsTable record.
  belongs_to :table, **{
    class_name: 'ActsAsTable::Table',
    counter_cache: 'records_count',
    inverse_of: :records,
    required: true,
  }

  # Returns the ActsAsTable record errors for this ActsAsTable record.
  has_many :record_errors, -> { order(attribute_name: :asc, message: :asc) }, **{
    autosave: true,
    class_name: 'ActsAsTable::RecordError',
    dependent: :destroy,
    foreign_key: 'record_id',
    inverse_of: :record,
    validate: true,
  }

  # Returns the ActsAsTable values for this ActsAsTable record.
  has_many :values, -> { order(position: :asc) }, **{
    autosave: true,
    class_name: 'ActsAsTable::Value',
    dependent: :destroy,
    foreign_key: 'record_id',
    inverse_of: :record,
    validate: true,
  }

  validates :position, **{
    numericality: {
      greater_than_or_equal_to: 1,
      only_integer: true,
    },
    presence: true,
    uniqueness: {
      scope: ['table_id', 'record_model_id'],
    },
  }

  # validates :record_model_changed, **{}

  validate :base_must_be_valid_class, :record_model_must_belong_to_row_model_for_table, **{
    if: ::Proc.new { |record| record.record_model.present? },
  }

  private

  # @return [void]
  def base_must_be_valid_class
    self.base_type.try { |base_type|
      unless base_type.nil? || base_type.eql?(self.record_model.class_name)
        self.errors.add('base_type', :invalid)
      end
    }
  end

  # @return [void]
  def record_model_must_belong_to_row_model_for_table
    self.table.try(:row_model).try(:record_models).try { |record_models|
      unless record_models.include?(self.record_model)
        self.errors.add('record_model_id', :invalid)
      end
    }

    return
  end
end

#values_countInteger (readonly)

Returns the number of ActsAsTable values for this ActsAsTable record.

Returns:

  • (Integer)


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'app/models/acts_as_table/record.rb', line 20

class Record < ::ActiveRecord::Base
  # @!parse
  #   include ActsAsTable::ValueProvider
  #   include ActsAsTable::ValueProviderAssociationMethods

  self.table_name = ActsAsTable.records_table

  # Returns the record for this ActsAsTable record or `nil`.
  #
  # @return [ActiveRecord::Base, nil]
  belongs_to :base, **{
    polymorphic: true,
    required: false,
  }

  # Returns the ActsAsTable record model for this ActsAsTable record.
  belongs_to :record_model, **{
    class_name: 'ActsAsTable::RecordModel',
    inverse_of: :records,
    required: true,
  }

  # Returns the ActsAsTable table for this ActsAsTable record.
  belongs_to :table, **{
    class_name: 'ActsAsTable::Table',
    counter_cache: 'records_count',
    inverse_of: :records,
    required: true,
  }

  # Returns the ActsAsTable record errors for this ActsAsTable record.
  has_many :record_errors, -> { order(attribute_name: :asc, message: :asc) }, **{
    autosave: true,
    class_name: 'ActsAsTable::RecordError',
    dependent: :destroy,
    foreign_key: 'record_id',
    inverse_of: :record,
    validate: true,
  }

  # Returns the ActsAsTable values for this ActsAsTable record.
  has_many :values, -> { order(position: :asc) }, **{
    autosave: true,
    class_name: 'ActsAsTable::Value',
    dependent: :destroy,
    foreign_key: 'record_id',
    inverse_of: :record,
    validate: true,
  }

  validates :position, **{
    numericality: {
      greater_than_or_equal_to: 1,
      only_integer: true,
    },
    presence: true,
    uniqueness: {
      scope: ['table_id', 'record_model_id'],
    },
  }

  # validates :record_model_changed, **{}

  validate :base_must_be_valid_class, :record_model_must_belong_to_row_model_for_table, **{
    if: ::Proc.new { |record| record.record_model.present? },
  }

  private

  # @return [void]
  def base_must_be_valid_class
    self.base_type.try { |base_type|
      unless base_type.nil? || base_type.eql?(self.record_model.class_name)
        self.errors.add('base_type', :invalid)
      end
    }
  end

  # @return [void]
  def record_model_must_belong_to_row_model_for_table
    self.table.try(:row_model).try(:record_models).try { |record_models|
      unless record_models.include?(self.record_model)
        self.errors.add('record_model_id', :invalid)
      end
    }

    return
  end
end

Instance Method Details

#baseActiveRecord::Base?

Returns the record for this ActsAsTable record or nil.

Returns:

  • (ActiveRecord::Base, nil)


30
31
32
33
# File 'app/models/acts_as_table/record.rb', line 30

belongs_to :base, **{
  polymorphic: true,
  required: false,
}

#record_errorsActiveRecord::Relation<ActsAsTable::RecordError>

Returns the ActsAsTable record errors for this ActsAsTable record.

Returns:

See Also:



51
52
53
54
55
56
57
58
# File 'app/models/acts_as_table/record.rb', line 51

has_many :record_errors, -> { order(attribute_name: :asc, message: :asc) }, **{
  autosave: true,
  class_name: 'ActsAsTable::RecordError',
  dependent: :destroy,
  foreign_key: 'record_id',
  inverse_of: :record,
  validate: true,
}

#record_modelActsAsTable::RecordModel

Returns the ActsAsTable record model for this ActsAsTable record.



36
37
38
39
40
# File 'app/models/acts_as_table/record.rb', line 36

belongs_to :record_model, **{
  class_name: 'ActsAsTable::RecordModel',
  inverse_of: :records,
  required: true,
}

#tableActsAsTable::Table

Returns the ActsAsTable table for this ActsAsTable record.



43
44
45
46
47
48
# File 'app/models/acts_as_table/record.rb', line 43

belongs_to :table, **{
  class_name: 'ActsAsTable::Table',
  counter_cache: 'records_count',
  inverse_of: :records,
  required: true,
}

#valuesActiveRecord::Relation<ActsAsTable::Value>

Returns the ActsAsTable values for this ActsAsTable record.

Returns:

See Also:



61
62
63
64
65
66
67
68
# File 'app/models/acts_as_table/record.rb', line 61

has_many :values, -> { order(position: :asc) }, **{
  autosave: true,
  class_name: 'ActsAsTable::Value',
  dependent: :destroy,
  foreign_key: 'record_id',
  inverse_of: :record,
  validate: true,
}