summaryrefslogtreecommitdiff
path: root/app/services/packages/rubygems/metadata_extraction_service.rb
blob: b3bac1854d7649a28c83ecd39586c1d1d821374e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# frozen_string_literal: true

module Packages
  module Rubygems
    class MetadataExtractionService
      def initialize(package, gemspec)
        @package = package
        @gemspec = gemspec
      end

      def execute
        write_metadata
      end

      private

      attr_reader :package, :gemspec

      # rubocop:disable Metrics/AbcSize
      # rubocop:disable Metrics/PerceivedComplexity
      # rubocop:disable Metrics/CyclomaticComplexity
      def write_metadata
        metadatum.update!(
          authors: gemspec&.authors,
          files: gemspec&.files&.to_json,
          summary: gemspec&.summary,
          description: gemspec&.description,
          email: gemspec&.email,
          homepage: gemspec&.homepage,
          licenses: gemspec&.licenses&.to_json,
          metadata: gemspec&.metadata&.to_json,
          author: gemspec&.author,
          bindir: gemspec&.bindir,
          executables: gemspec&.executables&.to_json,
          extensions: gemspec&.extensions&.to_json,
          extra_rdoc_files: gemspec&.extra_rdoc_files&.to_json,
          platform: gemspec&.platform,
          post_install_message: gemspec&.post_install_message,
          rdoc_options: gemspec&.rdoc_options&.to_json,
          require_paths: gemspec&.require_paths&.to_json,
          required_ruby_version: gemspec&.required_ruby_version&.to_s,
          required_rubygems_version: gemspec&.required_rubygems_version&.to_s,
          requirements: gemspec&.requirements&.to_json,
          rubygems_version: gemspec&.rubygems_version
        )
      end
      # rubocop:enable Metrics/AbcSize
      # rubocop:enable Metrics/PerceivedComplexity
      # rubocop:enable Metrics/CyclomaticComplexity

      def metadatum
        Packages::Rubygems::Metadatum.safe_find_or_create_by!(package: package)
      end
    end
  end
end