sandwich 0.0.12 → 0.0.13
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/sandwich/cucumber/model_steps.rb +1 -5
- data/lib/sandwich/cucumber/table_steps.rb +4 -0
- data/lib/sandwich/model/base.rb +4 -0
- data/lib/sandwich/model/machinist.rb +13 -25
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.13
|
@@ -2,7 +2,7 @@ require 'sandwich/ext/string'
|
|
2
2
|
|
3
3
|
Given /^((?:an?|the|\d+) .+)$/ do |what| end
|
4
4
|
|
5
|
-
Transform /(?:an?|\d
|
5
|
+
Transform /(?:an?|\d+|the) .+/ do |match|
|
6
6
|
materialize!(match)
|
7
7
|
end
|
8
8
|
|
@@ -10,10 +10,6 @@ Given /^(an?|the|\d+) (.+) with the following attributes:$/ do |total, what, tab
|
|
10
10
|
total.times { record!(what, table.rows_hash) }
|
11
11
|
end
|
12
12
|
|
13
|
-
Transform /the (.+?) "([^\"]*)"$/ do |what, value|
|
14
|
-
record(what, value)
|
15
|
-
end
|
16
|
-
|
17
13
|
Given /^(.+) belong(?:ing|s) to (an?|the) (.+)$/ do |child, determiner, rest|
|
18
14
|
d = definition("#{determiner} #{rest}")
|
19
15
|
a = child.class.reflect_on_association(d.raw_model.underscore.to_sym)
|
@@ -10,3 +10,7 @@ end
|
|
10
10
|
Then /^I should see #{qc} in the (\w+) data row of (.+)$/ do |value, ordinal, path|
|
11
11
|
page.should have_xpath("(#{xpath(selector_for(path))}//tr[td])[#{ordinal.to_i}]", :text => value)
|
12
12
|
end
|
13
|
+
|
14
|
+
Then /^I should see (\d+) entr(?:y|ies) in ([^\"]+)$/ do |total, path|
|
15
|
+
page.should have_xpath("#{xpath(selector_for(path))}//tr[td]", :count => total.to_i)
|
16
|
+
end
|
data/lib/sandwich/model/base.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'strscan'
|
2
2
|
|
3
3
|
module Sandwich
|
4
|
+
class ModelNotFoundError < StandardError; end
|
5
|
+
|
4
6
|
class DefinitionScanner < StringScanner
|
5
7
|
def initialize(str, attribute_separators)
|
6
8
|
super
|
@@ -142,6 +144,8 @@ module Sandwich
|
|
142
144
|
else
|
143
145
|
record(model, values)
|
144
146
|
end
|
147
|
+
rescue ModelNotFoundError
|
148
|
+
return match
|
145
149
|
end
|
146
150
|
|
147
151
|
def definition(str)
|
@@ -33,45 +33,33 @@ module Sandwich
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def initialize(key, model)
|
36
|
-
@key, @model = key
|
36
|
+
@key, @model = if (key.to_s == model.name.underscore)
|
37
|
+
[:master, model]
|
38
|
+
else
|
39
|
+
[key, model]
|
40
|
+
end
|
37
41
|
end
|
38
42
|
|
39
43
|
def get(args)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
when Hash
|
44
|
-
@model.find(:first, :conditions => args)
|
45
|
-
else
|
46
|
-
@model.find(:first, :conditions => @model.default_attribute_args(args, :find))
|
47
|
-
end
|
48
|
-
|
49
|
-
raise "Could not find model for args: #{args.inspect}" if result.nil?
|
50
|
-
|
51
|
-
result
|
44
|
+
@model.find(:first, :conditions => prepare_args(args, :find)).tap do |result|
|
45
|
+
raise "Could not find model for args: #{args.inspect}" if result.nil?
|
46
|
+
end
|
52
47
|
end
|
53
48
|
|
54
49
|
def create(args = nil)
|
55
|
-
|
56
|
-
|
57
|
-
case args
|
58
|
-
when Hash
|
59
|
-
@model.make(@key, args)
|
60
|
-
else
|
61
|
-
@model.make(@key, @model.default_attribute_args(args, :create))
|
62
|
-
end
|
50
|
+
@model.make(@key, prepare_args(args, :create))
|
63
51
|
end
|
64
52
|
|
65
53
|
private
|
66
54
|
|
67
|
-
def prepare_args(args)
|
55
|
+
def prepare_args(args, op)
|
68
56
|
case args
|
69
57
|
when Hash
|
70
58
|
Hash[*args.each_pair.map { |k, v| [k.underscore, prepare_value(k, v)] }.flatten]
|
71
59
|
when nil
|
72
60
|
{}
|
73
61
|
else
|
74
|
-
args
|
62
|
+
@model.default_attribute_args(args, op)
|
75
63
|
end
|
76
64
|
end
|
77
65
|
|
@@ -103,7 +91,7 @@ module Sandwich
|
|
103
91
|
def record!(name, args)
|
104
92
|
materializer = Materializer[name]
|
105
93
|
|
106
|
-
|
94
|
+
raise ModelNotFoundError, "No model found for '#{name}'" if materializer.nil?
|
107
95
|
|
108
96
|
materializer.create(args)
|
109
97
|
end
|
@@ -111,7 +99,7 @@ module Sandwich
|
|
111
99
|
def record(name, args)
|
112
100
|
materializer = Materializer[name]
|
113
101
|
|
114
|
-
|
102
|
+
raise ModelNotFoundError, "No model found for '#{name}'" if materializer.nil?
|
115
103
|
|
116
104
|
materializer.get(args)
|
117
105
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 13
|
9
|
+
version: 0.0.13
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- David Leal
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-05-
|
17
|
+
date: 2010-05-11 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|