dh_easy-router 0.0.6

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 (49) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.travis.yml +7 -0
  4. data/.yardopts +1 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE +21 -0
  8. data/README.md +20 -0
  9. data/Rakefile +22 -0
  10. data/dh_easy-router.gemspec +50 -0
  11. data/doc/DhEasy.html +117 -0
  12. data/doc/DhEasy/Core.html +117 -0
  13. data/doc/DhEasy/Core/Plugin.html +117 -0
  14. data/doc/DhEasy/Core/Plugin/FinisherBehavior.html +196 -0
  15. data/doc/DhEasy/Core/Plugin/ParserBehavior.html +196 -0
  16. data/doc/DhEasy/Core/Plugin/SeederBehavior.html +196 -0
  17. data/doc/DhEasy/Router.html +146 -0
  18. data/doc/DhEasy/Router/Finisher.html +345 -0
  19. data/doc/DhEasy/Router/Parser.html +366 -0
  20. data/doc/DhEasy/Router/Plugin.html +117 -0
  21. data/doc/DhEasy/Router/Plugin/Router.html +778 -0
  22. data/doc/DhEasy/Router/Seeder.html +345 -0
  23. data/doc/_index.html +224 -0
  24. data/doc/class_list.html +51 -0
  25. data/doc/css/common.css +1 -0
  26. data/doc/css/full_list.css +58 -0
  27. data/doc/css/style.css +496 -0
  28. data/doc/file.README.html +92 -0
  29. data/doc/file_list.html +56 -0
  30. data/doc/frames.html +17 -0
  31. data/doc/index.html +92 -0
  32. data/doc/js/app.js +303 -0
  33. data/doc/js/full_list.js +216 -0
  34. data/doc/js/jquery.js +4 -0
  35. data/doc/method_list.html +147 -0
  36. data/doc/top-level-namespace.html +110 -0
  37. data/lib/dh_easy/router.rb +14 -0
  38. data/lib/dh_easy/router/finisher.rb +38 -0
  39. data/lib/dh_easy/router/parser.rb +48 -0
  40. data/lib/dh_easy/router/plugin.rb +8 -0
  41. data/lib/dh_easy/router/plugin/router.rb +74 -0
  42. data/lib/dh_easy/router/seeder.rb +38 -0
  43. data/lib/dh_easy/router/version.rb +6 -0
  44. data/lib/dh_easy_override/core.rb +6 -0
  45. data/lib/dh_easy_override/core/plugin.rb +10 -0
  46. data/lib/dh_easy_override/core/plugin/finisher_behavior.rb +11 -0
  47. data/lib/dh_easy_override/core/plugin/parser_behavior.rb +11 -0
  48. data/lib/dh_easy_override/core/plugin/seeder_behavior.rb +11 -0
  49. metadata +220 -0
@@ -0,0 +1,14 @@
1
+ require 'yaml'
2
+ require 'dh_easy/core'
3
+ require 'dh_easy/config'
4
+ require 'dh_easy_override/core'
5
+ require 'dh_easy/router/version'
6
+ require 'dh_easy/router/plugin'
7
+ require 'dh_easy/router/parser'
8
+ require 'dh_easy/router/seeder'
9
+ require 'dh_easy/router/finisher'
10
+
11
+ module DhEasy
12
+ module Router
13
+ end
14
+ end
@@ -0,0 +1,38 @@
1
+ module DhEasy
2
+ module Router
3
+ # Finisher router designed to execute all finisher classes.
4
+ class Finisher
5
+ include DhEasy::Router::Plugin::Router
6
+
7
+ # Execute the finisher class with options as described by router
8
+ # configuration and calling class's instance `finish` method.
9
+ #
10
+ # @param [Hash] opts ({}) Finisher initializer options (see
11
+ # DhEasy::Core::Plugin::Finisher).
12
+ #
13
+ # @raise [ArgumentError] `opts[:context]` is `nil`.
14
+ # @raise [ArgumentError] `page_type` doesn't exists within routes.
15
+ # @raise [NameError] A class with name equal to route's `class` attribute
16
+ # doesn't exists.
17
+ #
18
+ # @note Requires the route class to implement `finish` instance method.
19
+ def route opts = {}
20
+ context = opts[:context]
21
+ if opts[:context].nil?
22
+ raise ArgumentError.new('Must send a context to the finisher.')
23
+ end
24
+
25
+ class_name = nil
26
+ config['finisher']['routes'].each do |item|
27
+ # Validate class name
28
+ executor_class = get_class item['class']
29
+ if executor_class.nil?
30
+ raise NameError.new("Class \"#{item['class']}\" doesn't exists, check your ae_easy config file.")
31
+ end
32
+
33
+ executor_class.new(opts).finish
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,48 @@
1
+ module DhEasy
2
+ module Router
3
+ # Parser router designed to look over page_type for route to the right
4
+ # parser class.
5
+ class Parser
6
+ include DhEasy::Router::Plugin::Router
7
+
8
+ # Execute the parser class with options as described by router
9
+ # configuration filtering by `page_type` and calling class's instance
10
+ # `parse` method.
11
+ #
12
+ # @param [Hash] opts ({}) Parser initializer options (see
13
+ # DhEasy::Core::Plugin::Parser).
14
+ #
15
+ # @raise [ArgumentError] `opts[:context]` is `nil`.
16
+ # @raise [ArgumentError] `page_type` doesn't exists within routes.
17
+ # @raise [NameError] A class with name equal to route's `class` attribute
18
+ # doesn't exists.
19
+ #
20
+ # @note Requires the route class to implement `parse` instance method.
21
+ def route opts = {}
22
+ context = opts[:context]
23
+ if context.nil?
24
+ raise ArgumentError.new('Must send a context to the parser.')
25
+ end
26
+
27
+ page_type = context.page['page_type'].strip.downcase
28
+ class_name = nil
29
+ config['parser']['routes'].each do |item|
30
+ # Look for page type
31
+ next if item['page_type'].strip.downcase != page_type
32
+
33
+ # Validate class name
34
+ executor_class = get_class item['class']
35
+ if executor_class.nil?
36
+ raise NameError.new("Class \"#{item['class']}\" doesn't exists, check your dh_easy config file.")
37
+ end
38
+
39
+ executor_class.new(opts).parse
40
+ return
41
+ end
42
+
43
+ # Page type is not routed, raise an error.
44
+ raise ArgumentError.new("Page type \"#{page_type}\" is not routed, check your dh_easy config file.")
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,8 @@
1
+ require 'dh_easy/router/plugin/router'
2
+
3
+ module DhEasy
4
+ module Router
5
+ module Plugin
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,74 @@
1
+ module DhEasy
2
+ module Router
3
+ module Plugin
4
+ # Base router providing the basic functionalities from a router.
5
+ module Router
6
+ include DhEasy::Core::Plugin::InitializeHook
7
+
8
+ # Local configuration (see DhEasy::Core::Config).
9
+ attr_reader :local_config
10
+
11
+ # Hook to initialize router configuration.
12
+ #
13
+ # @param [Hash] opts ({}) Configuration options.
14
+ # @option opts [DhEasy::Config::Local,nil] :config (nil) Configuration to
15
+ # use.
16
+ # @option opts [String] :config_file_path (nil) Configuration file to
17
+ # load when no +:config+ was provided (see
18
+ # DhEasy::Core::Config#file_path for default file).
19
+ # @option opts [Boolean] :force (false) Will reload configuration file
20
+ # when `true`.
21
+ #
22
+ # @note `opts[:config]` will be prioritize over
23
+ # `opts[:config_file_path]` and `opts[:force]`.
24
+ def initialize_hook_router_plugin_router opts = {}
25
+ opts = {
26
+ config: nil,
27
+ config_file_path: nil,
28
+ force: false
29
+ }.merge opts
30
+ @local_config = opts[:config]
31
+ @local_config ||= DhEasy::Config::Local.new(
32
+ file_path: opts[:config_file_path],
33
+ force: opts[:force]
34
+ )
35
+ end
36
+
37
+ # Initialize router and hooks.
38
+ #
39
+ # @param [Hash] opts ({}) Configuration options.
40
+ #
41
+ # @see #initialize_hook_router_plugin_router
42
+ def initialize opts = {}
43
+ initialize_hooks opts
44
+ end
45
+
46
+ # Router configuration.
47
+ #
48
+ # @return [Hash]
49
+ def config
50
+ local_config['router']
51
+ end
52
+
53
+ # Validates when a class name exists
54
+ #
55
+ # @param [String] name Class name to validate.
56
+ #
57
+ # @return [Boolean] `true` when exists, else `false`.
58
+ def class_defined? name
59
+ Object.const_defined? name
60
+ end
61
+
62
+ # Get a class from a class name.
63
+ #
64
+ # @param [String] name Class name to validate.
65
+ #
66
+ # @return [Class,nil] `nil` when class doesn't exists.
67
+ def get_class name
68
+ return nil unless class_defined? name
69
+ Object.const_get name
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,38 @@
1
+ module DhEasy
2
+ module Router
3
+ # Seeder router designed to execute all seeders classes.
4
+ class Seeder
5
+ include DhEasy::Router::Plugin::Router
6
+
7
+ # Execute the seeder class with options as described by router
8
+ # configuration and calling class's instance `seed` method.
9
+ #
10
+ # @param [Hash] opts ({}) Seeder initializer options (see
11
+ # DhEasy::Core::Plugin::Seeder).
12
+ #
13
+ # @raise [ArgumentError] `opts[:context]` is `nil`.
14
+ # @raise [ArgumentError] `page_type` doesn't exists within routes.
15
+ # @raise [NameError] A class with name equal to route's `class` attribute
16
+ # doesn't exists.
17
+ #
18
+ # @note Requires the route class to implement `seed` instance method.
19
+ def route opts = {}
20
+ context = opts[:context]
21
+ if opts[:context].nil?
22
+ raise ArgumentError.new('Must send a context to the seeder.')
23
+ end
24
+
25
+ class_name = nil
26
+ config['seeder']['routes'].each do |item|
27
+ # Validate class name
28
+ executor_class = get_class item['class']
29
+ if executor_class.nil?
30
+ raise NameError.new("Class \"#{item['class']}\" doesn't exists, check your dh_easy config file.")
31
+ end
32
+
33
+ executor_class.new(opts).seed
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,6 @@
1
+ module DhEasy
2
+ module Router
3
+ # Gem version
4
+ VERSION = "0.0.6"
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require 'dh_easy/core/plugin'
2
+
3
+ module DhEasy
4
+ module Core
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+ require 'dh_easy/core/plugin/seeder_behavior'
2
+ require 'dh_easy/core/plugin/parser_behavior'
3
+ require 'dh_easy/core/plugin/finisher_behavior'
4
+
5
+ module DhEasy
6
+ module Core
7
+ module Plugin
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ module DhEasy
2
+ module Core
3
+ module Plugin
4
+ module FinisherBehavior
5
+ def finish
6
+ raise NotImplementedError.new('Must implement "finish" method.')
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module DhEasy
2
+ module Core
3
+ module Plugin
4
+ module ParserBehavior
5
+ def parse
6
+ raise NotImplementedError.new('Must implement "parse" method.')
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module DhEasy
2
+ module Core
3
+ module Plugin
4
+ module SeederBehavior
5
+ def seed
6
+ raise NotImplementedError.new('Must implement "seed" method.')
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,220 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dh_easy-router
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
+ platform: ruby
6
+ authors:
7
+ - Eduardo Rosales
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-12-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dh_easy-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: dh_easy-config
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '5'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '5'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov-console
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: timecop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: byebug
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: DataHen Easy toolkit router module allow an easier class integration,
140
+ useful on advance implementations.
141
+ email:
142
+ - eduardo@datahen.com
143
+ executables: []
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - ".gitignore"
148
+ - ".travis.yml"
149
+ - ".yardopts"
150
+ - CODE_OF_CONDUCT.md
151
+ - Gemfile
152
+ - LICENSE
153
+ - README.md
154
+ - Rakefile
155
+ - dh_easy-router.gemspec
156
+ - doc/DhEasy.html
157
+ - doc/DhEasy/Core.html
158
+ - doc/DhEasy/Core/Plugin.html
159
+ - doc/DhEasy/Core/Plugin/FinisherBehavior.html
160
+ - doc/DhEasy/Core/Plugin/ParserBehavior.html
161
+ - doc/DhEasy/Core/Plugin/SeederBehavior.html
162
+ - doc/DhEasy/Router.html
163
+ - doc/DhEasy/Router/Finisher.html
164
+ - doc/DhEasy/Router/Parser.html
165
+ - doc/DhEasy/Router/Plugin.html
166
+ - doc/DhEasy/Router/Plugin/Router.html
167
+ - doc/DhEasy/Router/Seeder.html
168
+ - doc/_index.html
169
+ - doc/class_list.html
170
+ - doc/css/common.css
171
+ - doc/css/full_list.css
172
+ - doc/css/style.css
173
+ - doc/file.README.html
174
+ - doc/file_list.html
175
+ - doc/frames.html
176
+ - doc/index.html
177
+ - doc/js/app.js
178
+ - doc/js/full_list.js
179
+ - doc/js/jquery.js
180
+ - doc/method_list.html
181
+ - doc/top-level-namespace.html
182
+ - lib/dh_easy/router.rb
183
+ - lib/dh_easy/router/finisher.rb
184
+ - lib/dh_easy/router/parser.rb
185
+ - lib/dh_easy/router/plugin.rb
186
+ - lib/dh_easy/router/plugin/router.rb
187
+ - lib/dh_easy/router/seeder.rb
188
+ - lib/dh_easy/router/version.rb
189
+ - lib/dh_easy_override/core.rb
190
+ - lib/dh_easy_override/core/plugin.rb
191
+ - lib/dh_easy_override/core/plugin/finisher_behavior.rb
192
+ - lib/dh_easy_override/core/plugin/parser_behavior.rb
193
+ - lib/dh_easy_override/core/plugin/seeder_behavior.rb
194
+ homepage: https://datahen.com
195
+ licenses:
196
+ - MIT
197
+ metadata:
198
+ homepage_uri: https://datahen.com
199
+ source_code_uri: https://github.com/DataHenOfficial/dh_easy-router
200
+ post_install_message:
201
+ rdoc_options: []
202
+ require_paths:
203
+ - lib
204
+ required_ruby_version: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: 2.2.2
209
+ required_rubygems_version: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - ">="
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ requirements: []
215
+ rubyforge_project:
216
+ rubygems_version: 2.7.6
217
+ signing_key:
218
+ specification_version: 4
219
+ summary: DataHen Easy toolkit router module
220
+ test_files: []