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.3"

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



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

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



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

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



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

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

.create_missing(name) ⇒ Object



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

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)


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

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

.enable!(name) ⇒ Object



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

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
# File 'lib/flipside.rb', line 25

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

  objects = [default_object] if objects.empty?
  objects.any? { |object| feature.enabled? object }
end

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



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

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



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

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

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



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

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



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

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