Removing .DS_Store and .pid files from repository.
[merb_radiant.git] / lib / radiant / extension.rb_
blob451a5f33e7ef63c79012fc97af30c2d0912bad62
1 # FIXME Rails dependencies / use gem
3 require 'annotatable'
4 require 'simpleton'
5 require 'radiant/admin_ui'
7 module Radiant
8   class Extension
9     include Simpleton
10     include Annotatable
12     annotate :version, :description, :url, :root, :extension_name
14     attr_writer :active
16     def active?
17       @active
18     end
19     
20     def migrator
21       ExtensionMigrator.new(self)
22     end
24     def admin
25       AdminUI.instance
26     end
28     def meta
29       self.class.meta
30     end
32     class << self
34       def activate_extension
35         return if instance.active?
36         instance.activate if instance.respond_to? :activate
37         ActionController::Routing::Routes.reload
38         instance.active = true
39       end
40       alias :activate :activate_extension
42       def deactivate_extension
43         return unless instance.active?
44         instance.active = false
45         instance.deactivate if instance.respond_to? :deactivate
46       end
47       alias :deactivate :deactivate_extension
49       def define_routes(&block)
50         route_definitions << block
51       end
53       def inherited(subclass)
54         subclass.extension_name = subclass.name.to_name('Extension')
55       end
57       def meta
58         Radiant::ExtensionMeta.find_or_create_by_name(extension_name)
59       end
61       def route_definitions
62         @route_definitions ||= []
63       end
65     end
66   end
67 end