Class: Miasma::Types::Collection
- Inherits:
-
Object
- Object
- Miasma::Types::Collection
- Includes:
- Utils::Memoization
- Defined in:
- lib/miasma/types/collection.rb
Overview
Base collection
Direct Known Subclasses
Models::AutoScale::Groups, Models::Compute::Servers, Models::LoadBalancer::Balancers, Models::Orchestration::Stack::Events, Models::Orchestration::Stack::Resources, Models::Orchestration::Stacks, Models::Storage::Buckets, Models::Storage::Files
Instance Attribute Summary collapse
-
#api ⇒ Miasma::Api
readonly
Underlying service API.
Instance Method Summary collapse
- #all ⇒ Array<Model>
-
#build(args = {}) ⇒ Model
Build a new model.
-
#filter(args = {}) ⇒ Array<Model>
Return models matching given filter.
-
#from_json(json) ⇒ self
Load collection via JSON.
-
#get(ident) ⇒ Model, NilClass
Return model with given name or ID.
-
#initialize(api) ⇒ Collection
constructor
A new instance of Collection.
-
#model ⇒ Miasma::Types::Model
Model class within collection.
-
#reload ⇒ self
Reload the collection.
-
#to_json(*_) ⇒ String
Collection of models.
Methods included from Utils::Memoization
#_memo, #clear_memoizations!, #memoize, #unmemoize
Constructor Details
#initialize(api) ⇒ Collection
Returns a new instance of Collection.
14 15 16 17 |
# File 'lib/miasma/types/collection.rb', line 14 def initialize(api) @api = api @collection = nil end |
Instance Attribute Details
#api ⇒ Miasma::Api (readonly)
Returns underlying service API.
12 13 14 |
# File 'lib/miasma/types/collection.rb', line 12 def api @api end |
Instance Method Details
#all ⇒ Array<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>
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 |
#model ⇒ Miasma::Types::Model
Returns model class within collection.
94 95 96 |
# File 'lib/miasma/types/collection.rb', line 94 def model raise NotImplementedError end |
#reload ⇒ self
Reload the collection
29 30 31 32 |
# File 'lib/miasma/types/collection.rb', line 29 def reload clear_memoizations! self end |
#to_json(*_) ⇒ String
Returns collection of models.
71 72 73 |
# File 'lib/miasma/types/collection.rb', line 71 def to_json(*_) self.all.to_json end |