Sha256: 5e31ad17da205e457121cf784eb3bb2a08c3df1847a6eed4dc0c3be112030360

Contents?: true

Size: 1.63 KB

Versions: 35

Compression:

Stored size: 1.63 KB

Contents

# frozen_string_literal: true

module LinkedRails
  class EnumValue
    include ActiveModel::Model
    include LinkedRails::Model

    attr_accessor :attr, :close_match, :exact_match, :group_by, :identifier, :key, :klass, :type
    attr_writer :iri, :label

    def label
      label_from_variable || LinkedRails.translate(:enum, :label, self)
    end

    def iri(**_opts)
      @iri || iri_with_root(RDF::URI("/enums/#{klass.name.tableize}/#{attr}##{key}"))
    end

    def rdf_type
      type
    end

    def to_param
      key
    end

    private

    def label_from_variable
      @label.respond_to?(:call) ? @label.call : @label
    end

    class << self
      def class_for_params(params)
        LinkedRails.linked_models.detect do |klass|
          klass.to_s == ([params[:module]].compact + [params[:klass]&.singularize]).join('/').classify
        end
      end

      def enum_options(params)
        serializer_for_params(params)&.enum_options(params[:attribute])
      end

      def requested_resource(opts, _user_context)
        options = enum_options(opts[:params])

        return unless options

        LinkedRails::Sequence.new(
          options.values,
          id: sanitized_sequence_iri(opts[:iri]),
          scope: LinkedRails::EnumValuePolicy::Scope
        )
      end

      def sanitized_sequence_iri(raw_iri)
        iri = RDF::URI(raw_iri)
        iri.query = nil
        iri.fragment = nil
        iri.path = iri.path.split('.').first
        iri
      end

      def serializer_for_params(params)
        klass = class_for_params(params)

        RDF::Serializers.serializer_for(klass) if klass
      end
    end
  end
end

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
linked_rails-0.0.4.pre.g3aeec2263 app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.gacd5f04d4 app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.gb0b6aea40 app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.g792a1b887 app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.g58af47992 app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.g0ec6e30ca app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.g9e3bcac55 app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.g222bfeeca app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.gb254a2893 app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.g2c6c26e86 app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.ge881247c3 app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.gfabf7e9f5 app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.g8c045be3a app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.g8d7195543 app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.gfe77aae19 app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.gc866c1806 app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.g3e8f5731a app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.g58e27be7f app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.g96885856b app/models/linked_rails/enum_value.rb
linked_rails-0.0.4.pre.g1faca9643 app/models/linked_rails/enum_value.rb