miasma 0.0.1 → 0.1.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +2 -0
- data/README.md +179 -0
- data/lib/miasma.rb +52 -0
- data/lib/miasma/contrib/aws.rb +390 -0
- data/lib/miasma/contrib/aws/auto_scale.rb +85 -0
- data/lib/miasma/contrib/aws/compute.rb +112 -0
- data/lib/miasma/contrib/aws/load_balancer.rb +185 -0
- data/lib/miasma/contrib/aws/orchestration.rb +338 -0
- data/lib/miasma/contrib/rackspace.rb +164 -0
- data/lib/miasma/contrib/rackspace/auto_scale.rb +84 -0
- data/lib/miasma/contrib/rackspace/compute.rb +104 -0
- data/lib/miasma/contrib/rackspace/load_balancer.rb +117 -0
- data/lib/miasma/contrib/rackspace/orchestration.rb +255 -0
- data/lib/miasma/error.rb +89 -0
- data/lib/miasma/models.rb +14 -0
- data/lib/miasma/models/auto_scale.rb +55 -0
- data/lib/miasma/models/auto_scale/group.rb +64 -0
- data/lib/miasma/models/auto_scale/groups.rb +34 -0
- data/lib/miasma/models/block_storage.rb +0 -0
- data/lib/miasma/models/compute.rb +70 -0
- data/lib/miasma/models/compute/server.rb +71 -0
- data/lib/miasma/models/compute/servers.rb +35 -0
- data/lib/miasma/models/dns.rb +0 -0
- data/lib/miasma/models/load_balancer.rb +55 -0
- data/lib/miasma/models/load_balancer/balancer.rb +72 -0
- data/lib/miasma/models/load_balancer/balancers.rb +34 -0
- data/lib/miasma/models/monitoring.rb +0 -0
- data/lib/miasma/models/orchestration.rb +127 -0
- data/lib/miasma/models/orchestration/event.rb +38 -0
- data/lib/miasma/models/orchestration/events.rb +64 -0
- data/lib/miasma/models/orchestration/resource.rb +79 -0
- data/lib/miasma/models/orchestration/resources.rb +55 -0
- data/lib/miasma/models/orchestration/stack.rb +144 -0
- data/lib/miasma/models/orchestration/stacks.rb +46 -0
- data/lib/miasma/models/queues.rb +0 -0
- data/lib/miasma/models/storage.rb +60 -0
- data/lib/miasma/models/storage/bucket.rb +36 -0
- data/lib/miasma/models/storage/buckets.rb +41 -0
- data/lib/miasma/models/storage/file.rb +45 -0
- data/lib/miasma/models/storage/files.rb +52 -0
- data/lib/miasma/types.rb +13 -0
- data/lib/miasma/types/api.rb +145 -0
- data/lib/miasma/types/collection.rb +116 -0
- data/lib/miasma/types/data.rb +53 -0
- data/lib/miasma/types/model.rb +118 -0
- data/lib/miasma/types/thin_model.rb +76 -0
- data/lib/miasma/utils.rb +12 -0
- data/lib/miasma/utils/animal_strings.rb +29 -0
- data/lib/miasma/utils/immutable.rb +36 -0
- data/lib/miasma/utils/lazy.rb +231 -0
- data/lib/miasma/utils/memoization.rb +55 -0
- data/lib/miasma/utils/smash.rb +149 -0
- data/lib/miasma/version.rb +4 -0
- data/miasma.gemspec +18 -0
- metadata +57 -3
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'miasma'
|
2
|
+
|
3
|
+
module Miasma
|
4
|
+
module Utils
|
5
|
+
# Memoization helpers
|
6
|
+
module Memoization
|
7
|
+
|
8
|
+
# Memoize data
|
9
|
+
#
|
10
|
+
# @param key [String, Symbol] identifier for data
|
11
|
+
# @param direct [Truthy, Falsey] direct skips key prepend of object id
|
12
|
+
# @yield block to create data
|
13
|
+
# @yieldreturn data to memoize
|
14
|
+
# @return [Object] data
|
15
|
+
def memoize(key, direct=false)
|
16
|
+
unless(direct)
|
17
|
+
key = "#{self.object_id}_#{key}"
|
18
|
+
end
|
19
|
+
unless(_memo.has_key?(key))
|
20
|
+
_memo[key] = yield
|
21
|
+
end
|
22
|
+
_memo[key]
|
23
|
+
end
|
24
|
+
|
25
|
+
def _memo
|
26
|
+
Thread.current[:miasma_memoization] ||= Smash.new
|
27
|
+
end
|
28
|
+
|
29
|
+
# Remove memoized value
|
30
|
+
#
|
31
|
+
# @param key [String, Symbol] identifier for data
|
32
|
+
# @param direct [Truthy, Falsey] direct skips key prepend of object id
|
33
|
+
# @return [NilClass]
|
34
|
+
def unmemoize(key, direct=false)
|
35
|
+
unless(direct)
|
36
|
+
key = "#{self.object_id}_#{key}"
|
37
|
+
end
|
38
|
+
_memo.delete(key)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Remove all memoized values
|
42
|
+
#
|
43
|
+
# @return [TrueClass]
|
44
|
+
def clear_memoizations!
|
45
|
+
_memo.keys.find_all do |key|
|
46
|
+
key.to_s.start_with?("#{self.object_id}_")
|
47
|
+
end.each do |key|
|
48
|
+
_memo.delete(key)
|
49
|
+
end
|
50
|
+
true
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require 'hashie'
|
2
|
+
require 'digest/sha2'
|
3
|
+
require 'miasma'
|
4
|
+
|
5
|
+
module Miasma
|
6
|
+
module Utils
|
7
|
+
|
8
|
+
# Customized Hash
|
9
|
+
class Smash < Hash
|
10
|
+
include Hashie::Extensions::IndifferentAccess
|
11
|
+
include Hashie::Extensions::MergeInitializer
|
12
|
+
include Hashie::Extensions::DeepMerge
|
13
|
+
include Hashie::Extensions::Coercion
|
14
|
+
|
15
|
+
coerce_value Hash, Smash
|
16
|
+
|
17
|
+
# Create new instance
|
18
|
+
#
|
19
|
+
# @param args [Object] argument list
|
20
|
+
def initialize(*args)
|
21
|
+
base = nil
|
22
|
+
if(args.first.is_a?(::Hash))
|
23
|
+
base = args.shift
|
24
|
+
end
|
25
|
+
super *args
|
26
|
+
if(base)
|
27
|
+
self.replace(base.to_smash)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def merge!(hash)
|
32
|
+
hash = hash.to_smash
|
33
|
+
super(hash)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Get value at given path
|
37
|
+
#
|
38
|
+
# @param args [String, Symbol] key path to walk
|
39
|
+
# @return [Object, NilClass]
|
40
|
+
def retrieve(*args)
|
41
|
+
args.inject(self) do |memo, key|
|
42
|
+
if(memo.is_a?(Hash))
|
43
|
+
memo.to_smash[key]
|
44
|
+
else
|
45
|
+
nil
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
alias_method :get, :retrieve
|
50
|
+
|
51
|
+
# Fetch value at given path or return a default value
|
52
|
+
#
|
53
|
+
# @param args [String, Symbol, Object] key path to walk. last value default to return
|
54
|
+
# @return [Object] value at key or default value
|
55
|
+
def fetch(*args)
|
56
|
+
default_value = args.pop
|
57
|
+
retrieve(*args) || default_value
|
58
|
+
end
|
59
|
+
|
60
|
+
# Set value at given path
|
61
|
+
#
|
62
|
+
# @param args [String, Symbol, Object] key path to walk. set last value to given path
|
63
|
+
# @return [Object] value set
|
64
|
+
def set(*args)
|
65
|
+
unless(args.size > 1)
|
66
|
+
raise ArgumentError.new 'Set requires at least one key and a value'
|
67
|
+
end
|
68
|
+
value = args.pop
|
69
|
+
set_key = args.pop
|
70
|
+
leaf = args.inject(self) do |memo, key|
|
71
|
+
unless(memo[key].is_a?(Hash))
|
72
|
+
memo[key] = Smash.new
|
73
|
+
end
|
74
|
+
memo[key]
|
75
|
+
end
|
76
|
+
leaf[set_key] = value
|
77
|
+
value
|
78
|
+
end
|
79
|
+
|
80
|
+
# Convert to Hash
|
81
|
+
#
|
82
|
+
# @return [Hash]
|
83
|
+
def to_hash
|
84
|
+
self.to_type_converter(::Hash, :to_hash)
|
85
|
+
end
|
86
|
+
|
87
|
+
# Calculate checksum of hash (sha256)
|
88
|
+
#
|
89
|
+
# @return [String] checksum
|
90
|
+
def checksum
|
91
|
+
Digest::SHA256.hexdigest(self.to_smash.to_s)
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
# Hook helper into toplevel `Hash`
|
100
|
+
class Hash
|
101
|
+
|
102
|
+
# Convert to Smash
|
103
|
+
#
|
104
|
+
# @return [Smash]
|
105
|
+
def to_smash
|
106
|
+
self.to_type_converter(::Smash, :to_smash)
|
107
|
+
end
|
108
|
+
alias_method :hulk_smash, :to_smash
|
109
|
+
|
110
|
+
protected
|
111
|
+
|
112
|
+
# Convert to type
|
113
|
+
#
|
114
|
+
# @param type [Class] hash type
|
115
|
+
# @param convert_call [Symbol] builtin hash convert
|
116
|
+
# @return [Smash]
|
117
|
+
def to_type_converter(type, convert_call)
|
118
|
+
type.new.tap do |smash|
|
119
|
+
self.sort_by do |entry|
|
120
|
+
entry.first.to_s
|
121
|
+
end.each do |k,v|
|
122
|
+
smash[k.is_a?(Symbol) ? k.to_s : k] = smash_conversion(v, convert_call)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# Convert object to smash if applicable
|
128
|
+
#
|
129
|
+
# @param obj [Object]
|
130
|
+
# @param convert_call [Symbol] builtin hash convert
|
131
|
+
# @return [Smash, Object]
|
132
|
+
def smash_conversion(obj, convert_call)
|
133
|
+
case obj
|
134
|
+
when Hash
|
135
|
+
obj.send(convert_call)
|
136
|
+
when Array
|
137
|
+
obj.map do |i|
|
138
|
+
smash_conversion(i, convert_call)
|
139
|
+
end
|
140
|
+
else
|
141
|
+
obj
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
unless(defined?(Smash))
|
148
|
+
Smash = Miasma::Utils::Smash
|
149
|
+
end
|
data/miasma.gemspec
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__)) + '/lib/'
|
2
|
+
require 'miasma/version'
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'miasma'
|
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/chrisroberts/miasma'
|
10
|
+
s.description = 'Smoggy API'
|
11
|
+
s.license = 'Apache 2.0'
|
12
|
+
s.require_path = 'lib'
|
13
|
+
s.add_dependency 'hashie'
|
14
|
+
s.add_dependency 'http'
|
15
|
+
s.add_dependency 'multi_json'
|
16
|
+
s.add_dependency 'multi_xml'
|
17
|
+
s.files = Dir['lib/**/*'] + %w(miasma.gemspec README.md CHANGELOG.md)
|
18
|
+
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.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Roberts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|
@@ -71,7 +71,61 @@ email: code@chrisroberts.org
|
|
71
71
|
executables: []
|
72
72
|
extensions: []
|
73
73
|
extra_rdoc_files: []
|
74
|
-
files:
|
74
|
+
files:
|
75
|
+
- CHANGELOG.md
|
76
|
+
- README.md
|
77
|
+
- lib/miasma.rb
|
78
|
+
- lib/miasma/contrib/aws.rb
|
79
|
+
- lib/miasma/contrib/aws/auto_scale.rb
|
80
|
+
- lib/miasma/contrib/aws/compute.rb
|
81
|
+
- lib/miasma/contrib/aws/load_balancer.rb
|
82
|
+
- lib/miasma/contrib/aws/orchestration.rb
|
83
|
+
- lib/miasma/contrib/rackspace.rb
|
84
|
+
- lib/miasma/contrib/rackspace/auto_scale.rb
|
85
|
+
- lib/miasma/contrib/rackspace/compute.rb
|
86
|
+
- lib/miasma/contrib/rackspace/load_balancer.rb
|
87
|
+
- lib/miasma/contrib/rackspace/orchestration.rb
|
88
|
+
- lib/miasma/error.rb
|
89
|
+
- lib/miasma/models.rb
|
90
|
+
- lib/miasma/models/auto_scale.rb
|
91
|
+
- lib/miasma/models/auto_scale/group.rb
|
92
|
+
- lib/miasma/models/auto_scale/groups.rb
|
93
|
+
- lib/miasma/models/block_storage.rb
|
94
|
+
- lib/miasma/models/compute.rb
|
95
|
+
- lib/miasma/models/compute/server.rb
|
96
|
+
- lib/miasma/models/compute/servers.rb
|
97
|
+
- lib/miasma/models/dns.rb
|
98
|
+
- lib/miasma/models/load_balancer.rb
|
99
|
+
- lib/miasma/models/load_balancer/balancer.rb
|
100
|
+
- lib/miasma/models/load_balancer/balancers.rb
|
101
|
+
- lib/miasma/models/monitoring.rb
|
102
|
+
- lib/miasma/models/orchestration.rb
|
103
|
+
- lib/miasma/models/orchestration/event.rb
|
104
|
+
- lib/miasma/models/orchestration/events.rb
|
105
|
+
- lib/miasma/models/orchestration/resource.rb
|
106
|
+
- lib/miasma/models/orchestration/resources.rb
|
107
|
+
- lib/miasma/models/orchestration/stack.rb
|
108
|
+
- lib/miasma/models/orchestration/stacks.rb
|
109
|
+
- lib/miasma/models/queues.rb
|
110
|
+
- lib/miasma/models/storage.rb
|
111
|
+
- lib/miasma/models/storage/bucket.rb
|
112
|
+
- lib/miasma/models/storage/buckets.rb
|
113
|
+
- lib/miasma/models/storage/file.rb
|
114
|
+
- lib/miasma/models/storage/files.rb
|
115
|
+
- lib/miasma/types.rb
|
116
|
+
- lib/miasma/types/api.rb
|
117
|
+
- lib/miasma/types/collection.rb
|
118
|
+
- lib/miasma/types/data.rb
|
119
|
+
- lib/miasma/types/model.rb
|
120
|
+
- lib/miasma/types/thin_model.rb
|
121
|
+
- lib/miasma/utils.rb
|
122
|
+
- lib/miasma/utils/animal_strings.rb
|
123
|
+
- lib/miasma/utils/immutable.rb
|
124
|
+
- lib/miasma/utils/lazy.rb
|
125
|
+
- lib/miasma/utils/memoization.rb
|
126
|
+
- lib/miasma/utils/smash.rb
|
127
|
+
- lib/miasma/version.rb
|
128
|
+
- miasma.gemspec
|
75
129
|
homepage: https://github.com/chrisroberts/miasma
|
76
130
|
licenses:
|
77
131
|
- Apache 2.0
|