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.
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