Created
February 13, 2012 14:54
-
-
Save marsz/1817412 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module ActsAsIsEnabled | |
extend ActiveSupport::Concern | |
module ClassMethods | |
def acts_as_is_enabled | |
scope :enabled, where(:is_enabled => true) | |
scope :disabled, where(:is_enabled => [false,nil]) # 如果 db 有設定 default => false 的話, 不用 nil 了, 看起來也會乾淨一點 | |
end | |
end | |
module InstanceMethods | |
def disabled? | |
!is_enabled | |
end | |
def enabled? | |
is_enabled | |
end | |
def enable | |
update_attributes :is_enabled => true | |
end | |
def disable | |
update_attributes :is_enabled => false | |
end | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'spec_helper' | |
shared_examples_for "acts_as_enabled" do | |
before do | |
@klass = @instance_enabled.class | |
end | |
describe "scopes" do | |
it "enabled" do | |
@klass.enabled.include?(@instance_enabled).should be_true | |
@klass.enabled.include?(@instance_disabled).should be_false | |
@instance_disabled.enable | |
@klass.enabled.include?(@instance_disabled).should be_true | |
end | |
it "disabled" do | |
@klass.disabled.include?(@instance_disabled).should be_true | |
@klass.disabled.include?(@instance_enabled).should be_false | |
@instance_enabled.disable | |
@klass.disabled.include?(@instance_enabled).should be_true | |
end | |
end | |
describe "instances" do | |
it "enable" do | |
@instance_disabled.enabled?.should be_false | |
@instance_disabled.disabled?.should be_true | |
@instance_disabled.enable.should be_true | |
@instance_disabled.enabled?.should be_true | |
@instance_disabled.disabled?.should be_false | |
end | |
it "disable" do | |
@instance_enabled.enabled?.should be_true | |
@instance_enabled.disabled?.should be_false | |
@instance_enabled.disable.should be_true | |
@instance_enabled.enabled?.should be_false | |
@instance_enabled.disabled?.should be_true | |
end | |
end | |
end | |
describe "all included class" do | |
# 有 include 的 model class 都可以放這裡 | |
# Factory 裡面都要有 xxx_enabled 和 xxx_disabled | |
[Pic, SpotPost].each do |klass| | |
describe klass do | |
before do | |
@instance_enabled = Factory "#{klass.to_s.underscore}" | |
@instance_enabled.enable | |
@instance_disabled = Factory "#{klass.to_s.underscore}" | |
@instance_disabled.disable | |
end | |
it_should_behave_like "acts_as_enabled" | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment