Class: FeduxOrgStdlib::Models::BaseModel

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/fedux_org_stdlib/models/base_model.rb

Overview

Base model

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ BaseModel

Returns a new instance of BaseModel.



21
22
23
24
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 21

def initialize(name)
  @name = name.to_sym
  @enabled = false
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



15
16
17
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 15

def name
  @name
end

Class Method Details

.allObject



81
82
83
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 81

def all
  @instances.to_a
end

.all_names_as_string(connector = ', ') ⇒ Object

return all names as string



86
87
88
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 86

def all_names_as_string(connector = ', ')
  find_all(enabled: true).map(&:name).sort.join(connector)
end

.clearObject



77
78
79
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 77

def clear
  @instances = Set.new
end

.create(*args, &block) ⇒ Object



61
62
63
64
65
66
67
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 61

def create(*args, &block)
  if block_given?
    register(new(*args, &block))
  else
    register(new(*args))
  end
end

.delete(val) ⇒ Object



69
70
71
72
73
74
75
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 69

def delete(val)
  element = find(val.to_s.to_sym)
  fail FeduxOrgStdlib::Exceptions::InstanceNotFound unless element
  @instances.delete element

  element
end

.enable(name) ⇒ Object

enables a specific instance



99
100
101
102
103
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 99

def enable(name)
  find(name: name).enable
rescue NoMethodError
  raise FeduxOrgStdlib::Models::Exceptions::InvalidSearchCriteria, "Sorry I'm not able to enable \"#{name}\". You need to create an instance with name \"#{name}\" first."
end

.find(criteria = {}) ⇒ Object

finds a single instance



106
107
108
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 106

def find(criteria = {})
  find_all(criteria).first
end

.find_all(criteria = {}) ⇒ Object

finds all instances



111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 111

def find_all(criteria = {})
  FeduxOrgStdlib.logger.debug(self) { "Criteria for search: #{ criteria }" }
  criteria = { name: criteria.to_sym } if criteria.is_a?(Symbol) || criteria.is_a?(String)

  FeduxOrgStdlib.logger.debug(self) { "Instances to be searched for: #{ @instances.map { |i| "#{i.name} (#{i.class})" }.join(', ') }" }
  @instances.select do |i|
    criteria.all? do |c, v|
      FeduxOrgStdlib.logger.debug(self) { "Check method for search: #{ c }" }
      i.send("#{c}?".to_sym, v)
    end
  end
rescue NameError => e
  raise FeduxOrgStdlib::Models::Exceptions::InvalidSearchCriteria, e.message
end

.firstObject



90
91
92
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 90

def first
  @instances.to_a.first
end

.inherited(base) ⇒ Object



17
18
19
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 17

def self.inherited(base)
  base.instance_variable_set(:@instances, Set.new)
end

.lastObject



94
95
96
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 94

def last
  @instances.to_a.last
end

.register(element) ⇒ Object

attr_accessor :instances



55
56
57
58
59
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 55

def register(element)
  @instances << element

  element
end

Instance Method Details

#<=>(other) ⇒ Object



40
41
42
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 40

def <=>(other)
  name <=> other.name
end

#enableObject

enable action



27
28
29
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 27

def enable
  @enabled = true
end

#enabled?(val = true) ⇒ Boolean

check if action is enabled

Returns:

  • (Boolean)


32
33
34
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 32

def enabled?(val = true)
  @enabled == val
end

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 44

def eql?(other)
  name == other.name
end

#hashObject



48
49
50
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 48

def hash
  name.to_s.hash
end

#name?(name) ⇒ Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/fedux_org_stdlib/models/base_model.rb', line 36

def name?(name)
  @name == name
end