116: def flexmock(*args)
117: name = nil
118: quick_defs = {}
119: domain_obj = nil
120: safe_mode = false
121: model_class = nil
122: while ! args.empty?
123: case args.first
124: when :base, :safe
125: safe_mode = (args.shift == :safe)
126: domain_obj = args.shift
127: when :model
128: args.shift
129: model_class = args.shift
130: when String, Symbol
131: name = args.shift.to_s
132: when Hash
133: quick_defs = args.shift
134: else
135: domain_obj = args.shift
136: end
137: end
138: raise UsageError, "a block is required in safe mode" if safe_mode && ! block_given?
139:
140: if domain_obj
141: mock = ContainerHelper.make_partial_proxy(self, domain_obj, name, safe_mode)
142: result = domain_obj
143: elsif model_class
144: id = ContainerHelper.next_id
145: result = mock = FlexMock.new("#{model_class}_#{id}", self)
146: else
147: result = mock = FlexMock.new(name || "unknown", self)
148: end
149: mock.should_receive(quick_defs)
150: yield(mock) if block_given?
151: flexmock_remember(mock)
152: ContainerHelper.add_model_methods(mock, model_class, id) if model_class
153: result
154: end