ae_easy-router 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []