factory_toys 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/factory_toys.gemspec +1 -1
- data/lib/factory_toys/f_factory.rb +48 -28
- data/lib/factory_toys/parser.rb +11 -0
- data/spec/factory_toys/f_factory_spec.rb +1 -1
- data/spec/factory_toys/parser_spec.rb +14 -7
- data/spec/factory_toys_spec.rb +8 -3
- data/tmp/features/simple_factory.feature +2 -2
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.3
|
data/factory_toys.gemspec
CHANGED
@@ -3,13 +3,18 @@ module FactoryToys
|
|
3
3
|
attr_accessor :filename
|
4
4
|
attr_accessor :data
|
5
5
|
|
6
|
+
def method_missing(name, *args, &block)
|
7
|
+
value = eval("@#{name}")
|
8
|
+
return value if value
|
9
|
+
super(name, *args, &block)
|
10
|
+
end
|
11
|
+
|
6
12
|
def initialize(filename)
|
7
13
|
@filename = filename
|
8
14
|
|
9
15
|
@output = "# Auto Generated Features\n"
|
10
16
|
@output += "# Generated: #{Time.now.to_s}\n"
|
11
17
|
@output += "# Source File: #{@filename}\n\n"
|
12
|
-
|
13
18
|
end
|
14
19
|
|
15
20
|
def write
|
@@ -21,33 +26,47 @@ module FactoryToys
|
|
21
26
|
|
22
27
|
def output
|
23
28
|
eval(self.data[:base])
|
24
|
-
|
25
29
|
self.add_feature(self.data[:feature])
|
26
|
-
|
27
|
-
|
28
|
-
scenarios = locals.find_all{|var| var =~ /_#{FactoryToys.scenarios}$/}
|
29
|
-
scenarios.each do |scenario_name|
|
30
|
-
feature = eval(scenario_name)
|
31
|
-
options = get_options(feature)
|
32
|
-
options.each do |option|
|
33
|
-
eval(self.option_string(feature, option))
|
34
|
-
scenario_name =~ /^(.+)_#{FactoryToys.scenarios}$/
|
35
|
-
identifier = $1
|
36
|
-
scenario = "#{identifier}_#{FactoryToys.scenario}".to_sym
|
37
|
-
raise MissingScenarioError, scenario unless self.data[scenario]
|
38
|
-
eval(self.data[scenario])
|
39
|
-
@output += eval(scenario.to_s) + "\n\n"
|
40
|
-
end
|
41
|
-
end
|
30
|
+
conf_names = self.instance_variables
|
31
|
+
self.process_file(conf_names)
|
42
32
|
@output
|
43
33
|
end
|
44
34
|
|
45
|
-
def add_feature(
|
46
|
-
raise FactoryToys::MissingFeatureDefinitionError if
|
47
|
-
eval(
|
35
|
+
def add_feature(feature_def)
|
36
|
+
raise FactoryToys::MissingFeatureDefinitionError if feature_def.blank?
|
37
|
+
eval(feature_def)
|
48
38
|
@output += eval('feature') + "\n\n"
|
49
39
|
end
|
50
40
|
|
41
|
+
def process_file(conf_names)
|
42
|
+
scenarios = conf_names.find_all{|var| var =~ /_#{FactoryToys.scenarios}$/}
|
43
|
+
scenarios.each do |feature_name|
|
44
|
+
self.process_scenarios(feature_name)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def process_scenarios(feature_name)
|
49
|
+
feature = eval(feature_name)
|
50
|
+
options = self.get_options(feature)
|
51
|
+
options.each do |option|
|
52
|
+
self.add_scenario(feature, option, feature_name)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def add_scenario(feature, option, feature_name)
|
57
|
+
eval(self.option_string(feature, option))
|
58
|
+
scenario_name = self.get_scenario_name(feature_name)
|
59
|
+
raise MissingScenarioError, scenario_name unless self.data[scenario_name]
|
60
|
+
eval(self.data[scenario_name])
|
61
|
+
@output += eval(scenario_name.to_s) + "\n\n"
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_scenario_name(feature_name)
|
65
|
+
feature_name =~ /^@(.+)_#{FactoryToys.scenarios}$/
|
66
|
+
identifier = $1
|
67
|
+
return "#{identifier}_#{FactoryToys.scenario}".to_sym
|
68
|
+
end
|
69
|
+
|
51
70
|
def data
|
52
71
|
return @data if @data
|
53
72
|
file = File.open(@filename, 'r')
|
@@ -77,20 +96,21 @@ module FactoryToys
|
|
77
96
|
end
|
78
97
|
|
79
98
|
def get_options(scenario)
|
80
|
-
all_options = []
|
99
|
+
all_options = [[]]
|
81
100
|
if scenario[:foreach]
|
82
101
|
self.get_option_types(scenario[:foreach]).each do |element|
|
83
|
-
|
84
|
-
if all_options.empty?
|
85
|
-
all_options = scenario[element].map{|element_value| [element_value]}
|
86
|
-
else
|
87
|
-
all_options = add_option(all_options, scenario[element])
|
88
|
-
end
|
102
|
+
all_options = process_options(all_options, scenario[element], element)
|
89
103
|
end
|
90
104
|
end
|
91
105
|
return all_options
|
92
106
|
end
|
93
107
|
|
108
|
+
def process_options(all_options, elements, element)
|
109
|
+
raise MissingForeachListError, element.to_s unless elements.is_a?(Array)
|
110
|
+
# return elements.map{|element_value| [element_value]} if all_options.empty?
|
111
|
+
return self.add_option(all_options, elements)
|
112
|
+
end
|
113
|
+
|
94
114
|
def add_option(all_options, elements)
|
95
115
|
options = all_options.clone
|
96
116
|
all_options = []
|
data/lib/factory_toys/parser.rb
CHANGED
@@ -28,13 +28,24 @@ module FactoryToys
|
|
28
28
|
def process_element(rows, row)
|
29
29
|
if rows[row] =~ /^[\s]*([^\s]+)[\s]*=[\s]*<<-([^\s]+)[\s]*$/
|
30
30
|
name, start_text = $1, $2
|
31
|
+
self.make_instance_variable(rows, row)
|
31
32
|
rows = self.extract_element(rows, row, name, start_text)
|
32
33
|
return rows, row
|
33
34
|
else
|
35
|
+
self.make_instance_variable(rows, row)
|
34
36
|
return rows, row + 1
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
40
|
+
def make_instance_variable(rows, row)
|
41
|
+
if rows[row] =~ /^([\s]*)([^\s]+)([\s]*)=(.*)$/
|
42
|
+
unless [':','"','"','@'].include?($2[0..0]) or
|
43
|
+
['>'].include?($4[0..0])
|
44
|
+
rows[row] = "#{$1}@#{$2}#{$3}=#{$4}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
38
49
|
def extract_element(rows, row, name, start_text)
|
39
50
|
end_row = find_row(rows, row, start_text)
|
40
51
|
elements[name.to_sym] = rows[row..end_row].join("\n")
|
@@ -12,13 +12,20 @@ describe FactoryToys::Parser do
|
|
12
12
|
it 'returns straight text in the under :base' do
|
13
13
|
parser = FactoryToys::Parser.new('hello="hello there"')
|
14
14
|
parser.elements.should ==
|
15
|
-
{:base => 'hello="hello there"'}
|
15
|
+
{:base => '@hello="hello there"'}
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'returns straight text in the under :base with multiple lines' do
|
19
|
-
parser = FactoryToys::Parser.new(
|
19
|
+
parser = FactoryToys::Parser.new("hello='hello there'\ngoodbye='bye bye'")
|
20
20
|
parser.elements.should ==
|
21
|
-
{:base =>
|
21
|
+
{:base => "@hello='hello there'\n@goodbye='bye bye'"}
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'does not break hashs' do
|
25
|
+
parser = FactoryToys::Parser.new("hello_hash = {\n:hello='hello there',\n:goodbye='bye bye'}")
|
26
|
+
parser.elements.should ==
|
27
|
+
{:base => "@hello_hash = {\n:hello='hello there',\n:goodbye='bye bye'}"}
|
28
|
+
|
22
29
|
end
|
23
30
|
|
24
31
|
context 'extracting from multi-line comment' do
|
@@ -27,18 +34,18 @@ describe FactoryToys::Parser do
|
|
27
34
|
end
|
28
35
|
|
29
36
|
it 'removes excess white space' do
|
30
|
-
run_factory[:other_string].should == "other_string = <<-TestData\n" +
|
37
|
+
run_factory[:other_string].should == "@other_string = <<-TestData\n" +
|
31
38
|
"value=test\n" +
|
32
39
|
"TestData"
|
33
40
|
end
|
34
41
|
|
35
42
|
it "returns unextracted data" do
|
36
|
-
run_factory[:base].should == "test='testing'\
|
43
|
+
run_factory[:base].should == "@test='testing'\n@greeting='Hello Again'"
|
37
44
|
end
|
38
45
|
|
39
46
|
it "does not remove blank lines" do
|
40
47
|
run_factory("\n\ndate='Dont look at me??'")[:base].should ==
|
41
|
-
"test='testing'\
|
48
|
+
"@test='testing'\n@greeting='Hello Again'\n\n\n@date='Dont look at me??'"
|
42
49
|
end
|
43
50
|
|
44
51
|
it "when named variables only" do
|
@@ -50,7 +57,7 @@ Data
|
|
50
57
|
parser = FactoryToys::Parser.new(string)
|
51
58
|
|
52
59
|
parser.elements[:base].should == ''
|
53
|
-
parser.elements[:other_string].should == "other_string = <<-TestData\n" +
|
60
|
+
parser.elements[:other_string].should == "@other_string = <<-TestData\n" +
|
54
61
|
"value=test\n" +
|
55
62
|
"TestData"
|
56
63
|
end
|
data/spec/factory_toys_spec.rb
CHANGED
@@ -2,7 +2,10 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
2
|
|
3
3
|
describe "FactoryToys" do
|
4
4
|
before do
|
5
|
-
|
5
|
+
path = File.dirname(__FILE__)
|
6
|
+
path += Dir.pwd + '/' unless path[0..0] == '/'
|
7
|
+
Object.send(:remove_const, :RAILS_ROOT) if Object.const_defined?(:RAILS_ROOT)
|
8
|
+
Object.const_set(:RAILS_ROOT, path + '/../tmp/empty')
|
6
9
|
end
|
7
10
|
|
8
11
|
context '#update_features' do
|
@@ -57,9 +60,11 @@ describe "FactoryToys" do
|
|
57
60
|
|
58
61
|
context 'actually produce a file' do
|
59
62
|
it 'creates a file' do
|
60
|
-
FileUtils.rm_r(FactoryToys.features_location + '/*', :force => true)
|
61
63
|
Object.send(:remove_const, :RAILS_ROOT)
|
62
|
-
|
64
|
+
path = File.dirname(__FILE__)
|
65
|
+
path += Dir.pwd + '/' unless path[0..0] == '/'
|
66
|
+
Object.const_set(:RAILS_ROOT, path + '/../tmp')
|
67
|
+
FileUtils.rm_r(FactoryToys.features_location + '/*', :force => true)
|
63
68
|
FactoryToys.update_features
|
64
69
|
end
|
65
70
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# Auto Generated Features
|
2
|
-
# Generated: Wed Sep 15
|
3
|
-
# Source File: /Users/tom025/rails/factory-toys
|
2
|
+
# Generated: Wed Sep 15 18:31:15 +0100 2010
|
3
|
+
# Source File: /Users/tom025/rails/factory-toys/spec/../tmp/ffactories/simple_factory.rb
|
4
4
|
|
5
5
|
Test Instruction Queue and Processiung
|
6
6
|
In order to ensure the Back Office Processes work as expected
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: factory_toys
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 3
|
10
|
+
version: 0.2.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- David Henry
|