Class Theme
In: app/models/theme.rb
Parent: Object

Methods

Classes and Modules

Class Theme::DuplicatedIdentifier

Attributes

config  [R] 
id  [R] 

Public Class methods

[Source]

    # File app/models/theme.rb, line 16
16:     def create(id, attributes = {})
17:       if find(id) || system_themes.map(&:id).include?(id)
18:         raise DuplicatedIdentifier
19:       end
20:       Theme.new(id, attributes).save
21:     end

[Source]

    # File app/models/theme.rb, line 23
23:     def find(the_id)
24:       if File.directory?(File.join(user_themes_dir, the_id))
25:         Theme.new(the_id)
26:       else
27:         nil
28:       end
29:     end

[Source]

    # File app/models/theme.rb, line 31
31:     def find_by_owner(owner)
32:       Dir.glob(File.join(user_themes_dir, '*', 'theme.yml')).select do |desc|
33:         config = YAML.load_file(desc)
34:         (config['owner_type'] == owner.class.base_class.name) && (config['owner_id'] == owner.id)
35:       end.map do |desc|
36:         Theme.find(File.basename(File.dirname(desc)))
37:       end
38:     end

[Source]

    # File app/models/theme.rb, line 47
47:   def initialize(id, attributes = {})
48:     @id = id
49:     load_config
50:     attributes.each do |k,v|
51:       self.send("#{k}=", v)
52:     end
53:   end

[Source]

    # File app/models/theme.rb, line 4
 4:     def system_themes
 5:       Dir.glob(RAILS_ROOT + '/public/designs/themes/*').map do |item|
 6:         File.basename(item)
 7:       end.map do |item|
 8:         new(item)
 9:       end
10:     end

[Source]

    # File app/models/theme.rb, line 12
12:     def user_themes_dir
13:       File.join(RAILS_ROOT, 'public', 'user_themes')
14:     end

Public Instance methods

[Source]

    # File app/models/theme.rb, line 63
63:   def ==(other)
64:     other.is_a?(self.class) && (other.id == self.id)
65:   end

[Source]

    # File app/models/theme.rb, line 67
67:   def add_css(filename)
68:     FileUtils.mkdir_p(stylesheets_directory)
69:     FileUtils.touch(stylesheet_path(filename))
70:   end

[Source]

    # File app/models/theme.rb, line 87
87:   def add_image(filename, data)
88:     FileUtils.mkdir_p(images_directory)
89:     File.open(image_path(filename), 'w') do |f|
90:       f.write(data)
91:     end
92:   end

[Source]

    # File app/models/theme.rb, line 83
83:   def css_files
84:     Dir.glob(File.join(stylesheets_directory, '*.css')).map { |f| File.basename(f) }
85:   end

[Source]

    # File app/models/theme.rb, line 94
94:   def image_files
95:     Dir.glob(image_path('*')).map {|item| File.basename(item)}
96:   end

[Source]

     # File app/models/theme.rb, line 110
110:   def image_path(filename)
111:     File.join(images_directory, filename)
112:   end

[Source]

     # File app/models/theme.rb, line 114
114:   def images_directory
115:     File.join(self.class.user_themes_dir, id, 'images')
116:   end

[Source]

    # File app/models/theme.rb, line 55
55:   def name
56:     config['name'] || id
57:   end

[Source]

    # File app/models/theme.rb, line 59
59:   def name=(value)
60:     config['name'] = value
61:   end

[Source]

     # File app/models/theme.rb, line 128
128:   def owner
129:     return nil unless config['owner_type'] && config['owner_id']
130:     @owner ||= config['owner_type'].constantize.find(config['owner_id'])
131:   end

[Source]

     # File app/models/theme.rb, line 133
133:   def owner=(model)
134:     config['owner_type'] = model.class.base_class.name
135:     config['owner_id'] = model.id
136:     @owner = model
137:   end

[Source]

    # File app/models/theme.rb, line 79
79:   def read_css(filename)
80:     File.read(stylesheet_path(filename))
81:   end

[Source]

     # File app/models/theme.rb, line 118
118:   def save
119:     FileUtils.mkdir_p(self.class.user_themes_dir)
120:     FileUtils.mkdir_p(File.join(self.class.user_themes_dir, id))
121:     %w[ common help menu article button search blocks forms login-box ].each do |item|
122:       add_css(item)
123:     end
124:     write_config
125:     self
126:   end

[Source]

     # File app/models/theme.rb, line 98
 98:   def stylesheet_path(filename)
 99:     suffix = ''
100:     unless filename =~ /\.css$/
101:       suffix = '.css'
102:     end
103:     File.join(stylesheets_directory, filename + suffix)
104:   end

[Source]

     # File app/models/theme.rb, line 106
106:   def stylesheets_directory
107:     File.join(Theme.user_themes_dir, self.id, 'stylesheets')
108:   end

[Source]

    # File app/models/theme.rb, line 72
72:   def update_css(filename, content)
73:     add_css(filename)
74:     File.open(stylesheet_path(filename), 'w') do |f|
75:       f.write(content)
76:     end
77:   end

Protected Instance methods

[Source]

     # File app/models/theme.rb, line 147
147:   def load_config
148:     if File.exists?(File.join(self.class.user_themes_dir, self.id, 'theme.yml'))
149:       @config = YAML.load_file(File.join(self.class.user_themes_dir, self.id, 'theme.yml'))
150:     else
151:       @config = {}
152:     end
153:   end

[Source]

     # File app/models/theme.rb, line 141
141:   def write_config
142:     File.open(File.join(self.class.user_themes_dir, self.id, 'theme.yml'), 'w') do |f|
143:       f.write(config.to_yaml)
144:     end
145:   end

[Validate]