charyf 0.1.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 (111) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +6 -0
  3. data/Gemfile.lock +154 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +18 -0
  6. data/Rakefile +6 -0
  7. data/bin/charyf-debug +7 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +8 -0
  10. data/charyf.gemspec +48 -0
  11. data/exe/charyf +4 -0
  12. data/lib/charyf/deps.rb +9 -0
  13. data/lib/charyf/engine/all.rb +22 -0
  14. data/lib/charyf/engine/charyf.rb +5 -0
  15. data/lib/charyf/engine/context.rb +61 -0
  16. data/lib/charyf/engine/controller/actions.rb +29 -0
  17. data/lib/charyf/engine/controller/controller.rb +62 -0
  18. data/lib/charyf/engine/controller/conversation.rb +58 -0
  19. data/lib/charyf/engine/controller/helpers.rb +38 -0
  20. data/lib/charyf/engine/controller/renderers.rb +103 -0
  21. data/lib/charyf/engine/dispatcher/base.rb +121 -0
  22. data/lib/charyf/engine/dispatcher/default.rb +60 -0
  23. data/lib/charyf/engine/intent/intent.rb +54 -0
  24. data/lib/charyf/engine/intent/processors/dummy.rb +30 -0
  25. data/lib/charyf/engine/intent/processors/helpers.rb +32 -0
  26. data/lib/charyf/engine/intent/processors/processor.rb +56 -0
  27. data/lib/charyf/engine/interface/interface.rb +35 -0
  28. data/lib/charyf/engine/interface/program.rb +59 -0
  29. data/lib/charyf/engine/request.rb +32 -0
  30. data/lib/charyf/engine/response.rb +41 -0
  31. data/lib/charyf/engine/session/processors/default.rb +42 -0
  32. data/lib/charyf/engine/session/processors/processor.rb +39 -0
  33. data/lib/charyf/engine/session/session.rb +68 -0
  34. data/lib/charyf/engine/skill/info.rb +24 -0
  35. data/lib/charyf/engine/skill/routing.rb +57 -0
  36. data/lib/charyf/engine/skill/skill.rb +40 -0
  37. data/lib/charyf/engine.rb +3 -0
  38. data/lib/charyf/support/all.rb +4 -0
  39. data/lib/charyf/support/hash.rb +43 -0
  40. data/lib/charyf/support/object.rb +7 -0
  41. data/lib/charyf/support/string.rb +94 -0
  42. data/lib/charyf/support/string_inquirer.rb +17 -0
  43. data/lib/charyf/support.rb +1 -0
  44. data/lib/charyf/utils/all.rb +13 -0
  45. data/lib/charyf/utils/app_engine/extensions.rb +21 -0
  46. data/lib/charyf/utils/app_engine.rb +24 -0
  47. data/lib/charyf/utils/app_loader.rb +38 -0
  48. data/lib/charyf/utils/application/bootstrap.rb +176 -0
  49. data/lib/charyf/utils/application/configuration.rb +51 -0
  50. data/lib/charyf/utils/application.rb +131 -0
  51. data/lib/charyf/utils/charyf.rb +44 -0
  52. data/lib/charyf/utils/cli.rb +14 -0
  53. data/lib/charyf/utils/command/actions.rb +24 -0
  54. data/lib/charyf/utils/command/base.rb +138 -0
  55. data/lib/charyf/utils/command/behavior.rb +81 -0
  56. data/lib/charyf/utils/command/environment_argument.rb +40 -0
  57. data/lib/charyf/utils/command.rb +106 -0
  58. data/lib/charyf/utils/commands/all.rb +6 -0
  59. data/lib/charyf/utils/commands/application/application_command.rb +21 -0
  60. data/lib/charyf/utils/commands/cli/cli_command.rb +115 -0
  61. data/lib/charyf/utils/commands/console/console_command.rb +77 -0
  62. data/lib/charyf/utils/commands/destroy/destroy_command.rb +26 -0
  63. data/lib/charyf/utils/commands/generate/generate_command.rb +31 -0
  64. data/lib/charyf/utils/commands/help/USAGE +9 -0
  65. data/lib/charyf/utils/commands/help/help.rb +20 -0
  66. data/lib/charyf/utils/commands.rb +15 -0
  67. data/lib/charyf/utils/configuration.rb +36 -0
  68. data/lib/charyf/utils/error_handler.rb +26 -0
  69. data/lib/charyf/utils/extension/configurable.rb +41 -0
  70. data/lib/charyf/utils/extension/configuration.rb +63 -0
  71. data/lib/charyf/utils/extension.rb +129 -0
  72. data/lib/charyf/utils/generator/actions.rb +281 -0
  73. data/lib/charyf/utils/generator/base.rb +288 -0
  74. data/lib/charyf/utils/generators/app/USAGE +8 -0
  75. data/lib/charyf/utils/generators/app/app_generator.rb +274 -0
  76. data/lib/charyf/utils/generators/app/templates/Gemfile.erb +20 -0
  77. data/lib/charyf/utils/generators/app/templates/README.md +24 -0
  78. data/lib/charyf/utils/generators/app/templates/app/skill_controller.rb.tt +8 -0
  79. data/lib/charyf/utils/generators/app/templates/bin/charyf +5 -0
  80. data/lib/charyf/utils/generators/app/templates/config/application.rb.tt +32 -0
  81. data/lib/charyf/utils/generators/app/templates/config/boot.rb.tt +4 -0
  82. data/lib/charyf/utils/generators/app/templates/config/chapp.rb.tt +5 -0
  83. data/lib/charyf/utils/generators/app/templates/config/environments/development.rb.tt +2 -0
  84. data/lib/charyf/utils/generators/app/templates/config/environments/production.rb.tt +2 -0
  85. data/lib/charyf/utils/generators/app/templates/config/environments/test.rb.tt +2 -0
  86. data/lib/charyf/utils/generators/app/templates/config/load.rb.tt +17 -0
  87. data/lib/charyf/utils/generators/app/templates/gitignore +18 -0
  88. data/lib/charyf/utils/generators/app_base.rb +277 -0
  89. data/lib/charyf/utils/generators/defaults.rb +75 -0
  90. data/lib/charyf/utils/generators/intents/intents_generator.rb +41 -0
  91. data/lib/charyf/utils/generators/named_base.rb +73 -0
  92. data/lib/charyf/utils/generators/skill/skill_generator.rb +47 -0
  93. data/lib/charyf/utils/generators/skill/templates/controllers/skill_controller.rb.tt +10 -0
  94. data/lib/charyf/utils/generators/skill/templates/module.rb.tt +6 -0
  95. data/lib/charyf/utils/generators/skill/templates/skill.rb.tt +3 -0
  96. data/lib/charyf/utils/generators.rb +187 -0
  97. data/lib/charyf/utils/initializable.rb +95 -0
  98. data/lib/charyf/utils/logger.rb +26 -0
  99. data/lib/charyf/utils/machine.rb +129 -0
  100. data/lib/charyf/utils/parser/en_parser.rb +97 -0
  101. data/lib/charyf/utils/parser/parser.rb +37 -0
  102. data/lib/charyf/utils/ruby_version_check.rb +15 -0
  103. data/lib/charyf/utils/storage/provider.rb +44 -0
  104. data/lib/charyf/utils/strategy.rb +44 -0
  105. data/lib/charyf/utils/utils.rb +64 -0
  106. data/lib/charyf/utils.rb +2 -0
  107. data/lib/charyf/version.rb +19 -0
  108. data/lib/charyf.rb +18 -0
  109. data/lib/locale/en.yml +206 -0
  110. data/todo.md +3 -0
  111. metadata +272 -0
@@ -0,0 +1,103 @@
1
+ require 'erb'
2
+
3
+ require_relative '../../utils'
4
+
5
+ module Charyf
6
+ module Controller
7
+ module Renderers
8
+
9
+ class ResponseFileMissingError < StandardError; end
10
+ class NoResponseFound < StandardError; end
11
+ class InvalidState < StandardError; end
12
+
13
+ def self.included(base)
14
+ base.extend(ClassMethods)
15
+ end
16
+
17
+ module ClassMethods
18
+
19
+ def auto_reply(only: [], except: [])
20
+ @_render_filters = Charyf::Utils.create_action_filters(only, except)
21
+ end
22
+
23
+ def _render_on?(action)
24
+ Charyf::Utils.match_action_filters?(action.to_sym, _render_filters)
25
+ end
26
+
27
+ def _render_filters
28
+ @_render_filters ||= Charyf::Utils.create_action_filters
29
+ end
30
+
31
+ end # End of ClassMethods
32
+
33
+ # TODO sig
34
+ def response_folder
35
+ return nil if skill_name.to_s.blank?
36
+
37
+ return skill_name.to_s.constantize.skill_root.join('responses', controller_path)
38
+ end
39
+
40
+ def ensure_responses_for(action)
41
+ unless response_folder
42
+ raise Charyf::Controller::Renderers::InvalidState.new('Controller without skill can not render views')
43
+ end
44
+
45
+ if responses_for(action).empty?
46
+ raise Charyf::Controller::Renderers::NoResponseFound.new('No responses files found for action ' + action.to_s + "\n" +
47
+ "Expected #{action}.[html|txt].erb in #{response_folder}")
48
+ end
49
+ end
50
+
51
+ # TODO sig
52
+ def responses_for(action)
53
+ Dir[response_folder.join("#{action}**")]
54
+ end
55
+
56
+ # TODO sig
57
+ def render_text_response(action)
58
+ file_path = response_folder.join("#{action}.txt.erb")
59
+
60
+ return nil unless exists?(file_path)
61
+
62
+ _render_sample_response file_path
63
+ end
64
+
65
+ # TODO sig
66
+ def render_html_response(action)
67
+ file_path = response_folder.join("#{action}.html.erb")
68
+
69
+ return nil unless exists?(file_path)
70
+
71
+ _render_response file_path
72
+ end
73
+
74
+ private
75
+
76
+ def _render_sample_response(file)
77
+ sample = File.read(file).split("###").map(&:strip).sample
78
+ ERB.new(sample).result(binding)
79
+ end
80
+
81
+ def _render_response(file)
82
+ sample = File.read(file)
83
+ ERB.new(sample).result(binding)
84
+ end
85
+
86
+
87
+ # TODO sig
88
+ def controller_path
89
+ controller_name.underscore
90
+ end
91
+
92
+ # TODO sig
93
+ def exists?(path)
94
+ File.exists?(path)
95
+ end
96
+
97
+ def exists!(path)
98
+ raise ResponseFileMissingError.new(path) unless exists?(path)
99
+ end
100
+
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,121 @@
1
+ require_relative '../../utils'
2
+
3
+ require_relative '../context'
4
+ require_relative '../request'
5
+
6
+ module Charyf
7
+ module Engine
8
+ module Dispatcher
9
+ class Base
10
+
11
+ include Charyf::Strategy
12
+ def self.base
13
+ Base
14
+ end
15
+
16
+ sig ['Charyf::Engine::Request'], nil,
17
+ def dispatch(request)
18
+ end
19
+
20
+ def self.setup
21
+ # Do your setup here
22
+ end
23
+
24
+
25
+ protected
26
+
27
+ def self.intent_processors
28
+ Charyf.application.intent_processors
29
+ end
30
+
31
+ def self.session_processor
32
+ Charyf.application.session_processor
33
+ end
34
+
35
+ def intent_processors
36
+ self.class.intent_processors
37
+ end
38
+
39
+ def session_processor
40
+ self.class.session_processor
41
+ end
42
+
43
+ sig ['Charyf::Engine::Context'], nil,
44
+ def spawn_controller(context)
45
+ begin
46
+ prepare_context context
47
+
48
+ Charyf.logger.flow_request("[FLOW] Dispatching request [#{context.request.inspect}]" +
49
+ ", detected intent: [#{context.intent.inspect}]" +
50
+ ", session : [#{context.session.inspect}]"
51
+ )
52
+
53
+ controller = get_controller(context)
54
+
55
+ handle_before_actions(controller)
56
+ controller.send(context.action_name)
57
+ handle_after_actions(controller)
58
+ rescue Exception => e
59
+ # Dispatch the error to all error handlers
60
+ Charyf.configuration.error_handlers.handle_exception(e)
61
+
62
+ # Catch any error that may occur inside the user controller
63
+ controller.send(:reply, text: 'There was a problem processing your request. Check the logs please.')
64
+ end
65
+
66
+ end
67
+
68
+ private
69
+
70
+ def prepare_context(context)
71
+ context.intent ||= Charyf::Engine::Intent::UNKNOWN
72
+
73
+ context
74
+ end
75
+
76
+ def get_controller(context)
77
+ controller_name = context.full_controller_name + 'Controller'
78
+
79
+ Object.const_get(controller_name).new(context)
80
+ end
81
+
82
+ def get_action_name(context)
83
+ if context.session && context.session.action
84
+ return context.session.action
85
+ end
86
+
87
+ context.intent.action
88
+ end
89
+
90
+ def handle_before_actions(controller)
91
+ action = controller.action_name
92
+
93
+ # Handle before actions
94
+ controller.class._before_actions(action).each do |method_name|
95
+ controller.send(method_name)
96
+ end
97
+
98
+ end
99
+
100
+ def handle_after_actions(controller)
101
+ action = controller.action_name
102
+
103
+ # Auto render responses
104
+ if controller.class._render_on? action
105
+ controller.send(:reply)
106
+ end
107
+ end
108
+
109
+ end # End of Base.class
110
+
111
+ def self.known
112
+ Base.known
113
+ end
114
+
115
+ def self.list
116
+ Base.list
117
+ end
118
+
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,60 @@
1
+ require_relative 'base'
2
+
3
+ module Charyf
4
+ module Engine
5
+ module Dispatcher
6
+ class BaseDispatcher < Base
7
+
8
+ strategy_name :default
9
+
10
+ def self.setup
11
+
12
+ end
13
+
14
+ def dispatch(request)
15
+ # Find if session exist for this request
16
+
17
+ context = Charyf::Engine::Context.new
18
+ context.request = request
19
+
20
+ # TODO process session as well
21
+ context.session = session_processor.get.process(request)
22
+
23
+ # Get intents
24
+ intents = intent_processors.collect do |processor_klass|
25
+ processor = processor_klass.get_for(context.session ? context.session.skill : nil)
26
+
27
+ processor.determine(
28
+ request
29
+ )
30
+ end.collect do |intent|
31
+ [intent, intent.alternatives].flatten
32
+ end.flatten.sort_by do |intent|
33
+ intent.confidence
34
+ end.reverse
35
+
36
+ # Sort by confidence
37
+ best_match = intents.shift
38
+
39
+ # Return best match with alternatives
40
+ if best_match
41
+ context.intent = Charyf::Engine::Intent.new(
42
+ best_match.skill,
43
+ best_match.controller,
44
+ best_match.action,
45
+ best_match.confidence,
46
+ best_match.matches,
47
+ intents
48
+ )
49
+
50
+ context.intent = best_match
51
+ end
52
+
53
+ # TODO
54
+ spawn_controller(context)
55
+ end
56
+
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,54 @@
1
+ module Charyf
2
+ module Engine
3
+ class Intent
4
+
5
+ sig [['Symbol', 'String', 'NilClass'], ['Symbol', 'String'], ['Symbol', 'String'], 'Numeric', 'Hash', 'Array'], nil,
6
+ def initialize(skill, controller, action, confidence, matches = Hash.new, alternatives = [])
7
+ @_skill = skill.to_s
8
+ @_controller = controller.to_s
9
+ @_action = action.to_s.downcase
10
+ @_confidence = confidence
11
+ @_matches = matches
12
+ @_alternatives = alternatives
13
+ end
14
+
15
+ sig [], 'Hash',
16
+ def matches
17
+ @_matches
18
+ end
19
+
20
+ sig [], 'Numeric',
21
+ def confidence
22
+ @_confidence
23
+ end
24
+
25
+ sig [], ['Symbol', 'String'],
26
+ def full_controller_name
27
+ @_skill.blank? ? @_controller.camelize : @_skill.camelize + '::' + @_controller.camelize
28
+ end
29
+
30
+ sig [], ['Symbol', 'String'],
31
+ def controller
32
+ @_controller
33
+ end
34
+
35
+ sig [], ['Symbol', 'String'],
36
+ def action
37
+ @_action
38
+ end
39
+
40
+ sig [], 'Array',
41
+ def alternatives
42
+ @_alternatives
43
+ end
44
+
45
+ sig [], ['String', 'Symbol'],
46
+ def skill
47
+ @_skill
48
+ end
49
+
50
+ UNKNOWN = Intent.new(nil, :Skill, :unknown, 0)
51
+
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,30 @@
1
+ require_relative '../../../utils'
2
+
3
+ require_relative '../intent'
4
+ require_relative 'processor'
5
+
6
+ module Charyf
7
+ module Engine
8
+ class Intent
9
+ module Processor
10
+ class Dummy < Base
11
+
12
+ strategy_name :dummy
13
+
14
+ def self.get_for(skill_name = nil)
15
+ self.new
16
+ end
17
+
18
+ def determine(request)
19
+ unknown
20
+ end
21
+
22
+ def load(skill_name, block)
23
+ nil
24
+ end
25
+
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,32 @@
1
+ module Charyf
2
+ module Engine
3
+ class Intent
4
+ module Processor
5
+ module Helpers
6
+
7
+ def self.included(base)
8
+ base.extend(ClassMethods)
9
+ end
10
+
11
+ module ClassMethods
12
+
13
+ def scoped_name(skill_name, *args)
14
+ ([skill_name.to_s] + args).join('_')
15
+ end
16
+
17
+ def unscope_name(skill_name, name)
18
+ name.start_with?(skill_name.to_s) ? name.sub("#{skill_name.to_s}_", '') : name
19
+ end
20
+
21
+ end # End of ClassMethods
22
+
23
+ sig [], 'Charyf::Engine::Intent',
24
+ def unknown
25
+ Charyf::Engine::Intent::UNKNOWN
26
+ end
27
+
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,56 @@
1
+ require_relative '../../../utils'
2
+
3
+ require_relative 'helpers'
4
+ require_relative '../intent'
5
+
6
+ module Charyf
7
+ module Engine
8
+ class Intent
9
+ module Processor
10
+ class Base
11
+
12
+ include Charyf::Strategy
13
+ include Charyf::Engine::Intent::Processor::Helpers
14
+
15
+ def self.base
16
+ Base
17
+ end
18
+
19
+ sig ['Charyf::Engine::Request'], 'Charyf::Engine::Intent',
20
+ def determine(request)
21
+ raise Charyf::Utils::NotImplemented.new
22
+ end
23
+
24
+ #
25
+ # Load single block of intent definitions
26
+ #
27
+ sig_self ['Symbol', 'Proc'], nil,
28
+ def load(skill_name, block)
29
+ raise Charyf::Utils::NotImplemented.new
30
+ end
31
+
32
+ sig_self ['Symbol'], 'Charyf::Engine::Intent::Processor::Base',
33
+ def self.get_for(skill = nil)
34
+ raise Charyf::Utils::NotImplemented.new
35
+ end
36
+
37
+ sig_self [], 'Charyf::Engine::Intent::Processor::Base',
38
+ def self.get_global
39
+ get_for(nil)
40
+ end
41
+
42
+ end
43
+
44
+
45
+ def self.known
46
+ Base.known
47
+ end
48
+
49
+ def self.list
50
+ Base.list
51
+ end
52
+
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,35 @@
1
+ require_relative '../../utils'
2
+
3
+ require_relative '../response'
4
+ require_relative '../dispatcher/base'
5
+
6
+ module Charyf
7
+ module Interface
8
+ class Base
9
+
10
+ include Charyf::Strategy
11
+ def self.base
12
+ Base
13
+ end
14
+
15
+ sig_self [], 'Charyf::Engine::Dispatcher::Base',
16
+ def self.dispatcher
17
+ Charyf.application.dispatcher.new
18
+ end
19
+
20
+ sig_self ['String', 'Charyf::Engine::Response'], nil,
21
+ def self.reply(conversation_id, response)
22
+ raise Charyf::Utils::NotImplemented.new
23
+ end
24
+
25
+ end
26
+
27
+ def self.known
28
+ Base.known
29
+ end
30
+
31
+ def self.list
32
+ Base.list
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,59 @@
1
+ require_relative 'interface'
2
+ require_relative '../request'
3
+
4
+ module Charyf
5
+ module Interface
6
+ class Program < Charyf::Interface::Base
7
+
8
+ class InvalidConversationError < StandardError; end
9
+
10
+ strategy_name :program
11
+
12
+ attr_reader :handler, :conversation_id
13
+
14
+ sig_self ['String', 'Charyf::Engine::Response'], nil,
15
+ def self.reply(conversation_id, response)
16
+ interface = _interfaces[conversation_id]
17
+ raise InvalidConversationError.new("No program interface found for conversation #{conversation_id}") unless interface
18
+
19
+ interface.reply(response)
20
+ end
21
+
22
+ sig_self ['String', 'Proc'], 'Charyf::Interface::Program',
23
+ def self.create(conversation_id, handler)
24
+ interface = self.new(conversation_id, handler)
25
+
26
+ _interfaces[conversation_id] = interface
27
+
28
+ interface
29
+ end
30
+
31
+ def self._interfaces
32
+ @_interfaces ||= Hash.new
33
+ end
34
+
35
+ sig [nil, 'Proc'],
36
+ def initialize(conversation_id, handler)
37
+
38
+ @handler = handler
39
+ @conversation_id = conversation_id.to_s
40
+ end
41
+
42
+ sig ['Charyf::Engine::Request'],
43
+ def process(request)
44
+ self.class.dispatcher.dispatch(request)
45
+ end
46
+
47
+ sig ['Charyf::Engine::Response'],
48
+ def reply(response)
49
+ handler.call(response)
50
+ end
51
+
52
+ sig [], 'Charyf::Engine::Request',
53
+ def request
54
+ Charyf::Engine::Request.new(self.class, conversation_id)
55
+ end
56
+
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,32 @@
1
+ module Charyf
2
+ module Engine
3
+ class Request
4
+
5
+ attr_accessor :text
6
+
7
+ # Module -> anything of type Charyf::Interface::Base
8
+ sig ['Module', 'String'], nil,
9
+ def initialize(referer, conversation_id)
10
+ @referer = referer
11
+ @conversation_id = conversation_id
12
+ end
13
+
14
+ # Module -> Charyf::Interface::Base
15
+ sig [], 'Module',
16
+ def referer
17
+ @referer
18
+ end
19
+
20
+ sig [], 'String',
21
+ def conversation_id
22
+ @conversation_id
23
+ end
24
+
25
+ sig [], 'String',
26
+ def id
27
+ @referer.strategy_name.to_s + '_#_' + @conversation_id
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,41 @@
1
+ module Charyf
2
+ module Engine
3
+ class Response
4
+
5
+ attr_accessor :text, :html
6
+
7
+ sig [['String', 'NilClass'], ['String', 'NilClass']], nil,
8
+ def initialize(text, html)
9
+ @text = text
10
+ @html = html
11
+ end
12
+
13
+ def empty?
14
+ text.blank? && html.blank?
15
+ end
16
+
17
+ # Attr methods for type-checking
18
+
19
+ sig ['String', 'NilClass'], ['String', 'NilClass'],
20
+ def text=(text)
21
+ @text = text
22
+ end
23
+
24
+ sig [], ['String', 'NilClass'],
25
+ def text
26
+ @text
27
+ end
28
+
29
+ sig ['String', 'NilClass'], ['String', 'NilClass'],
30
+ def html=(html)
31
+ @html = html
32
+ end
33
+
34
+ sig [], ['String', 'NilClass'],
35
+ def html
36
+ @html
37
+ end
38
+
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,42 @@
1
+ require_relative '../../../utils'
2
+
3
+ require_relative '../session'
4
+ require_relative 'processor'
5
+
6
+ module Charyf
7
+ module Engine
8
+ class Session
9
+ module Processor
10
+ class Default < Base
11
+
12
+ # 10 Minute
13
+ # TODO - move to config?
14
+ SESSION_TIMEOUT = 10 * 60
15
+
16
+ strategy_name :default
17
+
18
+ def process(request)
19
+ # session = Charyf::Engine::Session.get(request.id)
20
+ #
21
+ # return unless session
22
+ #
23
+ # if session && Time.now - session.timestamp > SESSION_TIMEOUT
24
+ # session.destroy!
25
+ # return nil
26
+ # end
27
+ #
28
+ # session.invalidate!
29
+ # session
30
+
31
+ nil
32
+ end
33
+
34
+ def self.get
35
+ self.new
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,39 @@
1
+ require_relative '../../../utils'
2
+
3
+ module Charyf
4
+ module Engine
5
+ class Session
6
+ module Processor
7
+ class Base
8
+
9
+ include Charyf::Strategy
10
+ def self.base
11
+ Base
12
+ end
13
+
14
+
15
+ sig ['Charyf::Engine::Request'], ['Charyf::Engine::Session', 'NilClass'],
16
+ def process(request)
17
+ raise Charyf::Utils::NotImplemented.new
18
+ end
19
+
20
+ sig_self [], ['Charyf::Engine::Session::Processor::Base'],
21
+ def self.get
22
+ raise Charyf::Utils::NotImplemented.new
23
+ end
24
+
25
+ end
26
+
27
+
28
+ def self.known
29
+ Base.known
30
+ end
31
+
32
+ def self.list
33
+ Base.list
34
+ end
35
+
36
+ end
37
+ end
38
+ end
39
+ end