Renamed helpers to correspond to renamed Controller classes.
[merb_radiant.git] / lib / radiant / .svn / text-base / admin_ui.rb.svn-base
blobfb6ad25cf5ea372183147834923f843a738eefbc
1 require 'simpleton'
3 module Radiant
4   class AdminUI
5     
6     class DuplicateTabNameError < StandardError; end
7     
8     class Tab
9       attr_accessor :name, :url, :visibility
10       
11       def initialize(name, url, options = {})
12         @name, @url = name, url
13         @visibility = [options[:for], options[:visibility]].flatten.compact
14         @visibility = [:all] if @visibility.empty?
15       end
16       
17       def shown_for?(user)
18         visibility.include?(:all) or
19           visibility.any? { |role| user.send("#{role}?") }
20       end  
21     end
22     
23     class TabSet
24       def initialize
25         @tabs = []
26       end
27     
28       def add(name, url, options = {})
29         options.symbolize_keys!
30         before = options.delete(:before)
31         after = options.delete(:after)
32         tab_name = before || after
33         if self[name]
34           raise DuplicateTabNameError.new("duplicate tab name `#{name}'")
35         else
36           if tab_name
37             index = @tabs.index(self[tab_name])
38             index += 1 if before.nil?
39             @tabs.insert(index, Tab.new(name, url, options))
40           else
41             @tabs << Tab.new(name, url, options)
42           end
43         end
44       end
45       
46       def remove(name)
47         @tabs.delete(self[name])
48       end
49       
50       def size
51         @tabs.size
52       end
53       
54       def [](index)
55         if index.kind_of? Integer
56           @tabs[index]
57         else
58           @tabs.find { |tab| tab.name == index }
59         end
60       end
61       
62       def each
63         @tabs.each { |t| yield t }
64       end
65       
66       def clear
67         @tabs.clear
68       end
69       
70       include Enumerable
71     end
72     
73     include Simpleton
74     
75     attr_accessor :tabs
76     
77     def initialize
78       @tabs = TabSet.new
79     end
80     
81   end
82 end