miasma 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +4 -0
  3. data/LICENSE +1 -1
  4. data/README.md +5 -2
  5. data/lib/miasma.rb +14 -15
  6. data/lib/miasma/error.rb +17 -10
  7. data/lib/miasma/models.rb +9 -9
  8. data/lib/miasma/models/auto_scale.rb +5 -7
  9. data/lib/miasma/models/auto_scale/group.rb +8 -13
  10. data/lib/miasma/models/auto_scale/groups.rb +2 -4
  11. data/lib/miasma/models/block_storage.rb +1 -0
  12. data/lib/miasma/models/compute.rb +4 -6
  13. data/lib/miasma/models/compute/server.rb +5 -6
  14. data/lib/miasma/models/compute/servers.rb +2 -4
  15. data/lib/miasma/models/dns.rb +1 -0
  16. data/lib/miasma/models/load_balancer.rb +5 -7
  17. data/lib/miasma/models/load_balancer/balancer.rb +9 -11
  18. data/lib/miasma/models/load_balancer/balancers.rb +2 -4
  19. data/lib/miasma/models/monitoring.rb +1 -0
  20. data/lib/miasma/models/orchestration.rb +37 -7
  21. data/lib/miasma/models/orchestration/event.rb +2 -5
  22. data/lib/miasma/models/orchestration/events.rb +5 -7
  23. data/lib/miasma/models/orchestration/plan.rb +87 -0
  24. data/lib/miasma/models/orchestration/plans.rb +52 -0
  25. data/lib/miasma/models/orchestration/resource.rb +8 -10
  26. data/lib/miasma/models/orchestration/resources.rb +3 -5
  27. data/lib/miasma/models/orchestration/stack.rb +106 -20
  28. data/lib/miasma/models/orchestration/stacks.rb +3 -5
  29. data/lib/miasma/models/queues.rb +1 -0
  30. data/lib/miasma/models/queuing.rb +72 -0
  31. data/lib/miasma/models/queuing/queue.rb +77 -0
  32. data/lib/miasma/models/queuing/queues.rb +32 -0
  33. data/lib/miasma/models/storage.rb +8 -9
  34. data/lib/miasma/models/storage/bucket.rb +4 -7
  35. data/lib/miasma/models/storage/buckets.rb +2 -4
  36. data/lib/miasma/models/storage/file.rb +13 -16
  37. data/lib/miasma/models/storage/files.rb +3 -5
  38. data/lib/miasma/specs.rb +4 -4
  39. data/lib/miasma/specs/compute_abstract.rb +24 -33
  40. data/lib/miasma/specs/load_balancer_abstract.rb +17 -27
  41. data/lib/miasma/specs/orchestration_abstract.rb +26 -37
  42. data/lib/miasma/specs/storage_abstract.rb +21 -27
  43. data/lib/miasma/types.rb +6 -8
  44. data/lib/miasma/types/api.rb +28 -31
  45. data/lib/miasma/types/collection.rb +8 -10
  46. data/lib/miasma/types/data.rb +2 -5
  47. data/lib/miasma/types/model.rb +13 -16
  48. data/lib/miasma/types/thin_model.rb +7 -10
  49. data/lib/miasma/utils.rb +7 -7
  50. data/lib/miasma/utils/animal_strings.rb +1 -3
  51. data/lib/miasma/utils/api_methoding.rb +2 -5
  52. data/lib/miasma/utils/immutable.rb +2 -6
  53. data/lib/miasma/utils/lazy.rb +2 -2
  54. data/lib/miasma/utils/memoization.rb +1 -1
  55. data/lib/miasma/utils/smash.rb +1 -1
  56. data/lib/miasma/version.rb +1 -1
  57. data/miasma.gemspec +21 -19
  58. metadata +44 -12
@@ -1,11 +1,10 @@
1
- require 'miasma'
1
+ require "miasma"
2
2
 
3
3
  module Miasma
4
4
  module Types
5
5
 
6
6
  # Base data container
7
7
  class Data
8
-
9
8
  include Miasma::Utils::Lazy
10
9
 
11
10
  attribute :id, [String, Numeric]
@@ -14,7 +13,7 @@ module Miasma
14
13
  #
15
14
  # @param args [Hash] attribute values
16
15
  # @return [self]
17
- def initialize(args={})
16
+ def initialize(args = {})
18
17
  load_data(args)
19
18
  valid_state
20
19
  end
@@ -45,9 +44,7 @@ module Miasma
45
44
  def from_json(json)
46
45
  self.new(MultiJson.load(json).to_smash)
47
46
  end
48
-
49
47
  end
50
-
51
48
  end
52
49
  end
53
50
  end
@@ -1,15 +1,14 @@
1
- require 'miasma'
1
+ require "miasma"
2
2
 
3
3
  module Miasma
4
4
  module Types
5
5
 
6
6
  # Base model
7
7
  class Model < Data
8
-
9
8
  include Utils::Memoization
10
9
  include Utils::ApiMethoding
11
10
 
12
- attribute :custom, Smash, :coerce => lambda{|v| v.to_smash}, :default => Smash.new
11
+ attribute :custom, Smash, :coerce => lambda { |v| v.to_smash }, :default => Smash.new
13
12
 
14
13
  # @return [Miasma::Types::Api] underlying service API
15
14
  attr_reader :api
@@ -26,7 +25,6 @@ module Miasma
26
25
  instance.from_json(json)
27
26
  instance
28
27
  end
29
-
30
28
  end
31
29
 
32
30
  # Build new model
@@ -34,12 +32,12 @@ module Miasma
34
32
  # @param api [Miasma::Types::Api] service API
35
33
  # @param model_data [Smash] load model data if provided
36
34
  # @return [self]
37
- def initialize(api, model_data=nil)
35
+ def initialize(api, model_data = nil)
38
36
  @api = api
39
37
  @data = Smash.new
40
38
  @dirty = Smash.new
41
- if(model_data)
42
- if(model_data.is_a?(Hash))
39
+ if model_data
40
+ if model_data.is_a?(Hash)
43
41
  load_data(model_data) unless model_data.empty?
44
42
  else
45
43
  raise TypeError.new "Expecting `model_data` to be of type `Hash`. Received: `#{model_data.class}`"
@@ -53,7 +51,7 @@ module Miasma
53
51
  # @return [TrueClass, FalseClass] save was performed
54
52
  # @raises [Miasma::Error::Save]
55
53
  def save
56
- if(dirty?)
54
+ if dirty?
57
55
  perform_save
58
56
  reload
59
57
  else
@@ -66,7 +64,7 @@ module Miasma
66
64
  # @return [TrueClass, FalseClass] destruction was performed
67
65
  # @raises [Miasma::Error::Destroy]
68
66
  def destroy
69
- if(persisted?)
67
+ if persisted?
70
68
  perform_destroy
71
69
  reload
72
70
  true
@@ -101,10 +99,10 @@ module Miasma
101
99
  # @return [TrueClass, FalseClass] performed remote action
102
100
  # @raises [Miasma::Error::Save]
103
101
  def perform_save
104
- if(m_name = api_method_for(:save))
102
+ if m_name = api_method_for(:save)
105
103
  api.send(m_name, self)
106
104
  else
107
- raise NotImplementedError.new 'Remote API save has not been implemented'
105
+ raise NotImplementedError.new "Remote API save has not been implemented"
108
106
  end
109
107
  end
110
108
 
@@ -113,10 +111,10 @@ module Miasma
113
111
  # @return [TrueClass, FalseClass] performed remote action
114
112
  # @raises [Miasma::Error::Save]
115
113
  def perform_reload
116
- if(m_name = api_method_for(:reload))
114
+ if m_name = api_method_for(:reload)
117
115
  api.send(m_name, self)
118
116
  else
119
- raise NotImplementedError.new 'Remote API reload has not been implemented'
117
+ raise NotImplementedError.new "Remote API reload has not been implemented"
120
118
  end
121
119
  end
122
120
 
@@ -125,13 +123,12 @@ module Miasma
125
123
  # @return [TrueClass, FalseClass] performed remote action
126
124
  # @raises [Miasma::Error::Save]
127
125
  def perform_destroy
128
- if(m_name = api_method_for(:destroy))
126
+ if m_name = api_method_for(:destroy)
129
127
  api.send(m_name, self)
130
128
  else
131
- raise NotImplementedError.new 'Remote API destroy has not been implemented'
129
+ raise NotImplementedError.new "Remote API destroy has not been implemented"
132
130
  end
133
131
  end
134
-
135
132
  end
136
133
  end
137
134
  end
@@ -1,20 +1,19 @@
1
- require 'miasma'
1
+ require "miasma"
2
2
 
3
3
  module Miasma
4
4
  module Types
5
5
 
6
6
  # Base data container
7
7
  class ThinModel < Data
8
-
9
8
  class << self
10
9
 
11
10
  # Get/Set fat model
12
11
  #
13
12
  # @param klass [Class] fat model class
14
13
  # @return [Class] fat model class
15
- def model(klass=nil)
16
- if(klass)
17
- unless(klass.ancestors.include?(Miasma::Types::Model))
14
+ def model(klass = nil)
15
+ if klass
16
+ unless klass.ancestors.include?(Miasma::Types::Model)
18
17
  raise TypeError.new "Expecting `Miasma::Types::Model` subclass! (got #{klass})"
19
18
  else
20
19
  self._model = klass
@@ -27,7 +26,6 @@ module Miasma
27
26
 
28
27
  # @return [Class] fat model class
29
28
  attr_accessor :_model
30
-
31
29
  end
32
30
 
33
31
  # @return [Miasma::Types::Api] service API
@@ -37,7 +35,7 @@ module Miasma
37
35
  #
38
36
  # @param api [Miasma::Types::Api] service API
39
37
  # @param args [Hash] model data
40
- def initialize(api, args={})
38
+ def initialize(api, args = {})
41
39
  @api = api
42
40
  super args
43
41
  end
@@ -53,7 +51,7 @@ module Miasma
53
51
  # @return [Class] of type Miasma::Types::Model
54
52
  # @note will deconstruct namespace and rebuild using provider
55
53
  def model
56
- if(self.class.model)
54
+ if self.class.model
57
55
  self.class.model
58
56
  else
59
57
  raise NotImplementedError.new "No associated model for this thin model type (#{self.class})"
@@ -68,9 +66,8 @@ module Miasma
68
66
  inst.data[:id] = self.id
69
67
  inst.reload
70
68
  end
71
- alias_method :instance, :expand
72
69
 
70
+ alias_method :instance, :expand
73
71
  end
74
-
75
72
  end
76
73
  end
@@ -1,13 +1,13 @@
1
- require 'miasma'
1
+ require "miasma"
2
2
 
3
3
  module Miasma
4
4
  module Utils
5
- autoload :ApiMethoding, 'miasma/utils/api_methoding'
6
- autoload :Lazy, 'miasma/utils/lazy'
7
- autoload :Memoization, 'miasma/utils/memoization'
8
- autoload :Immutable, 'miasma/utils/immutable'
5
+ autoload :ApiMethoding, "miasma/utils/api_methoding"
6
+ autoload :Lazy, "miasma/utils/lazy"
7
+ autoload :Memoization, "miasma/utils/memoization"
8
+ autoload :Immutable, "miasma/utils/immutable"
9
9
  end
10
10
  end
11
11
 
12
- require 'miasma/utils/animal_strings'
13
- require 'miasma/utils/smash'
12
+ require "miasma/utils/animal_strings"
13
+ require "miasma/utils/smash"
@@ -1,11 +1,9 @@
1
- require 'miasma'
1
+ require "miasma"
2
2
 
3
3
  module Miasma
4
-
5
4
  module Utils
6
5
  # Animal stylings on strings
7
6
  AnimalStrings = Bogo::AnimalStrings
8
7
  extend AnimalStrings
9
8
  end
10
-
11
9
  end
@@ -1,19 +1,16 @@
1
- require 'miasma'
1
+ require "miasma"
2
2
 
3
3
  module Miasma
4
4
  module Utils
5
-
6
5
  module ApiMethoding
7
6
 
8
7
  # Generate the supported API method for
9
8
  # a given action
10
9
  def api_method_for(action)
11
10
  klass = self.respond_to?(:model) ? model : self.class
12
- m_name = "#{Bogo::Utility.snake(klass.name.split('::').last)}_#{action}"
11
+ m_name = "#{Bogo::Utility.snake(klass.name.split("::").last)}_#{action}"
13
12
  self.api.respond_to?(m_name) ? m_name : nil
14
13
  end
15
-
16
14
  end
17
-
18
15
  end
19
16
  end
@@ -1,7 +1,6 @@
1
- require 'miasma'
1
+ require "miasma"
2
2
 
3
3
  module Miasma
4
-
5
4
  module Utils
6
5
  # Make best effort to make model immutable
7
6
  # @note this should be included at end of model definition
@@ -17,20 +16,17 @@ module Miasma
17
16
 
18
17
  # @raises [Error::ImmutableError]
19
18
  def save
20
- raise Error::ImmutableError.new 'Resource information cannot be mutated!'
19
+ raise Error::ImmutableError.new "Resource information cannot be mutated!"
21
20
  end
22
21
 
23
22
  class << self
24
-
25
23
  def included(klass)
26
24
  klass.class_eval do
27
25
  alias_method :unfrozen_valid_state, :valid_state
28
26
  alias_method :valid_state, :frozen_valid_state
29
27
  end
30
28
  end
31
-
32
29
  end
33
-
34
30
  end
35
31
  end
36
32
  end
@@ -1,5 +1,5 @@
1
- require 'miasma'
2
- require 'digest/sha2'
1
+ require "miasma"
2
+ require "digest/sha2"
3
3
 
4
4
  module Miasma
5
5
  module Utils
@@ -1,4 +1,4 @@
1
- require 'miasma'
1
+ require "miasma"
2
2
 
3
3
  module Miasma
4
4
  module Utils
@@ -1,4 +1,4 @@
1
- require 'miasma'
1
+ require "miasma"
2
2
 
3
3
  module Miasma
4
4
  module Utils
@@ -1,4 +1,4 @@
1
1
  module Miasma
2
2
  # current library version
3
- VERSION = Gem::Version.new('0.3.2')
3
+ VERSION = Gem::Version.new("0.3.4")
4
4
  end
@@ -1,22 +1,24 @@
1
- $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__)) + '/lib/'
2
- require 'miasma/version'
1
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__)) + "/lib/"
2
+ require "miasma/version"
3
3
  Gem::Specification.new do |s|
4
- s.name = 'miasma'
4
+ s.name = "miasma"
5
5
  s.version = Miasma::VERSION.version
6
- s.summary = 'Smoggy API'
7
- s.author = 'Chris Roberts'
8
- s.email = 'code@chrisroberts.org'
9
- s.homepage = 'https://github.com/miasma-rb/miasma'
10
- s.description = 'Smoggy API'
11
- s.license = 'Apache 2.0'
12
- s.require_path = 'lib'
13
- s.add_runtime_dependency 'http', '>= 0.8.12', '< 1.1'
14
- s.add_runtime_dependency 'multi_json'
15
- s.add_runtime_dependency 'multi_xml'
16
- s.add_runtime_dependency 'xml-simple'
17
- s.add_runtime_dependency 'bogo', '>= 0.2.2', '< 1.0'
18
- s.add_development_dependency 'pry'
19
- s.add_development_dependency 'rake'
20
- s.add_development_dependency 'minitest'
21
- s.files = Dir['{bin,lib}/**/*'] + %w(miasma.gemspec README.md CHANGELOG.md LICENSE)
6
+ s.summary = "Smoggy API"
7
+ s.author = "Chris Roberts"
8
+ s.email = "code@chrisroberts.org"
9
+ s.homepage = "https://github.com/miasma-rb/miasma"
10
+ s.description = "Smoggy API"
11
+ s.license = "Apache 2.0"
12
+ s.require_path = "lib"
13
+ s.add_runtime_dependency "http", ">= 0.8.12", "< 2.0"
14
+ s.add_runtime_dependency "multi_json"
15
+ s.add_runtime_dependency "multi_xml"
16
+ s.add_runtime_dependency "xml-simple"
17
+ s.add_runtime_dependency "bogo", ">= 0.2.2", "< 1.0"
18
+ s.add_development_dependency "pry"
19
+ s.add_development_dependency "minitest"
20
+ s.add_development_dependency "rspec", "~> 3.5"
21
+ s.add_development_dependency "rake", "~> 10"
22
+ s.add_development_dependency "rufo", "~> 0.3.0"
23
+ s.files = Dir["{bin,lib}/**/*"] + %w(miasma.gemspec README.md CHANGELOG.md LICENSE)
22
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miasma
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-10 00:00:00.000000000 Z
11
+ date: 2018-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: 0.8.12
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '1.1'
22
+ version: '2.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: 0.8.12
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '1.1'
32
+ version: '2.0'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: multi_json
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -107,7 +107,7 @@ dependencies:
107
107
  - !ruby/object:Gem::Version
108
108
  version: '0'
109
109
  - !ruby/object:Gem::Dependency
110
- name: rake
110
+ name: minitest
111
111
  requirement: !ruby/object:Gem::Requirement
112
112
  requirements:
113
113
  - - ">="
@@ -121,19 +121,47 @@ dependencies:
121
121
  - !ruby/object:Gem::Version
122
122
  version: '0'
123
123
  - !ruby/object:Gem::Dependency
124
- name: minitest
124
+ name: rspec
125
125
  requirement: !ruby/object:Gem::Requirement
126
126
  requirements:
127
- - - ">="
127
+ - - "~>"
128
128
  - !ruby/object:Gem::Version
129
- version: '0'
129
+ version: '3.5'
130
130
  type: :development
131
131
  prerelease: false
132
132
  version_requirements: !ruby/object:Gem::Requirement
133
133
  requirements:
134
- - - ">="
134
+ - - "~>"
135
135
  - !ruby/object:Gem::Version
136
- version: '0'
136
+ version: '3.5'
137
+ - !ruby/object:Gem::Dependency
138
+ name: rake
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '10'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '10'
151
+ - !ruby/object:Gem::Dependency
152
+ name: rufo
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: 0.3.0
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - "~>"
163
+ - !ruby/object:Gem::Version
164
+ version: 0.3.0
137
165
  description: Smoggy API
138
166
  email: code@chrisroberts.org
139
167
  executables: []
@@ -161,11 +189,16 @@ files:
161
189
  - lib/miasma/models/orchestration.rb
162
190
  - lib/miasma/models/orchestration/event.rb
163
191
  - lib/miasma/models/orchestration/events.rb
192
+ - lib/miasma/models/orchestration/plan.rb
193
+ - lib/miasma/models/orchestration/plans.rb
164
194
  - lib/miasma/models/orchestration/resource.rb
165
195
  - lib/miasma/models/orchestration/resources.rb
166
196
  - lib/miasma/models/orchestration/stack.rb
167
197
  - lib/miasma/models/orchestration/stacks.rb
168
198
  - lib/miasma/models/queues.rb
199
+ - lib/miasma/models/queuing.rb
200
+ - lib/miasma/models/queuing/queue.rb
201
+ - lib/miasma/models/queuing/queues.rb
169
202
  - lib/miasma/models/storage.rb
170
203
  - lib/miasma/models/storage/bucket.rb
171
204
  - lib/miasma/models/storage/buckets.rb
@@ -211,9 +244,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
211
244
  version: '0'
212
245
  requirements: []
213
246
  rubyforge_project:
214
- rubygems_version: 2.4.8
247
+ rubygems_version: 2.7.6
215
248
  signing_key:
216
249
  specification_version: 4
217
250
  summary: Smoggy API
218
251
  test_files: []
219
- has_rdoc: