bodhi-slam 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d83b1c6ce8f644e9108c2c8fc4c3b0996851d572
4
- data.tar.gz: 75a57b10b96e572fad43651f55d2d037950f16e6
3
+ metadata.gz: a9e0fc2114db2a841586eb0937833f53d7696cf4
4
+ data.tar.gz: c47da0ee237f0a404ec5d3e8b8f12c2c957ba1b4
5
5
  SHA512:
6
- metadata.gz: 8ce0f4f00314d5d366450444f39d2883314352a679a08876580252417df685f680a105e4525f6d9a7707d43f4652552357d538d2e0bd3cf5175cb0e6d0591d50
7
- data.tar.gz: 0a5b7e3955f4b3a331e2aba1741d6439cccd81c9ed353b3f00351b110eaef575d4ca60ddc10a919e8a0a8a48c80e0d360c056672cb595e636b6174817249cc72
6
+ metadata.gz: 0fd1e845bdf7e809e7bf8ba750a60e9d1a2e27924846c576fa838ec1ce300e8f78eba9b1b6d23dd02c00886c982d37456ae9e3bf651428ceb62ff037568b3d87
7
+ data.tar.gz: 86440102243b951b235e7a4eb9bce696c530d86fe6a8193a9e1fe7470915b9582d30c4df36948da0b666a0e03ae549a6152aedf6d6b2d7ea44bb174de1b9e290
@@ -3,6 +3,7 @@ require 'net/http/persistent'
3
3
  require "json"
4
4
  require "time"
5
5
  require "SecureRandom"
6
+ require 'regexp-examples'
6
7
 
7
8
  require 'bodhi-slam/validations'
8
9
  require 'bodhi-slam/errors'
@@ -82,16 +82,34 @@ module Bodhi
82
82
  # Resource.factory.add_generator("name", type: "String")
83
83
  # Resource.factory.add_generator("test", type: "Integer", multi: true, required: true)
84
84
  def add_generator(name, options)
85
+ options = options.reduce({}) do |memo, (k, v)|
86
+ memo.merge({ k.to_s.gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').gsub(/([a-z\d])([A-Z])/,'\1_\2').tr("-", "_").downcase.to_sym => v})
87
+ end
88
+
85
89
  case options[:type]
86
90
  when "String"
87
91
  characters = [('a'..'z'), ('A'..'Z'), ('0'..'9')].map { |i| i.to_a }.flatten
88
92
  "~!@#$%^&*()_+-=:;<>?,./ ".each_char{ |c| characters.push(c) }
89
93
 
90
- generator = lambda do
91
- if options[:multi]
92
- [*0..5].sample.times.collect{ [*0..100].sample.times.map{ characters[rand(characters.length)] }.join }
94
+ if options[:multi]
95
+ if options[:is_not_blank]
96
+ generator = lambda{ [*0..5].sample.times.collect{ [*1..100].sample.times.map{ characters[rand(characters.length)] }.join } }
97
+ elsif options[:is_email]
98
+ generator = lambda{ [*0..5].sample.times.collect{ /\p{Alnum}{5,10}@\p{Alnum}{5,10}\.\p{Alnum}{2,3}/i.random_example } }
99
+ elsif options[:matches]
100
+ generator = lambda{ [*0..5].sample.times.collect{ Regexp.new(options[:matches]).random_example } }
101
+ else
102
+ generator = lambda{ [*0..5].sample.times.collect{ [*0..100].sample.times.map{ characters[rand(characters.length)] }.join } }
103
+ end
104
+ else
105
+ if options[:is_not_blank]
106
+ generator = lambda{ [*1..100].sample.times.map{ characters[rand(characters.length)] }.join }
107
+ elsif options[:is_email]
108
+ generator = lambda{ /\p{Alnum}{5,10}@\p{Alnum}{5,10}\.\p{Alnum}{2,3}/i.random_example }
109
+ elsif options[:matches]
110
+ generator = lambda{ Regexp.new(options[:matches]).random_example }
93
111
  else
94
- [*0..100].sample.times.map{ characters[rand(characters.length)] }.join
112
+ generator = lambda{ [*0..100].sample.times.map{ characters[rand(characters.length)] }.join }
95
113
  end
96
114
  end
97
115
 
@@ -21,6 +21,24 @@ module Bodhi
21
21
  batch
22
22
  end
23
23
 
24
+ # Counts all of the Resources records and returns the result
25
+ def count(context)
26
+ if context.invalid?
27
+ raise Bodhi::ContextErrors.new(context.errors.messages), context.errors.to_a.to_s
28
+ end
29
+
30
+ result = context.connection.get do |request|
31
+ request.url "/#{context.namespace}/resources/#{name}/count"
32
+ request.headers[context.credentials_header] = context.credentials
33
+ end
34
+
35
+ if result.status != 200
36
+ raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
37
+ end
38
+
39
+ JSON.parse(result.body)
40
+ end
41
+
24
42
  # Returns a single resource from the Bodhi Cloud that matches the given +id+
25
43
  #
26
44
  # context = Bodhi::Context.new
@@ -8,7 +8,6 @@ module Bodhi
8
8
 
9
9
  attr_accessor *ATTRIBUTES
10
10
  attr_reader *SYSTEM_ATTRIBUTES
11
- attr_reader :validations
12
11
  attr_accessor :bodhi_context
13
12
 
14
13
  validates :name, required: true, is_not_blank: true
@@ -38,31 +37,10 @@ module Bodhi
38
37
  send("#{attribute}=", params[attribute])
39
38
  end
40
39
 
40
+ # Format type name to be compatible with Ruby Constants
41
41
  if !name.nil? && name[0] == name[0].downcase
42
42
  name.capitalize!
43
43
  end
44
-
45
- # build validator objects
46
- @validations = {}
47
- if properties
48
- properties.each_pair do |attr_name, attr_properties|
49
- @validations[attr_name.to_sym] = []
50
- attr_properties.each_pair do |option, value|
51
- underscored_name = option.to_s.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').gsub(/([a-z\d])([A-Z])/,'\1_\2').tr("-", "_").downcase.to_sym
52
- unless [:system, :trim, :ref, :unique, :default, :is_current_user, :to_lower].include? underscored_name
53
- klass = Bodhi::Validator.constantize(underscored_name)
54
- if option.to_s == "type" && value == "Enumerated"
55
- if attr_properties["ref"].nil?
56
- raise RuntimeError.new("No reference property found! Cannot build enumeration validator for #{name}.#{attr_name}")
57
- end
58
- @validations[attr_name.to_sym] << klass.new(value, attr_properties["ref"])
59
- else
60
- @validations[attr_name.to_sym] << klass.new(value)
61
- end
62
- end
63
- end
64
- end
65
- end
66
44
  end
67
45
 
68
46
  # Returns a Hash of the Objects form attributes
@@ -183,8 +161,6 @@ module Bodhi
183
161
  # type = Bodhi::Type.new({name: "TestType", properties: { foo:{ type:"String" }}})
184
162
  # klass = Bodhi::Type.create_class_with(type)
185
163
  # klass # => #<Class:0x007fbff403e808 @name="TestType">
186
- #
187
- # # Additional class methods
188
164
  # klass.validations # => { foo: [#<TypeValidator:0x007fbff403e808 @type="String">] }
189
165
  # klass.factory # => #<Bodhi::Factory:0x007fbff403e808 @klass="TestType", @generators=[]>
190
166
  def self.create_class_with(type)
@@ -197,11 +173,10 @@ module Bodhi
197
173
  attr_accessor *type.properties.keys
198
174
  })
199
175
 
200
- type.validations.each_pair do |attribute, validations|
201
- attr_options = Hash.new
202
- validations.each{ |validation| attr_options.merge!(validation.to_options) }
203
- klass.validates(attribute, attr_options)
204
- klass.factory.add_generator(attribute, attr_options)
176
+ type.properties.each_pair do |attr_name, attr_properties|
177
+ attr_properties.delete_if{ |key, value| ["system", "trim", "unique", "default", "isCurrentUser"].include?(key) }
178
+ klass.validates(attr_name.to_sym, attr_properties)
179
+ klass.factory.add_generator(attr_name.to_sym, attr_properties)
205
180
  end
206
181
 
207
182
  klass
@@ -45,8 +45,14 @@ module Bodhi
45
45
  raise ArgumentError.new("Invalid :options argument. Options can not be empty")
46
46
  end
47
47
 
48
+ options = options.reduce({}) do |memo, (k, v)|
49
+ memo.merge({ k.to_sym => v})
50
+ end
51
+
48
52
  @validators[attribute] = []
49
53
  options.each_pair do |key, value|
54
+ key = key.to_s.gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').gsub(/([a-z\d])([A-Z])/,'\1_\2').tr("-", "_").downcase.to_sym
55
+
50
56
  unless [:ref].include?(key)
51
57
  if key == :type && value == "Enumerated"
52
58
  @validators[attribute] << Bodhi::Validator.constantize(key).new(value, options[:ref])
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.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - willdavis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-27 00:00:00.000000000 Z
11
+ date: 2015-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-http-persistent
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: regexp-examples
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.1'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.1'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement