Class: Jasmine::Headless::FilesList

Inherits:
Object
  • Object
show all
Includes:
FileChecker
Defined in:
lib/jasmine/headless/files_list.rb

Constant Summary collapse

PLEASE_WAIT_IM_WORKING_TIME =
2

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from FileChecker

#alert_bad_format, #alert_if_bad_format?, #bad_format?

Constructor Details

#initialize(options = {}) ⇒ FilesList

Returns a new instance of FilesList.



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/jasmine/headless/files_list.rb', line 70

def initialize(options = {})
  @options = options

  Kernel.srand(@options[:seed]) if @options[:seed]

  @required_files = UniqueAssetList.new
  @potential_files_to_filter = []

  self.class.default_files.each do |file|
    begin
      @required_files << sprockets_environment.find_asset(file, :bundle => false)
    rescue InvalidUniqueAsset => e
      raise StandardError.new("Not an asset: #{file}")
    end
  end

  use_config! if config?
end

Instance Attribute Details

#potential_files_to_filterObject (readonly)

Returns the value of attribute potential_files_to_filter.



68
69
70
# File 'lib/jasmine/headless/files_list.rb', line 68

def potential_files_to_filter
  @potential_files_to_filter
end

#required_filesObject (readonly)

Returns the value of attribute required_files.



68
69
70
# File 'lib/jasmine/headless/files_list.rb', line 68

def required_files
  @required_files
end

Class Method Details

.default_filesObject



55
56
57
# File 'lib/jasmine/headless/files_list.rb', line 55

def default_files
  %w{jasmine.js jasmine-html jasmine.css jasmine-extensions intense headless_reporter_result jasmine.HeadlessConsoleReporter jsDump beautify-html}
end

.extension_filterObject



59
60
61
62
63
# File 'lib/jasmine/headless/files_list.rb', line 59

def extension_filter
  extensions = (%w{.js .css} + Sprockets.engine_extensions)

  %r{(#{extensions.join('|')})$}
end

.reset!Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/jasmine/headless/files_list.rb', line 31

def reset!
  @vendor_asset_paths = nil

  # register haml-sprockets if it's available...
  %w{haml-sprockets}.each do |library|
    begin
      require library
    rescue LoadError
    end
  end

  # ...and unregister ones we don't want/need
  Sprockets.instance_eval do
    EXCLUDED_FORMATS.each do |extension|
      register_engine ".#{extension}", Jasmine::Headless::NilTemplate
    end

    register_engine '.coffee', Jasmine::Headless::CoffeeTemplate
    register_engine '.js', Jasmine::Headless::JSTemplate
    register_engine '.css', Jasmine::Headless::CSSTemplate
    register_engine '.jst', Jasmine::Headless::JSTTemplate
  end
end

.vendor_asset_pathsObject

Raises:

  • (StandardError)


13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/jasmine/headless/files_list.rb', line 13

def vendor_asset_paths
  return @vendor_asset_paths if @vendor_asset_paths

  require 'rubygems'

  raise StandardError.new("A newer version of Rubygems is required to use vendored assets. Please upgrade.") if !Gem::Specification.respond_to?(:each)

  @vendor_asset_paths = []

  Gem::Specification.each do |spec|
    path = File.join(spec.gem_dir, 'vendor/assets/javascripts')

    @vendor_asset_paths << path if File.directory?(path) && !@vendor_asset_paths.include?(path)
  end

  @vendor_asset_paths
end

Instance Method Details

#filesObject



89
90
91
# File 'lib/jasmine/headless/files_list.rb', line 89

def files
  required_files.flatten.collect { |asset| asset.pathname.to_s }.uniq
end

#files_to_htmlObject



144
145
146
# File 'lib/jasmine/headless/files_list.rb', line 144

def files_to_html
  to_html(files)
end

#filtered?Boolean

Returns:

  • (Boolean)


140
141
142
# File 'lib/jasmine/headless/files_list.rb', line 140

def filtered?
  files != filtered_files
end

#filtered_filesObject



99
100
101
# File 'lib/jasmine/headless/files_list.rb', line 99

def filtered_files
  filter_for_requested_specs(files)
end

#filtered_files_to_htmlObject



148
149
150
# File 'lib/jasmine/headless/files_list.rb', line 148

def filtered_files_to_html
  to_html(filtered_files)
end

#has_spec_outside_scope?Boolean

Returns:

  • (Boolean)


125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/jasmine/headless/files_list.rb', line 125

def has_spec_outside_scope?
  if is_outside_scope = !spec_filter.empty?
    is_outside_scope = spec_dir.any? do |dir|
      spec_file_searches.any? do |search|
        !spec_files.any? do |file|
          target = File.join(dir, search)
          File.fnmatch?(target, file) || File.fnmatch?(target.gsub(%{^**/}, ''), file)
        end
      end
    end
  end

  is_outside_scope
end

#search_pathsObject



103
104
105
106
107
108
109
110
111
112
113
# File 'lib/jasmine/headless/files_list.rb', line 103

def search_paths
  return @search_paths if @search_paths

  @search_paths = [ Jasmine::Core.path, Jasmine::Headless.root.join('vendor/assets/javascripts').to_s ]
  @search_paths += self.class.vendor_asset_paths
  @search_paths += src_dir.collect { |dir| File.expand_path(dir) }
  @search_paths += asset_paths.collect { |dir| File.expand_path(dir) }
  @search_paths += spec_dir.collect { |dir| File.expand_path(dir) }

  @search_paths
end

#spec_file_line_numbersObject



152
153
154
155
156
157
158
159
160
161
162
# File 'lib/jasmine/headless/files_list.rb', line 152

def spec_file_line_numbers
  @spec_file_line_numbers ||= Hash[spec_files.collect { |file|
    if File.exist?(file)
      if !(lines = Jasmine::Headless::SpecFileAnalyzer.for(file)).empty?
        [ file, lines ]
      end
    else
      nil
    end
  }.compact]
end

#spec_filesObject



93
94
95
96
97
# File 'lib/jasmine/headless/files_list.rb', line 93

def spec_files
  filter_for_requested_specs(
    files.find_all { |file| spec_dir.any? { |dir| file[dir] } }
  )
end

#sprockets_environmentObject



115
116
117
118
119
120
121
122
123
# File 'lib/jasmine/headless/files_list.rb', line 115

def sprockets_environment
  return @sprockets_environment if @sprockets_environment

  @sprockets_environment = Sprockets::Environment.new
  search_paths.each { |path| @sprockets_environment.append_path(path) }

  @sprockets_environment.unregister_postprocessor('application/javascript', Sprockets::SafetyColons)
  @sprockets_environment
end