Sha256: f85f4300677bcfd406b4763539bfea2385493d13af8f3aadd5c1232c36ac03e6

Contents?: true

Size: 1.96 KB

Versions: 15

Compression:

Stored size: 1.96 KB

Contents

# frozen_string_literal: true

##
# Usage example:
#
# result = ConvenientService::Examples::Rails::Gemfile::Services::FormatGemsWithEnvs.result(
#   parsed_content: {
#     gems: [
#       {
#         envs: [:development],
#         line: %(gem "listen", "~> 3.3")
#       },
#       {
#         envs: [:development],
#         line: %(gem "web-console", ">= 4.1.0")
#       },
#       {
#         envs: [:development, :test],
#         line: %(gem "rspec-rails")
#       },
#       {
#         envs: [:test],
#         line: %(gem "simplecov", require: false)
#       }
#     ]
#   }
# )
#
# NOTE: Check the corresponding spec file to see more examples.
#
module ConvenientService
  module Examples
    module Rails
      module Gemfile
        module Services
          class FormatGemsWithEnvs
            BLOCK_END = "end"
            BLOCK_DO = "do"
            COMMA_WITH_SPACE = ", "
            EMPTY_LINE = ""
            ENTER = "\n"
            GROUP = "group"
            SPACE = " "
            TAB = "  "

            include RailsService::Config

            attr_accessor :parsed_content

            def result
              success(formatted_content: format_content)
            end

            private

            def format_content
              return "" if gems_with_envs.none?

              gems_with_envs
                .group_by { |gem| gem[:envs] }
                .sort
                .map { |envs, gems|
                  content = EMPTY_LINE.dup

                  content << GROUP << SPACE << envs.map { |env| ":#{env}" }.join(COMMA_WITH_SPACE) << SPACE << BLOCK_DO << ENTER

                  content << gems.map { |gem| "#{TAB}#{gem[:line]}#{ENTER}" }.join

                  content << BLOCK_END << ENTER
                }
                .join(ENTER)
            end

            def gems_with_envs
              @gems_with_envs ||= parsed_content[:gems].to_a.select { |gem| gem[:envs].any? }
            end
          end
        end
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
convenient_service-0.12.0 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb
convenient_service-0.11.0 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb
convenient_service-0.10.1 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb
convenient_service-0.10.0 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb
convenient_service-0.9.0 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb
convenient_service-0.8.0 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb
convenient_service-0.7.0 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb
convenient_service-0.6.0 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb
convenient_service-0.5.0 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb
convenient_service-0.4.0 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb
convenient_service-0.3.1 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb
convenient_service-0.3.0 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb
convenient_service-0.2.1 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb
convenient_service-0.2.0 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb
convenient_service-0.1.0 lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb