Sha256: 356a9f0994e6909dc247cb28feef90185780fe3630225d0e36e9a8c9ae328bb3

Contents?: true

Size: 1.15 KB

Versions: 2

Compression:

Stored size: 1.15 KB

Contents

module DurableDecoratorRails
  class ClassTypeExtractor
    class << self
      def decorator_path method_name
        type = determine_class_type method_name
        
        dir = if type == 'lib'
          type
        else
          "app/#{type}"
        end

        suffix = namespace method_name
        dir += "/#{suffix}" if suffix

        dir
      end

      def determine_class_type method_name
        class_location_directory method_name
      end
      
      def class_location_directory method_name
        method_source(method_name).gsub(class_location(method_name), '').split('/').last
      end

      def method_source name
        DurableDecorator::Base.extract_method(name).source_location[0]
      end

      def class_name method_name
        method_name.match(receiver_separator)[1]
      end

      def class_location method_name
        "/#{class_name(method_name).underscore}.rb"
      end

      def namespace method_name
        namespace = method_name.match(receiver_separator)[1].split('::')[0..-2].join('/').underscore
        namespace.presence
      end

      def receiver_separator
        /(.*)(\.|#)(.*)/
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
durable_decorator_rails-0.2.2 lib/durable_decorator_rails/class_type_extractor.rb
durable_decorator_rails-0.2.0 lib/durable_decorator_rails/class_type_extractor.rb