Skip to content

Instantly share code, notes, and snippets.

@marsz
Created February 13, 2012 14:54
Show Gist options
  • Save marsz/1817412 to your computer and use it in GitHub Desktop.
Save marsz/1817412 to your computer and use it in GitHub Desktop.
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
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