module Qiita::Team::Services::Hooks::Concerns::Persistable

Public Class Methods

new(hash) click to toggle source

@param hash [Hash{String => Object}] deserialized properties hash.

# File lib/qiita/team/services/hooks/concerns/persistable.rb, line 35
def initialize(hash)
  self.class.service_properties.each do |property|
    if hash.key?(property.name)
      public_send("#{property.name}=", hash[property.name])
    else
      public_send("#{property.name}=", property.default)
    end
  end
end

Public Instance Methods

define_property(name, type: :string, default: nil) click to toggle source

@param name [Symbol] @param type [Symbol] :string or :boolean. @param default [String, true, false] @return [void]

# File lib/qiita/team/services/hooks/concerns/persistable.rb, line 28
def define_property(name, type: :string, default: nil)
  service_properties << Properties.create(name, type, default)
  attr_accessor name
end
marked_for_destruction?() click to toggle source

Returns whether or not this record will be destroyed as part of the parents save transaction.

@note Override ActiveRecord::AutosaveAssociation#marked_for_destruction?.

# File lib/qiita/team/services/hooks/concerns/persistable.rb, line 58
def marked_for_destruction?
  false
end
property_names() click to toggle source

@return [Array<String>]

# File lib/qiita/team/services/hooks/concerns/persistable.rb, line 18
def property_names
  service_properties.map(&:name)
end
service_properties() click to toggle source

@return [Array<Qiita::Team::Services::Properties::Base>]

# File lib/qiita/team/services/hooks/concerns/persistable.rb, line 13
def service_properties
  @service_properties ||= []
end
to_hash() click to toggle source

Serialize the service object.

@return [Hash{String => Object}] serialized properties.

# File lib/qiita/team/services/hooks/concerns/persistable.rb, line 48
def to_hash
  self.class.service_properties.map(&:name).each_with_object({}) do |name, hash|
    hash[name] = public_send(name)
  end
end