Module: StaticAssociation::ClassMethods

Includes:
Enumerable
Defined in:
lib/static_association.rb

Instance Method Summary collapse

Instance Method Details

#allObject



35
36
37
# File 'lib/static_association.rb', line 35

def all
  index.values
end

#find(id) ⇒ Object



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

def find(id)
  find_by_id(id) or raise RecordNotFound.new(
    "Couldn't find DummyClass with 'id'=#{id}"
  )
end

#find_by(**args) ⇒ Object



59
60
61
62
63
# File 'lib/static_association.rb', line 59

def find_by(**args)
  args.any? or raise ArgumentError

  all.find { |record| matches_attributes?(record: record, attributes: args) }
end

#find_by!(**args) ⇒ Object



65
66
67
68
69
70
# File 'lib/static_association.rb', line 65

def find_by!(**args)
  find_by(**args) or raise RecordNotFound.new(
    "Couldn't find #{name} with " +
    args.map { |k, v| "#{k}=#{v}" }.join(", ")
  )
end

#find_by_id(id) ⇒ Object



49
50
51
52
53
# File 'lib/static_association.rb', line 49

def find_by_id(id)
  index[
    Integer(id, exception: false) || id
  ]
end

#idsObject



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

def ids
  index.keys
end

#indexObject



31
32
33
# File 'lib/static_association.rb', line 31

def index
  @index ||= {}
end

#record(settings, &block) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/static_association.rb', line 72

def record(settings, &block)
  settings.assert_valid_keys(:id)
  id = settings.fetch(:id)

  if index.has_key?(id)
    raise DuplicateID.new("Duplicate record with 'id'=#{id} found")
  end

  record = new(id)
  record.instance_exec(record, &block) if block
  index[id] = record
end

#where(id: []) ⇒ Object



55
56
57
# File 'lib/static_association.rb', line 55

def where(id: [])
  all.select { |record| id.include?(record.id) }
end