ae_easy-router 0.0.1

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 (45) 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 +16 -0
  9. data/Rakefile +22 -0
  10. data/ae_easy-router.gemspec +50 -0
  11. data/doc/AeEasy.html +117 -0
  12. data/doc/AeEasy/Core.html +117 -0
  13. data/doc/AeEasy/Core/Plugin.html +117 -0
  14. data/doc/AeEasy/Core/Plugin/ParserBehavior.html +196 -0
  15. data/doc/AeEasy/Core/Plugin/SeederBehavior.html +196 -0
  16. data/doc/AeEasy/Router.html +146 -0
  17. data/doc/AeEasy/Router/Parser.html +366 -0
  18. data/doc/AeEasy/Router/Plugin.html +117 -0
  19. data/doc/AeEasy/Router/Plugin/Router.html +778 -0
  20. data/doc/AeEasy/Router/Seeder.html +345 -0
  21. data/doc/_index.html +202 -0
  22. data/doc/class_list.html +51 -0
  23. data/doc/css/common.css +1 -0
  24. data/doc/css/full_list.css +58 -0
  25. data/doc/css/style.css +496 -0
  26. data/doc/file.README.html +92 -0
  27. data/doc/file_list.html +56 -0
  28. data/doc/frames.html +17 -0
  29. data/doc/index.html +92 -0
  30. data/doc/js/app.js +292 -0
  31. data/doc/js/full_list.js +216 -0
  32. data/doc/js/jquery.js +4 -0
  33. data/doc/method_list.html +131 -0
  34. data/doc/top-level-namespace.html +110 -0
  35. data/lib/ae_easy/router.rb +13 -0
  36. data/lib/ae_easy/router/parser.rb +48 -0
  37. data/lib/ae_easy/router/plugin.rb +8 -0
  38. data/lib/ae_easy/router/plugin/router.rb +74 -0
  39. data/lib/ae_easy/router/seeder.rb +38 -0
  40. data/lib/ae_easy/router/version.rb +6 -0
  41. data/lib/ae_easy_override/core.rb +6 -0
  42. data/lib/ae_easy_override/core/plugin.rb +9 -0
  43. data/lib/ae_easy_override/core/plugin/parser_behavior.rb +11 -0
  44. data/lib/ae_easy_override/core/plugin/seeder_behavior.rb +11 -0
  45. metadata +216 -0
@@ -0,0 +1,13 @@
1
+ require 'yaml'
2
+ require 'ae_easy/core'
3
+ require 'ae_easy/config'
4
+ require 'ae_easy_override/core'
5
+ require 'ae_easy/router/version'
6
+ require 'ae_easy/router/plugin'
7
+ require 'ae_easy/router/parser'
8
+ require 'ae_easy/router/seeder'
9
+
10
+ module AeEasy
11
+ module Router
12
+ end
13
+ end
@@ -0,0 +1,48 @@
1
+ module AeEasy
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 AeEasy::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
+ # AeEasy::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 ae_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 ae_easy config file.")
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,8 @@
1
+ require 'ae_easy/router/plugin/router'
2
+
3
+ module AeEasy
4
+ module Router
5
+ module Plugin
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,74 @@
1
+ module AeEasy
2
+ module Router
3
+ module Plugin
4
+ # Base router providing the basic functionalities from a router.
5
+ module Router
6
+ include AeEasy::Core::Plugin::InitializeHook
7
+
8
+ # Local configuration (see AeEasy::Core::Config).
9
+ attr_reader :local_config
10
+
11
+ # Hook to initialize router configuration.
12
+ #
13
+ # @param [Hash] opts ({}) Configuration options.
14
+ # @option opts [AeEasy::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
+ # AeEasy::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 ||= AeEasy::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 AeEasy
2
+ module Router
3
+ # Seeder router designed to execute all seeders classes.
4
+ class Seeder
5
+ include AeEasy::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
+ # AeEasy::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 ae_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 AeEasy
2
+ module Router
3
+ # Gem version
4
+ VERSION = "0.0.1"
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require 'ae_easy/core/plugin'
2
+
3
+ module AeEasy
4
+ module Core
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ require 'ae_easy/core/plugin/seeder_behavior'
2
+ require 'ae_easy/core/plugin/parser_behavior'
3
+
4
+ module AeEasy
5
+ module Core
6
+ module Plugin
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ module AeEasy
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 AeEasy
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,216 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ae_easy-router
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Eduardo Rosales
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-02-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ae_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: ae_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.16.3
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.16.3
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.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
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.11'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '5.11'
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.16.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 0.16.1
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.4.2
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 0.4.2
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.9.1
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: 0.9.1
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: AnswersEngine 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
+ - ae_easy-router.gemspec
156
+ - doc/AeEasy.html
157
+ - doc/AeEasy/Core.html
158
+ - doc/AeEasy/Core/Plugin.html
159
+ - doc/AeEasy/Core/Plugin/ParserBehavior.html
160
+ - doc/AeEasy/Core/Plugin/SeederBehavior.html
161
+ - doc/AeEasy/Router.html
162
+ - doc/AeEasy/Router/Parser.html
163
+ - doc/AeEasy/Router/Plugin.html
164
+ - doc/AeEasy/Router/Plugin/Router.html
165
+ - doc/AeEasy/Router/Seeder.html
166
+ - doc/_index.html
167
+ - doc/class_list.html
168
+ - doc/css/common.css
169
+ - doc/css/full_list.css
170
+ - doc/css/style.css
171
+ - doc/file.README.html
172
+ - doc/file_list.html
173
+ - doc/frames.html
174
+ - doc/index.html
175
+ - doc/js/app.js
176
+ - doc/js/full_list.js
177
+ - doc/js/jquery.js
178
+ - doc/method_list.html
179
+ - doc/top-level-namespace.html
180
+ - lib/ae_easy/router.rb
181
+ - lib/ae_easy/router/parser.rb
182
+ - lib/ae_easy/router/plugin.rb
183
+ - lib/ae_easy/router/plugin/router.rb
184
+ - lib/ae_easy/router/seeder.rb
185
+ - lib/ae_easy/router/version.rb
186
+ - lib/ae_easy_override/core.rb
187
+ - lib/ae_easy_override/core/plugin.rb
188
+ - lib/ae_easy_override/core/plugin/parser_behavior.rb
189
+ - lib/ae_easy_override/core/plugin/seeder_behavior.rb
190
+ homepage: https://answersengine.com
191
+ licenses:
192
+ - MIT
193
+ metadata:
194
+ homepage_uri: https://answersengine.com
195
+ source_code_uri: https://github.com/answersengine/ae_easy-router
196
+ post_install_message:
197
+ rdoc_options: []
198
+ require_paths:
199
+ - lib
200
+ required_ruby_version: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ version: 2.2.2
205
+ required_rubygems_version: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ requirements: []
211
+ rubyforge_project:
212
+ rubygems_version: 2.7.6
213
+ signing_key:
214
+ specification_version: 4
215
+ summary: AnswersEngine Easy toolkit router module
216
+ test_files: []