module LinkedRails::Serializer::ClassMethods

Public Instance Methods

anonymous_object?(object) click to toggle source
# File lib/linked_rails/serializer.rb, line 24
def anonymous_object?(object)
  object.iri.anonymous?
end
default_enum_opts(attr) click to toggle source
# File lib/linked_rails/serializer.rb, line 52
def default_enum_opts(attr)
  enum_opts = serializable_class.try(:defined_enums).try(:[], attr.to_s)
  return [] if enum_opts.blank?

  HashWithIndifferentAccess[
    enum_opts&.map { |k, _v| [k.to_sym, {}] }
  ]
end
enum(attr, opts = nil) { |object, params| ... } click to toggle source
# File lib/linked_rails/serializer.rb, line 28
def enum(attr, opts = nil)
  self._enums ||= HashWithIndifferentAccess.new
  opts[:type] ||= Vocab.ontola[:FormOption]
  opts[:options] ||= default_enum_opts(attr)
  self._enums[attr] = enum_values(attr, opts)

  attribute(attr, if: opts[:if], predicate: opts[:predicate]) do |object, params|
    block_given? ? yield(object, params) : enum_value(attr, object)
  end
end
enum_options(key) click to toggle source
# File lib/linked_rails/serializer.rb, line 39
def enum_options(key)
  _enums && _enums[key]
end
enum_value(key, object) click to toggle source
# File lib/linked_rails/serializer.rb, line 43
def enum_value(key, object)
  options = enum_options(key)
  return if options.blank?

  raw_value = object.send(key)

  options[raw_value].try(:iri) if raw_value.present?
end
has_many(key, opts = {}) click to toggle source
Calls superclass method
# File lib/linked_rails/serializer.rb, line 72
def has_many(key, opts = {})
  opts[:id_method_name] = :iri

  return super if block_given?

  super do |object|
    object.send(key)
  end
end
has_one(key, opts = {}) click to toggle source

rubocop:disable Naming/PredicateName

Calls superclass method
# File lib/linked_rails/serializer.rb, line 62
def has_one(key, opts = {})
  opts[:id_method_name] = :iri

  return super if block_given?

  super do |object|
    object.send(key)
  end
end
named_object?(object) click to toggle source

rubocop:enable Naming/PredicateName

# File lib/linked_rails/serializer.rb, line 83
def named_object?(object)
  !object.iri.anonymous?
end
never(_object, _params) click to toggle source
# File lib/linked_rails/serializer.rb, line 87
def never(_object, _params)
  false
end
serializable_class() click to toggle source
# File lib/linked_rails/serializer.rb, line 91
def serializable_class
  @serializable_class ||= name.gsub('Serializer', '').safe_constantize
end
serialize_image(obj) click to toggle source
# File lib/linked_rails/serializer.rb, line 95
def serialize_image(obj)
  if obj.is_a?(String) || obj.is_a?(Symbol)
    RDF::URI(obj.to_s.gsub(/^fa-/, 'http://fontawesome.io/icon/'))
  else
    obj.presence
  end
end
with_collection(name, opts = {}) click to toggle source
# File lib/linked_rails/serializer.rb, line 103
def with_collection(name, opts = {})
  collection_name = "#{name.to_s.singularize}_collection"
  page_size = opts.delete(:page_size)
  display = opts.delete(:display)
  opts[:association] ||= name
  opts[:polymorphic] ||= true
  opts[:if] ||= method(:named_object?)

  has_one collection_name, opts do |object, params|
    object.send(collection_name, user_context: params[:scope], display: display, page_size: page_size)
  end
end

Private Instance Methods

enum_values(attr, opts) click to toggle source
# File lib/linked_rails/serializer.rb, line 118
def enum_values(attr, opts) # rubocop:disable Metrics/MethodLength
  Hash[
    opts[:options].map do |option_key, option_values|
      [
        option_key,
        LinkedRails::EnumValue.new(
          {
            key: option_key,
            attr: attr,
            klass: serializable_class,
            type: opts[:type]
          }.merge(option_values)
        )
      ]
    end
  ]
end