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