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