Sha256: 7f251af3f62d0d522896542b577757cbfc626ecf3c56f92c028ccaf61a025f8f

Contents?: true

Size: 1.45 KB

Versions: 2

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true

require 'avm/eac_generic_base0/file_formats/base'
require 'avm/eac_ruby_base1/rubocop'

module Avm
  module EacRubyBase1
    module FileFormats
      class Base < ::Avm::EacGenericBase0::FileFormats::Base
        class FileResourceName
          enable_method_class
          common_constructor :file_format, :path do
            self.path = path.to_pathname
          end

          LIBRARY_PATTERNS = [%r{lib/((?!.*/lib/).+)\.rb\z},
                              %r{app/[^/]+/(.+)\.rb\z}].freeze
          SPEC_PATTERNS = [%r{spec/[^/]+/(.+)_spec\.rb\z}].freeze

          # @param path [Pathname]
          # @return [Avm::FileFormats::FileWith]
          def result
            result_from_spec || result_from_library || result_from_superclass
          end

          private

          def result_from_library
            result_from_patterns(LIBRARY_PATTERNS) { |m| m[1].camelize }
          end

          def result_from_patterns(patterns)
            patterns.lazy.map { |pattern| pattern.to_parser.parse(path.to_path) }
              .find(&:present?).if_present { |v| yield(v) }
          end

          def result_from_spec
            result_from_patterns(SPEC_PATTERNS) { |m| "RSpec.describe('#{m[1].camelize}')" }
          end

          def result_from_superclass
            file_format.class.superclass.instance_method(:file_resource_name)
              .bind_call(file_format, path)
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
avm-eac_ruby_base1-0.28.0 lib/avm/eac_ruby_base1/file_formats/base/file_resource_name.rb
eac_tools-0.51.0 sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/file_formats/base/file_resource_name.rb