erector 0.6.4 → 0.6.6
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/VERSION.yml +1 -1
- data/lib/erector/widget.rb +6 -2
- data/spec/erector/widget_spec.rb +17 -1
- metadata +2 -2
data/VERSION.yml
CHANGED
data/lib/erector/widget.rb
CHANGED
@@ -153,8 +153,10 @@ module Erector
|
|
153
153
|
|
154
154
|
SPACES_PER_INDENT = 2
|
155
155
|
|
156
|
-
|
156
|
+
RESERVED_INSTANCE_VARS = [:helpers, :assigns, :block, :parent, :output, :prettyprint, :indentation, :at_start_of_line]
|
157
157
|
|
158
|
+
attr_reader *RESERVED_INSTANCE_VARS
|
159
|
+
|
158
160
|
def initialize(assigns={}, &block)
|
159
161
|
unless assigns.is_a? Hash
|
160
162
|
raise "Erector's API has changed. Now you should pass only an options hash into Widget.new; the rest come in via to_s, or by using #widget."
|
@@ -223,8 +225,10 @@ module Erector
|
|
223
225
|
end
|
224
226
|
|
225
227
|
def assign_local(name, value)
|
228
|
+
raise ArgumentError, "Sorry, #{name} is a reserved variable name for Erector. Please choose a different name." if RESERVED_INSTANCE_VARS.include?(name)
|
226
229
|
instance_variable_set("@#{name}", value)
|
227
230
|
if any_are_needed?
|
231
|
+
raise ArgumentError, "Sorry, #{name} is a reserved method name for Erector. Please choose a different name." if respond_to?(name)
|
228
232
|
metaclass.module_eval do
|
229
233
|
attr_reader name
|
230
234
|
end
|
@@ -268,7 +272,7 @@ module Erector
|
|
268
272
|
#
|
269
273
|
# # Options: see #to_s
|
270
274
|
def to_a(options = {}, &blk)
|
271
|
-
_render(options, &blk).to_a
|
275
|
+
_render({:output => []}.merge(options), &blk).to_a
|
272
276
|
end
|
273
277
|
|
274
278
|
def _render(options = {}, &blk)
|
data/spec/erector/widget_spec.rb
CHANGED
@@ -80,7 +80,7 @@ module WidgetSpec
|
|
80
80
|
#
|
81
81
|
# (time_for_to_a <= time_for_string).should be_true
|
82
82
|
# end
|
83
|
-
|
83
|
+
end
|
84
84
|
|
85
85
|
describe "#instruct" do
|
86
86
|
it "when passed no arguments; returns an XML declaration with version 1 and utf-8" do
|
@@ -702,6 +702,15 @@ module WidgetSpec
|
|
702
702
|
|
703
703
|
end
|
704
704
|
|
705
|
+
describe "assigning local variables" do
|
706
|
+
it "attempting to overwrite a reserved instance variable raises error" do
|
707
|
+
lambda {
|
708
|
+
Erector::Widget.new(:output => "foo")
|
709
|
+
}.should raise_error(ArgumentError)
|
710
|
+
end
|
711
|
+
end
|
712
|
+
|
713
|
+
|
705
714
|
describe "when declaring parameters with the 'needs' macro" do
|
706
715
|
it "doesn't complain if there aren't any needs declared" do
|
707
716
|
class Thing1 < Erector::Widget
|
@@ -815,6 +824,13 @@ module WidgetSpec
|
|
815
824
|
thing = NeedlessThing.new(:love => "all we need")
|
816
825
|
lambda {thing.love}.should raise_error
|
817
826
|
end
|
827
|
+
|
828
|
+
it "complains if you attempt to 'need' a variable whose name overlaps with an existing method" do
|
829
|
+
class ThingWithOverlap < Erector::Widget
|
830
|
+
needs :text
|
831
|
+
end
|
832
|
+
lambda { ThingWithOverlap.new(:text => "alas") }.should raise_error(ArgumentError)
|
833
|
+
end
|
818
834
|
|
819
835
|
end
|
820
836
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pivotal Labs
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-05-
|
12
|
+
date: 2009-05-25 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|