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

pulibrary / pdc_describe / 95ff1d10-5774-4415-8b66-ffb4f4f58024

pending completion
95ff1d10-5774-4415-8b66-ffb4f4f58024

Pull #725

circleci

Carolyn Cole
Updating manifest not to include the javascript for edit This seems to do nothing, so I am removing it
Pull Request #725: Updating manifest not to include the javascript for edit

1638 of 1684 relevant lines covered (97.27%)

102.75 hits per line

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

84.06
/app/services/form_to_resource_service.rb
1
# frozen_string_literal: true
2
class FormToResourceService
1✔
3
  class << self
1✔
4
    # Convert params into a resource
5
    #
6
    #  @param [Hash] params controller params to be converted
7
    #  @param [Work] work params will be applied to. Utilizes the work for old values if needed.
8
    #
9
    # @return [PDCMetadata::Resource] Fully formed resource containing updates from the user
10
    def convert(params, work)
1✔
11
      resource = process_curator_controlled(params: params, work: work)
40✔
12
      resource = process_related_objects(params, resource)
40✔
13
      resource.description = params["description"]
40✔
14
      resource.publisher = params["publisher"] if params["publisher"].present?
40✔
15
      resource.publication_year = params["publication_year"] if params["publication_year"].present?
40✔
16
      resource.rights = PDCMetadata::Rights.find(params["rights_identifier"])
40✔
17
      resource.keywords = (params["keywords"] || "").split(",").map(&:strip)
40✔
18
      resource.funder_name = params["funder_name"]
40✔
19
      resource.award_number = params["award_number"]
40✔
20
      resource.award_uri = params["award_uri"]
40✔
21

22
      # Process the titles
23
      resource = process_titles(params, resource)
40✔
24

25
      # Process the creators
26
      resource = process_creators(params, resource)
40✔
27

28
      # Process contributors
29
      resource = process_contributors(params, resource)
40✔
30

31
      resource
40✔
32
    end
33

34
    private
1✔
35

36
      def process_curator_controlled(params:, work:)
1✔
37
        resource = reset_resource_to_work(work)
40✔
38
        resource.doi = params["doi"] if params["doi"].present?
40✔
39
        resource.ark = params["ark"] if params["ark"].present?
40✔
40
        resource.version_number = params["version_number"] if params["version_number"].present?
40✔
41
        resource.collection_tags = params["collection_tags"].split(",").map(&:strip) if params["collection_tags"]
40✔
42
        resource.resource_type = params["resource_type"] if params["resource_type"]
40✔
43
        resource.resource_type_general = params["resource_type_general"]&.to_sym
40✔
44
        resource
40✔
45
      end
46

47
      def reset_resource_to_work(work)
1✔
48
        resource = PDCMetadata::Resource.new
40✔
49

50
        resource.doi = work.doi
40✔
51
        resource.ark = work.ark
40✔
52
        resource.collection_tags = work.resource.collection_tags || []
40✔
53
        resource
40✔
54
      end
55

56
      def process_titles(params, resource)
1✔
57
        resource.titles << PDCMetadata::Title.new(title: params["title_main"])
40✔
58
        (1..params["existing_title_count"].to_i).each do |i|
40✔
59
          if params["title_#{i}"].present?
17✔
60
            resource.titles << PDCMetadata::Title.new(title: params["title_#{i}"], title_type: params["title_type_#{i}"])
3✔
61
          end
62
        end
63

64
        (1..params["new_title_count"].to_i).each do |i|
40✔
65
          if params["new_title_#{i}"].present?
17✔
66
            resource.titles << PDCMetadata::Title.new(title: params["new_title_#{i}"], title_type: params["new_title_type_#{i}"])
14✔
67
          end
68
        end
69
        resource
40✔
70
      end
71

72
      def process_creators(params, resource)
1✔
73
        (1..params["creator_count"].to_i).each do |i|
40✔
74
          creator = new_creator(params["given_name_#{i}"], params["family_name_#{i}"], params["orcid_#{i}"], params["sequence_#{i}"])
56✔
75
          resource.creators << creator unless creator.nil?
56✔
76
        end
77
        resource
40✔
78
      end
79

80
      ## TODO: Do the right thing with blank form entries
81
      def process_related_objects(params, resource)
1✔
82
        (1..params["related_object_count"].to_i).each do |i|
40✔
83
          next if params["related_identifier_#{i}"].blank? && params["related_identifier_type_#{i}"].blank? # do not store blank related identifiers
3✔
84
          related_object = PDCMetadata::RelatedObject.new(
×
85
                            related_identifier: params["related_identifier_#{i}"],
86
                            related_identifier_type: params["related_identifier_type_#{i}"],
87
                            relation_type: params["relation_type_#{i}"]
88
                          )
89
          resource.related_objects << related_object
×
90
        end
91
        resource
40✔
92
      end
93

94
      def process_contributors(params, resource)
1✔
95
        (1..params["contributor_count"].to_i).each do |i|
40✔
96
          given_name = params["contributor_given_name_#{i}"]
×
97
          family_name = params["contributor_family_name_#{i}"]
×
98
          orcid = params["contributor_orcid_#{i}"]
×
99
          type = params["contributor_role_#{i}"]
×
100
          sequence = params["contributor_sequence_#{i}"]
×
101
          contributor = new_contributor(given_name, family_name, orcid, type, sequence)
×
102
          resource.contributors << contributor unless contributor.nil?
×
103
        end
104
        resource
40✔
105
      end
106

107
      def new_creator(given_name, family_name, orcid, sequence)
1✔
108
        return if family_name.blank? && given_name.blank? && orcid.blank?
56✔
109
        PDCMetadata::Creator.new_person(given_name, family_name, orcid, sequence)
56✔
110
      end
111

112
      def new_contributor(given_name, family_name, orcid, type, sequence)
1✔
113
        return if family_name.blank? && given_name.blank? && orcid.blank?
×
114
        PDCMetadata::Creator.new_contributor(given_name, family_name, orcid, type, sequence)
×
115
      end
116
  end
117
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