Module: Flipside

Extended by:
Config::Entities, Config::Roles, Config::Settings
Defined in:
lib/flipside.rb,
lib/flipside/web.rb,
lib/flipside/version.rb,
lib/flipside/importmap.rb,
app/models/flipside/key.rb,
app/models/flipside/keys.rb,
app/models/flipside/role.rb,
app/models/flipside/roles.rb,
lib/flipside/config/roles.rb,
app/models/flipside/checks.rb,
app/models/flipside/entity.rb,
lib/flipside/search_result.rb,
app/models/flipside/feature.rb,
app/models/flipside/entities.rb,
lib/flipside/config/entities.rb,
lib/flipside/config/settings.rb,
lib/flipside/config/registered_role.rb,
lib/flipside/config/registered_entity.rb,
lib/generators/flipside/install/install_generator.rb

Defined Under Namespace

Modules: Checks, Config, Entities, Generators, Importmap, Keys, Roles Classes: Entity, Error, Feature, Key, NoSuchFeauture, RegisteredEntity, RegisteredRole, Role, SearchResult, Web

Constant Summary collapse

VERSION =
"0.3.4"

Instance Attribute Summary

Attributes included from Config::Settings

#create_missing_features, #default_object, #ui_back_path

Class Method Summary collapse

Methods included from Config::Entities

display_entity, entity_classes, find_entity, register_entity, search_entity

Methods included from Config::Roles

register_role, role_classes, search_role

Class Method Details

.add_entity(entity:, feature: nil, name: nil) ⇒ Object



43
44
45
46
# File 'lib/flipside.rb', line 43

def add_entity(entity:, feature: nil, name: nil)
  feature ||= find_by!(name:)
  Entity.find_or_create_by(feature:, flippable: entity)
end

.add_role(class_name:, method_name:, feature: nil, name: nil) ⇒ Object



53
54
55
56
# File 'lib/flipside.rb', line 53

def add_role(class_name:, method_name:, feature: nil, name: nil)
  feature ||= find_by!(name:)
  Role.find_or_create_by(feature:, class_name:, method: method_name)
end

.create(name:, description: nil) ⇒ Object



73
74
75
# File 'lib/flipside.rb', line 73

def create(name:, description: nil)
  Feature.create(name: name, description: description)
end

.create_missing(name) ⇒ Object



77
78
79
80
81
82
# File 'lib/flipside.rb', line 77

def create_missing(name)
  trace = caller.find { |trace| !trace.start_with? __FILE__ }
  source, line, _ = trace.split(":")
  source = [source, line].join(":") if line.match?(/\d+/)
  create(name:, description: "Created from #{source}")
end

.disabled?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/flipside.rb', line 34

def disabled?(...)
  !enabled?(...)
end

.enable!(name) ⇒ Object



38
39
40
41
# File 'lib/flipside.rb', line 38

def enable!(name)
  feature = find_by!(name:)
  feature.update(enabled: true)
end

.enabled?(name, *objects) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
28
29
30
31
32
# File 'lib/flipside.rb', line 25

def enabled?(name, *objects)
  feature = find_by(name:)
  return false unless feature

  objects = Array(default_object) if objects.empty?
  objects << nil if objects.empty?
  objects.any? { |object| feature.enabled? object }
end

.find_by(name:, create_on_missing: create_missing_features) ⇒ Object



63
64
65
66
67
# File 'lib/flipside.rb', line 63

def find_by(name:, create_on_missing: create_missing_features)
  feature = Feature.find_by(name:)
  feature ||= create_missing(name) if create_on_missing
  feature
end

.find_by!(name:) ⇒ Object



69
70
71
# File 'lib/flipside.rb', line 69

def find_by!(name:)
  find_by(name:) || raise(NoSuchFeauture.new(name))
end

.remove_entity(entity_id:, feature: nil, name: nil) ⇒ Object



48
49
50
51
# File 'lib/flipside.rb', line 48

def remove_entity(entity_id:, feature: nil, name: nil)
  feature ||= find_by!(name:)
  feature.entities.find_by(id: entity_id)&.destroy
end

.remove_role(role_id:, feature: nil, name: nil) ⇒ Object



58
59
60
61
# File 'lib/flipside.rb', line 58

def remove_role(role_id:, feature: nil, name: nil)
  feature ||= find_by!(name:)
  feature.roles.find_by(id: role_id)&.destroy
end