falluto 0.0.1 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/cleantrace.rb +97 -0
- data/bin/falluto.rb +92 -2
- data/bin/ftnusmv.rb +96 -0
- data/bin/viewtrace.rb +162 -0
- data/lib/falluto/compiler.rb +410 -0
- data/lib/falluto/grammar/nodes.rb +141 -0
- data/lib/falluto/grammar/rules.treetop +478 -0
- data/lib/falluto/grammar/tokens.treetop +145 -0
- data/lib/falluto/grammar.rb +7 -0
- data/lib/falluto/nusmv/codegen.rb +39 -0
- data/lib/falluto/nusmv/fault.rb +87 -0
- data/lib/falluto/nusmv/module.rb +45 -0
- data/lib/falluto/nusmv/variable.rb +13 -0
- data/lib/falluto/nusmv.rb +4 -0
- data/lib/falluto/ruby_extensions/class.rb +10 -0
- data/lib/falluto/ruby_extensions/file.rb +5 -0
- data/lib/falluto/ruby_extensions/hash.rb +3 -0
- data/lib/falluto/ruby_extensions/string.rb +5 -0
- data/lib/falluto/ruby_extensions.rb +4 -0
- data/lib/falluto/symboltable.rb +34 -0
- data/lib/falluto/version.rb +10 -0
- data/spec/grammar/parser_spec.rb +121 -0
- data/spec/nusmv/fault_spec.rb +17 -0
- data/spec/nusmv/generator_spec.rb +42 -0
- data/spec/nusmv/module_spec.rb +12 -0
- data/spec/nusmv/variable_spec.rb +32 -0
- data/spec/spec_helper.rb +4 -0
- metadata +35 -14
- data/.document +0 -5
- data/.gitignore +0 -21
- data/Rakefile +0 -56
- data/VERSION +0 -1
- data/test/helper.rb +0 -10
- data/test/test_falluto.rb +0 -7
@@ -0,0 +1,87 @@
|
|
1
|
+
module Falluto
|
2
|
+
module NuSMV
|
3
|
+
class AuxiliarVariable
|
4
|
+
attr_reader :name, :condition
|
5
|
+
def initialize name, condition
|
6
|
+
@name, @condition = name, condition
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class Fault
|
11
|
+
GUARD_VARIABLE_FORMAT = '%s_g%d'
|
12
|
+
|
13
|
+
attr_reader :name, :process_name
|
14
|
+
attr_reader :precondition, :restore
|
15
|
+
attr_reader :precondition_variable, :restore_variable, :active_variable,
|
16
|
+
:fairness_variable
|
17
|
+
|
18
|
+
def initialize modul, name, precondition, restore, effect
|
19
|
+
@name = name
|
20
|
+
@process_name = "#{modul}_#{name}"
|
21
|
+
@precondition = precondition
|
22
|
+
@restore = restore
|
23
|
+
@system_effect = effect
|
24
|
+
|
25
|
+
@fairness_variable = "#{@name}_vfair"
|
26
|
+
@precondition_variable = "#{@name}_pre"
|
27
|
+
@restore_variable = "#{@name}_restore"
|
28
|
+
@active_variable = "active"
|
29
|
+
|
30
|
+
@auxiliar_variables = []
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
def add_auxiliar_variable guard
|
35
|
+
vname = next_auxiliar_variable
|
36
|
+
@auxiliar_variables << AuxiliarVariable.new(vname, guard)
|
37
|
+
end
|
38
|
+
|
39
|
+
def next_auxiliar_variable
|
40
|
+
i = @auxiliar_variables.length + 1
|
41
|
+
GUARD_VARIABLE_FORMAT % [@name, i]
|
42
|
+
end
|
43
|
+
|
44
|
+
def strong_fairness inst
|
45
|
+
"((G F (#{fairness_condition(inst)})) -> (G F (#{inst}.#{fairness_variable})))"
|
46
|
+
end
|
47
|
+
|
48
|
+
##### Variables affected by system effect
|
49
|
+
def each_affected_variable &block
|
50
|
+
@system_effect.variables.each{ |v| yield v }
|
51
|
+
end
|
52
|
+
|
53
|
+
def each_affected_variable_with_effect &block
|
54
|
+
@system_effect.each_pair{ |v, effect| yield v, effect }
|
55
|
+
end
|
56
|
+
|
57
|
+
def instance_signature
|
58
|
+
parameters = "#{precondition_variable}, #{restore_variable}"
|
59
|
+
each_affected_variable{|v| parameters << ", #{v}"}
|
60
|
+
%Q|#{process_name}(#{parameters})|
|
61
|
+
end
|
62
|
+
|
63
|
+
def each_auxiliar_variable &block
|
64
|
+
@auxiliar_variables.each {|v| yield v}
|
65
|
+
end
|
66
|
+
|
67
|
+
def fairness_condition inst = nil
|
68
|
+
if inst.nil?
|
69
|
+
not_effect = "! #{@name}.#{active_variable}"
|
70
|
+
# not_effect = "! #{active_variable}"
|
71
|
+
else
|
72
|
+
not_effect = "! #{inst}.#{@name}.#{active_variable}"
|
73
|
+
end
|
74
|
+
|
75
|
+
if @auxiliar_variables.empty?
|
76
|
+
not_effect
|
77
|
+
else
|
78
|
+
vars = @auxiliar_variables.collect do |v|
|
79
|
+
(inst.nil? ? '' : "#{inst}.") + v.name
|
80
|
+
end
|
81
|
+
'( ' + vars.join(' | ') + " ) & #{not_effect}"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'falluto/symboltable'
|
2
|
+
|
3
|
+
module Falluto
|
4
|
+
module NuSMV
|
5
|
+
class Module
|
6
|
+
attr_reader :name
|
7
|
+
|
8
|
+
def initialize name
|
9
|
+
@name = name
|
10
|
+
@faults = SymbolTable.new
|
11
|
+
@variables = SymbolTable.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def add_fault fault
|
15
|
+
@faults.insert fault
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_faults *fault_names
|
19
|
+
fault_names.collect{ |fname| @faults.get fname }
|
20
|
+
# @faults.get f
|
21
|
+
end
|
22
|
+
|
23
|
+
def is_defined? fault
|
24
|
+
@faults.has? fault
|
25
|
+
end
|
26
|
+
|
27
|
+
def has_faults?
|
28
|
+
not @faults.empty?
|
29
|
+
end
|
30
|
+
|
31
|
+
def each_fault &block
|
32
|
+
@faults.each &block
|
33
|
+
end
|
34
|
+
|
35
|
+
def add_variable var
|
36
|
+
@variables.insert var
|
37
|
+
end
|
38
|
+
|
39
|
+
def each_variable &block
|
40
|
+
@variables.each &block
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Falluto
|
2
|
+
module NuSMV
|
3
|
+
class Variable
|
4
|
+
attr_reader :name, :type
|
5
|
+
def initialize(name, type)
|
6
|
+
raise 'name cannot be empty' if (name.nil? or name.empty?)
|
7
|
+
raise 'type cannot be empty' if (type.nil? or type.empty?)
|
8
|
+
@name, @type = name, type
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class SymbolTable
|
2
|
+
include Enumerable
|
3
|
+
|
4
|
+
def initialize attribute = :name
|
5
|
+
@table = Hash.new
|
6
|
+
@attribute = attribute
|
7
|
+
end
|
8
|
+
|
9
|
+
def has? object
|
10
|
+
key = object.send(@attribute)
|
11
|
+
@table.include? key
|
12
|
+
end
|
13
|
+
|
14
|
+
def insert(object)
|
15
|
+
key = object.send(@attribute)
|
16
|
+
@table[key] = object
|
17
|
+
end
|
18
|
+
alias << insert
|
19
|
+
|
20
|
+
def get key
|
21
|
+
@table[key]
|
22
|
+
end
|
23
|
+
alias [] get
|
24
|
+
|
25
|
+
def empty?
|
26
|
+
@table.empty?
|
27
|
+
end
|
28
|
+
|
29
|
+
def each &block
|
30
|
+
@table.values.each &block
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'falluto/grammar'
|
3
|
+
|
4
|
+
describe 'a Falluto Parser' do
|
5
|
+
before do
|
6
|
+
@parser = Falluto::GrammarParser.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should parse a simple module' do
|
10
|
+
tree = @parser.parse %q{
|
11
|
+
MODULE main
|
12
|
+
}
|
13
|
+
tree.should.not.be.nil
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should parse a module with a variable' do
|
17
|
+
tree = @parser.parse %q{
|
18
|
+
MODULE main
|
19
|
+
VAR
|
20
|
+
x : boolean;
|
21
|
+
}
|
22
|
+
tree.should.not.be.nil
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should parse a fault declaration' do
|
26
|
+
@parser.root = :fault
|
27
|
+
declaration = @parser.parse %q{FAULT f
|
28
|
+
pre(true);
|
29
|
+
effect(x = 0, y = 1);
|
30
|
+
restores(false);
|
31
|
+
}
|
32
|
+
declaration.should.not.be.nil
|
33
|
+
declaration.name.should.equal 'f'
|
34
|
+
declaration.precondition.should.equal 'true'
|
35
|
+
declaration.restores.should.equal 'false'
|
36
|
+
declaration.effect.should.equal 'x' => '0', 'y' => '1'
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should parse a module with a fault' do
|
40
|
+
tree = @parser.parse %q{
|
41
|
+
MODULE main
|
42
|
+
FAULT f
|
43
|
+
pre(cond1 & cond2 | cond3);
|
44
|
+
effect(x = x + 1);
|
45
|
+
restores(!reset);
|
46
|
+
VAR
|
47
|
+
x : boolean;
|
48
|
+
}
|
49
|
+
tree.should.not.be.nil
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should parse a module with two faults' do
|
53
|
+
tree = @parser.parse %q{
|
54
|
+
MODULE main
|
55
|
+
FAULT f
|
56
|
+
pre(cond1 & cond2 | cond3);
|
57
|
+
effect(x = x + 1);
|
58
|
+
restores(!reset);
|
59
|
+
FAULT g
|
60
|
+
pre(cond1 & cond2 | cond3);
|
61
|
+
effect(x = x + 1);
|
62
|
+
restores(!reset);
|
63
|
+
VAR
|
64
|
+
x : boolean;
|
65
|
+
}
|
66
|
+
tree.should.not.be.nil
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should parse a module with a fault in next assignment' do
|
70
|
+
tree = @parser.parse %q{
|
71
|
+
MODULE main
|
72
|
+
FAULT f
|
73
|
+
pre(cond1 & cond2 | cond3);
|
74
|
+
effect(x = x + 1);
|
75
|
+
restores(!reset);
|
76
|
+
VAR
|
77
|
+
x : boolean;
|
78
|
+
ASSIGN
|
79
|
+
next(x) := x + 1 disabled_by {f};
|
80
|
+
}
|
81
|
+
tree.should.not.be.nil
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'should parse a module with a fault in case assignment' do
|
85
|
+
tree = @parser.parse %q{
|
86
|
+
MODULE main
|
87
|
+
FAULT f
|
88
|
+
pre(cond1 & cond2 | cond3);
|
89
|
+
effect(x = x + 1);
|
90
|
+
restores(!reset);
|
91
|
+
VAR
|
92
|
+
x : boolean;
|
93
|
+
ASSIGN
|
94
|
+
next(x) :=
|
95
|
+
case
|
96
|
+
c1 : x + 1;
|
97
|
+
1 : x;
|
98
|
+
esac disabled_by {f};
|
99
|
+
}
|
100
|
+
tree.should.not.be.nil
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'should parse a module with a fault in case element' do
|
104
|
+
tree = @parser.parse %q{
|
105
|
+
MODULE main
|
106
|
+
FAULT f
|
107
|
+
pre(cond1 & cond2 | cond3);
|
108
|
+
effect(x = x + 1);
|
109
|
+
restores(!reset);
|
110
|
+
VAR
|
111
|
+
x : boolean;
|
112
|
+
ASSIGN
|
113
|
+
next(x) :=
|
114
|
+
case
|
115
|
+
c1 : x + 1 disabled_by {f};
|
116
|
+
1 : x;
|
117
|
+
esac;
|
118
|
+
}
|
119
|
+
tree.should.not.be.nil
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'falluto/nusmv'
|
3
|
+
|
4
|
+
describe 'a Falluto Fault' do
|
5
|
+
before do
|
6
|
+
pre = 'x > 0'
|
7
|
+
restore = 'x >= 0'
|
8
|
+
effect = nil
|
9
|
+
@fault = Falluto::NuSMV::Fault.new 'Foo', 'Bar', pre, restore, effect
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should have a name' do
|
13
|
+
@fault.name.should.be.equal 'Bar'
|
14
|
+
@fault.process_name.should.be.equal 'Foo_Bar'
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'falluto/nusmv'
|
3
|
+
|
4
|
+
describe 'a NuSMV Code Generator' do
|
5
|
+
before do
|
6
|
+
@generator = Falluto::NuSMV::CodeGenerator.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should generate a module' do
|
10
|
+
@generator.module('main(a, b)').should.equal 'MODULE main(a, b)'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should generate a variable' do
|
14
|
+
@generator.variable_declaration('v', 'boolean').should.equal 'VAR v : boolean;'
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should instance a process' do
|
18
|
+
@generator.instance_process('no_params').should.equal 'process no_params();'
|
19
|
+
@generator.instance_process('sometype', 'arg1', 'arg2').should.equal 'process sometype(arg1, arg2);'
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should generate a process' do
|
23
|
+
@generator.process('sometype()').should.equal 'process sometype()'
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should generate a fairness constraint' do
|
27
|
+
@generator.fairness('running').should.equal 'FAIRNESS running'
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should generate macros' do
|
31
|
+
@generator.define('v', 'expr').should.equal 'DEFINE v := (expr);'
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should generate an LTL spec' do
|
35
|
+
@generator.ltlspec('G F p').should.equal 'LTLSPEC G F p'
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should generate implication' do
|
39
|
+
@generator.implies('p', 'q').should.equal '((p) -> (q))'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'falluto/nusmv'
|
3
|
+
|
4
|
+
describe 'a NuSMV Variable' do
|
5
|
+
before do
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should have a name and type' do
|
9
|
+
var = Falluto::NuSMV::Variable.new 'procvar', 'SomeProcType'
|
10
|
+
var.name.should.equal 'procvar'
|
11
|
+
var.type.should.equal 'SomeProcType'
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should raise an error if name is nil or empty' do
|
15
|
+
lambda { Falluto::NuSMV::Variable.new nil, 'sometype' }.
|
16
|
+
should.raise(Exception).
|
17
|
+
message.should.match(/name cannot be empty/)
|
18
|
+
lambda { Falluto::NuSMV::Variable.new '', 'sometype' }.
|
19
|
+
should.raise(Exception).
|
20
|
+
message.should.match(/name cannot be empty/)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should raise an error if type is nil or empty' do
|
24
|
+
lambda { Falluto::NuSMV::Variable.new 'somename', nil }.
|
25
|
+
should.raise(Exception).
|
26
|
+
message.should.match(/type cannot be empty/)
|
27
|
+
lambda { Falluto::NuSMV::Variable.new 'somename', '' }.
|
28
|
+
should.raise(Exception).
|
29
|
+
message.should.match(/type cannot be empty/)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: falluto
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Edgardo Hames
|
@@ -9,18 +9,18 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
13
|
-
default_executable:
|
12
|
+
date: 2010-01-06 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: bacon
|
17
17
|
type: :development
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
23
|
+
version: 1.1.0
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: treetop
|
@@ -35,22 +35,39 @@ dependencies:
|
|
35
35
|
description: A model checker for verifying fault tolerant systems
|
36
36
|
email: ehames@gmail.com
|
37
37
|
executables:
|
38
|
+
- cleantrace.rb
|
38
39
|
- falluto.rb
|
40
|
+
- ftnusmv.rb
|
41
|
+
- viewtrace.rb
|
39
42
|
extensions: []
|
40
43
|
|
41
44
|
extra_rdoc_files:
|
42
45
|
- LICENSE
|
43
46
|
- README.rdoc
|
44
47
|
files:
|
45
|
-
- .
|
46
|
-
- .
|
48
|
+
- bin/cleantrace.rb
|
49
|
+
- bin/falluto.rb
|
50
|
+
- bin/ftnusmv.rb
|
51
|
+
- bin/viewtrace.rb
|
52
|
+
- lib/falluto/compiler.rb
|
53
|
+
- lib/falluto/grammar.rb
|
54
|
+
- lib/falluto/grammar/nodes.rb
|
55
|
+
- lib/falluto/grammar/rules.treetop
|
56
|
+
- lib/falluto/grammar/tokens.treetop
|
57
|
+
- lib/falluto/nusmv.rb
|
58
|
+
- lib/falluto/nusmv/codegen.rb
|
59
|
+
- lib/falluto/nusmv/fault.rb
|
60
|
+
- lib/falluto/nusmv/module.rb
|
61
|
+
- lib/falluto/nusmv/variable.rb
|
62
|
+
- lib/falluto/ruby_extensions.rb
|
63
|
+
- lib/falluto/ruby_extensions/class.rb
|
64
|
+
- lib/falluto/ruby_extensions/file.rb
|
65
|
+
- lib/falluto/ruby_extensions/hash.rb
|
66
|
+
- lib/falluto/ruby_extensions/string.rb
|
67
|
+
- lib/falluto/symboltable.rb
|
68
|
+
- lib/falluto/version.rb
|
47
69
|
- LICENSE
|
48
70
|
- README.rdoc
|
49
|
-
- Rakefile
|
50
|
-
- VERSION
|
51
|
-
- bin/falluto.rb
|
52
|
-
- test/helper.rb
|
53
|
-
- test/test_falluto.rb
|
54
71
|
has_rdoc: true
|
55
72
|
homepage: http://github.com/ehames/falluto
|
56
73
|
licenses: []
|
@@ -80,5 +97,9 @@ signing_key:
|
|
80
97
|
specification_version: 3
|
81
98
|
summary: A model checker for verifying fault tolerant systems
|
82
99
|
test_files:
|
83
|
-
-
|
84
|
-
-
|
100
|
+
- spec/grammar/parser_spec.rb
|
101
|
+
- spec/spec_helper.rb
|
102
|
+
- spec/nusmv/fault_spec.rb
|
103
|
+
- spec/nusmv/variable_spec.rb
|
104
|
+
- spec/nusmv/generator_spec.rb
|
105
|
+
- spec/nusmv/module_spec.rb
|
data/.document
DELETED
data/.gitignore
DELETED
data/Rakefile
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'rake'
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "falluto"
|
8
|
-
gem.summary = %Q{A model checker for verifying fault tolerant systems}
|
9
|
-
gem.description = %Q{A model checker for verifying fault tolerant systems}
|
10
|
-
gem.email = "ehames@gmail.com"
|
11
|
-
gem.homepage = "http://github.com/ehames/falluto"
|
12
|
-
gem.authors = ["Edgardo Hames"]
|
13
|
-
gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
14
|
-
|
15
|
-
gem.add_dependency "treetop", ">= 1.2.3"
|
16
|
-
|
17
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
18
|
-
end
|
19
|
-
Jeweler::GemcutterTasks.new
|
20
|
-
rescue LoadError
|
21
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
22
|
-
end
|
23
|
-
|
24
|
-
require 'rake/testtask'
|
25
|
-
Rake::TestTask.new(:test) do |test|
|
26
|
-
test.libs << 'lib' << 'test'
|
27
|
-
test.pattern = 'test/**/test_*.rb'
|
28
|
-
test.verbose = true
|
29
|
-
end
|
30
|
-
|
31
|
-
begin
|
32
|
-
require 'rcov/rcovtask'
|
33
|
-
Rcov::RcovTask.new do |test|
|
34
|
-
test.libs << 'test'
|
35
|
-
test.pattern = 'test/**/test_*.rb'
|
36
|
-
test.verbose = true
|
37
|
-
end
|
38
|
-
rescue LoadError
|
39
|
-
task :rcov do
|
40
|
-
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
task :test => :check_dependencies
|
45
|
-
|
46
|
-
task :default => :test
|
47
|
-
|
48
|
-
require 'rake/rdoctask'
|
49
|
-
Rake::RDocTask.new do |rdoc|
|
50
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
51
|
-
|
52
|
-
rdoc.rdoc_dir = 'rdoc'
|
53
|
-
rdoc.title = "falluto #{version}"
|
54
|
-
rdoc.rdoc_files.include('README*')
|
55
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
56
|
-
end
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.0.1
|
data/test/helper.rb
DELETED