croesus 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +121 -0
  3. data/.ruby-version +1 -0
  4. data/API_operation.txt +197 -0
  5. data/CHANGELOG.md +0 -0
  6. data/Gemfile +3 -0
  7. data/LICENSE.txt +0 -0
  8. data/README.md +146 -0
  9. data/Rakefile +26 -0
  10. data/bin/console_cmd.rb +133 -0
  11. data/croesus.gemspec +39 -0
  12. data/lib/croesus/associations.rb +46 -0
  13. data/lib/croesus/attribute.rb +41 -0
  14. data/lib/croesus/attributes.rb +93 -0
  15. data/lib/croesus/coerce.rb +110 -0
  16. data/lib/croesus/coercions/boolean_definitions.rb +32 -0
  17. data/lib/croesus/coercions/date_definitions.rb +30 -0
  18. data/lib/croesus/coercions/date_time_definitions.rb +30 -0
  19. data/lib/croesus/coercions/fixnum_definitions.rb +32 -0
  20. data/lib/croesus/coercions/float_definitions.rb +30 -0
  21. data/lib/croesus/coercions/hash_definitions.rb +27 -0
  22. data/lib/croesus/coercions/integer_definitions.rb +29 -0
  23. data/lib/croesus/coercions/string_definitions.rb +43 -0
  24. data/lib/croesus/coercions/time_definitions.rb +30 -0
  25. data/lib/croesus/core_ext/blank.rb +123 -0
  26. data/lib/croesus/core_ext/hash.rb +185 -0
  27. data/lib/croesus/dsl/dsl.rb +35 -0
  28. data/lib/croesus/dsl/helpers.rb +43 -0
  29. data/lib/croesus/dsl/mod_factory.rb +191 -0
  30. data/lib/croesus/dsl/resource_dsl.rb +59 -0
  31. data/lib/croesus/dsl/route_dsl.rb +42 -0
  32. data/lib/croesus/identity_map.rb +98 -0
  33. data/lib/croesus/platform.rb +47 -0
  34. data/lib/croesus/querying.rb +63 -0
  35. data/lib/croesus/resources/about.rb +15 -0
  36. data/lib/croesus/resources/basic_methods.rb +36 -0
  37. data/lib/croesus/resources/connectivity.rb +42 -0
  38. data/lib/croesus/resources/container.rb +135 -0
  39. data/lib/croesus/resources/fault.rb +38 -0
  40. data/lib/croesus/resources/fault_effect.rb +24 -0
  41. data/lib/croesus/resources/group.rb +37 -0
  42. data/lib/croesus/resources/host.rb +26 -0
  43. data/lib/croesus/resources/job.rb +27 -0
  44. data/lib/croesus/resources/namespace.rb +39 -0
  45. data/lib/croesus/resources/policy.rb +38 -0
  46. data/lib/croesus/resources/source.rb +86 -0
  47. data/lib/croesus/resources/source_config.rb +54 -0
  48. data/lib/croesus/resources/source_environment.rb +58 -0
  49. data/lib/croesus/resources/source_repository.rb +14 -0
  50. data/lib/croesus/resources/system_info.rb +21 -0
  51. data/lib/croesus/resources/timeflow.rb +40 -0
  52. data/lib/croesus/resources/timeflow_snapshot.rb +38 -0
  53. data/lib/croesus/utils.rb +262 -0
  54. data/lib/croesus/validations/many.rb +27 -0
  55. data/lib/croesus/validations/optional.rb +27 -0
  56. data/lib/croesus/validations.rb +91 -0
  57. data/lib/croesus/validators/base.rb +47 -0
  58. data/lib/croesus/validators/boolean_validator.rb +32 -0
  59. data/lib/croesus/validators/email_validator.rb +36 -0
  60. data/lib/croesus/validators/enumerable_validator.rb +40 -0
  61. data/lib/croesus/validators/hash_validator.rb +50 -0
  62. data/lib/croesus/validators/lambda_validator.rb +54 -0
  63. data/lib/croesus/validators/many_validator.rb +57 -0
  64. data/lib/croesus/validators/optional_validator.rb +41 -0
  65. data/lib/croesus/validators/presence_validator.rb +36 -0
  66. data/lib/croesus/validators/simple_type_validators.rb +38 -0
  67. data/lib/croesus/validators/simple_validator.rb +40 -0
  68. data/lib/croesus/version.rb +43 -0
  69. data/lib/croesus/web_client/web_client.rb +153 -0
  70. data/lib/croesus/web_client/web_request.rb +77 -0
  71. data/lib/croesus/web_client/web_response.rb +70 -0
  72. data/lib/croesus.rb +250 -0
  73. metadata +325 -0
@@ -0,0 +1,91 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author: Stefano Harding <riddopic@gmail.com>
4
+ #
5
+ # Copyright (C) 2014 Stefano Harding
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied. See the License for the specific language governing
17
+ # permissions and limitations under the License.
18
+ #
19
+
20
+ module Croesus
21
+ class Base
22
+ attr_accessor :hash, :validations, :errors
23
+
24
+ def initialize(hash, validations)
25
+ self.errors = {}
26
+ self.hash = hash
27
+ self.validations = validations.inject({
28
+ }){ |memo,(k,v)| memo[k] = v.to_s.downcase; memo }
29
+ validate
30
+ end
31
+
32
+ def valid?
33
+ errors.empty?
34
+ end
35
+
36
+ def self.validate(hash, validations)
37
+ new(hash, validations)
38
+ end
39
+
40
+ private # P R O P R I E T À P R I V A T A Vietato L'accesso
41
+
42
+ def validate
43
+ Croesus.validator_for(hash).validate(
44
+ :base, self.hash, self.validations, self.errors
45
+ )
46
+ self.errors = errors[:base]
47
+ end
48
+ end
49
+
50
+ @@validators = []
51
+
52
+ def self.append_validator(validator)
53
+ unless validator.is_a?(Croesus::Validator::Base)
54
+ raise ValidationError.new(
55
+ 'Validators inherit from Croesus::Validator::Base'
56
+ )
57
+ end
58
+
59
+ if @@validators.detect { |v| v.name == validator.name }
60
+ raise ValidationError.new('Validators must have unique names.')
61
+ end
62
+
63
+ @@validators << validator
64
+ end
65
+
66
+ def self.validator_for(item)
67
+ @@validators.detect { |v| v.should_validate?(item) } ||
68
+ raise(ValidationError.new("Could not find valid validator for: #{item}"))
69
+ end
70
+
71
+ module Validator
72
+ end
73
+
74
+ module Validations
75
+ end
76
+ end
77
+
78
+ # Load validators
79
+ require 'croesus/validations/optional'
80
+ require 'croesus/validations/many'
81
+ require 'croesus/validators/base'
82
+ require 'croesus/validators/simple_validator'
83
+ require 'croesus/validators/hash_validator'
84
+ require 'croesus/validators/presence_validator'
85
+ require 'croesus/validators/simple_type_validators'
86
+ require 'croesus/validators/boolean_validator'
87
+ require 'croesus/validators/email_validator'
88
+ require 'croesus/validators/enumerable_validator'
89
+ require 'croesus/validators/lambda_validator'
90
+ require 'croesus/validators/optional_validator'
91
+ require 'croesus/validators/many_validator'
@@ -0,0 +1,47 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author: Stefano Harding <riddopic@gmail.com>
4
+ #
5
+ # Copyright (C) 2014 Stefano Harding
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied. See the License for the specific language governing
17
+ # permissions and limitations under the License.
18
+ #
19
+
20
+ class Croesus::Validator::Base
21
+ attr_accessor :name
22
+
23
+ def initialize(name)
24
+ unless name.is_a?(String) && name.size > 0
25
+ raise StandardError.new(
26
+ 'Validator must be initialized with a valid name '\
27
+ '(string with length greater than zero).'
28
+ )
29
+ end
30
+
31
+ self.name = name
32
+ end
33
+
34
+ def should_validate?(name)
35
+ self.name == name
36
+ end
37
+
38
+ def presence_error_message
39
+ "#{self.name} required"
40
+ end
41
+
42
+ def validate(key, value, validations, errors)
43
+ raise ValidationError.new(
44
+ 'Validate should not be called directly on Croesus::Validator::Base'
45
+ )
46
+ end
47
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author: Stefano Harding <riddopic@gmail.com>
4
+ #
5
+ # Copyright (C) 2014 Stefano Harding
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied. See the License for the specific language governing
17
+ # permissions and limitations under the License.
18
+ #
19
+
20
+ class Croesus::Validator::BooleanValidator < Croesus::Validator::Base
21
+ def initialize
22
+ super('boolean') # The name of the validator
23
+ end
24
+
25
+ def validate(key, value, validations, errors)
26
+ unless [TrueClass, FalseClass].include?(value.class)
27
+ errors[key] = presence_error_message
28
+ end
29
+ end
30
+ end
31
+
32
+ Croesus.append_validator(Croesus::Validator::BooleanValidator.new)
@@ -0,0 +1,36 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author: Stefano Harding <riddopic@gmail.com>
4
+ #
5
+ # Copyright (C) 2014 Stefano Harding
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied. See the License for the specific language governing
17
+ # permissions and limitations under the License.
18
+ #
19
+
20
+ class Croesus::Validator::EmailValidator < Croesus::Validator::Base
21
+ def initialize
22
+ super('email') # The name of the validator
23
+ end
24
+
25
+ def presence_error_message
26
+ 'is not a valid email'
27
+ end
28
+
29
+ def validate(key, value, validations, errors)
30
+ unless value.is_a?(String) && value.include?("@")
31
+ errors[key] = presence_error_message
32
+ end
33
+ end
34
+ end
35
+
36
+ Croesus.append_validator(Croesus::Validator::EmailValidator.new)
@@ -0,0 +1,40 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author: Stefano Harding <riddopic@gmail.com>
4
+ #
5
+ # Copyright (C) 2014 Stefano Harding
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied. See the License for the specific language governing
17
+ # permissions and limitations under the License.
18
+ #
19
+
20
+ class Croesus::Validator::EnumerableValidator < Croesus::Validator::Base
21
+ def initialize
22
+ super('_enumerable') # The name of the validator, underscored as it won't usually be directly invoked (invoked through use of validator)
23
+ end
24
+
25
+ def should_validate?(item)
26
+ item.is_a?(Enumerable)
27
+ end
28
+
29
+ def presence_error_message
30
+ 'value from list required'
31
+ end
32
+
33
+ def validate(key, value, validations, errors)
34
+ unless validations.include?(value)
35
+ errors[key] = presence_error_message
36
+ end
37
+ end
38
+ end
39
+
40
+ Croesus.append_validator(Croesus::Validator::EnumerableValidator.new)
@@ -0,0 +1,50 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author: Stefano Harding <riddopic@gmail.com>
4
+ #
5
+ # Copyright (C) 2014 Stefano Harding
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied. See the License for the specific language governing
17
+ # permissions and limitations under the License.
18
+ #
19
+
20
+ class Croesus::Validator::HashValidator < Croesus::Validator::Base
21
+ def initialize
22
+ super('hash')
23
+ end
24
+
25
+ def should_validate?(item)
26
+ item.is_a?(Hash)
27
+ end
28
+
29
+ def validate(key, value, validations, errors)
30
+ # Validate hash
31
+ unless value.is_a?(Hash)
32
+ errors[key] = presence_error_message
33
+ return
34
+ end
35
+
36
+ # Hashes can contain sub-elements, attempt to validator those
37
+ errors = (errors[key] = {})
38
+
39
+ validations.each do |v_key, v_value|
40
+ Croesus.validator_for(v_value).validate(
41
+ v_key, value[v_key], v_value, errors
42
+ )
43
+ end
44
+
45
+ # Cleanup errors (remove any empty nested errors)
46
+ errors.delete_if { |k,v| v.empty? }
47
+ end
48
+ end
49
+
50
+ Croesus.append_validator(Croesus::Validator::HashValidator.new)
@@ -0,0 +1,54 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author: Stefano Harding <riddopic@gmail.com>
4
+ #
5
+ # Copyright (C) 2014 Stefano Harding
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied. See the License for the specific language governing
17
+ # permissions and limitations under the License.
18
+ #
19
+
20
+ class Croesus::Validator::LambdaValidator < Croesus::Validator::Base
21
+ def initialize
22
+ super('_lambda') # The name of the validator, underscored as it won't usually be directly invoked (invoked through use of validator)
23
+ end
24
+
25
+ def should_validate?(item)
26
+ if item.is_a?(Proc)
27
+ if item.arity == 1
28
+ true
29
+ else
30
+ raise InvalidArgumentCount.new(
31
+ "Lambda validator should only accept one argument; " \
32
+ "supplied lambda accepts #{item.arity}."
33
+ )
34
+ end
35
+ else
36
+ false
37
+ end
38
+ end
39
+
40
+ def presence_error_message
41
+ 'is not valid'
42
+ end
43
+
44
+ def validate(key, value, lambda, errors)
45
+ unless lambda.call(value)
46
+ errors[key] = presence_error_message
47
+ end
48
+
49
+ rescue
50
+ errors[key] = presence_error_message
51
+ end
52
+ end
53
+
54
+ Croesus.append_validator(Croesus::Validator::LambdaValidator.new)
@@ -0,0 +1,57 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author: Stefano Harding <riddopic@gmail.com>
4
+ #
5
+ # Copyright (C) 2014 Stefano Harding
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied. See the License for the specific language governing
17
+ # permissions and limitations under the License.
18
+ #
19
+
20
+ module Croesus::Validator
21
+ class ManyValidator < Base
22
+ def initialize
23
+ super('_many') # The name of the validator, underscored as it won't usually be directly invoked (invoked through use of validator)
24
+ end
25
+
26
+ def should_validate?(validation)
27
+ validation.is_a?(Croesus::Validations::Many)
28
+ end
29
+
30
+ def presence_error_message
31
+ "enumerable required"
32
+ end
33
+
34
+ def validate(key, value, validations, errors)
35
+ unless value.is_a?(Enumerable)
36
+ errors[key] = presence_error_message
37
+ return
38
+ end
39
+
40
+ element_errors = Array.new
41
+
42
+ value.each_with_index do |element, i|
43
+ ::Croesus.validator_for(validations.validation).validate(i, element, validations.validation, element_errors)
44
+ end
45
+
46
+ element_errors.each_with_index do |e, i|
47
+ if e.respond_to?(:empty?) && e.empty?
48
+ element_errors[i] = nil
49
+ end
50
+ end
51
+
52
+ errors[key] = element_errors unless element_errors.all?(&:nil?)
53
+ end
54
+ end
55
+ end
56
+
57
+ Croesus.append_validator(Croesus::Validator::ManyValidator.new)
@@ -0,0 +1,41 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author: Stefano Harding <riddopic@gmail.com>
4
+ #
5
+ # Copyright (C) 2014 Stefano Harding
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied. See the License for the specific language governing
17
+ # permissions and limitations under the License.
18
+ #
19
+
20
+ module Croesus::Validator
21
+ class OptionalValidator < Base
22
+ def initialize
23
+ # The name of the validator, underscored as it won't usually be directly
24
+ # invoked (invoked through use of validator).
25
+ super('_optional')
26
+ end
27
+
28
+ def should_validate?(validation)
29
+ validation.is_a?(Croesus::Validations::Optional)
30
+ end
31
+
32
+ def validate(key, value, validations, errors)
33
+ if value
34
+ ::Croesus.validator_for(validations.validation).validate(key, value, validations.validation, errors)
35
+ errors.delete(key) if errors[key].respond_to?(:empty?) && errors[key].empty?
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ Croesus.append_validator(Croesus::Validator::OptionalValidator.new)
@@ -0,0 +1,36 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author: Stefano Harding <riddopic@gmail.com>
4
+ #
5
+ # Copyright (C) 2014 Stefano Harding
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied. See the License for the specific language governing
17
+ # permissions and limitations under the License.
18
+ #
19
+
20
+ class Croesus::Validator::PresenceValidator < Croesus::Validator::Base
21
+ def initialize
22
+ super('required')
23
+ end
24
+
25
+ def presence_error_message
26
+ 'is required'
27
+ end
28
+
29
+ def validate(key, value, validations, errors)
30
+ unless value
31
+ errors[key] = presence_error_message
32
+ end
33
+ end
34
+ end
35
+
36
+ Croesus.append_validator(Croesus::Validator::PresenceValidator.new)
@@ -0,0 +1,38 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author: Stefano Harding <riddopic@gmail.com>
4
+ #
5
+ # Copyright (C) 2014 Stefano Harding
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied. See the License for the specific language governing
17
+ # permissions and limitations under the License.
18
+ #
19
+
20
+ [
21
+ Array,
22
+ Complex,
23
+ Enumerable,
24
+ Float,
25
+ Integer,
26
+ Numeric,
27
+ Range,
28
+ Rational,
29
+ Regexp,
30
+ String,
31
+ Symbol,
32
+ Time
33
+ ].each do |type|
34
+ name = type.to_s.gsub(/(.)([A-Z])/,'\1_\2').downcase
35
+ Croesus.append_validator(Croesus::Validator::SimpleValidator.new(
36
+ name, lambda { |v| v.is_a?(type) })
37
+ )
38
+ end
@@ -0,0 +1,40 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author: Stefano Harding <riddopic@gmail.com>
4
+ #
5
+ # Copyright (C) 2014 Stefano Harding
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied. See the License for the specific language governing
17
+ # permissions and limitations under the License.
18
+ #
19
+
20
+ class Croesus::Validator::SimpleValidator < Croesus::Validator::Base
21
+ attr_accessor :lambda
22
+
23
+ def initialize(name, lambda)
24
+ # lambda must accept one argument (the value)
25
+ if lambda.arity != 1
26
+ raise ValidationError.new(
27
+ "Lambda should take only one argument; passed #{lambda.arity}"
28
+ )
29
+ end
30
+
31
+ super(name)
32
+ self.lambda = lambda
33
+ end
34
+
35
+ def validate(key, value, validations, errors)
36
+ unless lambda.call(value)
37
+ errors[key] = presence_error_message
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,43 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author: Stefano Harding <riddopic@gmail.com>
4
+ #
5
+ # Copyright (C) 2014 Stefano Harding
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied. See the License for the specific language governing
17
+ # permissions and limitations under the License.
18
+ #
19
+
20
+ # The version number of the Croesus Gem
21
+ #
22
+ # @return [String]
23
+ #
24
+ # @api public
25
+ module Croesus
26
+ # Contains information about this gem's version
27
+ module Version
28
+ MAJOR = 0
29
+ MINOR = 1
30
+ PATCH = 3
31
+
32
+ # Returns a version string by joining MAJOR, MINOR, and PATCH with '.'
33
+ #
34
+ # Example
35
+ #
36
+ # Version.string # '1.0.3'
37
+ def self.string
38
+ [MAJOR, MINOR, PATCH].join('.')
39
+ end
40
+ end
41
+
42
+ VERSION = Croesus::Version.string
43
+ end