Commit bdf53d0ec87af3cf7f912414744d7ba9ef241d78
1 parent
5281e384
Exists in
master
and in
28 other branches
ActionItem68: renaming files
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@513 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
8 changed files
with
252 additions
and
252 deletions
Show diff stats
| @@ -0,0 +1,132 @@ | @@ -0,0 +1,132 @@ | ||
| 1 | +# A Environment is like a website to be hosted in the platform. It may | ||
| 2 | +# contain multiple Profile's and can be identified by several different | ||
| 3 | +# domains. | ||
| 4 | +class Environment < ActiveRecord::Base | ||
| 5 | + | ||
| 6 | + # returns the available features for a Environment, in the form of a | ||
| 7 | + # hash, with pairs in the form <tt>'feature_name' => 'Feature name'</tt>. | ||
| 8 | + def self.available_features | ||
| 9 | + { | ||
| 10 | + 'some_feature' => _('Some feature'), | ||
| 11 | + 'other_feature' => _('Other feature'), | ||
| 12 | + } | ||
| 13 | + end | ||
| 14 | + | ||
| 15 | + # ################################################# | ||
| 16 | + # Relationships and applied behaviour | ||
| 17 | + # ################################################# | ||
| 18 | + | ||
| 19 | + acts_as_design | ||
| 20 | + | ||
| 21 | + # One Environment can be reached by many domains | ||
| 22 | + has_many :domains, :as => :owner | ||
| 23 | + has_many :profiles | ||
| 24 | + | ||
| 25 | + # ################################################# | ||
| 26 | + # Attributes | ||
| 27 | + # ################################################# | ||
| 28 | + | ||
| 29 | + # store the Environment settings as YAML-serialized Hash. | ||
| 30 | + serialize :settings | ||
| 31 | + | ||
| 32 | + # returns a Hash containing the Environment configuration | ||
| 33 | + def settings | ||
| 34 | + self[:settings] ||= {} | ||
| 35 | + end | ||
| 36 | + | ||
| 37 | + # Enables a feature identified by its name | ||
| 38 | + def enable(feature) | ||
| 39 | + self.settings["#{feature}_enabled"] = true | ||
| 40 | + end | ||
| 41 | + | ||
| 42 | + # Disables a feature identified by its name | ||
| 43 | + def disable(feature) | ||
| 44 | + self.settings["#{feature}_enabled"] = false | ||
| 45 | + end | ||
| 46 | + | ||
| 47 | + # Tells if a feature, identified by its name, is enabled | ||
| 48 | + def enabled?(feature) | ||
| 49 | + self.settings["#{feature}_enabled"] == true | ||
| 50 | + end | ||
| 51 | + | ||
| 52 | + # enables the features identified by <tt>features</tt>, which is expected to | ||
| 53 | + # be an Enumarable object containing the identifiers of the desired features. | ||
| 54 | + # Passing <tt>nil</tt> is the same as passing an empty Array. | ||
| 55 | + def enabled_features=(features) | ||
| 56 | + features ||= [] | ||
| 57 | + self.class.available_features.keys.each do |feature| | ||
| 58 | + if features.include? feature | ||
| 59 | + self.enable(feature) | ||
| 60 | + else | ||
| 61 | + self.disable(feature) | ||
| 62 | + end | ||
| 63 | + end | ||
| 64 | + end | ||
| 65 | + | ||
| 66 | + # the virtual community's terms of use: every user must accept them before | ||
| 67 | + # registering. | ||
| 68 | + def terms_of_use | ||
| 69 | + self.settings['terms_of_use'] | ||
| 70 | + end | ||
| 71 | + | ||
| 72 | + # sets the virtual community's terms of use. | ||
| 73 | + def terms_of_use=(value) | ||
| 74 | + self.settings['terms_of_use'] = value | ||
| 75 | + end | ||
| 76 | + | ||
| 77 | + # returns <tt>true</tt> if this Environment has terms of use to be | ||
| 78 | + # accepted by users before registration. | ||
| 79 | + def has_terms_of_use? | ||
| 80 | + ! self.settings['terms_of_use'].nil? | ||
| 81 | + end | ||
| 82 | + | ||
| 83 | + # Returns the template used by +flexible_template+ plugin. | ||
| 84 | + def flexible_template_template | ||
| 85 | + self.settings['flexible_template_template'] | ||
| 86 | + end | ||
| 87 | + | ||
| 88 | + # Sets the template used by +flexible_template+ plugin. | ||
| 89 | + def flexible_template_template=(value) | ||
| 90 | + self.settings['flexible_template_template'] = value | ||
| 91 | + end | ||
| 92 | + | ||
| 93 | + # Returns the theme used by +flexible_template+ plugin | ||
| 94 | + def flexible_template_theme | ||
| 95 | + self.settings['flexible_template_theme'] | ||
| 96 | + end | ||
| 97 | + | ||
| 98 | + # Sets the theme used by +flexible_template+ plugin | ||
| 99 | + def flexible_template_theme=(value) | ||
| 100 | + self.settings['flexible_template_theme'] = value | ||
| 101 | + end | ||
| 102 | + | ||
| 103 | + # Returns the icon theme used by +flexible_template+ plugin | ||
| 104 | + def flexible_template_icon_theme | ||
| 105 | + self.settings['flexible_template_icon_theme'] | ||
| 106 | + end | ||
| 107 | + | ||
| 108 | + # Sets the icon theme used by +flexible_template+ plugin | ||
| 109 | + def flexible_template_icon_theme=(value) | ||
| 110 | + self.settings['flexible_template_icon_theme'] = value | ||
| 111 | + end | ||
| 112 | + | ||
| 113 | + # ################################################# | ||
| 114 | + # Validations | ||
| 115 | + # ################################################# | ||
| 116 | + | ||
| 117 | + # <tt>name</tt> is mandatory | ||
| 118 | + validates_presence_of :name | ||
| 119 | + | ||
| 120 | + # only one virtual community can be the default one | ||
| 121 | + validates_uniqueness_of :is_default, :if => (lambda do |environment| environment.is_default? end), :message => _('Only one Virtual Community can be the default one') | ||
| 122 | + | ||
| 123 | + # ################################################# | ||
| 124 | + # Business logic in general | ||
| 125 | + # ################################################# | ||
| 126 | + | ||
| 127 | + # the default Environment. | ||
| 128 | + def self.default | ||
| 129 | + self.find(:first, :conditions => [ 'is_default = ?', true ] ) | ||
| 130 | + end | ||
| 131 | + | ||
| 132 | +end |
app/models/virtual_community.rb
| @@ -1,132 +0,0 @@ | @@ -1,132 +0,0 @@ | ||
| 1 | -# A Environment is like a website to be hosted in the platform. It may | ||
| 2 | -# contain multiple Profile's and can be identified by several different | ||
| 3 | -# domains. | ||
| 4 | -class Environment < ActiveRecord::Base | ||
| 5 | - | ||
| 6 | - # returns the available features for a Environment, in the form of a | ||
| 7 | - # hash, with pairs in the form <tt>'feature_name' => 'Feature name'</tt>. | ||
| 8 | - def self.available_features | ||
| 9 | - { | ||
| 10 | - 'some_feature' => _('Some feature'), | ||
| 11 | - 'other_feature' => _('Other feature'), | ||
| 12 | - } | ||
| 13 | - end | ||
| 14 | - | ||
| 15 | - # ################################################# | ||
| 16 | - # Relationships and applied behaviour | ||
| 17 | - # ################################################# | ||
| 18 | - | ||
| 19 | - acts_as_design | ||
| 20 | - | ||
| 21 | - # One Environment can be reached by many domains | ||
| 22 | - has_many :domains, :as => :owner | ||
| 23 | - has_many :profiles | ||
| 24 | - | ||
| 25 | - # ################################################# | ||
| 26 | - # Attributes | ||
| 27 | - # ################################################# | ||
| 28 | - | ||
| 29 | - # store the Environment settings as YAML-serialized Hash. | ||
| 30 | - serialize :settings | ||
| 31 | - | ||
| 32 | - # returns a Hash containing the Environment configuration | ||
| 33 | - def settings | ||
| 34 | - self[:settings] ||= {} | ||
| 35 | - end | ||
| 36 | - | ||
| 37 | - # Enables a feature identified by its name | ||
| 38 | - def enable(feature) | ||
| 39 | - self.settings["#{feature}_enabled"] = true | ||
| 40 | - end | ||
| 41 | - | ||
| 42 | - # Disables a feature identified by its name | ||
| 43 | - def disable(feature) | ||
| 44 | - self.settings["#{feature}_enabled"] = false | ||
| 45 | - end | ||
| 46 | - | ||
| 47 | - # Tells if a feature, identified by its name, is enabled | ||
| 48 | - def enabled?(feature) | ||
| 49 | - self.settings["#{feature}_enabled"] == true | ||
| 50 | - end | ||
| 51 | - | ||
| 52 | - # enables the features identified by <tt>features</tt>, which is expected to | ||
| 53 | - # be an Enumarable object containing the identifiers of the desired features. | ||
| 54 | - # Passing <tt>nil</tt> is the same as passing an empty Array. | ||
| 55 | - def enabled_features=(features) | ||
| 56 | - features ||= [] | ||
| 57 | - self.class.available_features.keys.each do |feature| | ||
| 58 | - if features.include? feature | ||
| 59 | - self.enable(feature) | ||
| 60 | - else | ||
| 61 | - self.disable(feature) | ||
| 62 | - end | ||
| 63 | - end | ||
| 64 | - end | ||
| 65 | - | ||
| 66 | - # the virtual community's terms of use: every user must accept them before | ||
| 67 | - # registering. | ||
| 68 | - def terms_of_use | ||
| 69 | - self.settings['terms_of_use'] | ||
| 70 | - end | ||
| 71 | - | ||
| 72 | - # sets the virtual community's terms of use. | ||
| 73 | - def terms_of_use=(value) | ||
| 74 | - self.settings['terms_of_use'] = value | ||
| 75 | - end | ||
| 76 | - | ||
| 77 | - # returns <tt>true</tt> if this Environment has terms of use to be | ||
| 78 | - # accepted by users before registration. | ||
| 79 | - def has_terms_of_use? | ||
| 80 | - ! self.settings['terms_of_use'].nil? | ||
| 81 | - end | ||
| 82 | - | ||
| 83 | - # Returns the template used by +flexible_template+ plugin. | ||
| 84 | - def flexible_template_template | ||
| 85 | - self.settings['flexible_template_template'] | ||
| 86 | - end | ||
| 87 | - | ||
| 88 | - # Sets the template used by +flexible_template+ plugin. | ||
| 89 | - def flexible_template_template=(value) | ||
| 90 | - self.settings['flexible_template_template'] = value | ||
| 91 | - end | ||
| 92 | - | ||
| 93 | - # Returns the theme used by +flexible_template+ plugin | ||
| 94 | - def flexible_template_theme | ||
| 95 | - self.settings['flexible_template_theme'] | ||
| 96 | - end | ||
| 97 | - | ||
| 98 | - # Sets the theme used by +flexible_template+ plugin | ||
| 99 | - def flexible_template_theme=(value) | ||
| 100 | - self.settings['flexible_template_theme'] = value | ||
| 101 | - end | ||
| 102 | - | ||
| 103 | - # Returns the icon theme used by +flexible_template+ plugin | ||
| 104 | - def flexible_template_icon_theme | ||
| 105 | - self.settings['flexible_template_icon_theme'] | ||
| 106 | - end | ||
| 107 | - | ||
| 108 | - # Sets the icon theme used by +flexible_template+ plugin | ||
| 109 | - def flexible_template_icon_theme=(value) | ||
| 110 | - self.settings['flexible_template_icon_theme'] = value | ||
| 111 | - end | ||
| 112 | - | ||
| 113 | - # ################################################# | ||
| 114 | - # Validations | ||
| 115 | - # ################################################# | ||
| 116 | - | ||
| 117 | - # <tt>name</tt> is mandatory | ||
| 118 | - validates_presence_of :name | ||
| 119 | - | ||
| 120 | - # only one virtual community can be the default one | ||
| 121 | - validates_uniqueness_of :is_default, :if => (lambda do |environment| environment.is_default? end), :message => _('Only one Virtual Community can be the default one') | ||
| 122 | - | ||
| 123 | - # ################################################# | ||
| 124 | - # Business logic in general | ||
| 125 | - # ################################################# | ||
| 126 | - | ||
| 127 | - # the default Environment. | ||
| 128 | - def self.default | ||
| 129 | - self.find(:first, :conditions => [ 'is_default = ?', true ] ) | ||
| 130 | - end | ||
| 131 | - | ||
| 132 | -end |
test/fixtures/virtual_communities.yml
| @@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
| 1 | +require File.expand_path(File.dirname(__FILE__) + "/../../../app/models/environment") | ||
| 2 | + | ||
| 3 | +class Environment < ActiveRecord::Base | ||
| 4 | + def self.available_features | ||
| 5 | + { | ||
| 6 | + 'feature1' => 'Enable Feature 1', | ||
| 7 | + 'feature2' => 'Enable Feature 2', | ||
| 8 | + 'feature3' => 'Enable Feature 3', | ||
| 9 | + } | ||
| 10 | + end | ||
| 11 | +end |
test/mocks/test/virtual_community.rb
| @@ -1,11 +0,0 @@ | @@ -1,11 +0,0 @@ | ||
| 1 | -require File.expand_path(File.dirname(__FILE__) + "/../../../app/models/environment") | ||
| 2 | - | ||
| 3 | -class Environment < ActiveRecord::Base | ||
| 4 | - def self.available_features | ||
| 5 | - { | ||
| 6 | - 'feature1' => 'Enable Feature 1', | ||
| 7 | - 'feature2' => 'Enable Feature 2', | ||
| 8 | - 'feature3' => 'Enable Feature 3', | ||
| 9 | - } | ||
| 10 | - end | ||
| 11 | -end |
| @@ -0,0 +1,100 @@ | @@ -0,0 +1,100 @@ | ||
| 1 | +require File.dirname(__FILE__) + '/../test_helper' | ||
| 2 | + | ||
| 3 | +class EnvironmentTest < Test::Unit::TestCase | ||
| 4 | + fixtures :virtual_communities | ||
| 5 | + | ||
| 6 | + def test_exists_default_and_it_is_unique | ||
| 7 | + Environment.delete_all | ||
| 8 | + vc = Environment.new(:name => 'Test Community') | ||
| 9 | + vc.is_default = true | ||
| 10 | + assert vc.save | ||
| 11 | + | ||
| 12 | + vc2 = Environment.new(:name => 'Another Test Community') | ||
| 13 | + vc2.is_default = true | ||
| 14 | + assert !vc2.valid? | ||
| 15 | + assert vc2.errors.invalid?(:is_default) | ||
| 16 | + | ||
| 17 | + assert_equal vc, Environment.default | ||
| 18 | + end | ||
| 19 | + | ||
| 20 | + def test_acts_as_configurable | ||
| 21 | + vc = Environment.new(:name => 'Testing Environment') | ||
| 22 | + assert_kind_of Hash, vc.settings | ||
| 23 | + vc.settings[:some_setting] = 1 | ||
| 24 | + assert vc.save | ||
| 25 | + assert_equal 1, vc.settings[:some_setting] | ||
| 26 | + end | ||
| 27 | + | ||
| 28 | + def test_available_features | ||
| 29 | + assert_kind_of Hash, Environment.available_features | ||
| 30 | + end | ||
| 31 | + | ||
| 32 | + def test_mock | ||
| 33 | + assert_equal ['feature1', 'feature2', 'feature3'], Environment.available_features.keys.sort | ||
| 34 | + end | ||
| 35 | + | ||
| 36 | + def test_features | ||
| 37 | + v = virtual_communities(:colivre_net) | ||
| 38 | + v.enable('feature1') | ||
| 39 | + assert v.enabled?('feature1') | ||
| 40 | + v.disable('feature1') | ||
| 41 | + assert !v.enabled?('feature1') | ||
| 42 | + end | ||
| 43 | + | ||
| 44 | + def test_enabled_features | ||
| 45 | + v = virtual_communities(:colivre_net) | ||
| 46 | + v.enabled_features = [ 'feature1', 'feature2' ] | ||
| 47 | + assert v.enabled?('feature1') && v.enabled?('feature2') && !v.enabled?('feature3') | ||
| 48 | + end | ||
| 49 | + | ||
| 50 | + def test_enabled_features_no_features_enabled | ||
| 51 | + v = virtual_communities(:colivre_net) | ||
| 52 | + v.enabled_features = nil | ||
| 53 | + assert !v.enabled?('feature1') && !v.enabled?('feature2') && !v.enabled?('feature3') | ||
| 54 | + end | ||
| 55 | + | ||
| 56 | + def test_name_is_mandatory | ||
| 57 | + v = Environment.new | ||
| 58 | + v.valid? | ||
| 59 | + assert v.errors.invalid?(:name) | ||
| 60 | + v.name = 'blablabla' | ||
| 61 | + v.valid? | ||
| 62 | + assert !v.errors.invalid?(:name) | ||
| 63 | + end | ||
| 64 | + | ||
| 65 | + def test_terms_of_use | ||
| 66 | + v = Environment.new(:name => 'My test virtual community') | ||
| 67 | + assert_nil v.terms_of_use | ||
| 68 | + v.terms_of_use = 'To be part of this virtual community, you must accept the following terms: ...' | ||
| 69 | + assert v.save | ||
| 70 | + id = v.id | ||
| 71 | + assert_equal 'To be part of this virtual community, you must accept the following terms: ...', Environment.find(id).terms_of_use | ||
| 72 | + end | ||
| 73 | + | ||
| 74 | + def test_has_terms_of_use | ||
| 75 | + v = Environment.new | ||
| 76 | + assert !v.has_terms_of_use? | ||
| 77 | + v.terms_of_use = 'some terms of use' | ||
| 78 | + assert v.has_terms_of_use? | ||
| 79 | + end | ||
| 80 | + | ||
| 81 | + def test_should_profive_flexible_template_stuff | ||
| 82 | + v = Environment.new | ||
| 83 | + | ||
| 84 | + # template | ||
| 85 | + assert_nil v.flexible_template_template | ||
| 86 | + v.flexible_template_template = 'bli' | ||
| 87 | + assert_equal 'bli', v.flexible_template_template | ||
| 88 | + | ||
| 89 | + # theme | ||
| 90 | + assert_nil v.flexible_template_theme | ||
| 91 | + v.flexible_template_theme = 'bli' | ||
| 92 | + assert_equal 'bli', v.flexible_template_theme | ||
| 93 | + | ||
| 94 | + # icon theme | ||
| 95 | + assert_nil v.flexible_template_icon_theme | ||
| 96 | + v.flexible_template_icon_theme = 'bli' | ||
| 97 | + assert_equal 'bli', v.flexible_template_icon_theme | ||
| 98 | + end | ||
| 99 | + | ||
| 100 | +end |
test/unit/virtual_community_test.rb
| @@ -1,100 +0,0 @@ | @@ -1,100 +0,0 @@ | ||
| 1 | -require File.dirname(__FILE__) + '/../test_helper' | ||
| 2 | - | ||
| 3 | -class EnvironmentTest < Test::Unit::TestCase | ||
| 4 | - fixtures :virtual_communities | ||
| 5 | - | ||
| 6 | - def test_exists_default_and_it_is_unique | ||
| 7 | - Environment.delete_all | ||
| 8 | - vc = Environment.new(:name => 'Test Community') | ||
| 9 | - vc.is_default = true | ||
| 10 | - assert vc.save | ||
| 11 | - | ||
| 12 | - vc2 = Environment.new(:name => 'Another Test Community') | ||
| 13 | - vc2.is_default = true | ||
| 14 | - assert !vc2.valid? | ||
| 15 | - assert vc2.errors.invalid?(:is_default) | ||
| 16 | - | ||
| 17 | - assert_equal vc, Environment.default | ||
| 18 | - end | ||
| 19 | - | ||
| 20 | - def test_acts_as_configurable | ||
| 21 | - vc = Environment.new(:name => 'Testing Environment') | ||
| 22 | - assert_kind_of Hash, vc.settings | ||
| 23 | - vc.settings[:some_setting] = 1 | ||
| 24 | - assert vc.save | ||
| 25 | - assert_equal 1, vc.settings[:some_setting] | ||
| 26 | - end | ||
| 27 | - | ||
| 28 | - def test_available_features | ||
| 29 | - assert_kind_of Hash, Environment.available_features | ||
| 30 | - end | ||
| 31 | - | ||
| 32 | - def test_mock | ||
| 33 | - assert_equal ['feature1', 'feature2', 'feature3'], Environment.available_features.keys.sort | ||
| 34 | - end | ||
| 35 | - | ||
| 36 | - def test_features | ||
| 37 | - v = virtual_communities(:colivre_net) | ||
| 38 | - v.enable('feature1') | ||
| 39 | - assert v.enabled?('feature1') | ||
| 40 | - v.disable('feature1') | ||
| 41 | - assert !v.enabled?('feature1') | ||
| 42 | - end | ||
| 43 | - | ||
| 44 | - def test_enabled_features | ||
| 45 | - v = virtual_communities(:colivre_net) | ||
| 46 | - v.enabled_features = [ 'feature1', 'feature2' ] | ||
| 47 | - assert v.enabled?('feature1') && v.enabled?('feature2') && !v.enabled?('feature3') | ||
| 48 | - end | ||
| 49 | - | ||
| 50 | - def test_enabled_features_no_features_enabled | ||
| 51 | - v = virtual_communities(:colivre_net) | ||
| 52 | - v.enabled_features = nil | ||
| 53 | - assert !v.enabled?('feature1') && !v.enabled?('feature2') && !v.enabled?('feature3') | ||
| 54 | - end | ||
| 55 | - | ||
| 56 | - def test_name_is_mandatory | ||
| 57 | - v = Environment.new | ||
| 58 | - v.valid? | ||
| 59 | - assert v.errors.invalid?(:name) | ||
| 60 | - v.name = 'blablabla' | ||
| 61 | - v.valid? | ||
| 62 | - assert !v.errors.invalid?(:name) | ||
| 63 | - end | ||
| 64 | - | ||
| 65 | - def test_terms_of_use | ||
| 66 | - v = Environment.new(:name => 'My test virtual community') | ||
| 67 | - assert_nil v.terms_of_use | ||
| 68 | - v.terms_of_use = 'To be part of this virtual community, you must accept the following terms: ...' | ||
| 69 | - assert v.save | ||
| 70 | - id = v.id | ||
| 71 | - assert_equal 'To be part of this virtual community, you must accept the following terms: ...', Environment.find(id).terms_of_use | ||
| 72 | - end | ||
| 73 | - | ||
| 74 | - def test_has_terms_of_use | ||
| 75 | - v = Environment.new | ||
| 76 | - assert !v.has_terms_of_use? | ||
| 77 | - v.terms_of_use = 'some terms of use' | ||
| 78 | - assert v.has_terms_of_use? | ||
| 79 | - end | ||
| 80 | - | ||
| 81 | - def test_should_profive_flexible_template_stuff | ||
| 82 | - v = Environment.new | ||
| 83 | - | ||
| 84 | - # template | ||
| 85 | - assert_nil v.flexible_template_template | ||
| 86 | - v.flexible_template_template = 'bli' | ||
| 87 | - assert_equal 'bli', v.flexible_template_template | ||
| 88 | - | ||
| 89 | - # theme | ||
| 90 | - assert_nil v.flexible_template_theme | ||
| 91 | - v.flexible_template_theme = 'bli' | ||
| 92 | - assert_equal 'bli', v.flexible_template_theme | ||
| 93 | - | ||
| 94 | - # icon theme | ||
| 95 | - assert_nil v.flexible_template_icon_theme | ||
| 96 | - v.flexible_template_icon_theme = 'bli' | ||
| 97 | - assert_equal 'bli', v.flexible_template_icon_theme | ||
| 98 | - end | ||
| 99 | - | ||
| 100 | -end |