Commit 5f5d537055ba930fc37fbfd065083d76a0fc1faa
1 parent
b2efc64b
Exists in
master
and in
23 other branches
ActionItem789: Adding method to make user_themes public/not public
* Adding method public_themes to find user_themes that can be used for others * Adding attribute accessors for public * On creation of a new theme, making it not public by default
Showing
4 changed files
with
49 additions
and
2 deletions
Show diff stats
app/controllers/my_profile/themes_controller.rb
| ... | ... | @@ -9,7 +9,7 @@ class ThemesController < MyProfileController |
| 9 | 9 | end |
| 10 | 10 | |
| 11 | 11 | def index |
| 12 | - @themes = Theme.system_themes | |
| 12 | + @themes = Theme.system_themes + Theme.public_themes | |
| 13 | 13 | @current_theme = profile.theme |
| 14 | 14 | |
| 15 | 15 | @layout_templates = LayoutTemplate.all |
| ... | ... | @@ -19,7 +19,7 @@ class ThemesController < MyProfileController |
| 19 | 19 | def new |
| 20 | 20 | if !request.xhr? |
| 21 | 21 | id = params[:name].to_slug |
| 22 | - t = Theme.new(id, :name => params[:name], :owner => profile) | |
| 22 | + t = Theme.new(id, :name => params[:name], :owner => profile, :public => false) | |
| 23 | 23 | t.save |
| 24 | 24 | redirect_to :action => 'index' |
| 25 | 25 | else | ... | ... |
app/models/theme.rb
| ... | ... | @@ -37,6 +37,15 @@ class Theme |
| 37 | 37 | end |
| 38 | 38 | end |
| 39 | 39 | |
| 40 | + def public_themes | |
| 41 | + Dir.glob(File.join(user_themes_dir, '*', 'theme.yml')).select do |desc| | |
| 42 | + config = YAML.load_file(desc) | |
| 43 | + config['public'] | |
| 44 | + end.map do |desc| | |
| 45 | + Theme.find(File.basename(File.dirname(desc))) | |
| 46 | + end | |
| 47 | + end | |
| 48 | + | |
| 40 | 49 | end |
| 41 | 50 | |
| 42 | 51 | class DuplicatedIdentifier < Exception; end |
| ... | ... | @@ -60,6 +69,14 @@ class Theme |
| 60 | 69 | config['name'] = value |
| 61 | 70 | end |
| 62 | 71 | |
| 72 | + def public | |
| 73 | + config['public'] || false | |
| 74 | + end | |
| 75 | + | |
| 76 | + def public=(value) | |
| 77 | + config['public'] = value | |
| 78 | + end | |
| 79 | + | |
| 63 | 80 | def ==(other) |
| 64 | 81 | other.is_a?(self.class) && (other.id == self.id) |
| 65 | 82 | end | ... | ... |
test/functional/themes_controller_test.rb
| ... | ... | @@ -33,6 +33,15 @@ class ThemesControllerTest < Test::Unit::TestCase |
| 33 | 33 | end |
| 34 | 34 | end |
| 35 | 35 | |
| 36 | + should 'not display themes for selection if it is not public' do | |
| 37 | + Theme.create('first', :owner => profile, :public => true) | |
| 38 | + Theme.create('second', :owner => profile, :public => false) | |
| 39 | + get :index, :profile => 'testinguser' | |
| 40 | + | |
| 41 | + assert_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/themes/set/first" } | |
| 42 | + assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/testinguser/themes/set/second" } | |
| 43 | + end | |
| 44 | + | |
| 36 | 45 | should 'highlight current theme' do |
| 37 | 46 | profile.update_attributes(:theme => 'first') |
| 38 | 47 | Theme.expects(:system_themes).returns([Theme.new('first'), Theme.new('second')]) | ... | ... |
test/unit/theme_test.rb
| ... | ... | @@ -149,5 +149,26 @@ class ThemeTest < ActiveSupport::TestCase |
| 149 | 149 | assert_equivalent [ 'one.png', 'two.png' ], theme.image_files |
| 150 | 150 | end |
| 151 | 151 | |
| 152 | + should 'be able to find public themes' do | |
| 153 | + profile = create_user('testinguser').person | |
| 154 | + t1 = Theme.create('mytheme', :owner => profile, :public => false) | |
| 155 | + t2 = Theme.create('mytheme2', :owner => profile, :public => true) | |
| 156 | + | |
| 157 | + assert_equal [t2], Theme.public_themes | |
| 158 | + end | |
| 159 | + | |
| 160 | + should 'set theme to public' do | |
| 161 | + t = Theme.new('mytheme') | |
| 162 | + t.public = true | |
| 163 | + t.save | |
| 164 | + | |
| 165 | + t = Theme.find('mytheme') | |
| 166 | + assert t.public | |
| 167 | + end | |
| 168 | + | |
| 169 | + should 'not be public by default' do | |
| 170 | + assert ! Theme.new('test').public | |
| 171 | + end | |
| 172 | + | |
| 152 | 173 | end |
| 153 | 174 | ... | ... |