Class: SmashingDocs

Inherits:
Object
  • Object
show all
Defined in:
lib/base.rb

Defined Under Namespace

Classes: Conf, TestCase

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSmashingDocs

Returns a new instance of SmashingDocs.



3
4
5
6
7
# File 'lib/base.rb', line 3

def initialize
  @tests = []
  @skip = false
  @information = {}
end

Instance Attribute Details

#testsObject

Returns the value of attribute tests.



2
3
4
# File 'lib/base.rb', line 2

def tests
  @tests
end

Class Method Details

.config {|self::Conf| ... } ⇒ Object

Yields:

  • (self::Conf)


117
118
119
# File 'lib/base.rb', line 117

def self.config(&block)
  yield(self::Conf)
end

.currentObject



112
113
114
115
# File 'lib/base.rb', line 112

def self.current
  # Behaves like an instance of SmashingDocs class
  Thread.current[:instance] ||= self.new
end

.finish!Object

= = =

These class methods are used to persist test data across tests RSpec and Minitest do not support hooks that would allow for an instance variable to be declared and used



91
92
93
94
95
96
97
98
# File 'lib/base.rb', line 91

def self.finish!
  unless current.tests.empty?
    current.sort_by_url!
    current.output_testcases_to_file
    current.add_docs_to_wiki if current.auto_push?
    current.clean_up!
  end
end

.information(key, value) ⇒ Object



108
109
110
# File 'lib/base.rb', line 108

def self.information(key, value)
  current.information(key, value)
end

.run!(request, response, called_by_test_hook = false) ⇒ Object



100
101
102
# File 'lib/base.rb', line 100

def self.run!(request, response, called_by_test_hook = false)
  current.run!(request, response, called_by_test_hook)
end

.skipObject



104
105
106
# File 'lib/base.rb', line 104

def self.skip
  current.skip
end

Instance Method Details

#add_docs_to_wikiObject



19
20
21
22
23
24
25
26
27
28
# File 'lib/base.rb', line 19

def add_docs_to_wiki
  wiki_repo = "../#{app_name}.wiki"
  if wiki_repo && wiki_repo_exists?(wiki_repo)
    copy_docs_to_wiki_repo(wiki_repo)
    push_docs_to_github(wiki_repo)
  else
    puts "Wiki folder was not found. Please set up and clone your"\
         " wiki before using auto push"
  end
end

#add_test_case(request, response) ⇒ Object



49
50
51
52
53
# File 'lib/base.rb', line 49

def add_test_case(request, response)
  test = self.class::TestCase.new(request, response, @information)
  test.template = self.class::Conf.template
  self.tests << test
end

#auto_push?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'lib/base.rb', line 82

def auto_push?
  self.class::Conf.auto_push
end

#clean_up!Object



15
16
17
# File 'lib/base.rb', line 15

def clean_up!
  @tests = []
end

#information(key, value) ⇒ Object



30
31
32
# File 'lib/base.rb', line 30

def information(key, value)
  @information[key] = value
end

#output_compiled_template(file) ⇒ Object



72
73
74
75
76
77
78
79
80
# File 'lib/base.rb', line 72

def output_compiled_template(file)
  @tests.each do |test|
    begin
      file.write(test.compile_template)
    rescue
      # Cry deeply
    end
  end
end

#output_testcases_to_fileObject



59
60
61
62
63
64
# File 'lib/base.rb', line 59

def output_testcases_to_file
  docs = self.class::Conf.output_file
  raise 'No output file specific for SmashingDocs' unless docs
  File.delete docs if File.exists? docs
  write_to_file
end

#run!(request, response, called_by_test_hook) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/base.rb', line 34

def run!(request, response, called_by_test_hook)
  run_all = self.class::Conf.run_all
  if @skip
    @skip = false
    return
  end
  if run_all
    add_test_case(request, response)
  else
    add_test_case(request, response) unless called_by_test_hook
  end
  @information = {}
  self
end

#skipObject



55
56
57
# File 'lib/base.rb', line 55

def skip
  @skip = true
end

#sort_by_url!Object



9
10
11
12
13
# File 'lib/base.rb', line 9

def sort_by_url!
  @tests.sort! do |x, y|
    x.request.path <=> y.request.path
  end
end

#write_to_fileObject



66
67
68
69
70
# File 'lib/base.rb', line 66

def write_to_file
  File.open(self.class::Conf.output_file, 'a') do |file|
    output_compiled_template(file)
  end
end