Class: LinkedRails::Collection::View

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::Model, Model
Defined in:
app/models/linked_rails/collection/view.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Model

#build_child, #singular_resource?

Methods included from Model::Serialization

#show_includes

Methods included from Model::Iri

#anonymous_iri, #anonymous_iri?, #iri, #iri_opts, #rdf_type, #reload, #route_fragment

Methods included from Model::Enhancements

#enhanced_with?

Methods included from Model::Dirty

#previous_changes_by_predicate, #previously_changed_relations

Methods included from Model::Collections

#collection_for, #parent_collections

Instance Attribute Details

#collectionObject

Returns the value of attribute collection.



10
11
12
# File 'app/models/linked_rails/collection/view.rb', line 10

def collection
  @collection
end

#filterObject

Returns the value of attribute filter.



10
11
12
# File 'app/models/linked_rails/collection/view.rb', line 10

def filter
  @filter
end

Class Method Details

.iriObject



77
78
79
# File 'app/models/linked_rails/collection/view.rb', line 77

def iri
  [super, Vocab.as.CollectionPage]
end

.new(opts = {}) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'app/models/linked_rails/collection/view.rb', line 81

def new(opts = {})
  type = opts.delete(:type)&.to_sym
  return super if type.nil?

  case type
  when :paginated
    LinkedRails.collection_paginated_view_class.new(opts)
  when :infinite
    LinkedRails.collection_infinite_view_class.new(opts)
  else
    raise ActionController::BadRequest, "'#{type}' is not a valid collection type"
  end
end

.policy_classObject



95
96
97
# File 'app/models/linked_rails/collection/view.rb', line 95

def policy_class
  LinkedRails::Collection::ViewPolicy
end

Instance Method Details

#idObject



15
# File 'app/models/linked_rails/collection/view.rb', line 15

alias id iri

#member_sequenceObject



21
22
23
24
25
26
27
28
# File 'app/models/linked_rails/collection/view.rb', line 21

def member_sequence
  @member_sequence ||= LinkedRails::Sequence.new(
    members,
    id: members_iri,
    parent: self,
    scope: false
  )
end

#membersObject



30
31
32
# File 'app/models/linked_rails/collection/view.rb', line 30

def members
  @members ||= raw_members
end

#members_iriObject



34
35
36
37
38
# File 'app/models/linked_rails/collection/view.rb', line 34

def members_iri
  uri = iri.dup
  uri.fragment = :members
  uri
end

#page_sizeObject



40
41
42
# File 'app/models/linked_rails/collection/view.rb', line 40

def page_size
  collection.page_size&.to_i || default_page_size
end

#preview_includesObject



44
45
46
47
48
# File 'app/models/linked_rails/collection/view.rb', line 44

def preview_includes
  return {member_sequence: {}} unless association_class.include_in_collection?

  {member_sequence: {members: association_class.preview_includes}}
end

#root_relative_iri(opts = {}) ⇒ Object



17
18
19
# File 'app/models/linked_rails/collection/view.rb', line 17

def root_relative_iri(opts = {})
  collection.unfiltered.root_relative_iri(iri_opts.merge(opts))
end

#titleObject



50
51
52
53
54
55
56
57
# File 'app/models/linked_rails/collection/view.rb', line 50

def title
  plural = association_class.name.tableize
  I18n.t(
    "#{plural}.collection.#{filter&.values&.join('.').presence || name}",
    count: ->(_opts) { total_count },
    default: association_class.plural_label
  )
end