Class: MSpecScript

Inherits:
Object show all
Defined in:
lib/mspec/utils/script.rb

Overview

MSpecScript provides a skeleton for all the MSpec runner scripts.

Direct Known Subclasses

MSpecCI, MSpecMain, MSpecRun, MSpecTag

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMSpecScript

Returns a new instance of MSpecScript.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/mspec/utils/script.rb', line 17

def initialize
  config[:tags_dir]  = 'spec/tags'
  config[:formatter] = nil
  config[:includes]  = []
  config[:excludes]  = []
  config[:patterns]  = []
  config[:xpatterns] = []
  config[:tags]      = []
  config[:xtags]     = []
  config[:profiles]  = []
  config[:xprofiles] = []
  config[:atags]     = []
  config[:astrings]  = []
  config[:ltags]     = []
  config[:abort]     = true
end

Class Method Details

.configObject



6
7
8
9
10
11
# File 'lib/mspec/utils/script.rb', line 6

def self.config
  @config ||= {
    :path => ['.', 'spec'],
    :config_ext => '.mspec'
  }
end

.mainObject



100
101
102
103
104
105
106
107
108
109
110
# File 'lib/mspec/utils/script.rb', line 100

def self.main
  $VERBOSE = nil unless ENV['OUTPUT_WARNINGS']
  script = new
  script.load 'default.mspec'
  script.load RUBY_VERSION.split('.')[0,2].join('.') + ".mspec"
  script.load '~/.mspecrc'
  script.options
  script.signals
  script.register
  script.run
end

.set(key, value) ⇒ Object



13
14
15
# File 'lib/mspec/utils/script.rb', line 13

def self.set(key, value)
  config[key] = value
end

Instance Method Details

#configObject



34
35
36
# File 'lib/mspec/utils/script.rb', line 34

def config
  MSpecScript.config
end

#entries(pattern) ⇒ Object



82
83
84
85
86
87
# File 'lib/mspec/utils/script.rb', line 82

def entries(pattern)
  expanded = File.expand_path(pattern)
  return [pattern] if File.file?(expanded)
  return Dir[pattern+"/**/*_spec.rb"].sort if File.directory?(expanded)
  Dir[pattern]
end

#files(list) ⇒ Object



89
90
91
92
93
94
95
96
97
98
# File 'lib/mspec/utils/script.rb', line 89

def files(list)
  list.inject([]) do |files, item|
    if item[0] == ?^
      files -= entries(item[1..-1])
    else
      files += entries(item)
    end
    files
  end
end

#load(name) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/mspec/utils/script.rb', line 38

def load(name)
  names = [name]
  unless name[-6..-1] == config[:config_ext]
    names << name + config[:config_ext]
  end

  names.each do |name|
    return Kernel.load(name) if File.exist?(File.expand_path(name))

    config[:path].each do |dir|
      file = File.join dir, name
      return Kernel.load(file) if File.exist? file
    end
  end
end

#registerObject



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/mspec/utils/script.rb', line 54

def register
  if config[:formatter].nil?
    config[:formatter] = @files.size < 50 ? DottedFormatter : FileFormatter
  end
  config[:formatter].new(config[:output]).register if config[:formatter]

  MatchFilter.new(:include, *config[:includes]).register    unless config[:includes].empty?
  MatchFilter.new(:exclude, *config[:excludes]).register    unless config[:excludes].empty?
  RegexpFilter.new(:include, *config[:patterns]).register   unless config[:patterns].empty?
  RegexpFilter.new(:exclude, *config[:xpatterns]).register  unless config[:xpatterns].empty?
  TagFilter.new(:include, *config[:tags]).register          unless config[:tags].empty?
  TagFilter.new(:exclude, *config[:xtags]).register         unless config[:xtags].empty?
  ProfileFilter.new(:include, *config[:profiles]).register  unless config[:profiles].empty?
  ProfileFilter.new(:exclude, *config[:xprofiles]).register unless config[:xprofiles].empty?

  DebugAction.new(config[:atags], config[:astrings]).register if config[:debugger]
  GdbAction.new(config[:atags], config[:astrings]).register   if config[:gdb]
end

#signalsObject



73
74
75
76
77
78
79
80
# File 'lib/mspec/utils/script.rb', line 73

def signals
  if config[:abort]
    Signal.trap "INT" do
      puts "\nProcess aborted!"
      exit! 1
    end
  end
end