miasma 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2 -0
  3. data/README.md +179 -0
  4. data/lib/miasma.rb +52 -0
  5. data/lib/miasma/contrib/aws.rb +390 -0
  6. data/lib/miasma/contrib/aws/auto_scale.rb +85 -0
  7. data/lib/miasma/contrib/aws/compute.rb +112 -0
  8. data/lib/miasma/contrib/aws/load_balancer.rb +185 -0
  9. data/lib/miasma/contrib/aws/orchestration.rb +338 -0
  10. data/lib/miasma/contrib/rackspace.rb +164 -0
  11. data/lib/miasma/contrib/rackspace/auto_scale.rb +84 -0
  12. data/lib/miasma/contrib/rackspace/compute.rb +104 -0
  13. data/lib/miasma/contrib/rackspace/load_balancer.rb +117 -0
  14. data/lib/miasma/contrib/rackspace/orchestration.rb +255 -0
  15. data/lib/miasma/error.rb +89 -0
  16. data/lib/miasma/models.rb +14 -0
  17. data/lib/miasma/models/auto_scale.rb +55 -0
  18. data/lib/miasma/models/auto_scale/group.rb +64 -0
  19. data/lib/miasma/models/auto_scale/groups.rb +34 -0
  20. data/lib/miasma/models/block_storage.rb +0 -0
  21. data/lib/miasma/models/compute.rb +70 -0
  22. data/lib/miasma/models/compute/server.rb +71 -0
  23. data/lib/miasma/models/compute/servers.rb +35 -0
  24. data/lib/miasma/models/dns.rb +0 -0
  25. data/lib/miasma/models/load_balancer.rb +55 -0
  26. data/lib/miasma/models/load_balancer/balancer.rb +72 -0
  27. data/lib/miasma/models/load_balancer/balancers.rb +34 -0
  28. data/lib/miasma/models/monitoring.rb +0 -0
  29. data/lib/miasma/models/orchestration.rb +127 -0
  30. data/lib/miasma/models/orchestration/event.rb +38 -0
  31. data/lib/miasma/models/orchestration/events.rb +64 -0
  32. data/lib/miasma/models/orchestration/resource.rb +79 -0
  33. data/lib/miasma/models/orchestration/resources.rb +55 -0
  34. data/lib/miasma/models/orchestration/stack.rb +144 -0
  35. data/lib/miasma/models/orchestration/stacks.rb +46 -0
  36. data/lib/miasma/models/queues.rb +0 -0
  37. data/lib/miasma/models/storage.rb +60 -0
  38. data/lib/miasma/models/storage/bucket.rb +36 -0
  39. data/lib/miasma/models/storage/buckets.rb +41 -0
  40. data/lib/miasma/models/storage/file.rb +45 -0
  41. data/lib/miasma/models/storage/files.rb +52 -0
  42. data/lib/miasma/types.rb +13 -0
  43. data/lib/miasma/types/api.rb +145 -0
  44. data/lib/miasma/types/collection.rb +116 -0
  45. data/lib/miasma/types/data.rb +53 -0
  46. data/lib/miasma/types/model.rb +118 -0
  47. data/lib/miasma/types/thin_model.rb +76 -0
  48. data/lib/miasma/utils.rb +12 -0
  49. data/lib/miasma/utils/animal_strings.rb +29 -0
  50. data/lib/miasma/utils/immutable.rb +36 -0
  51. data/lib/miasma/utils/lazy.rb +231 -0
  52. data/lib/miasma/utils/memoization.rb +55 -0
  53. data/lib/miasma/utils/smash.rb +149 -0
  54. data/lib/miasma/version.rb +4 -0
  55. data/miasma.gemspec +18 -0
  56. 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
@@ -0,0 +1,4 @@
1
+ module Miasma
2
+ # current library version
3
+ VERSION = Gem::Version.new('0.1.0')
4
+ end
@@ -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.1
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-09-28 00:00:00.000000000 Z
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