def method_missing(name, *args, &block)
      if Octofacts::Manipulators.run(self, name, *args, &block)
        @facts_manipulated = true
        return self
      end

      if facts.respond_to?(name, false)
        if args[0].is_a?(String) || args[0].is_a?(Symbol)
          args[0] = string_or_symbolized_key(args[0])
        end
        return facts.send(name, *args)
      end

      raise NameError, "Unknown method '#{name}' in #{self.class}"
    end
def method_missing(name, *args, &block)
      if Octofacts::Manipulators.run(self, name, *args, &block)
        @facts_manipulated = true
        return self
      end

      if facts.respond_to?(name, false)
        if args[0].is_a?(String) || args[0].is_a?(Symbol)
          args[0] = string_or_symbolized_key(args[0])
        end
        return facts.send(name, *args)
      end

      raise NameError, "Unknown method '#{name}' in #{self.class}"
    end
Missing method - this is used to dispatch to manipulators or to call a Hash method in the facts.

 Try calling a Manipulator method, delegate to the facts hash or else error out.

 Returns this object (so that calls to manipulators can be chained).