Sha256: ae97b69268915231bd89c7e801461b1b3036304ed21ded8541511ff217230d6b

Contents?: true

Size: 1.83 KB

Versions: 5

Compression:

Stored size: 1.83 KB

Contents

# Asserts a given file exists. You need to supply an absolute path or a path relative
# to the configured destination:
#
#   generator.should have_generated_file "app/controller/products_controller.rb" 
#            

module RSpec::FileMatchers
  class GenerateDir
    attr_accessor :relative_path

    def initialize(relative_path, type = nil)
      @relative_path = relative_rails_dir(relative_path, type)
    end

    def matches?(generator, &block)              
      file = File.expand_path(relative_path, generator.class.destination_root)
      file_exists = File.exists?(expected)
      if block && file_exists
        read = File.read(file)
        ruby_content = read.extend(RSpec::RubyContent::Helpers)
        yield ruby_content
      else
        file_exists
      end        
    end          
  
    def failure_message
      "Expected file #{relative_path} to have been generated, but it was not"
    end

    def negative_failure_message
      "Did not expected file #{relative_path} to have been generated, but it was"
    end
    
    protected
    
    def relative_rails_dir path, type = nil                             
      path = path.to_s
      return File.join(::Rails.root, base_dir(type), folder(type), "#{path}") if type        
      File.join(::Rails.root, path)
    end

    def folder type
      case type
      when :observer
        'models'
      else
        type.to_s.pluralize
      end
    end      
    
    def base_dir type
      case type
      when :model, :controller, :view, :helper, :observer
        'app'
      when :migration
        'db'
      when :javascript, :stylesheet
        'public'
      when :initializer, :locale
        'config'
      else
        ''          
      end
    end
  end

  def generate_dir(relative, type = nil)
    GenerateDir.new(relative, type)
  end
  alias_method :have_dir, :generate_dir
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
generator-spec-0.5.0 lib/generator_spec/matchers/file/generate_directory.rb
generator-spec-0.4.8 lib/generator_spec/matchers/file/generate_directory.rb
generator-spec-0.4.7 lib/generator_spec/matchers/file/generate_directory.rb
generator-spec-0.4.5 lib/generator_spec/matchers/file/generate_directory.rb
generator-spec-0.4.4 lib/generator_spec/matchers/file/generate_directory.rb