class Ez::Permissions::DSL

Attributes

resources[R]

Public Class Methods

define() { |instance| ... } click to toggle source
# File lib/ez/permissions/dsl.rb, line 10
def self.define
  yield DSL.instance
end
new() click to toggle source
# File lib/ez/permissions/dsl.rb, line 31
def initialize
  @resources = []
end
resource(name) click to toggle source
# File lib/ez/permissions/dsl.rb, line 18
def self.resource(name)
  DSL.instance.resources.find { |r| r.name.to_sym == name.to_sym }
end
resource_action?(resource_name, action_name) click to toggle source
# File lib/ez/permissions/dsl.rb, line 22
def self.resource_action?(resource_name, action_name)
  registed_resource = resource(resource_name)
  action = registed_resource.actions.include?(action_name.to_sym) if registed_resource

  registed_resource && action ? true : false
end
resources() click to toggle source
# File lib/ez/permissions/dsl.rb, line 14
def self.resources
  DSL.instance.resources
end

Public Instance Methods

add(name, options = {}) click to toggle source
# File lib/ez/permissions/dsl.rb, line 35
def add(name, options = {})
  return message("Resource [#{name}] has been already defined!") if self.class.resource(name)

  resource = Ez::Permissions::Resource.new(name, options)

  @resources << resource

  return unless seed_to_db(resource)

  message(
    "Resource [#{name}] has been successfully registered with actions: [#{resource.actions.join(', ')}]",
    'SUCCESS'
  )
end

Private Instance Methods

check_permissions_table() click to toggle source
# File lib/ez/permissions/dsl.rb, line 77
def check_permissions_table
  permissions_table = Ez::Permissions.config.permissions_table_name
  return true if ActiveRecord::Base.connection.data_source_exists?(permissions_table)

  message("Table #{permissions_table} does not exists. Please, check migrations")
  false
end
message(txt, level = 'WARN') click to toggle source
# File lib/ez/permissions/dsl.rb, line 52
def message(txt, level = 'WARN')
  return if Ez::Permissions.config.mute_stdout

  $stdout.puts("[#{level}] Ez::Permissions: #{txt}")
end
seed_to_db(resource) click to toggle source
# File lib/ez/permissions/dsl.rb, line 58
def seed_to_db(resource)
  return unless try_db_connection
  return unless check_permissions_table

  resource.actions.each do |action|
    Ez::Permissions::Permission.where(
      resource: resource.name,
      action: action
    ).first_or_create!
  end
end
try_db_connection() click to toggle source
# File lib/ez/permissions/dsl.rb, line 70
def try_db_connection
  ActiveRecord::Base.connection
rescue ActiveRecord::NoDatabaseError
  message('Database does not exist')
  false
end