Module: Flex::Scopes::ClassMethods
- Defined in:
- lib/flex/scopes.rb
Instance Method Summary collapse
-
#scope(name, scope = nil, &block) ⇒ Object
define scopes as class methods.
-
#scoped ⇒ Object
You can start with a non restricted Flex::Scope object.
Instance Method Details
#scope(name, scope = nil, &block) ⇒ Object
define scopes as class methods
class MyModel
include Flex::StoredModel
...
scope :red, terms(:color => 'red').sort(:supplier => :asc)
scope :size do |size|
terms(:size => size)
end
MyModel.size('large').first
MyModel.red.all
MyModel.size('small').red.all
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/flex/scopes.rb', line 62 def scope(name, scope=nil, &block) raise ArgumentError, "Dangerous scope name: a :#{name} method is already defined. Please, use another one." \ if respond_to?(name) proc = case when block_given? block when scope.is_a?(Flex::Scope) lambda {scope} when scope.is_a?(Proc) scope else raise ArgumentError, "Scope object or Proc expected (got #{scope.inspect})" end = class << self; self end .send(:define_method, name) do |*args| scope = proc.call(*args) raise Scope::Error, "The scope :#{name} does not return a Flex::Scope object (got #{scope.inspect})" \ unless scope.is_a?(Flex::Scope) scope end scope_methods << name end |
#scoped ⇒ Object
You can start with a non restricted Flex::Scope object
43 44 45 |
# File 'lib/flex/scopes.rb', line 43 def scoped @scoped ||= Scope[:context => flex.context] end |