factory_toys 0.2.0 → 0.2.1
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 +2 -1
- data/lib/factory_toys/f_factory.rb +36 -19
- data/lib/factory_toys/parser.rb +1 -1
- data/lib/factory_toys.rb +2 -1
- data/spec/factory_toys/f_factory_spec.rb +0 -6
- data/spec/factory_toys/parser_spec.rb +12 -12
- data/spec/factory_toys_spec.rb +22 -3
- data/spec/spec_helper.rb +11 -0
- data/tmp/features/simple_factory.feature +70 -0
- data/tmp/ffactories/simple_factory.rb +1 -4
- metadata +4 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
data/factory_toys.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{factory_toys}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["David Henry", "Thomas Brand"]
|
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
"spec/factory_toys_spec.rb",
|
33
33
|
"spec/spec.opts",
|
34
34
|
"spec/spec_helper.rb",
|
35
|
+
"tmp/features/simple_factory.feature",
|
35
36
|
"tmp/ffactories/simple_factory.rb"
|
36
37
|
]
|
37
38
|
s.homepage = %q{http://github.com/tom025/factory-toys}
|
@@ -4,13 +4,16 @@ module FactoryToys
|
|
4
4
|
attr_accessor :data
|
5
5
|
|
6
6
|
def initialize(filename)
|
7
|
-
@output = ''
|
8
7
|
@filename = filename
|
9
|
-
|
8
|
+
|
9
|
+
@output = "# Auto Generated Features\n"
|
10
|
+
@output += "# Generated: #{Time.now.to_s}\n"
|
11
|
+
@output += "# Source File: #{@filename}\n\n"
|
12
|
+
|
10
13
|
end
|
11
14
|
|
12
15
|
def write
|
13
|
-
|
16
|
+
filename = File.basename(@filename, '.rb') + '.feature'
|
14
17
|
File.open(FactoryToys.features_location + "/" + filename, 'w') do |f|
|
15
18
|
f.puts self.output
|
16
19
|
end
|
@@ -19,36 +22,35 @@ module FactoryToys
|
|
19
22
|
def output
|
20
23
|
eval(self.data[:base])
|
21
24
|
|
22
|
-
self.
|
25
|
+
self.add_feature(self.data[:feature])
|
23
26
|
|
24
27
|
locals = self.send(:local_variables)
|
25
28
|
scenarios = locals.find_all{|var| var =~ /_#{FactoryToys.scenarios}$/}
|
26
|
-
scenarios.each do |
|
27
|
-
|
29
|
+
scenarios.each do |scenario_name|
|
30
|
+
feature = eval(scenario_name)
|
31
|
+
options = get_options(feature)
|
28
32
|
options.each do |option|
|
29
|
-
eval(self.
|
30
|
-
|
33
|
+
eval(self.option_string(feature, option))
|
34
|
+
scenario_name =~ /^(.+)_#{FactoryToys.scenarios}$/
|
31
35
|
identifier = $1
|
32
|
-
scenario = "#{
|
33
|
-
raise MissingScenarioError, scenario unless
|
34
|
-
eval(
|
35
|
-
output += scenario + "\n\n"
|
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"
|
36
40
|
end
|
37
41
|
end
|
42
|
+
@output
|
38
43
|
end
|
39
44
|
|
40
45
|
def add_feature(feature)
|
41
46
|
raise FactoryToys::MissingFeatureDefinitionError if feature.blank?
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
def add_scenario(scenario, options)
|
46
|
-
|
47
|
+
eval(feature)
|
48
|
+
@output += eval('feature') + "\n\n"
|
47
49
|
end
|
48
50
|
|
49
51
|
def data
|
50
52
|
return @data if @data
|
51
|
-
file = File.open(
|
53
|
+
file = File.open(@filename, 'r')
|
52
54
|
@data = Parser.new(file.read).elements
|
53
55
|
end
|
54
56
|
|
@@ -56,7 +58,22 @@ module FactoryToys
|
|
56
58
|
return '' unless scenario[:foreach]
|
57
59
|
foreach = get_option_types(scenario[:foreach], false)
|
58
60
|
raise InternalForEachError unless foreach.size == option.size
|
59
|
-
foreach.map(&:to_s).join(', ') + ' = ' + option.map(
|
61
|
+
foreach.map(&:to_s).join(', ') + ' = ' + option.map{|o| self.write_value(o)}.join(', ')
|
62
|
+
end
|
63
|
+
|
64
|
+
def write_value(o)
|
65
|
+
case o
|
66
|
+
when Symbol
|
67
|
+
return ":#{o}"
|
68
|
+
when String
|
69
|
+
return "'#{o}'"
|
70
|
+
when Numeric
|
71
|
+
return o.to_s
|
72
|
+
when Array
|
73
|
+
"[#{o.map{|v| self.write_value(v).join(',')}}]"
|
74
|
+
when Hash
|
75
|
+
"{#{o.map{|k,v| self.write_value(k) + ' => ' + self.write_value(v)}.join(', ')}}"
|
76
|
+
end
|
60
77
|
end
|
61
78
|
|
62
79
|
def get_options(scenario)
|
data/lib/factory_toys/parser.rb
CHANGED
data/lib/factory_toys.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
|
1
2
|
module FactoryToys
|
2
3
|
class MissingEnvironmentError < StandardError; end
|
3
4
|
class CloseTagNotFoundError < StandardError; end
|
@@ -28,7 +29,7 @@ module FactoryToys
|
|
28
29
|
|
29
30
|
protected
|
30
31
|
def source_files
|
31
|
-
Dir.glob(self.source_location
|
32
|
+
Dir.glob(self.source_location + '/*.rb')
|
32
33
|
rescue Errno::ENOENT => e
|
33
34
|
return "Source Directory Does not exist: #{self.source_directory}"
|
34
35
|
end
|
@@ -36,17 +36,17 @@ describe FactoryToys::Parser do
|
|
36
36
|
run_factory[:base].should == "test='testing'\ngreeting='Hello Again'"
|
37
37
|
end
|
38
38
|
|
39
|
-
it "
|
39
|
+
it "does not remove blank lines" do
|
40
40
|
run_factory("\n\ndate='Dont look at me??'")[:base].should ==
|
41
|
-
"test='testing'\ngreeting='Hello Again'\ndate='Dont look at me??'"
|
41
|
+
"test='testing'\ngreeting='Hello Again'\n\n\ndate='Dont look at me??'"
|
42
42
|
end
|
43
43
|
|
44
44
|
it "when named variables only" do
|
45
45
|
string = <<-Data
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
other_string = <<-TestData
|
47
|
+
value=test
|
48
|
+
TestData
|
49
|
+
Data
|
50
50
|
parser = FactoryToys::Parser.new(string)
|
51
51
|
|
52
52
|
parser.elements[:base].should == ''
|
@@ -57,12 +57,12 @@ describe FactoryToys::Parser do
|
|
57
57
|
|
58
58
|
def run_factory(additional_text='')
|
59
59
|
string = <<-Data
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
60
|
+
test='testing'
|
61
|
+
other_string = <<-TestData
|
62
|
+
value=test
|
63
|
+
TestData
|
64
|
+
greeting='Hello Again'
|
65
|
+
Data
|
66
66
|
parser = FactoryToys::Parser.new(string + additional_text)
|
67
67
|
parser.elements
|
68
68
|
end
|
data/spec/factory_toys_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
2
|
|
3
3
|
describe "FactoryToys" do
|
4
4
|
before do
|
5
|
-
Object.const_set(:RAILS_ROOT, File.dirname(__FILE__) + '/../tmp/empty') unless Object.const_defined?(:RAILS_ROOT)
|
5
|
+
Object.const_set(:RAILS_ROOT, Dir.pwd + '/' + File.dirname(__FILE__) + '/../tmp/empty') unless Object.const_defined?(:RAILS_ROOT)
|
6
6
|
end
|
7
7
|
|
8
8
|
context '#update_features' do
|
@@ -28,9 +28,19 @@ describe "FactoryToys" do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'calls Process FFactory for each file' do
|
31
|
+
factory = mock(:fact1, :write => true)
|
31
32
|
FactoryToys.stub!(:source_files).and_return(['file1', 'file2'])
|
32
|
-
FactoryToys::FFactory.should_receive(:new).with('file1').and_return(
|
33
|
-
FactoryToys::FFactory.should_receive(:new).with('file2').and_return(
|
33
|
+
FactoryToys::FFactory.should_receive(:new).with('file1').and_return(factory)
|
34
|
+
FactoryToys::FFactory.should_receive(:new).with('file2').and_return(factory)
|
35
|
+
FactoryToys.update_features
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'calls write for each file' do
|
39
|
+
factory = mock(:fact1)
|
40
|
+
FactoryToys.stub!(:source_files).and_return(['file1', 'file2'])
|
41
|
+
FactoryToys::FFactory.stub!(:new).and_return(factory)
|
42
|
+
factory.should_receive(:write).and_return(true)
|
43
|
+
factory.should_receive(:write).and_return(true)
|
34
44
|
FactoryToys.update_features
|
35
45
|
end
|
36
46
|
end
|
@@ -44,6 +54,15 @@ describe "FactoryToys" do
|
|
44
54
|
FactoryToys.scenarios.should == 'feature'
|
45
55
|
end
|
46
56
|
end
|
57
|
+
|
58
|
+
context 'actually produce a file' do
|
59
|
+
it 'creates a file' do
|
60
|
+
FileUtils.rm_r(FactoryToys.features_location + '/*', :force => true)
|
61
|
+
Object.send(:remove_const, :RAILS_ROOT)
|
62
|
+
Object.const_set(:RAILS_ROOT, Dir.pwd + '/' + File.dirname(__FILE__) + '/../tmp')
|
63
|
+
FactoryToys.update_features
|
64
|
+
end
|
65
|
+
end
|
47
66
|
end
|
48
67
|
|
49
68
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,3 +8,14 @@ require 'spec/autorun'
|
|
8
8
|
Spec::Runner.configure do |config|
|
9
9
|
|
10
10
|
end
|
11
|
+
|
12
|
+
SETTLEMENT_METHODS = [DCC_DCC = {:buy => 'dcc from dcc', :to => 'dcc to dcc'},
|
13
|
+
REG_REG = {:buy => 'reg from reg', :to => 'reg to reg'}
|
14
|
+
]
|
15
|
+
|
16
|
+
#implemented here to get tests to pass as in Rails Environment and not ruby core??
|
17
|
+
class String
|
18
|
+
def blank?
|
19
|
+
self.nil? or self == ''
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# Auto Generated Features
|
2
|
+
# Generated: Wed Sep 15 16:47:45 +0100 2010
|
3
|
+
# Source File: /Users/tom025/rails/factory-toys/./spec/../tmp/ffactories/simple_factory.rb
|
4
|
+
|
5
|
+
Test Instruction Queue and Processiung
|
6
|
+
In order to ensure the Back Office Processes work as expected
|
7
|
+
Back Office
|
8
|
+
wants to ensure trades process through queues as required
|
9
|
+
|
10
|
+
|
11
|
+
@selenium @buy_trade_ticket_requirements @login_as_middle_office
|
12
|
+
Ing Trade Ticket Instructions - buy dcc from dcc
|
13
|
+
Given I am on the Instructions Screen
|
14
|
+
When I click the trade row
|
15
|
+
Then I should see "Instruction Details"
|
16
|
+
When I set Settlement Method to "dcc from dcc" for trade
|
17
|
+
Then I should see Settlement Method "dcc from dcc" for trade
|
18
|
+
When I follow "Broker Confirm"
|
19
|
+
Then I should see "Instruct Trade"
|
20
|
+
And I should see trade row
|
21
|
+
When I follow "Instruct Trade" with confirmation
|
22
|
+
Then I should not see trade row
|
23
|
+
And Instruction File exists on Hard Drive
|
24
|
+
|
25
|
+
|
26
|
+
@selenium @buy_trade_ticket_requirements @login_as_middle_office
|
27
|
+
Ing Trade Ticket Instructions - buy reg from reg
|
28
|
+
Given I am on the Instructions Screen
|
29
|
+
When I click the trade row
|
30
|
+
Then I should see "Instruction Details"
|
31
|
+
When I set Settlement Method to "reg from reg" for trade
|
32
|
+
Then I should see Settlement Method "reg from reg" for trade
|
33
|
+
When I follow "Broker Confirm"
|
34
|
+
Then I should see "Instruct Trade"
|
35
|
+
And I should see trade row
|
36
|
+
When I follow "Instruct Trade" with confirmation
|
37
|
+
Then I should not see trade row
|
38
|
+
And Instruction File exists on Hard Drive
|
39
|
+
|
40
|
+
|
41
|
+
@selenium @sell_trade_ticket_requirements @login_as_middle_office
|
42
|
+
Ing Trade Ticket Instructions - sell
|
43
|
+
Given I am on the Instructions Screen
|
44
|
+
When I click the trade row
|
45
|
+
Then I should see "Instruction Details"
|
46
|
+
When I set Settlement Method to "" for trade
|
47
|
+
Then I should see Settlement Method "" for trade
|
48
|
+
When I follow "Broker Confirm"
|
49
|
+
Then I should see "Instruct Trade"
|
50
|
+
And I should see trade row
|
51
|
+
When I follow "Instruct Trade" with confirmation
|
52
|
+
Then I should not see trade row
|
53
|
+
And Instruction File exists on Hard Drive
|
54
|
+
|
55
|
+
|
56
|
+
@selenium @sell_trade_ticket_requirements @login_as_middle_office
|
57
|
+
Ing Trade Ticket Instructions - sell
|
58
|
+
Given I am on the Instructions Screen
|
59
|
+
When I click the trade row
|
60
|
+
Then I should see "Instruction Details"
|
61
|
+
When I set Settlement Method to "" for trade
|
62
|
+
Then I should see Settlement Method "" for trade
|
63
|
+
When I follow "Broker Confirm"
|
64
|
+
Then I should see "Instruct Trade"
|
65
|
+
And I should see trade row
|
66
|
+
When I follow "Instruct Trade" with confirmation
|
67
|
+
Then I should not see trade row
|
68
|
+
And Instruction File exists on Hard Drive
|
69
|
+
|
70
|
+
|
@@ -1,6 +1,3 @@
|
|
1
|
-
SETTLEMENT_METHODS = [DCC_DCC = {:buy => 'dcc from dcc', :to => 'dcc to dcc'},
|
2
|
-
REG_REG = {:buy => 'reg from reg', :to => 'reg to reg'}
|
3
|
-
]
|
4
1
|
feature = <<-Data
|
5
2
|
Test Instruction Queue and Processiung
|
6
3
|
In order to ensure the Back Office Processes work as expected
|
@@ -10,7 +7,7 @@ Data
|
|
10
7
|
|
11
8
|
ing_feature = {
|
12
9
|
:foreach => [:direction, :settlement_method],
|
13
|
-
:direction => [
|
10
|
+
:direction => [:buy, :sell],
|
14
11
|
:settlement_method => SETTLEMENT_METHODS
|
15
12
|
}
|
16
13
|
|
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: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 1
|
10
|
+
version: 0.2.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- David Henry
|
@@ -60,6 +60,7 @@ files:
|
|
60
60
|
- spec/factory_toys_spec.rb
|
61
61
|
- spec/spec.opts
|
62
62
|
- spec/spec_helper.rb
|
63
|
+
- tmp/features/simple_factory.feature
|
63
64
|
- tmp/ffactories/simple_factory.rb
|
64
65
|
has_rdoc: true
|
65
66
|
homepage: http://github.com/tom025/factory-toys
|