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