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