Class: Miasma::Types::Collection

Inherits:
Object
  • Object
show all
Includes:
Utils::Memoization
Defined in:
lib/miasma/types/collection.rb

Overview

Base collection

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api) ⇒ Collection



14
15
16
17
# File 'lib/miasma/types/collection.rb', line 14

def initialize(api)
  @api = api
  @collection = nil
end

Instance Attribute Details

#apiMiasma::Api (readonly)



12
13
14
# File 'lib/miasma/types/collection.rb', line 12

def api
  @api
end

Instance Method Details

#allArray<Model>



20
21
22
23
24
# File 'lib/miasma/types/collection.rb', line 20

def all
  memoize(:collection) do
    perform_population
  end
end

#build(args = {}) ⇒ Model

Build a new model



61
62
63
64
65
66
67
68
# File 'lib/miasma/types/collection.rb', line 61

def build(args={})
  instance = self.model.new(self.api)
  args.each do |m_name, m_value|
    m_name = "#{m_name}="
    instance.send(m_name, m_value)
  end
  instance
end

#filter(args = {}) ⇒ Array<Model>

TODO:

need to add helper to deep sort args, convert to string and hash to use as memoization key

Return models matching given filter



50
51
52
53
54
55
# File 'lib/miasma/types/collection.rb', line 50

def filter(args={})
  key = "filter_#{args.to_smash.checksum}"
  memoize(key) do
    perform_filter(args)
  end
end

#from_json(json) ⇒ self

Load collection via JSON



79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/miasma/types/collection.rb', line 79

def from_json(json)
  loaded = MultiJson.load(json)
  unless(loaded.is_a?(Array))
    raise TypeError.new "Expecting type `Array` but received `#{loaded.class}`"
  end
  unmemoize(:collection)
  memoize(:collection) do
    loaded.map do |item|
      model.from_json(self.api, MultiJson.dump(item))
    end
  end
  self
end

#get(ident) ⇒ Model, NilClass

Return model with given name or ID



38
39
40
41
42
# File 'lib/miasma/types/collection.rb', line 38

def get(ident)
  memoize(ident) do
    perform_get(ident)
  end
end

#modelMiasma::Types::Model

Returns model class within collection.

Raises:

  • (NotImplementedError)


94
95
96
# File 'lib/miasma/types/collection.rb', line 94

def model
  raise NotImplementedError
end

#reloadself

Reload the collection



29
30
31
32
# File 'lib/miasma/types/collection.rb', line 29

def reload
  clear_memoizations!
  self
end

#to_json(*_) ⇒ String



71
72
73
# File 'lib/miasma/types/collection.rb', line 71

def to_json(*_)
  self.all.to_json
end