61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
# File 'lib/modelizer.rb', line 61
def model_template_for klass, defaults = {}, &block
if defaults.nil? && !block
raise ArgumentError, "default attributes or lazy block required"
end
::Modelizer.cache[klass] = [defaults, block]
klass = klass.name
nsklass = Modelizer.namespace? ? klass : klass.split("::").last
model = ::Modelizer.underscore nsklass
module_eval <<-END, __FILE__, __LINE__ + 1
def valid_#{model}_attributes extras = {}
valid_model_template_attributes #{klass}, extras
end
def valid_#{model}_attributes_without *excluded
valid_model_template_attributes_without #{klass}, excluded
end
def new_#{model} extras = {}
assign_model_template_attributes #{klass}.new,
valid_model_template_attributes(#{klass}, extras)
end
def new_#{model}_without *excluded
assign_model_template_attributes #{klass}.new,
valid_model_template_attributes_without(#{klass}, excluded)
end
def create_#{model} extras = {}
(m = new_#{model}(extras)).save; m
end
def create_#{model}! extras = {}
(m = new_#{model}(extras)).save!; m
end
def create_#{model}_without *excluded
(m = new_#{model}_without(*excluded)).save; m
end
def create_#{model}_without! *excluded
(m = new_#{model}_without(*excluded)).save!; m
end
END
file, line = caller.first.split ":"
line = line.to_i
test = <<-END
def test_model_template_for_#{model}
assert (m = new_#{model}).valid?,
"#{klass} template is invalid: " +
m.errors.full_messages.to_sentence
end
END
if TEST_CLASSES.include? self
eval <<-END, nil, file, line - 2
class ::ModelTemplateFor#{klass}Test < ActiveSupport::TestCase
#{test}
end
END
else
module_eval test, file, line - 1
end
end
|