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