Class: RubyUIAdmin::Scopes::BaseScope

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_ui_admin/scopes/base_scope.rb

Overview

Base class for named index scopes. A scope narrows the index query via a scope lambda and shows up as a tab above the table.

class Published < RubyUIAdmin::Scopes::BaseScope
self.name = "Published"
self.scope = -> { query.where(published: true) }
self.default = true
end

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params: {}, default_override: nil) ⇒ BaseScope

default_override (set via scope Klass, default: true on the resource) wins over the scope class's own self.default.



66
67
68
69
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 66

def initialize(params: {}, default_override: nil)
  @params = params || {}
  @default_override = default_override
end

Instance Attribute Details

#paramsObject (readonly)

Returns the value of attribute params.



62
63
64
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 62

def params
  @params
end

Class Method Details

.default=(value) ⇒ Object



40
41
42
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 40

def default=(value)
  @default = value
end

.default?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 44

def default?
  !!(@default if defined?(@default))
end

.descriptionObject



36
37
38
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 36

def description
  @description if defined?(@description)
end

.description=(value) ⇒ Object



32
33
34
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 32

def description=(value)
  @description = value
end

.nameObject



20
21
22
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 20

def name
  @display_name || super
end

.name=(value) ⇒ Object

Class-level self.name = with fallback to the real class name.



16
17
18
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 16

def name=(value)
  @display_name = value
end

.scopeObject



28
29
30
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 28

def scope
  @scope if defined?(@scope)
end

.scope=(value) ⇒ Object



24
25
26
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 24

def scope=(value)
  @scope = value
end

.scope_keyObject

URL key, e.g. RubyUIAdmin::Scopes::PublishedPosts -> "published_posts".



57
58
59
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 57

def scope_key
  to_s.sub(/^RubyUIAdmin::Scopes::/, "").gsub("::", "_").underscore
end

.visible=(value) ⇒ Object



48
49
50
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 48

def visible=(value)
  @visible = value
end

.visible_settingObject



52
53
54
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 52

def visible_setting
  defined?(@visible) ? @visible : true
end

Instance Method Details

#apply(query) ⇒ Object

Applies the scope to the query. A Symbol calls the model's named scope/class method; a lambda is run with query and params available.



91
92
93
94
95
96
97
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 91

def apply(query)
  scope = self.class.scope
  return query if scope.nil?
  return query.public_send(scope) if scope.is_a?(Symbol)

  ExecutionContext.new(target: scope, query: query, params: params).handle
end

#default?Boolean

Returns:

  • (Boolean)


83
84
85
86
87
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 83

def default?
  return !!@default_override unless @default_override.nil?

  self.class.default?
end

#descriptionObject



79
80
81
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 79

def description
  self.class.description
end

#keyObject



75
76
77
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 75

def key
  self.class.scope_key
end

#nameObject



71
72
73
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 71

def name
  self.class.name
end

#visible?(user: nil) ⇒ Boolean

Returns:

  • (Boolean)


99
100
101
102
103
104
# File 'lib/ruby_ui_admin/scopes/base_scope.rb', line 99

def visible?(user: nil)
  setting = self.class.visible_setting
  return setting unless setting.respond_to?(:call)

  ExecutionContext.new(target: setting, user: user, params: params).handle
end