mini_camel 0.5.8

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 (66) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +4 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +4 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE.md +22 -0
  9. data/README.md +300 -0
  10. data/Rakefile +6 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/examples/hello_world.rb +106 -0
  14. data/lib/mini_camel.rb +63 -0
  15. data/lib/mini_camel/context.rb +5 -0
  16. data/lib/mini_camel/default_error_handler.rb +37 -0
  17. data/lib/mini_camel/dto.rb +55 -0
  18. data/lib/mini_camel/environment.rb +66 -0
  19. data/lib/mini_camel/error.rb +57 -0
  20. data/lib/mini_camel/exchange.rb +80 -0
  21. data/lib/mini_camel/exchange_error.rb +36 -0
  22. data/lib/mini_camel/exchange_result.rb +5 -0
  23. data/lib/mini_camel/interactor.rb +13 -0
  24. data/lib/mini_camel/processor/base.rb +14 -0
  25. data/lib/mini_camel/processor/each.rb +28 -0
  26. data/lib/mini_camel/processor/expose_field.rb +29 -0
  27. data/lib/mini_camel/processor/expose_fields.rb +34 -0
  28. data/lib/mini_camel/processor/extract_result.rb +22 -0
  29. data/lib/mini_camel/processor/mutate.rb +18 -0
  30. data/lib/mini_camel/processor/mutate_each.rb +16 -0
  31. data/lib/mini_camel/processor/pipeline.rb +19 -0
  32. data/lib/mini_camel/processor/process.rb +22 -0
  33. data/lib/mini_camel/processor/process_each.rb +16 -0
  34. data/lib/mini_camel/processor/produce.rb +17 -0
  35. data/lib/mini_camel/processor/to.rb +15 -0
  36. data/lib/mini_camel/processor/transform.rb +15 -0
  37. data/lib/mini_camel/processor/transform_each.rb +15 -0
  38. data/lib/mini_camel/processor/validate.rb +21 -0
  39. data/lib/mini_camel/processor/wrap_in_dto.rb +19 -0
  40. data/lib/mini_camel/processor_definition/base.rb +13 -0
  41. data/lib/mini_camel/processor_definition/each.rb +20 -0
  42. data/lib/mini_camel/processor_definition/expose_field.rb +28 -0
  43. data/lib/mini_camel/processor_definition/expose_fields.rb +19 -0
  44. data/lib/mini_camel/processor_definition/extract_result.rb +17 -0
  45. data/lib/mini_camel/processor_definition/mutate.rb +21 -0
  46. data/lib/mini_camel/processor_definition/mutate_each.rb +15 -0
  47. data/lib/mini_camel/processor_definition/pipeline.rb +17 -0
  48. data/lib/mini_camel/processor_definition/process.rb +19 -0
  49. data/lib/mini_camel/processor_definition/process_each.rb +14 -0
  50. data/lib/mini_camel/processor_definition/produce.rb +20 -0
  51. data/lib/mini_camel/processor_definition/to.rb +17 -0
  52. data/lib/mini_camel/processor_definition/transform.rb +17 -0
  53. data/lib/mini_camel/processor_definition/transform_each.rb +20 -0
  54. data/lib/mini_camel/processor_definition/validate.rb +26 -0
  55. data/lib/mini_camel/processor_definition/wrap_in_dto.rb +21 -0
  56. data/lib/mini_camel/route.rb +21 -0
  57. data/lib/mini_camel/route_builder.rb +24 -0
  58. data/lib/mini_camel/route_collection.rb +16 -0
  59. data/lib/mini_camel/route_definition.rb +146 -0
  60. data/lib/mini_camel/route_dispatcher.rb +37 -0
  61. data/lib/mini_camel/route_finalizer.rb +38 -0
  62. data/lib/mini_camel/route_generator.rb +32 -0
  63. data/lib/mini_camel/strict_dto.rb +36 -0
  64. data/lib/mini_camel/version.rb +3 -0
  65. data/mini_camel.gemspec +30 -0
  66. metadata +237 -0
@@ -0,0 +1,32 @@
1
+ module MiniCamel
2
+ class RouteGenerator
3
+ include Virtus.value_object
4
+
5
+ attribute :env, Environment
6
+
7
+ values do
8
+ attribute :route_definition, Object
9
+ end
10
+
11
+ def generate_route
12
+ raise InvalidRouteDefinition.new("Route #{route_definition.route_name}", route_definition) if route_definition.invalid?
13
+
14
+ Route.new(route_name: route_definition.route_name, processors: generate_processors, env: env)
15
+ end
16
+
17
+ private
18
+
19
+ def generate_processors
20
+ processor_definitions.map do |processor_definition|
21
+ raise InvalidProcessorDefinition.new("Invalid processor definition found", processor_definition) if processor_definition.invalid?
22
+
23
+ processor_definition.generate_processor(env)
24
+ end
25
+ end
26
+
27
+ def processor_definitions
28
+ route_definition.processor_definitions
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,36 @@
1
+ module MiniCamel
2
+
3
+ # A StrictDTO is stricter than a common open struct object.
4
+ # It will throw an argument error if the key / method you ask for does not exist.
5
+ class StrictDto < Dto
6
+
7
+ def [](key)
8
+ fetch(key)
9
+ end
10
+
11
+ def fetch(key, default: nil)
12
+ if @table.has_key?(key)
13
+ @table.fetch(key, default)
14
+ else
15
+ return default unless default.nil?
16
+ raise_key_not_found!(key)
17
+ end
18
+ end
19
+
20
+ def method_missing(method_name, *arguments, &block)
21
+ if respond_to?(method_name) || method_name.to_s.end_with?('=')
22
+ super
23
+ else
24
+ raise_key_not_found!(method_name)
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def raise_key_not_found!(key)
31
+ raise ArgumentError, "Method or key '#{key}' not found! Available keys: #{keys.join(', ')}"
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,3 @@
1
+ module MiniCamel
2
+ VERSION = "0.5.8"
3
+ end
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mini_camel/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mini_camel"
8
+ spec.version = MiniCamel::VERSION
9
+ spec.authors = ["Spas Poptchev"]
10
+ spec.email = ["sp@converate.com"]
11
+
12
+ spec.summary = %q{Data transformation and reusable business processes.}
13
+ spec.description = %q{Data transformation and reusable business processes.}
14
+ spec.homepage = "http://www.converate.com"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency 'activemodel', '>= 3.0', '< 5.0'
22
+ spec.add_runtime_dependency 'virtus', '~> 1.0', '>= 1.0.5'
23
+ spec.add_runtime_dependency 'hashie', '>= 2.0', '<= 3.4.3'
24
+ spec.add_runtime_dependency 'multi_json', '>= 1.10.0'
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.11"
27
+ spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rspec", "~> 3.0"
29
+ spec.add_development_dependency "pry"
30
+ end
metadata ADDED
@@ -0,0 +1,237 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mini_camel
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.8
5
+ platform: ruby
6
+ authors:
7
+ - Spas Poptchev
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-05-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activemodel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: virtus
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.0.5
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.0'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.0.5
53
+ - !ruby/object:Gem::Dependency
54
+ name: hashie
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '2.0'
60
+ - - "<="
61
+ - !ruby/object:Gem::Version
62
+ version: 3.4.3
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '2.0'
70
+ - - "<="
71
+ - !ruby/object:Gem::Version
72
+ version: 3.4.3
73
+ - !ruby/object:Gem::Dependency
74
+ name: multi_json
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 1.10.0
80
+ type: :runtime
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 1.10.0
87
+ - !ruby/object:Gem::Dependency
88
+ name: bundler
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '1.11'
94
+ type: :development
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '1.11'
101
+ - !ruby/object:Gem::Dependency
102
+ name: rake
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '10.0'
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '10.0'
115
+ - !ruby/object:Gem::Dependency
116
+ name: rspec
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - "~>"
120
+ - !ruby/object:Gem::Version
121
+ version: '3.0'
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: '3.0'
129
+ - !ruby/object:Gem::Dependency
130
+ name: pry
131
+ requirement: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ type: :development
137
+ prerelease: false
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ description: Data transformation and reusable business processes.
144
+ email:
145
+ - sp@converate.com
146
+ executables: []
147
+ extensions: []
148
+ extra_rdoc_files: []
149
+ files:
150
+ - ".gitignore"
151
+ - ".rspec"
152
+ - ".ruby-gemset"
153
+ - ".ruby-version"
154
+ - ".travis.yml"
155
+ - Gemfile
156
+ - LICENSE.md
157
+ - README.md
158
+ - Rakefile
159
+ - bin/console
160
+ - bin/setup
161
+ - examples/hello_world.rb
162
+ - lib/mini_camel.rb
163
+ - lib/mini_camel/context.rb
164
+ - lib/mini_camel/default_error_handler.rb
165
+ - lib/mini_camel/dto.rb
166
+ - lib/mini_camel/environment.rb
167
+ - lib/mini_camel/error.rb
168
+ - lib/mini_camel/exchange.rb
169
+ - lib/mini_camel/exchange_error.rb
170
+ - lib/mini_camel/exchange_result.rb
171
+ - lib/mini_camel/interactor.rb
172
+ - lib/mini_camel/processor/base.rb
173
+ - lib/mini_camel/processor/each.rb
174
+ - lib/mini_camel/processor/expose_field.rb
175
+ - lib/mini_camel/processor/expose_fields.rb
176
+ - lib/mini_camel/processor/extract_result.rb
177
+ - lib/mini_camel/processor/mutate.rb
178
+ - lib/mini_camel/processor/mutate_each.rb
179
+ - lib/mini_camel/processor/pipeline.rb
180
+ - lib/mini_camel/processor/process.rb
181
+ - lib/mini_camel/processor/process_each.rb
182
+ - lib/mini_camel/processor/produce.rb
183
+ - lib/mini_camel/processor/to.rb
184
+ - lib/mini_camel/processor/transform.rb
185
+ - lib/mini_camel/processor/transform_each.rb
186
+ - lib/mini_camel/processor/validate.rb
187
+ - lib/mini_camel/processor/wrap_in_dto.rb
188
+ - lib/mini_camel/processor_definition/base.rb
189
+ - lib/mini_camel/processor_definition/each.rb
190
+ - lib/mini_camel/processor_definition/expose_field.rb
191
+ - lib/mini_camel/processor_definition/expose_fields.rb
192
+ - lib/mini_camel/processor_definition/extract_result.rb
193
+ - lib/mini_camel/processor_definition/mutate.rb
194
+ - lib/mini_camel/processor_definition/mutate_each.rb
195
+ - lib/mini_camel/processor_definition/pipeline.rb
196
+ - lib/mini_camel/processor_definition/process.rb
197
+ - lib/mini_camel/processor_definition/process_each.rb
198
+ - lib/mini_camel/processor_definition/produce.rb
199
+ - lib/mini_camel/processor_definition/to.rb
200
+ - lib/mini_camel/processor_definition/transform.rb
201
+ - lib/mini_camel/processor_definition/transform_each.rb
202
+ - lib/mini_camel/processor_definition/validate.rb
203
+ - lib/mini_camel/processor_definition/wrap_in_dto.rb
204
+ - lib/mini_camel/route.rb
205
+ - lib/mini_camel/route_builder.rb
206
+ - lib/mini_camel/route_collection.rb
207
+ - lib/mini_camel/route_definition.rb
208
+ - lib/mini_camel/route_dispatcher.rb
209
+ - lib/mini_camel/route_finalizer.rb
210
+ - lib/mini_camel/route_generator.rb
211
+ - lib/mini_camel/strict_dto.rb
212
+ - lib/mini_camel/version.rb
213
+ - mini_camel.gemspec
214
+ homepage: http://www.converate.com
215
+ licenses: []
216
+ metadata: {}
217
+ post_install_message:
218
+ rdoc_options: []
219
+ require_paths:
220
+ - lib
221
+ required_ruby_version: !ruby/object:Gem::Requirement
222
+ requirements:
223
+ - - ">="
224
+ - !ruby/object:Gem::Version
225
+ version: '0'
226
+ required_rubygems_version: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - ">="
229
+ - !ruby/object:Gem::Version
230
+ version: '0'
231
+ requirements: []
232
+ rubyforge_project:
233
+ rubygems_version: 2.5.1
234
+ signing_key:
235
+ specification_version: 4
236
+ summary: Data transformation and reusable business processes.
237
+ test_files: []