lib/json_builder/compiler.rb in json_builder-3.0.2 vs lib/json_builder/compiler.rb in json_builder-3.0.3
- old
+ new
@@ -35,21 +35,24 @@
def array(items, &block)
@_array = Elements.new(@_scope, items, &block)
end
# Need to return a Key instance to allow for arrays to be handled appropriately
- def method_missing(key, *args, &block)
- if @_scope.respond_to?(key)
- @_scope.send(key, *args, &block)
+ def method_missing(key_name, *args, &block)
+ if @_scope.respond_to?(key_name) && !ignore_scope_methods.include?(key_name)
+ @_scope.send(key_name, *args, &block)
else
- member = Member.new(key, @_scope, *args, &block)
- @_members << member
- member
+ key(key_name, *args, &block)
end
end
- alias_method :key, :method_missing
+ def key(key_name, *args, &block)
+ member = Member.new(key_name, @_scope, *args, &block)
+ @_members << member
+ member
+ end
+
# Once all nodes are compiled, build the string
def to_s
include_callback @_array ? @_array.to_s : "{#{@_members.collect(&:to_s).join(', ')}}"
end
@@ -68,8 +71,13 @@
end
def copy_instance_variables_from(object, exclude = []) #:nodoc:
vars = object.instance_variables.map(&:to_s) - exclude.map(&:to_s)
vars.each { |name| instance_variable_set(name, object.instance_variable_get(name)) }
+ end
+
+ # There are some special methods that need to be ignored that may be matched within +@_scope+.
+ def ignore_scope_methods
+ [:id]
end
end
end