bodhi-slam 0.5.4 → 0.6.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/lib/bodhi-slam/context.rb +0 -2
- data/lib/bodhi-slam/factory.rb +3 -5
- data/lib/bodhi-slam/indexes.rb +1 -5
- data/lib/bodhi-slam/profiles.rb +5 -1
- data/lib/bodhi-slam/properties.rb +17 -9
- data/lib/bodhi-slam/resource.rb +2 -33
- data/lib/bodhi-slam/support.rb +66 -0
- data/lib/bodhi-slam/types.rb +19 -36
- data/lib/bodhi-slam/types/index.rb +7 -1
- data/lib/bodhi-slam/users.rb +10 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e09a87b26acc4339643d71bf277dad6594e7ab4
|
4
|
+
data.tar.gz: 2e9a4a7d6c16223aeb5048f7db9ad62f67b16432
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0bab9be47dc879b044428bd45ec76717d2bd0b9e75f14db089bd3d0777c53ee0ff8590ce0d4032cb507876b66c8fa460aa0e559d19cf79473b2421c4941d78e
|
7
|
+
data.tar.gz: b7be96e86df8a30bdc2692a025a873c68a5f6574badaa80a3bfc272de81a1adac11e857b6128f394d714e043d1a7e15c8d25ca321b6808d265b15315ac9ae0af
|
data/lib/bodhi-slam/context.rb
CHANGED
data/lib/bodhi-slam/factory.rb
CHANGED
@@ -28,12 +28,9 @@ module Bodhi
|
|
28
28
|
# Resource.factory.build # => #<Resource:0x007fbff403e808 @name="2-3lmwp^oef@245">
|
29
29
|
# Resource.factory.build(name: "test") # => #<Resource:0x007fbff403e808 @name="test">
|
30
30
|
def build(options={})
|
31
|
-
|
32
|
-
options = options.reduce({}) do |memo, (k, v)|
|
33
|
-
memo.merge({ k.to_sym => v})
|
34
|
-
end
|
35
|
-
|
31
|
+
options = Bodhi::Support.symbolize_keys(options)
|
36
32
|
object = klass.new(bodhi_context: options[:bodhi_context])
|
33
|
+
|
37
34
|
@generators.each_pair do |attribute, generator|
|
38
35
|
if options.has_key?(attribute)
|
39
36
|
object.send("#{attribute}=", options[attribute])
|
@@ -41,6 +38,7 @@ module Bodhi
|
|
41
38
|
object.send("#{attribute}=", generator.call)
|
42
39
|
end
|
43
40
|
end
|
41
|
+
|
44
42
|
object
|
45
43
|
end
|
46
44
|
|
data/lib/bodhi-slam/indexes.rb
CHANGED
@@ -3,11 +3,7 @@ module Bodhi
|
|
3
3
|
module ClassMethods
|
4
4
|
def indexes; @indexes; end
|
5
5
|
def index(keys, options={})
|
6
|
-
|
7
|
-
options = options.reduce({}) do |memo, (k, v)|
|
8
|
-
memo.merge({ k.to_sym => v})
|
9
|
-
end
|
10
|
-
|
6
|
+
options = Bodhi::Support.symbolize_keys(options)
|
11
7
|
@indexes << Bodhi::TypeIndex.new(keys: keys.map(&:to_s), options: options)
|
12
8
|
end
|
13
9
|
end
|
data/lib/bodhi-slam/profiles.rb
CHANGED
@@ -6,7 +6,11 @@ module Bodhi
|
|
6
6
|
|
7
7
|
attr_accessor :bodhi_context
|
8
8
|
|
9
|
-
property :
|
9
|
+
property :dml, type: "Object"
|
10
|
+
property :name, type: "String"
|
11
|
+
property :namespace, type: "String"
|
12
|
+
property :subspace, type: "String"
|
13
|
+
property :parent, type: "String"
|
10
14
|
|
11
15
|
validates :name, type: "String", required: true, is_not_blank: true
|
12
16
|
validates :namespace, type: "String", required: true
|
@@ -7,10 +7,12 @@ module Bodhi
|
|
7
7
|
|
8
8
|
module ClassMethods
|
9
9
|
def properties; @properties; end
|
10
|
-
def
|
11
|
-
|
12
|
-
|
13
|
-
@properties.
|
10
|
+
def property_names; @properties.keys; end
|
11
|
+
def property(name, options)
|
12
|
+
attr_accessor name.to_sym
|
13
|
+
@properties[name.to_sym] = options.reduce({}) do |memo, (k, v)|
|
14
|
+
memo.merge({ Bodhi::Support.reverse_camelize(k.to_s).to_sym => v})
|
15
|
+
end
|
14
16
|
end
|
15
17
|
end
|
16
18
|
|
@@ -30,9 +32,15 @@ module Bodhi
|
|
30
32
|
# object = klass.new(name: "Bob", email: "some@email.com")
|
31
33
|
# object.name #=> "Bob"
|
32
34
|
# object.email #=> "some@email.com"
|
33
|
-
def initialize(
|
34
|
-
|
35
|
-
|
35
|
+
def initialize(options={})
|
36
|
+
options = Bodhi::Support.symbolize_keys(options)
|
37
|
+
options.each do |property, value|
|
38
|
+
property_options = self.class.properties[property]
|
39
|
+
if property_options.nil?
|
40
|
+
send("#{property}=", value)
|
41
|
+
else
|
42
|
+
send("#{property}=", Bodhi::Support.coerce(value, property_options))
|
43
|
+
end
|
36
44
|
end
|
37
45
|
end
|
38
46
|
|
@@ -43,7 +51,7 @@ module Bodhi
|
|
43
51
|
def attributes
|
44
52
|
attributes = Hash.new
|
45
53
|
|
46
|
-
self.class.
|
54
|
+
self.class.property_names.each do |property|
|
47
55
|
value = send(property)
|
48
56
|
if value.respond_to?(:attributes)
|
49
57
|
attributes[property] = value.attributes.delete_if { |k, v| v.nil? }
|
@@ -86,7 +94,7 @@ module Bodhi
|
|
86
94
|
def self.included(base)
|
87
95
|
base.extend(ClassMethods)
|
88
96
|
base.include(InstanceMethods)
|
89
|
-
base.instance_variable_set(:@properties,
|
97
|
+
base.instance_variable_set(:@properties, Hash.new)
|
90
98
|
end
|
91
99
|
end
|
92
100
|
end
|
data/lib/bodhi-slam/resource.rb
CHANGED
@@ -22,22 +22,13 @@ module Bodhi
|
|
22
22
|
# object = User.new(first_name: "John", last_name: "Smith", email: "jsmith@email.com")
|
23
23
|
# object.to_json #=> { "first_name": "John", "last_name": "Smith", "email": "jsmith@email.com" }
|
24
24
|
def field(name, options)
|
25
|
-
property(name.to_sym)
|
25
|
+
property(name.to_sym, options)
|
26
26
|
validates(name.to_sym, options)
|
27
27
|
generates(name.to_sym, options)
|
28
28
|
end
|
29
29
|
|
30
30
|
def build_type
|
31
|
-
|
32
|
-
# lookup the validators for each property and add them as options for the property
|
33
|
-
type_properties = self.properties.reduce({}) do |result, property|
|
34
|
-
options = self.validators[property].map(&:to_options).reduce({}) do |options_result, options_hash|
|
35
|
-
options_result.merge(options_hash)
|
36
|
-
end
|
37
|
-
result.merge({ property => options})
|
38
|
-
end
|
39
|
-
|
40
|
-
Bodhi::Type.new(name: self.name, properties: type_properties, indexes: self.indexes, embedded: self.is_embedded?)
|
31
|
+
Bodhi::Type.new(name: self.name, properties: self.properties, indexes: self.indexes, embedded: self.is_embedded?)
|
41
32
|
end
|
42
33
|
|
43
34
|
# Saves a batch of resources to the Bodhi Cloud in the given +context+
|
@@ -212,28 +203,6 @@ module Bodhi
|
|
212
203
|
end
|
213
204
|
|
214
205
|
module InstanceMethods
|
215
|
-
|
216
|
-
def initialize(params={})
|
217
|
-
params.each do |param_key, param_value|
|
218
|
-
if param_value.is_a? Hash
|
219
|
-
type_validator = self.class.validators[param_key.to_sym].find{ |validator| validator.is_a? Bodhi::TypeValidator }
|
220
|
-
if Object.const_defined?(type_validator.type)
|
221
|
-
klass = Object.const_get(type_validator.type)
|
222
|
-
if klass.ancestors.include?(Bodhi::Resource)
|
223
|
-
object = klass.new(param_value)
|
224
|
-
send("#{param_key}=", object)
|
225
|
-
else
|
226
|
-
send("#{param_key}=", param_value)
|
227
|
-
end
|
228
|
-
else
|
229
|
-
send("#{param_key}=", param_value)
|
230
|
-
end
|
231
|
-
else
|
232
|
-
send("#{param_key}=", param_value)
|
233
|
-
end
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
206
|
# Saves the resource to the Bodhi Cloud. Returns true if record was saved
|
238
207
|
#
|
239
208
|
# obj = Resource.new
|
data/lib/bodhi-slam/support.rb
CHANGED
@@ -19,5 +19,71 @@ module Bodhi
|
|
19
19
|
result = underscore(string).split('_').collect(&:capitalize).join
|
20
20
|
uncapitalize(result)
|
21
21
|
end
|
22
|
+
|
23
|
+
def self.symbolize_keys(hash)
|
24
|
+
hash.reduce({}) do |memo, (k, v)|
|
25
|
+
value = v.is_a?(Hash) ? symbolize_keys(v) : v
|
26
|
+
value = value.is_a?(Array) && value.first.is_a?(Hash) ? value.map{|item| symbolize_keys(item) } : value
|
27
|
+
memo.merge({ k.to_sym => value })
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.coerce(value, options)
|
32
|
+
options = symbolize_keys(options)
|
33
|
+
case options[:type].to_s
|
34
|
+
when "Object"
|
35
|
+
if options[:multi] == true
|
36
|
+
if value.is_a?(String)
|
37
|
+
values = JSON.parse(value)
|
38
|
+
values.map{|item| Bodhi::Support.symbolize_keys(item) }
|
39
|
+
elsif value.is_a?(Array) && value.first.is_a?(Hash)
|
40
|
+
value.map{|item| Bodhi::Support.symbolize_keys(item) }
|
41
|
+
else
|
42
|
+
raise RuntimeError.new("Unable to coerce: #{value} to a JSON Object")
|
43
|
+
end
|
44
|
+
else
|
45
|
+
if value.is_a?(Hash)
|
46
|
+
Bodhi::Support.symbolize_keys(value)
|
47
|
+
else
|
48
|
+
Bodhi::Support.symbolize_keys(JSON.parse(value))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
when "String"
|
52
|
+
if options[:multi] == true
|
53
|
+
value.map(&:to_s)
|
54
|
+
else
|
55
|
+
value.to_s
|
56
|
+
end
|
57
|
+
when "Real"
|
58
|
+
if options[:multi] == true
|
59
|
+
value.map(&:to_f)
|
60
|
+
else
|
61
|
+
value.to_f
|
62
|
+
end
|
63
|
+
when "Integer"
|
64
|
+
if options[:multi] == true
|
65
|
+
value.map(&:to_i)
|
66
|
+
else
|
67
|
+
value.to_i
|
68
|
+
end
|
69
|
+
when "DateTime"
|
70
|
+
if options[:multi] == true
|
71
|
+
value.map{|item| Time.parse(item.to_s) }
|
72
|
+
else
|
73
|
+
Time.parse(value.to_s)
|
74
|
+
end
|
75
|
+
else
|
76
|
+
if Object.const_defined?(options[:type].to_s) && Object.const_get(options[:type].to_s).ancestors.include?(Bodhi::Properties)
|
77
|
+
klass = Object.const_get(options[:type].to_s)
|
78
|
+
if options[:multi] == true
|
79
|
+
value.map{|item| klass.new(item) }
|
80
|
+
else
|
81
|
+
klass.new(value)
|
82
|
+
end
|
83
|
+
else
|
84
|
+
value
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
22
88
|
end
|
23
89
|
end
|
data/lib/bodhi-slam/types.rb
CHANGED
@@ -6,10 +6,23 @@ module Bodhi
|
|
6
6
|
|
7
7
|
attr_accessor :bodhi_context
|
8
8
|
|
9
|
-
property :
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
property :properties, type: "Object"
|
10
|
+
property :indexes, type: "Bodhi::TypeIndex", multi: true
|
11
|
+
property :events, type: "Object"
|
12
|
+
|
13
|
+
property :name, type: "String"
|
14
|
+
property :storage_name, type: "String"
|
15
|
+
property :namespace, type: "String"
|
16
|
+
property :package, type: "String"
|
17
|
+
property :version, type: "String"
|
18
|
+
property :extends, type: "String"
|
19
|
+
|
20
|
+
property :hidden, type: "Boolean"
|
21
|
+
property :embedded, type: "Boolean"
|
22
|
+
property :metadata, type: "Boolean"
|
23
|
+
property :encapsulated, type: "Boolean"
|
24
|
+
|
25
|
+
property :documentation, type: "Link"
|
13
26
|
|
14
27
|
validates :name, required: true, is_not_blank: true
|
15
28
|
validates :properties, required: true
|
@@ -23,28 +36,6 @@ module Bodhi
|
|
23
36
|
generates :embedded, type: "Boolean"
|
24
37
|
generates :version, type: "String"
|
25
38
|
|
26
|
-
def initialize(params={})
|
27
|
-
params.each do |param_key, param_value|
|
28
|
-
if param_key.to_sym == :indexes
|
29
|
-
# check if the param_value is already an Array of Bodhi::TypeIndex objects
|
30
|
-
if param_value.is_a?(Array) && param_value.first.is_a?(Bodhi::TypeIndex)
|
31
|
-
send("#{param_key}=", param_value)
|
32
|
-
else
|
33
|
-
# the param_value is a raw json object and needs to be turned into an array of Bodhi::TypeIndex objects
|
34
|
-
values = param_value.map{ |index| Bodhi::TypeIndex.new(index) }
|
35
|
-
send("#{param_key}=", values)
|
36
|
-
end
|
37
|
-
else
|
38
|
-
send("#{param_key}=", param_value)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
# Format type name to be compatible with Ruby Constants
|
43
|
-
if !name.nil? && name[0] == name[0].downcase
|
44
|
-
name.capitalize!
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
39
|
# Saves the resource to the Bodhi Cloud. Raises ArgumentError if record could not be saved.
|
49
40
|
#
|
50
41
|
# obj = Resouce.new
|
@@ -161,10 +152,7 @@ module Bodhi
|
|
161
152
|
klass = Object.const_set(type.name, Class.new { include Bodhi::Resource })
|
162
153
|
|
163
154
|
type.properties.each_pair do |attr_name, attr_properties|
|
164
|
-
|
165
|
-
attr_properties = attr_properties.reduce({}) do |memo, (k, v)|
|
166
|
-
memo.merge({ k.to_sym => v})
|
167
|
-
end
|
155
|
+
attr_properties = Bodhi::Support.symbolize_keys(attr_properties)
|
168
156
|
|
169
157
|
# remove Sanitizers
|
170
158
|
attr_properties.delete_if{ |key, value| [:trim, :unique, :default, :isCurrentUser, :toLower].include?(key) }
|
@@ -181,12 +169,7 @@ module Bodhi
|
|
181
169
|
if index.is_a? Bodhi::TypeIndex
|
182
170
|
klass.index index.keys, index.options
|
183
171
|
else
|
184
|
-
|
185
|
-
# symbolize the index option keys
|
186
|
-
index = index.reduce({}) do |memo, (k, v)|
|
187
|
-
memo.merge({ k.to_sym => v})
|
188
|
-
end
|
189
|
-
|
172
|
+
index = Bodhi::Support.symbolize_keys(index)
|
190
173
|
klass.index index[:keys], index[:options]
|
191
174
|
end
|
192
175
|
end
|
@@ -1,11 +1,17 @@
|
|
1
1
|
module Bodhi
|
2
2
|
class TypeIndex
|
3
|
+
include Enumerable
|
3
4
|
include Bodhi::Properties
|
4
5
|
include Bodhi::Validations
|
5
6
|
|
6
|
-
property :keys, :
|
7
|
+
property :keys, type: "String", multi: true, required: true
|
8
|
+
property :options, type: "Object"
|
7
9
|
|
8
10
|
validates :keys, required: true, multi: true, type: "String"
|
9
11
|
validates :options, type: "Object"
|
12
|
+
|
13
|
+
def each
|
14
|
+
self.attributes.each{ |k, v| yield(k, v) }
|
15
|
+
end
|
10
16
|
end
|
11
17
|
end
|
data/lib/bodhi-slam/users.rb
CHANGED
@@ -6,7 +6,16 @@ module Bodhi
|
|
6
6
|
|
7
7
|
attr_accessor :bodhi_context
|
8
8
|
|
9
|
-
property :username,
|
9
|
+
property :username, type: "String"
|
10
|
+
property :password, type: "String"
|
11
|
+
property :profiles, type: "String", multi: true
|
12
|
+
property :authorizations, type: "BodhiAuthorization", multi: true
|
13
|
+
property :email, type: "String"
|
14
|
+
property :firstName, type: "String"
|
15
|
+
property :lastName, type: "String"
|
16
|
+
property :phone, type: "String"
|
17
|
+
property :usertype, type: "String"
|
18
|
+
property :namespace, type: "String"
|
10
19
|
|
11
20
|
validates :username, type: "String", required: true, is_not_blank: true
|
12
21
|
validates :password, type: "String", required: true, is_not_blank: true
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bodhi-slam
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- willdavis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|