def method_missing(method, *args, &block)
      method_sym = key_as_sym(method)
      method_nsym = method_sym.is_a?(Symbol) ? method.to_s[0..-2].to_sym : method


      if method.to_s.end_with?("=")                                   # add new key/value pair, transform value if Hash or Array
        initialize_from_hash({method_nsym => args.first})             # Add Reader/Writer one first need

      elsif container.key?(method_sym)
        container[method_sym]                                         # Add Reader/Writer one first need

      elsif method.to_s.end_with?('?')                                # order of tests is significant,
        attribute?(method_nsym)

      else # TODO: replace following with nil to match OpenStruct or Hash behavior when key not found
        nil
        # e = NoMethodError.new "undefined method `#{method}' for #{self.class.name}", method, args
        # e.set_backtrace caller(1)
        # raise e

      end
    end
def method_missing(method, *args, &block)
      method_sym = key_as_sym(method)
      method_nsym = method_sym.is_a?(Symbol) ? method.to_s[0..-2].to_sym : method


      if method.to_s.end_with?("=")                                   # add new key/value pair, transform value if Hash or Array
        initialize_from_hash({method_nsym => args.first})             # Add Reader/Writer one first need

      elsif container.key?(method_sym)
        container[method_sym]                                         # Add Reader/Writer one first need

      elsif method.to_s.end_with?('?')                                # order of tests is significant,
        attribute?(method_nsym)

      else # TODO: replace following with nil to match OpenStruct or Hash behavior when key not found
        nil
        # e = NoMethodError.new "undefined method `#{method}' for #{self.class.name}", method, args
        # e.set_backtrace caller(1)
        # raise e

      end
    end
Feature: post-assign key/value pair, <attr>?? predicate, create getter/setter on first access