hoodoo 1.0.2

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 (216) hide show
  1. checksums.yaml +7 -0
  2. data/bin/hoodoo +5 -0
  3. data/lib/hoodoo.rb +27 -0
  4. data/lib/hoodoo/active.rb +32 -0
  5. data/lib/hoodoo/active/active_model/uuid_validator.rb +45 -0
  6. data/lib/hoodoo/active/active_record/base.rb +81 -0
  7. data/lib/hoodoo/active/active_record/creator.rb +134 -0
  8. data/lib/hoodoo/active/active_record/dated.rb +343 -0
  9. data/lib/hoodoo/active/active_record/error_mapping.rb +351 -0
  10. data/lib/hoodoo/active/active_record/finder.rb +606 -0
  11. data/lib/hoodoo/active/active_record/search_helper.rb +189 -0
  12. data/lib/hoodoo/active/active_record/secure.rb +431 -0
  13. data/lib/hoodoo/active/active_record/support.rb +106 -0
  14. data/lib/hoodoo/active/active_record/translated.rb +87 -0
  15. data/lib/hoodoo/active/active_record/uuid.rb +80 -0
  16. data/lib/hoodoo/active/active_record/writer.rb +321 -0
  17. data/lib/hoodoo/client.rb +23 -0
  18. data/lib/hoodoo/client/augmented_array.rb +29 -0
  19. data/lib/hoodoo/client/augmented_base.rb +168 -0
  20. data/lib/hoodoo/client/augmented_hash.rb +23 -0
  21. data/lib/hoodoo/client/client.rb +354 -0
  22. data/lib/hoodoo/client/endpoint/endpoint.rb +427 -0
  23. data/lib/hoodoo/client/endpoint/endpoints/amqp.rb +180 -0
  24. data/lib/hoodoo/client/endpoint/endpoints/auto_session.rb +194 -0
  25. data/lib/hoodoo/client/endpoint/endpoints/http.rb +203 -0
  26. data/lib/hoodoo/client/endpoint/endpoints/http_based.rb +367 -0
  27. data/lib/hoodoo/client/endpoint/endpoints/not_found.rb +59 -0
  28. data/lib/hoodoo/client/headers.rb +269 -0
  29. data/lib/hoodoo/communicators.rb +23 -0
  30. data/lib/hoodoo/communicators/fast.rb +44 -0
  31. data/lib/hoodoo/communicators/pool.rb +601 -0
  32. data/lib/hoodoo/communicators/slow.rb +84 -0
  33. data/lib/hoodoo/data.rb +51 -0
  34. data/lib/hoodoo/data/resources/caller.rb +39 -0
  35. data/lib/hoodoo/data/resources/errors.rb +28 -0
  36. data/lib/hoodoo/data/resources/log.rb +31 -0
  37. data/lib/hoodoo/data/resources/session.rb +26 -0
  38. data/lib/hoodoo/data/types/error_primitive.rb +27 -0
  39. data/lib/hoodoo/data/types/permissions.rb +40 -0
  40. data/lib/hoodoo/data/types/permissions_defaults.rb +32 -0
  41. data/lib/hoodoo/data/types/permissions_full.rb +28 -0
  42. data/lib/hoodoo/data/types/permissions_resources.rb +31 -0
  43. data/lib/hoodoo/discovery.rb +20 -0
  44. data/lib/hoodoo/errors.rb +19 -0
  45. data/lib/hoodoo/errors/error_descriptions.rb +229 -0
  46. data/lib/hoodoo/errors/errors.rb +322 -0
  47. data/lib/hoodoo/generator.rb +139 -0
  48. data/lib/hoodoo/logger.rb +23 -0
  49. data/lib/hoodoo/logger/fast_writer.rb +27 -0
  50. data/lib/hoodoo/logger/flattener_mixin.rb +36 -0
  51. data/lib/hoodoo/logger/logger.rb +387 -0
  52. data/lib/hoodoo/logger/slow_writer.rb +49 -0
  53. data/lib/hoodoo/logger/writer_mixin.rb +52 -0
  54. data/lib/hoodoo/logger/writers/file_writer.rb +45 -0
  55. data/lib/hoodoo/logger/writers/log_entries_dot_com_writer.rb +64 -0
  56. data/lib/hoodoo/logger/writers/stream_writer.rb +43 -0
  57. data/lib/hoodoo/middleware.rb +33 -0
  58. data/lib/hoodoo/presenters.rb +45 -0
  59. data/lib/hoodoo/presenters/base.rb +281 -0
  60. data/lib/hoodoo/presenters/base_dsl.rb +519 -0
  61. data/lib/hoodoo/presenters/common_resource_fields.rb +31 -0
  62. data/lib/hoodoo/presenters/embedding.rb +232 -0
  63. data/lib/hoodoo/presenters/types/array.rb +118 -0
  64. data/lib/hoodoo/presenters/types/boolean.rb +26 -0
  65. data/lib/hoodoo/presenters/types/date.rb +26 -0
  66. data/lib/hoodoo/presenters/types/date_time.rb +26 -0
  67. data/lib/hoodoo/presenters/types/decimal.rb +47 -0
  68. data/lib/hoodoo/presenters/types/enum.rb +55 -0
  69. data/lib/hoodoo/presenters/types/field.rb +158 -0
  70. data/lib/hoodoo/presenters/types/float.rb +26 -0
  71. data/lib/hoodoo/presenters/types/hash.rb +361 -0
  72. data/lib/hoodoo/presenters/types/integer.rb +26 -0
  73. data/lib/hoodoo/presenters/types/object.rb +117 -0
  74. data/lib/hoodoo/presenters/types/string.rb +53 -0
  75. data/lib/hoodoo/presenters/types/tags.rb +24 -0
  76. data/lib/hoodoo/presenters/types/text.rb +26 -0
  77. data/lib/hoodoo/presenters/types/uuid.rb +54 -0
  78. data/lib/hoodoo/services.rb +34 -0
  79. data/lib/hoodoo/services/discovery/discoverers/by_consul.rb +66 -0
  80. data/lib/hoodoo/services/discovery/discoverers/by_convention.rb +173 -0
  81. data/lib/hoodoo/services/discovery/discoverers/by_drb/by_drb.rb +195 -0
  82. data/lib/hoodoo/services/discovery/discoverers/by_drb/drb_server.rb +166 -0
  83. data/lib/hoodoo/services/discovery/discoverers/by_drb/drb_server_start.rb +37 -0
  84. data/lib/hoodoo/services/discovery/discovery.rb +186 -0
  85. data/lib/hoodoo/services/discovery/results/for_amqp.rb +58 -0
  86. data/lib/hoodoo/services/discovery/results/for_http.rb +85 -0
  87. data/lib/hoodoo/services/discovery/results/for_local.rb +85 -0
  88. data/lib/hoodoo/services/discovery/results/for_remote.rb +57 -0
  89. data/lib/hoodoo/services/middleware/amqp_log_message.rb +186 -0
  90. data/lib/hoodoo/services/middleware/amqp_log_writer.rb +119 -0
  91. data/lib/hoodoo/services/middleware/endpoints/inter_resource_local.rb +130 -0
  92. data/lib/hoodoo/services/middleware/endpoints/inter_resource_remote.rb +202 -0
  93. data/lib/hoodoo/services/middleware/exception_reporting/base_reporter.rb +105 -0
  94. data/lib/hoodoo/services/middleware/exception_reporting/exception_reporting.rb +115 -0
  95. data/lib/hoodoo/services/middleware/exception_reporting/reporters/airbrake_reporter.rb +64 -0
  96. data/lib/hoodoo/services/middleware/exception_reporting/reporters/raygun_reporter.rb +63 -0
  97. data/lib/hoodoo/services/middleware/interaction.rb +127 -0
  98. data/lib/hoodoo/services/middleware/middleware.rb +2705 -0
  99. data/lib/hoodoo/services/middleware/rack_monkey_patch.rb +73 -0
  100. data/lib/hoodoo/services/services/context.rb +153 -0
  101. data/lib/hoodoo/services/services/implementation.rb +132 -0
  102. data/lib/hoodoo/services/services/interface.rb +934 -0
  103. data/lib/hoodoo/services/services/permissions.rb +250 -0
  104. data/lib/hoodoo/services/services/request.rb +189 -0
  105. data/lib/hoodoo/services/services/response.rb +316 -0
  106. data/lib/hoodoo/services/services/service.rb +141 -0
  107. data/lib/hoodoo/services/services/session.rb +729 -0
  108. data/lib/hoodoo/utilities.rb +12 -0
  109. data/lib/hoodoo/utilities/string_inquirer.rb +54 -0
  110. data/lib/hoodoo/utilities/utilities.rb +380 -0
  111. data/lib/hoodoo/utilities/uuid.rb +44 -0
  112. data/lib/hoodoo/version.rb +17 -0
  113. data/spec/active/active_record/base_spec.rb +57 -0
  114. data/spec/active/active_record/creator_spec.rb +88 -0
  115. data/spec/active/active_record/dated_spec.rb +248 -0
  116. data/spec/active/active_record/error_mapping_spec.rb +360 -0
  117. data/spec/active/active_record/finder_spec.rb +744 -0
  118. data/spec/active/active_record/search_helper_spec.rb +384 -0
  119. data/spec/active/active_record/secure_spec.rb +435 -0
  120. data/spec/active/active_record/support_spec.rb +225 -0
  121. data/spec/active/active_record/translated_spec.rb +19 -0
  122. data/spec/active/active_record/uuid_spec.rb +72 -0
  123. data/spec/active/active_record/writer_spec.rb +272 -0
  124. data/spec/alchemy/alchemy-amq.rb +33 -0
  125. data/spec/client/augmented_array_spec.rb +15 -0
  126. data/spec/client/augmented_base_spec.rb +50 -0
  127. data/spec/client/augmented_hash_spec.rb +15 -0
  128. data/spec/client/client_spec.rb +955 -0
  129. data/spec/client/endpoint/endpoint_spec.rb +70 -0
  130. data/spec/client/endpoint/endpoints/amqp_spec.rb +16 -0
  131. data/spec/client/endpoint/endpoints/auto_session_spec.rb +9 -0
  132. data/spec/client/endpoint/endpoints/http_based_spec.rb +9 -0
  133. data/spec/client/endpoint/endpoints/http_spec.rb +103 -0
  134. data/spec/client/endpoint/endpoints/not_found_spec.rb +35 -0
  135. data/spec/client/headers_spec.rb +172 -0
  136. data/spec/communicators/fast_spec.rb +9 -0
  137. data/spec/communicators/pool_spec.rb +339 -0
  138. data/spec/communicators/slow_spec.rb +15 -0
  139. data/spec/data/resources/caller_spec.rb +156 -0
  140. data/spec/data/resources/errors_spec.rb +22 -0
  141. data/spec/data/resources/log_spec.rb +20 -0
  142. data/spec/data/resources/session_spec.rb +15 -0
  143. data/spec/data/types/error_primitive_spec.rb +15 -0
  144. data/spec/data/types/permissions_defaults_spec.rb +25 -0
  145. data/spec/data/types/permissions_full_spec.rb +44 -0
  146. data/spec/data/types/permissions_resources_spec.rb +34 -0
  147. data/spec/data/types/permissions_spec.rb +37 -0
  148. data/spec/errors/error_descriptions_spec.rb +98 -0
  149. data/spec/errors/errors_spec.rb +346 -0
  150. data/spec/integration/service_actions_spec.rb +112 -0
  151. data/spec/logger/fast_writer_spec.rb +18 -0
  152. data/spec/logger/logger_spec.rb +259 -0
  153. data/spec/logger/slow_writer_spec.rb +144 -0
  154. data/spec/logger/writers/file_writer_spec.rb +37 -0
  155. data/spec/logger/writers/log_entries_dot_com_writer_spec.rb +29 -0
  156. data/spec/logger/writers/stream_writer_spec.rb +38 -0
  157. data/spec/presenters/base_dsl_spec.rb +111 -0
  158. data/spec/presenters/base_spec.rb +871 -0
  159. data/spec/presenters/common_resource_fields_spec.rb +30 -0
  160. data/spec/presenters/embedding_spec.rb +87 -0
  161. data/spec/presenters/types/array_spec.rb +249 -0
  162. data/spec/presenters/types/boolean_spec.rb +51 -0
  163. data/spec/presenters/types/date_spec.rb +57 -0
  164. data/spec/presenters/types/date_time_spec.rb +59 -0
  165. data/spec/presenters/types/decimal_spec.rb +58 -0
  166. data/spec/presenters/types/enum_spec.rb +71 -0
  167. data/spec/presenters/types/field_spec.rb +77 -0
  168. data/spec/presenters/types/float_spec.rb +50 -0
  169. data/spec/presenters/types/hash_spec.rb +1069 -0
  170. data/spec/presenters/types/integer_spec.rb +50 -0
  171. data/spec/presenters/types/object_spec.rb +177 -0
  172. data/spec/presenters/types/string_spec.rb +65 -0
  173. data/spec/presenters/types/tags_spec.rb +56 -0
  174. data/spec/presenters/types/text_spec.rb +50 -0
  175. data/spec/presenters/types/uuid_spec.rb +46 -0
  176. data/spec/presenters/walk_spec.rb +198 -0
  177. data/spec/services/discovery/discoverers/by_consul_spec.rb +29 -0
  178. data/spec/services/discovery/discoverers/by_convention_spec.rb +67 -0
  179. data/spec/services/discovery/discoverers/by_drb/by_drb_spec.rb +80 -0
  180. data/spec/services/discovery/discoverers/by_drb/drb_server_spec.rb +205 -0
  181. data/spec/services/discovery/discovery_spec.rb +73 -0
  182. data/spec/services/discovery/results/for_amqp_spec.rb +17 -0
  183. data/spec/services/discovery/results/for_http_spec.rb +37 -0
  184. data/spec/services/discovery/results/for_local_spec.rb +21 -0
  185. data/spec/services/discovery/results/for_remote_spec.rb +15 -0
  186. data/spec/services/middleware/amqp_log_message_spec.rb +60 -0
  187. data/spec/services/middleware/amqp_log_writer_spec.rb +95 -0
  188. data/spec/services/middleware/endpoints/inter_resource_local_spec.rb +9 -0
  189. data/spec/services/middleware/endpoints/inter_resource_remote_spec.rb +9 -0
  190. data/spec/services/middleware/exception_reporting/base_reporter_spec.rb +16 -0
  191. data/spec/services/middleware/exception_reporting/exception_reporting_spec.rb +92 -0
  192. data/spec/services/middleware/exception_reporting/reporters/airbrake_reporter_spec.rb +24 -0
  193. data/spec/services/middleware/exception_reporting/reporters/raygun_reporter_spec.rb +23 -0
  194. data/spec/services/middleware/middleware_cors_spec.rb +93 -0
  195. data/spec/services/middleware/middleware_create_update_spec.rb +489 -0
  196. data/spec/services/middleware/middleware_dated_at_spec.rb +186 -0
  197. data/spec/services/middleware/middleware_exotic_communication_spec.rb +560 -0
  198. data/spec/services/middleware/middleware_logging_spec.rb +356 -0
  199. data/spec/services/middleware/middleware_multi_local_spec.rb +1094 -0
  200. data/spec/services/middleware/middleware_multi_remote_spec.rb +1440 -0
  201. data/spec/services/middleware/middleware_permissions_spec.rb +1014 -0
  202. data/spec/services/middleware/middleware_public_spec.rb +238 -0
  203. data/spec/services/middleware/middleware_spec.rb +1569 -0
  204. data/spec/services/middleware/string_inquirer_spec.rb +30 -0
  205. data/spec/services/services/application_spec.rb +74 -0
  206. data/spec/services/services/context_spec.rb +48 -0
  207. data/spec/services/services/implementation_spec.rb +45 -0
  208. data/spec/services/services/interface_spec.rb +262 -0
  209. data/spec/services/services/permissions_spec.rb +249 -0
  210. data/spec/services/services/request_spec.rb +95 -0
  211. data/spec/services/services/response_spec.rb +250 -0
  212. data/spec/services/services/session_spec.rb +432 -0
  213. data/spec/spec_helper.rb +298 -0
  214. data/spec/utilities/utilities_spec.rb +537 -0
  215. data/spec/utilities/uuid_spec.rb +20 -0
  216. metadata +615 -0
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hoodoo::Presenters::Integer do
4
+
5
+ before do
6
+ @inst = Hoodoo::Presenters::Integer.new('one',:required => false)
7
+ end
8
+
9
+ describe '#validate' do
10
+ it 'should return [] when valid integer' do
11
+ expect(@inst.validate(12).errors).to eq([])
12
+ end
13
+
14
+ it 'should return correct error when data is not a integer' do
15
+ errors = @inst.validate('adskncasc')
16
+
17
+ err = [ {'code'=>"generic.invalid_integer", 'message'=>"Field `one` is an invalid integer", 'reference'=>"one"}]
18
+ expect(errors.errors).to eq(err)
19
+ end
20
+
21
+ it 'should not return error when not required and absent' do
22
+ expect(@inst.validate(nil).errors).to eq([])
23
+ end
24
+
25
+ it 'should return error when required and absent' do
26
+ @inst.required = true
27
+ expect(@inst.validate(nil).errors).to eq([
28
+ {'code'=>"generic.required_field_missing", 'message'=>"Field `one` is required", 'reference'=>"one"}
29
+ ])
30
+ end
31
+
32
+ it 'should return correct error with non integer types' do
33
+ err = [ {'code'=>"generic.invalid_integer", 'message'=>"Field `one` is an invalid integer", 'reference'=>"one"}]
34
+
35
+ expect(@inst.validate('asckn').errors).to eq(err)
36
+ expect(@inst.validate(34534.234).errors).to eq(err)
37
+ expect(@inst.validate(true).errors).to eq(err)
38
+ expect(@inst.validate({}).errors).to eq(err)
39
+ expect(@inst.validate([]).errors).to eq(err)
40
+ end
41
+
42
+ it 'should return correct error with path' do
43
+ errors = @inst.validate('scdacs','ordinary')
44
+ expect(errors.errors).to eq([
45
+ {'code'=>"generic.invalid_integer", 'message'=>"Field `ordinary.one` is an invalid integer", 'reference'=>"ordinary.one"}
46
+ ])
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,177 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hoodoo::Presenters::Object do
4
+
5
+ before do
6
+ @inst = Hoodoo::Presenters::Object.new('one',:required => false)
7
+
8
+ class TestPresenterObject < Hoodoo::Presenters::Base
9
+
10
+ schema do
11
+ # Intentional mix of strings and symbols in default object
12
+ object :a_default_object, :default => { :an_integer => 42, 'some_text' => 'hello' } do
13
+ integer :an_integer
14
+ text :some_text
15
+ end
16
+ object :an_object_with_entry_defaults do
17
+ integer :an_integer, :default => 42
18
+ text :some_text
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+
25
+ describe '#validate' do
26
+ it 'should return [] when valid object' do
27
+ expect(@inst.validate({}).errors).to eq([])
28
+ end
29
+
30
+ it 'should return correct error when data is not an object' do
31
+ errors = @inst.validate(2347234)
32
+
33
+ err = [{'code'=>"generic.invalid_object", 'message'=>"Field `one` is an invalid object", 'reference'=>"one"}]
34
+ expect(errors.errors).to eq(err)
35
+ end
36
+
37
+ it 'should not return error when not required and absent' do
38
+ expect(@inst.validate(nil).errors).to eq([])
39
+ end
40
+
41
+ it 'should return error when required and absent' do
42
+ @inst.required = true
43
+ expect(@inst.validate(nil).errors).to eq([
44
+ {'code'=>"generic.required_field_missing", 'message'=>"Field `one` is required", 'reference'=>"one"}
45
+ ])
46
+ end
47
+
48
+ it 'should return correct error with non object types' do
49
+ err = [{'code'=>"generic.invalid_object", 'message'=>"Field `one` is an invalid object", 'reference'=>"one"}]
50
+
51
+ expect(@inst.validate('asckn').errors).to eq(err)
52
+ expect(@inst.validate(34534).errors).to eq(err)
53
+ expect(@inst.validate(2123.23).errors).to eq(err)
54
+ expect(@inst.validate(true).errors).to eq(err)
55
+ expect(@inst.validate([]).errors).to eq(err)
56
+ end
57
+
58
+ it 'should return correct error with path' do
59
+ errors = @inst.validate('scdacs','ordinary')
60
+ expect(errors.errors).to eq([
61
+ {'code'=>"generic.invalid_object", 'message'=>"Field `ordinary.one` is an invalid object", 'reference'=>"ordinary.one"}
62
+ ])
63
+ end
64
+ end
65
+
66
+
67
+ describe '#render' do
68
+ it 'renders correctly with whole-object default (1)' do
69
+ data = nil
70
+
71
+ expect(TestPresenterObject.render(data)).to eq({
72
+ 'a_default_object' => {
73
+ 'an_integer' => 42,
74
+ 'some_text' => 'hello'
75
+ }
76
+ })
77
+ end
78
+
79
+ it 'renders correctly with whole-object default (2)' do
80
+ data = {}
81
+
82
+ expect(TestPresenterObject.render(data)).to eq({
83
+ 'a_default_object' => {
84
+ 'an_integer' => 42,
85
+ 'some_text' => 'hello'
86
+ }
87
+ })
88
+ end
89
+
90
+ it 'must not override a provided object, even if nil' do
91
+ data = { 'a_default_object' => nil }
92
+ expect(TestPresenterObject.render(data)).to eq(data)
93
+ end
94
+
95
+ it 'must not override a provided object, even if "empty"' do
96
+ data = { 'a_default_object' => {} }
97
+ expect(TestPresenterObject.render(data)).to eq(data)
98
+ end
99
+
100
+ it 'provides default values for fields, where provided (1)' do
101
+ data = {
102
+ 'a_default_object' => {
103
+ 'an_integer' => 20
104
+ },
105
+ 'an_object_with_entry_defaults' => {
106
+ 'some_text' => 'hello'
107
+ }
108
+ }
109
+
110
+ expect(TestPresenterObject.render(data)).to eq({
111
+ 'a_default_object' => {
112
+ 'an_integer' => 20
113
+ },
114
+ 'an_object_with_entry_defaults' => {
115
+ 'an_integer' => 42,
116
+ 'some_text' => 'hello'
117
+ }
118
+ })
119
+ end
120
+
121
+ it 'must not overwrite explicit object nil with object-with-field-defaults' do
122
+ data = {
123
+ 'a_default_object' => {
124
+ 'an_integer' => 20
125
+ },
126
+ 'an_object_with_entry_defaults' => nil
127
+ }
128
+
129
+ expect(TestPresenterObject.render(data)).to eq(data)
130
+ end
131
+
132
+ it 'adds fields with defaults to empty objects' do
133
+ data = {
134
+ 'a_default_object' => {
135
+ 'an_integer' => 59
136
+ },
137
+ 'an_object_with_entry_defaults' => {}
138
+ }
139
+
140
+ expect(TestPresenterObject.render(data)).to eq({
141
+ 'a_default_object' => {
142
+ 'an_integer' => 59
143
+ },
144
+ 'an_object_with_entry_defaults' => {
145
+ 'an_integer' => 42
146
+ }
147
+ })
148
+ end
149
+
150
+ it 'must not overwrite explicit field nil with field defaults' do
151
+ data = {
152
+ 'a_default_object' => {
153
+ 'an_integer' => 20
154
+ },
155
+ 'an_object_with_entry_defaults' => {
156
+ 'an_integer' => nil
157
+ }
158
+ }
159
+
160
+ expect(TestPresenterObject.render(data)).to eq(data)
161
+ end
162
+
163
+ it 'must not overwrite explicit field value with field defaults' do
164
+ data = {
165
+ 'a_default_object' => {
166
+ 'an_integer' => 20
167
+ },
168
+ 'an_object_with_entry_defaults' => {
169
+ 'an_integer' => 21
170
+ }
171
+ }
172
+
173
+ expect(TestPresenterObject.render(data)).to eq(data)
174
+ end
175
+ end
176
+
177
+ end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hoodoo::Presenters::String do
4
+
5
+ before do
6
+ @inst = Hoodoo::Presenters::String.new('one',:required => false, :length => 10)
7
+ end
8
+
9
+ describe '#initialize' do
10
+ it 'should raise an error if length is not defined' do
11
+ expect {
12
+ Hoodoo::Presenters::String.new('one',:required => false)
13
+ }.to raise_error(ArgumentError)
14
+ end
15
+ end
16
+
17
+ describe '#validate' do
18
+ it 'should return [] when valid string' do
19
+ expect(@inst.validate('ascinas').errors).to eq([])
20
+ end
21
+
22
+ it 'should return correct error when data is not a string' do
23
+ errors = @inst.validate(23424)
24
+
25
+ err = [ {'code'=>"generic.invalid_string", 'message'=>"Field `one` is an invalid string", 'reference'=>"one"}]
26
+ expect(errors.errors).to eq(err)
27
+ end
28
+
29
+ it 'should not return error when not required and absent' do
30
+ expect(@inst.validate(nil).errors).to eq([])
31
+ end
32
+
33
+ it 'should return error when required and absent' do
34
+ @inst.required = true
35
+ expect(@inst.validate(nil).errors).to eq([
36
+ {'code'=>"generic.required_field_missing", 'message'=>"Field `one` is required", 'reference'=>"one"}
37
+ ])
38
+ end
39
+
40
+ it 'should return correct error with non string types' do
41
+ err = [ {'code'=>"generic.invalid_string", 'message'=>"Field `one` is an invalid string", 'reference'=>"one"}]
42
+
43
+ expect(@inst.validate(34534).errors).to eq(err)
44
+ expect(@inst.validate(234234.44).errors).to eq(err)
45
+ expect(@inst.validate(true).errors).to eq(err)
46
+ expect(@inst.validate({}).errors).to eq(err)
47
+ expect(@inst.validate([]).errors).to eq(err)
48
+ end
49
+
50
+ it 'should return correct error with path' do
51
+ errors = @inst.validate(234234,'ordinary')
52
+ expect(errors.errors).to eq([
53
+ {'code'=>"generic.invalid_string", 'message'=>"Field `ordinary.one` is an invalid string", 'reference'=>"ordinary.one"}
54
+ ])
55
+ end
56
+
57
+ it 'should return correct error when length is exceeded' do
58
+ errors = @inst.validate('12345678901')
59
+ expect(errors.errors).to eq([
60
+ {'code'=>"generic.invalid_string", 'message'=>"Field `one` is longer than maximum length `10`", 'reference'=>"one"}
61
+ ])
62
+ end
63
+ end
64
+
65
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hoodoo::Presenters::Tags do
4
+
5
+ # This is just a copy of the Hoodoo::Presenters::Text tests, which is in
6
+ # turn a copy of Hoodoo::Presenters::String with minor changes (at the
7
+ # time of writing). The intent is to provide coverage for potential changes
8
+ # to the tag implementation in future, even though right now it's just a
9
+ # direct inheritance from Text with no changes.
10
+
11
+ before do
12
+ @inst = Hoodoo::Presenters::Tags.new('one',:required => false)
13
+ end
14
+
15
+ describe '#validate' do
16
+ it 'should return no errors when valid string' do
17
+ expect(@inst.validate('ascinas').errors).to eq([])
18
+ end
19
+
20
+ it 'should return correct error when data is not a string' do
21
+ errors = @inst.validate(23424)
22
+
23
+ err = [ {'code'=>"generic.invalid_string", 'message'=>"Field `one` is an invalid string", 'reference'=>"one"}]
24
+ expect(errors.errors).to eq(err)
25
+ end
26
+
27
+ it 'should not return error when not required and absent' do
28
+ expect(@inst.validate(nil).errors).to eq([])
29
+ end
30
+
31
+ it 'should return error when required and absent' do
32
+ @inst.required = true
33
+ expect(@inst.validate(nil).errors).to eq([
34
+ {'code'=>"generic.required_field_missing", 'message'=>"Field `one` is required", 'reference'=>"one"}
35
+ ])
36
+ end
37
+
38
+ it 'should return correct error with non string types' do
39
+ err = [ {'code'=>"generic.invalid_string", 'message'=>"Field `one` is an invalid string", 'reference'=>"one"}]
40
+
41
+ expect(@inst.validate(34534).errors).to eq(err)
42
+ expect(@inst.validate(234234.44).errors).to eq(err)
43
+ expect(@inst.validate(true).errors).to eq(err)
44
+ expect(@inst.validate({}).errors).to eq(err)
45
+ expect(@inst.validate([]).errors).to eq(err)
46
+ end
47
+
48
+ it 'should return correct error with path' do
49
+ errors = @inst.validate(234234,'ordinary')
50
+ expect(errors.errors).to eq([
51
+ {'code'=>"generic.invalid_string", 'message'=>"Field `ordinary.one` is an invalid string", 'reference'=>"ordinary.one"}
52
+ ])
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hoodoo::Presenters::Text do
4
+
5
+ before do
6
+ @inst = Hoodoo::Presenters::Text.new('one',:required => false)
7
+ end
8
+
9
+ describe '#validate' do
10
+ it 'should return no errors when valid string' do
11
+ expect(@inst.validate('ascinas').errors).to eq([])
12
+ end
13
+
14
+ it 'should return correct error when data is not a string' do
15
+ errors = @inst.validate(23424)
16
+
17
+ err = [ {'code'=>"generic.invalid_string", 'message'=>"Field `one` is an invalid string", 'reference'=>"one"}]
18
+ expect(errors.errors).to eq(err)
19
+ end
20
+
21
+ it 'should not return error when not required and absent' do
22
+ expect(@inst.validate(nil).errors).to eq([])
23
+ end
24
+
25
+ it 'should return error when required and absent' do
26
+ @inst.required = true
27
+ expect(@inst.validate(nil).errors).to eq([
28
+ {'code'=>"generic.required_field_missing", 'message'=>"Field `one` is required", 'reference'=>"one"}
29
+ ])
30
+ end
31
+
32
+ it 'should return correct error with non string types' do
33
+ err = [ {'code'=>"generic.invalid_string", 'message'=>"Field `one` is an invalid string", 'reference'=>"one"}]
34
+
35
+ expect(@inst.validate(34534).errors).to eq(err)
36
+ expect(@inst.validate(234234.44).errors).to eq(err)
37
+ expect(@inst.validate(true).errors).to eq(err)
38
+ expect(@inst.validate({}).errors).to eq(err)
39
+ expect(@inst.validate([]).errors).to eq(err)
40
+ end
41
+
42
+ it 'should return correct error with path' do
43
+ errors = @inst.validate(234234,'ordinary')
44
+ expect(errors.errors).to eq([
45
+ {'code'=>"generic.invalid_string", 'message'=>"Field `ordinary.one` is an invalid string", 'reference'=>"ordinary.one"}
46
+ ])
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hoodoo::Presenters::UUID do
4
+
5
+ describe '#validate' do
6
+ it 'should return no errors when valid UUID' do
7
+ expect(Hoodoo::Presenters::UUID.new('one').validate(Hoodoo::UUID.generate()).errors).to eq([])
8
+ end
9
+
10
+ it 'should return correct error when data is not a UUID-like string (1)' do
11
+ errors = Hoodoo::Presenters::UUID.new('one').validate('1234')
12
+
13
+ err = [ {'code'=>"generic.invalid_uuid", 'message'=>"Field `one` is an invalid UUID", 'reference'=>"one"}]
14
+ expect(errors.errors).to eq(err)
15
+ end
16
+
17
+ it 'should return correct error when data is not a UUID-like string (2)' do
18
+ errors = Hoodoo::Presenters::UUID.new('one').validate('01234567890123456789012345678901z')
19
+
20
+ err = [ {'code'=>"generic.invalid_uuid", 'message'=>"Field `one` is an invalid UUID", 'reference'=>"one"}]
21
+ expect(errors.errors).to eq(err)
22
+ end
23
+
24
+ it 'should return correct error when data is not a UUID-like string (3)' do
25
+ errors = Hoodoo::Presenters::UUID.new('one').validate('3ba258c0-4ce3-0132-9862-28373700b71c')
26
+
27
+ err = [ {'code'=>"generic.invalid_uuid", 'message'=>"Field `one` is an invalid UUID", 'reference'=>"one"}]
28
+ expect(errors.errors).to eq(err)
29
+ end
30
+
31
+ it 'should return correct error when data is not even a string (1)' do
32
+ errors = Hoodoo::Presenters::UUID.new('one').validate(1234)
33
+
34
+ err = [ {'code'=>"generic.invalid_uuid", 'message'=>"Field `one` is an invalid UUID", 'reference'=>"one"}]
35
+ expect(errors.errors).to eq(err)
36
+ end
37
+
38
+ it 'should return correct error when data is not even a string (2)' do
39
+ errors = Hoodoo::Presenters::UUID.new('one').validate(Hoodoo::UUID.generate().to_sym)
40
+
41
+ err = [ {'code'=>"generic.invalid_uuid", 'message'=>"Field `one` is an invalid UUID", 'reference'=>"one"}]
42
+ expect(errors.errors).to eq(err)
43
+ end
44
+ end
45
+
46
+ end