Commit b5f420caefaed8b13d7fba7893a66919836220f8
1 parent
5c02a6e4
Exists in
master
and in
28 other branches
theme: allow multi-level inheritance on approved_themes owner_type
Showing
2 changed files
with
22 additions
and
2 deletions
Show diff stats
app/models/theme.rb
@@ -49,7 +49,10 @@ class Theme | @@ -49,7 +49,10 @@ class Theme | ||
49 | 49 | ||
50 | approved = config['public'] | 50 | approved = config['public'] |
51 | unless approved | 51 | unless approved |
52 | - approved = config['owner_type'] == owner.class.base_class.name || config['owner_type'] == owner.class.name | 52 | + begin |
53 | + approved = owner.kind_of?(config['owner_type'].constantize) | ||
54 | + rescue | ||
55 | + end | ||
53 | approved &&= config['owner_id'] == owner.id if config['owner_id'].present? | 56 | approved &&= config['owner_id'] == owner.id if config['owner_id'].present? |
54 | end | 57 | end |
55 | 58 | ||
@@ -58,7 +61,6 @@ class Theme | @@ -58,7 +61,6 @@ class Theme | ||
58 | new id, config | 61 | new id, config |
59 | end | 62 | end |
60 | end | 63 | end |
61 | - | ||
62 | end | 64 | end |
63 | 65 | ||
64 | class DuplicatedIdentifier < Exception; end | 66 | class DuplicatedIdentifier < Exception; end |
test/unit/theme_test.rb
@@ -191,4 +191,22 @@ class ThemeTest < ActiveSupport::TestCase | @@ -191,4 +191,22 @@ class ThemeTest < ActiveSupport::TestCase | ||
191 | assert ! Theme.new('test').public | 191 | assert ! Theme.new('test').public |
192 | end | 192 | end |
193 | 193 | ||
194 | + should 'not crash with nil or invalid owner_type' do | ||
195 | + profile = fast_create(Profile) | ||
196 | + Theme.stubs(:system_themes_dir).returns(TMP_THEMES_DIR) | ||
197 | + | ||
198 | + t1 = Theme.new('t1').save | ||
199 | + t1.send(:write_config) | ||
200 | + t2 = Theme.new('t2', {:owner_type => nil}).save | ||
201 | + t2.send(:write_config) | ||
202 | + t3 = Theme.new('t3', {:owner_type => 'InvalidClass'}).save | ||
203 | + t3.send(:write_config) | ||
204 | + | ||
205 | + assert_nothing_raised do | ||
206 | + themes = Theme.approved_themes(profile) | ||
207 | + assert_not_includes themes, t1 | ||
208 | + assert_not_includes themes, t2 | ||
209 | + assert_not_includes themes, t3 | ||
210 | + end | ||
211 | + end | ||
194 | end | 212 | end |