Anonymous avatar Anonymous committed 38c19b9

refactor: added introduce factory refactoring

Comments (0)

Files changed (1)

ropemacs/refactor.py

 import rope.refactor.rename
 import rope.refactor.restructure
 import rope.refactor.usefunction
+import rope.refactor.introduce_factory
 
 from ropemacs import dialog, lisputils
 
     optionals = {
         'remove': dialog.Data('Remove the definition: ',
                               values=['yes', 'no'], default='yes'),
-        'only_current':
-            dialog.Data('Inline this occurrence only: ',
-                        values=['yes', 'no'], default='no'),
+        'only_current': dialog.Data('Inline this occurrence only: ',
+                                    values=['yes', 'no'], default='no'),
         'resources': dialog.Data('Files to apply this refactoring on: ')}
 
     def _create_refactoring(self):
         return self.organizer.organize_imports(self.resource)
 
 
+class MethodObject(Refactoring):
+    saveall = False
+    confs = {'classname': dialog.Data('New class name: ',
+                                      default='_ExtractedClass')}
+
+    def _create_refactoring(self):
+        self.objecter = rope.refactor.method_object.MethodObject(
+            self.project, self.resource, self.offset)
+
+    def _calculate_changes(self, values, task_handle):
+        classname = values.get('classname')
+        return self.objecter.get_changes(classname)
+
+
+class IntroduceFactory(Refactoring):
+    saveall = True
+    key = 'f'
+    confs = {'factory_name': dialog.Data('Factory name: ', default='create_object')}
+    optionals = {'global_factory': dialog.Data(
+            'Make global: ', values=['yes', 'no'], default='yes'),
+                 'resources': dialog.Data('Files to apply this refactoring on: ')}
+
+    def _create_refactoring(self):
+        self.factory = rope.refactor.introduce_factory.IntroduceFactory(
+            self.project, self.resource, self.offset)
+
+    def _calculate_changes(self, values, task_handle):
+        name = values.get('factory_name')
+        global_ = values.get('global_factory', 'yes') == 'yes'
+        resources = _resources(self.project, values.get('resources'))
+        return self.factory.get_changes(name, global_factory=global_,
+                                        resources=resources,
+                                        task_handle=task_handle)
+
+
 class _GenerateElement(Refactoring):
 
     def _create_refactoring(self):
         self.interface._goto_location(self.generator.get_location())
 
 
-class MethodObject(Refactoring):
-    saveall = False
-    confs = {'classname': dialog.Data('New class name: ',
-                                      default='_ExtractedClass')}
-
-    def _create_refactoring(self):
-        self.objecter = rope.refactor.method_object.MethodObject(
-            self.project, self.resource, self.offset)
-
-    def _calculate_changes(self, values, task_handle):
-        classname = values.get('classname')
-        return self.objecter.get_changes(classname)
-
-
 class GenerateVariable(_GenerateElement):
     key = 'n v'
 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.