kamigo 0.16.0 → 0.21.0
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.
- checksums.yaml +4 -4
- data/README.md +14 -10
- data/app/controllers/line_controller.rb +2 -74
- data/lib/generators/kamigo/install_generator.rb +17 -0
- data/lib/generators/rails/kamigo/state_generator.rb +56 -0
- data/lib/generators/templates/kamigo.rb +14 -0
- data/lib/kamigo.rb +21 -1
- data/lib/kamigo/event_parsers/line_event_parser.rb +21 -3
- data/lib/kamigo/event_processors/rails_router_processor.rb +87 -0
- data/lib/kamigo/event_responsers/line_event_responser.rb +1 -1
- data/lib/kamigo/request_handlers/line_request_handler.rb +32 -0
- data/lib/kamigo/version.rb +1 -1
- metadata +11 -7
- data/app/controllers/concerns/reverse_route.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 603369132a555eac9c1006ef6c72942613f949a7969062cbb6a1113082cdfa01
|
4
|
+
data.tar.gz: 1723ac2a6317728974b8f8605e244490277851e652732524637ac41ba208bc1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12a69d80119b1b44d96c65aa917c4df52cf7103b6588938d1004bc7c110d022bd6d1dc749c88539d93fe734c2916cca73e53bc0d4966dc7997c79331f5778583
|
7
|
+
data.tar.gz: 51e23e962faafa4abd7a7fd153c3187147d1a9bb7f1905f32fda1efeb91ad63db00e1a26d70f41703317423fdf229f0e24f468eeceaeed734dac537c9e574645
|
data/README.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
# 詳細的說明文件
|
2
|
+
|
3
|
+
[Kamigo 詳細說明](https://etrex.tw/kamigo/)
|
4
|
+
|
1
5
|
# Kamigo 簡介
|
2
6
|
Kamigo 是一個基於 Rails 的 Chatbot MVC Framework。
|
3
7
|
|
@@ -18,6 +22,8 @@ cd kamigo_demo
|
|
18
22
|
# 安裝套件
|
19
23
|
bundle add kamigo
|
20
24
|
bundle add dotenv-rails
|
25
|
+
# 建立設定檔
|
26
|
+
rails g kamigo:install
|
21
27
|
# 新增 resource controller
|
22
28
|
rails g scaffold todo name desc
|
23
29
|
rails db:create
|
@@ -137,19 +143,17 @@ Kamigo 預設使用基本的語意理解模型,會將使用者輸入視為在
|
|
137
143
|
- 守護寵物機器人
|
138
144
|
<p><img width="100" height="100" src="/doc/images/pet_loved_qrcode.png"></p>
|
139
145
|
|
140
|
-
# 詳細的說明文件
|
141
|
-
- [Kamigo 架構概觀](/doc/01_intro.md)
|
142
|
-
- [Route 的使用說明](/doc/02_route.md)
|
143
|
-
- [Controller 的使用說明](/doc/03_controller.md)
|
144
|
-
- [View 的使用說明](/doc/04_view.md)
|
145
|
-
- [Form 的使用說明](/doc/05_form.md)
|
146
|
-
- [Kamigo 相關設定與 QA](/doc/06_setting.md)
|
147
|
-
|
148
146
|
# 計畫
|
149
147
|
- 提供多種語意理解模型串接
|
148
|
+
- DialogFlow
|
149
|
+
- LUIS
|
150
150
|
- 網站使用者與聊天機器人使用者綁定
|
151
|
-
-
|
152
|
-
-
|
151
|
+
- Devise
|
152
|
+
- Log / 錯誤追蹤
|
153
|
+
- 支援其他平台
|
154
|
+
- Telegram
|
155
|
+
- Facebook Messenger
|
156
|
+
- Slack
|
153
157
|
|
154
158
|
## License
|
155
159
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
@@ -1,83 +1,11 @@
|
|
1
1
|
require 'uri'
|
2
2
|
|
3
3
|
class LineController < ApplicationController
|
4
|
-
include ReverseRoute
|
5
4
|
protect_from_forgery with: :null_session
|
6
5
|
|
7
6
|
def entry
|
8
|
-
|
9
|
-
|
10
|
-
events.each do |event|
|
11
|
-
process_event(event)
|
12
|
-
end
|
7
|
+
request_handler = Kamigo::RequestHandlers::LineRequestHandler.new(request, form_authenticity_token)
|
8
|
+
request_handler.handle
|
13
9
|
head :ok
|
14
10
|
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
def process_event(event)
|
19
|
-
http_method, path, request_params = slot_filling(event)
|
20
|
-
http_method, path, request_params = language_understanding(event.message) if http_method.nil?
|
21
|
-
encoded_path = URI.encode(path)
|
22
|
-
request_params = event.platform_params.merge(request_params)
|
23
|
-
output = reserve_route(encoded_path, http_method: http_method, request_params: request_params, format: :line)
|
24
|
-
responser = Kamigo::EventResponsers::LineEventResponser.new
|
25
|
-
response = responser.response_event(event, output)
|
26
|
-
puts response&.body
|
27
|
-
rescue NoMethodError => e
|
28
|
-
puts e.full_message
|
29
|
-
responser = Kamigo::EventResponsers::LineEventResponser.new
|
30
|
-
response = responser.response_event(event, {
|
31
|
-
type: "text",
|
32
|
-
text: "404 not found"
|
33
|
-
})
|
34
|
-
end
|
35
|
-
|
36
|
-
def slot_filling(event)
|
37
|
-
begin
|
38
|
-
Kamiform
|
39
|
-
rescue StandardError
|
40
|
-
return [nil, nil, nil]
|
41
|
-
end
|
42
|
-
|
43
|
-
form = Kamiform.find_by(
|
44
|
-
platform_type: event.platform_type,
|
45
|
-
source_group_id: event.source_group_id
|
46
|
-
)
|
47
|
-
return [nil, nil, nil] if form.nil?
|
48
|
-
|
49
|
-
http_method = form.http_method
|
50
|
-
path = form.path
|
51
|
-
request_params = form.params
|
52
|
-
|
53
|
-
# fill
|
54
|
-
if form.field['.'].nil?
|
55
|
-
request_params[form.field] = event.message
|
56
|
-
else
|
57
|
-
*head, tail = form.field.split('.')
|
58
|
-
request_params.dig(*head)[tail] = event.message
|
59
|
-
end
|
60
|
-
form.destroy
|
61
|
-
[http_method.upcase, path, request_params]
|
62
|
-
end
|
63
|
-
|
64
|
-
def language_understanding(text)
|
65
|
-
http_method = %w[GET POST PUT PATCH DELETE].find do |http_method|
|
66
|
-
text.start_with? http_method
|
67
|
-
end
|
68
|
-
text = text[http_method.size..-1] if http_method.present?
|
69
|
-
text = text.strip
|
70
|
-
lines = text.split("\n").compact
|
71
|
-
path = lines.shift
|
72
|
-
request_params = parse_json(lines.join(""))
|
73
|
-
request_params[:authenticity_token] = form_authenticity_token
|
74
|
-
http_method = request_params["_method"]&.upcase || http_method || "GET"
|
75
|
-
[http_method, path, request_params]
|
76
|
-
end
|
77
|
-
|
78
|
-
def parse_json(string)
|
79
|
-
return {} if string.strip.empty?
|
80
|
-
JSON.parse(string)
|
81
|
-
end
|
82
|
-
|
83
11
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators/base'
|
4
|
+
|
5
|
+
module Kamigo
|
6
|
+
module Generators
|
7
|
+
class InstallGenerator < Rails::Generators::Base
|
8
|
+
source_root File.expand_path("../../templates", __FILE__)
|
9
|
+
|
10
|
+
desc "Creates a Kamigo initializer and copy locale files to your application."
|
11
|
+
|
12
|
+
def copy_initializer
|
13
|
+
template "kamigo.rb", "config/initializers/kamigo.rb"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'rails/generators/named_base'
|
2
|
+
require 'rails/generators/resource_helpers'
|
3
|
+
|
4
|
+
module Rails
|
5
|
+
module Generators
|
6
|
+
class CreateStateGenerator < NamedBase
|
7
|
+
include Rails::Generators::ResourceHelpers
|
8
|
+
namespace "devise"
|
9
|
+
argument :attributes, type: :string, default: 'kamigo_state'
|
10
|
+
|
11
|
+
class_option :timestamps, type: :boolean, default: true
|
12
|
+
|
13
|
+
def create_root_folder
|
14
|
+
path = File.join('app/views', controller_file_path)
|
15
|
+
empty_directory path unless File.directory?(path)
|
16
|
+
end
|
17
|
+
|
18
|
+
def copy_view_files
|
19
|
+
filenames.each do |filename|
|
20
|
+
template filename, File.join('app/views', controller_file_path, filename)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def attributes_names
|
27
|
+
[:id] + super
|
28
|
+
end
|
29
|
+
|
30
|
+
def filenames
|
31
|
+
[
|
32
|
+
"index.line.erb",
|
33
|
+
"show.line.erb",
|
34
|
+
"edit.liff.erb",
|
35
|
+
"new.liff.erb",
|
36
|
+
]
|
37
|
+
end
|
38
|
+
|
39
|
+
def full_attributes_list
|
40
|
+
if options[:timestamps]
|
41
|
+
attributes_list(attributes_names + %w(created_at updated_at))
|
42
|
+
else
|
43
|
+
attributes_list(attributes_names)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def attributes_list(attributes = attributes_names)
|
48
|
+
if self.attributes.any? {|attr| attr.name == 'password' && attr.type == :digest}
|
49
|
+
attributes = attributes.reject {|name| %w(password password_confirmation).include? name}
|
50
|
+
end
|
51
|
+
|
52
|
+
attributes.map { |a| ":#{a}"} * ', '
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Kamigo.setup do |config|
|
2
|
+
# When user input doesn't match the route, Kamigo will pass the reuqest to default_path with default_http_method.
|
3
|
+
# config.default_path = "/"
|
4
|
+
# config.default_http_method = "GET"
|
5
|
+
|
6
|
+
# When Kamigo don't know what message to reply, then Kamigo reply the line_default_message.
|
7
|
+
# config.line_default_message = {
|
8
|
+
# type: "text",
|
9
|
+
# text: "Sorry, I don't understand your message."
|
10
|
+
# }
|
11
|
+
|
12
|
+
# When line_default_message is nil, then Kamigo don't reply message.
|
13
|
+
# config.line_default_message = nil
|
14
|
+
end
|
data/lib/kamigo.rb
CHANGED
@@ -7,6 +7,26 @@ require "kamigo/events/basic_event"
|
|
7
7
|
require "kamigo/events/line_event"
|
8
8
|
require "kamigo/event_parsers/line_event_parser"
|
9
9
|
require "kamigo/event_responsers/line_event_responser"
|
10
|
+
require "kamigo/event_processors/rails_router_processor"
|
11
|
+
require "kamigo/request_handlers/line_request_handler"
|
12
|
+
|
10
13
|
module Kamigo
|
11
|
-
|
14
|
+
mattr_accessor :line_default_message
|
15
|
+
@@line_default_message = {
|
16
|
+
type: "text",
|
17
|
+
text: "Sorry, I don't understand your message."
|
18
|
+
}
|
19
|
+
|
20
|
+
mattr_accessor :default_path
|
21
|
+
@@default_path = nil
|
22
|
+
|
23
|
+
mattr_accessor :default_http_method
|
24
|
+
@@default_http_method = "GET"
|
25
|
+
|
26
|
+
mattr_accessor :line_event_processors
|
27
|
+
@@line_event_processors = [EventProcessors::RailsRouterProcessor.new]
|
28
|
+
|
29
|
+
def self.setup
|
30
|
+
yield self
|
31
|
+
end
|
12
32
|
end
|
@@ -12,19 +12,37 @@ module Kamigo
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def parse(event)
|
15
|
-
|
16
|
-
|
15
|
+
event_hash = JSON.parse(event.to_json, symbolize_names: true)
|
16
|
+
payload = event_hash[:src] || event_hash
|
17
17
|
line_event = Kamigo::Events::LineEvent.new
|
18
18
|
line_event.payload = payload
|
19
19
|
line_event.reply_token = event['replyToken']
|
20
|
-
line_event.profile = JSON.parse(response.body)
|
21
20
|
line_event.source_type = payload.dig(:source, :type)
|
22
21
|
line_event.source_group_id = payload.dig(:source, :groupId) || payload.dig(:source, :roomId) || payload.dig(:source, :userId)
|
23
22
|
line_event.source_user_id = payload.dig(:source, :userId) || payload.dig(:source, :groupId) || payload.dig(:source, :roomId)
|
24
23
|
line_event.message_type = payload.dig(:message, :type) || payload.dig(:type)
|
25
24
|
line_event.message = payload.dig(:message, :text) || payload.dig(:postback, :data) || payload.dig(:message, :address) || line_event.message_type
|
25
|
+
line_event.profile = get_profile(line_event)
|
26
26
|
line_event
|
27
27
|
end
|
28
|
+
|
29
|
+
def get_profile(line_event)
|
30
|
+
case line_event.source_type
|
31
|
+
when 'group'
|
32
|
+
response = client.get_group_member_profile(
|
33
|
+
line_event.source_group_id,
|
34
|
+
line_event.source_user_id
|
35
|
+
)
|
36
|
+
when 'room'
|
37
|
+
response = client.get_room_member_profile(
|
38
|
+
line_event.source_group_id,
|
39
|
+
line_event.source_user_id
|
40
|
+
)
|
41
|
+
else
|
42
|
+
response = client.get_profile(line_event.source_user_id)
|
43
|
+
end
|
44
|
+
JSON.parse(response.body)
|
45
|
+
end
|
28
46
|
end
|
29
47
|
end
|
30
48
|
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module Kamigo
|
2
|
+
module EventProcessors
|
3
|
+
class RailsRouterProcessor
|
4
|
+
attr_accessor :request
|
5
|
+
attr_accessor :form_authenticity_token
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
end
|
9
|
+
|
10
|
+
def process(event)
|
11
|
+
http_method, path, request_params = kamiform_context(event)
|
12
|
+
http_method, path, request_params = language_understanding(event.message) if http_method.nil?
|
13
|
+
encoded_path = URI.encode(path)
|
14
|
+
request_params = event.platform_params.merge(request_params)
|
15
|
+
output = reserve_route(encoded_path, http_method: http_method, request_params: request_params, format: :line)
|
16
|
+
return output if output.present?
|
17
|
+
|
18
|
+
return nil if Kamigo.default_path.nil?
|
19
|
+
reserve_route(URI.encode(Kamigo.default_path), http_method: Kamigo.default_http_method, request_params: request_params, format: :line)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def kamiform_context(event)
|
25
|
+
begin
|
26
|
+
Kamiform
|
27
|
+
rescue StandardError
|
28
|
+
return [nil, nil, nil]
|
29
|
+
end
|
30
|
+
|
31
|
+
form = Kamiform.find_by(
|
32
|
+
platform_type: event.platform_type,
|
33
|
+
source_group_id: event.source_group_id
|
34
|
+
)
|
35
|
+
return [nil, nil, nil] if form.nil?
|
36
|
+
|
37
|
+
http_method = form.http_method
|
38
|
+
path = form.path
|
39
|
+
request_params = form.params
|
40
|
+
|
41
|
+
# fill
|
42
|
+
if form.field['.'].nil?
|
43
|
+
request_params[form.field] = event.message
|
44
|
+
else
|
45
|
+
*head, tail = form.field.split('.')
|
46
|
+
request_params.dig(*head)[tail] = event.message
|
47
|
+
end
|
48
|
+
form.destroy
|
49
|
+
[http_method.upcase, path, request_params]
|
50
|
+
end
|
51
|
+
|
52
|
+
def language_understanding(text)
|
53
|
+
http_method = %w[GET POST PUT PATCH DELETE].find do |http_method|
|
54
|
+
text.start_with? http_method
|
55
|
+
end
|
56
|
+
text = text[http_method.size..-1] if http_method.present?
|
57
|
+
text = text.strip
|
58
|
+
lines = text.split("\n").compact
|
59
|
+
path = lines.shift
|
60
|
+
request_params = parse_json(lines.join(""))
|
61
|
+
request_params[:authenticity_token] = @form_authenticity_token
|
62
|
+
http_method = request_params["_method"]&.upcase || http_method || "GET"
|
63
|
+
[http_method, path, request_params]
|
64
|
+
end
|
65
|
+
|
66
|
+
def parse_json(string)
|
67
|
+
return {} if string.strip.empty?
|
68
|
+
JSON.parse(string)
|
69
|
+
end
|
70
|
+
|
71
|
+
def reserve_route(path, http_method: "GET", request_params: nil, format: nil)
|
72
|
+
path = "/#{path}" unless path.start_with? "/"
|
73
|
+
|
74
|
+
@request.request_method = http_method
|
75
|
+
@request.path_info = path
|
76
|
+
@request.format = format if format.present?
|
77
|
+
@request.request_parameters = request_params if request_params.present?
|
78
|
+
|
79
|
+
# req = Rack::Request.new
|
80
|
+
# env = {Rack::RACK_INPUT => StringIO.new}
|
81
|
+
|
82
|
+
res = Rails.application.routes.router.serve(@request)
|
83
|
+
res[2].body if res[2].respond_to?(:body)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -5,7 +5,7 @@ module Kamigo
|
|
5
5
|
|
6
6
|
def response_event(event, message)
|
7
7
|
return nil if message.blank?
|
8
|
-
message = JSON.parse(message) if message.is_a?(String) && message.start_with?("{")
|
8
|
+
message = JSON.parse(message) if message.is_a?(String) && (message.start_with?("{") || message.start_with?("["))
|
9
9
|
return nil if message.blank?
|
10
10
|
response = client.reply_message(event.reply_token, message)
|
11
11
|
response
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Kamigo
|
2
|
+
module RequestHandlers
|
3
|
+
class LineRequestHandler
|
4
|
+
def initialize(request, form_authenticity_token)
|
5
|
+
@request = request
|
6
|
+
@form_authenticity_token = form_authenticity_token
|
7
|
+
end
|
8
|
+
|
9
|
+
def handle
|
10
|
+
parser = EventParsers::LineEventParser.new
|
11
|
+
events = parser.parse_events(@request)
|
12
|
+
events.each do |event|
|
13
|
+
output = process_event(event) || Kamigo.line_default_message
|
14
|
+
responser = EventResponsers::LineEventResponser.new
|
15
|
+
response = responser.response_event(event, output)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def process_event(event)
|
22
|
+
Kamigo.line_event_processors.each do |processor|
|
23
|
+
processor.request = @request
|
24
|
+
processor.form_authenticity_token = @form_authenticity_token
|
25
|
+
output = processor.process(event)
|
26
|
+
return output if output.present?
|
27
|
+
end
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/kamigo/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kamigo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.21.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- etrex
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -30,20 +30,20 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0.
|
33
|
+
version: '0.25'
|
34
34
|
- - ">="
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: 0.
|
36
|
+
version: 0.25.0
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
41
|
- - "~>"
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: '0.
|
43
|
+
version: '0.25'
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 0.
|
46
|
+
version: 0.25.0
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: kamiflex
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -103,26 +103,30 @@ files:
|
|
103
103
|
- README.md
|
104
104
|
- Rakefile
|
105
105
|
- app/assets/config/kamigo_manifest.js
|
106
|
-
- app/controllers/concerns/reverse_route.rb
|
107
106
|
- app/controllers/kamigo_controller.rb
|
108
107
|
- app/controllers/line_controller.rb
|
109
108
|
- config/routes.rb
|
109
|
+
- lib/generators/kamigo/install_generator.rb
|
110
110
|
- lib/generators/rails/kamigo/USAGE
|
111
111
|
- lib/generators/rails/kamigo/kamigo_generator.rb
|
112
|
+
- lib/generators/rails/kamigo/state_generator.rb
|
112
113
|
- lib/generators/rails/kamigo/templates/edit.liff.erb
|
113
114
|
- lib/generators/rails/kamigo/templates/index.line.erb
|
114
115
|
- lib/generators/rails/kamigo/templates/new.liff.erb
|
115
116
|
- lib/generators/rails/kamigo/templates/show.line.erb
|
116
117
|
- lib/generators/rails/scaffold_controller_generator.rb
|
117
118
|
- lib/generators/rails/templates/controller.rb
|
119
|
+
- lib/generators/templates/kamigo.rb
|
118
120
|
- lib/kamigo.rb
|
119
121
|
- lib/kamigo/clients/line_client.rb
|
120
122
|
- lib/kamigo/engine.rb
|
121
123
|
- lib/kamigo/event_parsers/line_event_parser.rb
|
124
|
+
- lib/kamigo/event_processors/rails_router_processor.rb
|
122
125
|
- lib/kamigo/event_responsers/line_event_responser.rb
|
123
126
|
- lib/kamigo/events/basic_event.rb
|
124
127
|
- lib/kamigo/events/line_event.rb
|
125
128
|
- lib/kamigo/railtie.rb
|
129
|
+
- lib/kamigo/request_handlers/line_request_handler.rb
|
126
130
|
- lib/kamigo/version.rb
|
127
131
|
homepage: https://github.com/etrex/kamigo
|
128
132
|
licenses:
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module ReverseRoute
|
2
|
-
def reserve_route(path, http_method: "GET", request_params: nil, format: nil)
|
3
|
-
path = "/#{path}" unless path.start_with? "/"
|
4
|
-
|
5
|
-
request.request_method = http_method
|
6
|
-
request.path_info = path
|
7
|
-
request.format = format if format.present?
|
8
|
-
request.request_parameters = request_params if request_params.present?
|
9
|
-
|
10
|
-
# req = Rack::Request.new
|
11
|
-
# env = {Rack::RACK_INPUT => StringIO.new}
|
12
|
-
|
13
|
-
res = Rails.application.routes.router.serve(request)
|
14
|
-
res[2].body
|
15
|
-
end
|
16
|
-
end
|