• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

samvera / hydra-pcdm / 65136fe3-7459-42d0-8dcf-fad3664e0817

21 Apr 2023 06:52PM UTC coverage: 72.072% (-27.9%) from 100.0%
65136fe3-7459-42d0-8dcf-fad3664e0817

push

circleci

web-flow
Release 1.3.0 (#299)

160 of 222 relevant lines covered (72.07%)

8.92 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

64.0
/lib/hydra/pcdm/models/concerns/object_behavior.rb
1
module Hydra::PCDM
12✔
2
  ##
3
  # Implements behavior for PCDM objects.
4
  #
5
  # The behavior is summarized as:
6
  #   1) Hydra::PCDM::Object can aggregate (pcdm:hasMember) Hydra::PCDM::Object
7
  #   2) Hydra::PCDM::Object can aggregate (ore:aggregates) Hydra::PCDM::Object  (Object related to the Object)
8
  #   3) Hydra::PCDM::Object can contain (pcdm:hasFile) Hydra::PCDM::File
9
  #   4) Hydra::PCDM::Object can contain (pcdm:hasRelatedFile) Hydra::PCDM::File
10
  #   5) Hydra::PCDM::Object can NOT aggregate Hydra::PCDM::Collection
11
  #   6) Hydra::PCDM::Object can NOT aggregate non-PCDM object
12
  #   7) Hydra::PCDM::Object can have descriptive metadata
13
  #   8) Hydra::PCDM::Object can have access metadata
14
  #
15
  # @example defining an object class and creating an object
16
  #   class Book < ActiveFedora::Base
17
  #     include Hydra::PCDM::ObjectBehavior
18
  #   end
19
  #
20
  #   my_book = Book.create
21
  #   # #<Book id: "71/3f/07/e0/713f07e0-9d5c-493a-bdb9-7fbfe2160028", head: [], tail: []>
22
  #
23
  #   my_book.pcdm_object?     # => true
24
  #   my_book.pcdm_collection? # => false
25
  #
26
  # @example adding a members to an object
27
  #   class Page < ActiveFedora::Base
28
  #     include Hydra::PCDM::ObjectBehavior
29
  #   end
30
  #
31
  #   my_book = Book.create
32
  #   a_page  = Page.create
33
  #
34
  #   my_book.members << a_page
35
  #   my_book.members # => [a_page]
36
  #
37
  # @see PcdmBehavior for details about the base behavior required by
38
  #   this module.
39
  module ObjectBehavior
12✔
40
    extend ActiveSupport::Concern
12✔
41

42
    included do
12✔
43
      type Vocab::PCDMTerms.Object
12✔
44
      include ::Hydra::PCDM::PcdmBehavior
12✔
45

46
      ##
47
      # @macro [new] directly_contains
48
      #   @!method $1
49
      #     @return [ActiveFedora::Associations::ContainerProxy]
50
      directly_contains :files, has_member_relation: Vocab::PCDMTerms.hasFile,
12✔
51
                                class_name: 'Hydra::PCDM::File'
52
    end
53

54
    ##
55
    # @see ActiveSupport::Concern
56
    module ClassMethods
12✔
57
      ##
58
      # @return [Class] the indexer class
59
      def indexer
12✔
60
        Hydra::PCDM::ObjectIndexer
×
61
      end
62

63
      ##
64
      # @return [Class] the validator class
65
      def type_validator
12✔
66
        Validators::PCDMObjectValidator
12✔
67
      end
68
    end
69

70
    ##
71
    # @return [Boolean] whether this instance is a PCDM Object.
72
    def pcdm_object?
12✔
73
      true
×
74
    end
75

76
    ##
77
    # @return [Boolean] whether this instance is a PCDM Collection.
78
    def pcdm_collection?
12✔
79
      false
×
80
    end
81

82
    ##
83
    # @return [Enumerable<Hydra::PCDM::ObjectBehavior>]
84
    def in_objects
12✔
85
      member_of.select(&:pcdm_object?).to_a
×
86
    end
87

88
    ##
89
    # Gives directly contained files that have the requested RDF Type
90
    #
91
    # @param [RDF::URI] uri for the desired Type
92
    # @return [Enumerable<ActiveFedora::File>]
93
    #
94
    # @example
95
    #   filter_files_by_type(::RDF::URI("http://pcdm.org/ExtractedText"))
96
    def filter_files_by_type(uri)
12✔
97
      files.reject do |file|
×
98
        !file.metadata_node.type.include?(uri)
×
99
      end
100
    end
101

102
    ##
103
    # Finds or Initializes directly contained file with the requested RDF Type
104
    #
105
    # @param [RDF::URI] uri for the desired Type
106
    # @return [ActiveFedora::File]
107
    #
108
    # @example
109
    #   file_of_type(::RDF::URI("http://pcdm.org/ExtractedText"))
110
    def file_of_type(uri)
12✔
111
      matching_files = filter_files_by_type(uri)
×
112
      return matching_files.first unless matching_files.empty?
×
113
      Hydra::PCDM::AddTypeToFile.call(files.build, uri)
×
114
    end
115
  end
116
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc