xconn 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +29 -0
- data/CHANGELOG.md +5 -0
- data/LICENSE +22 -0
- data/Makefile +9 -0
- data/README.md +2 -0
- data/Rakefile +14 -0
- data/bin/xconn +79 -0
- data/docs/index.md +7 -0
- data/docs/installation.md +11 -0
- data/example/sample/example.rb +23 -0
- data/example/sample/included_app.rb +12 -0
- data/lib/tasks/tasks.rake +24 -0
- data/lib/wamp/app.rb +39 -0
- data/lib/wamp/connection/session.rb +35 -0
- data/lib/wamp/connection/stream.rb +68 -0
- data/lib/wamp/connection/websocket_client.rb +137 -0
- data/lib/wamp/connection/websocket_connection.rb +52 -0
- data/lib/wamp/manager/base.rb +41 -0
- data/lib/wamp/manager/connection.rb +32 -0
- data/lib/wamp/manager/event/abort.rb +21 -0
- data/lib/wamp/manager/event/authenticate.rb +14 -0
- data/lib/wamp/manager/event/base.rb +41 -0
- data/lib/wamp/manager/event/call.rb +40 -0
- data/lib/wamp/manager/event/challenge.rb +26 -0
- data/lib/wamp/manager/event/error.rb +30 -0
- data/lib/wamp/manager/event/event.rb +20 -0
- data/lib/wamp/manager/event/goodbye.rb +18 -0
- data/lib/wamp/manager/event/hello.rb +38 -0
- data/lib/wamp/manager/event/invocation.rb +24 -0
- data/lib/wamp/manager/event/publish.rb +22 -0
- data/lib/wamp/manager/event/published.rb +13 -0
- data/lib/wamp/manager/event/register.rb +30 -0
- data/lib/wamp/manager/event/registered.rb +37 -0
- data/lib/wamp/manager/event/result.rb +13 -0
- data/lib/wamp/manager/event/subscribe.rb +39 -0
- data/lib/wamp/manager/event/subscribed.rb +26 -0
- data/lib/wamp/manager/event/unregister.rb +19 -0
- data/lib/wamp/manager/event/unregistered.rb +13 -0
- data/lib/wamp/manager/event/unsubscribe.rb +29 -0
- data/lib/wamp/manager/event/unsubscribed.rb +13 -0
- data/lib/wamp/manager/event/welcome.rb +21 -0
- data/lib/wamp/manager/event/yield.rb +13 -0
- data/lib/wamp/manager/event.rb +60 -0
- data/lib/wamp/manager/hello_event.rb +263 -0
- data/lib/wamp/manager/session.rb +91 -0
- data/lib/wamp/manager/subscription.rb +38 -0
- data/lib/wamp/manager.rb +12 -0
- data/lib/wamp/message_handler/api.rb +67 -0
- data/lib/wamp/message_handler/base.rb +65 -0
- data/lib/wamp/message_handler/call.rb +14 -0
- data/lib/wamp/message_handler/challenge.rb +12 -0
- data/lib/wamp/message_handler/error.rb +18 -0
- data/lib/wamp/message_handler/event.rb +18 -0
- data/lib/wamp/message_handler/goodbye.rb +19 -0
- data/lib/wamp/message_handler/hello.rb +18 -0
- data/lib/wamp/message_handler/invocation.rb +35 -0
- data/lib/wamp/message_handler/publish.rb +14 -0
- data/lib/wamp/message_handler/published.rb +18 -0
- data/lib/wamp/message_handler/register.rb +14 -0
- data/lib/wamp/message_handler/registered.rb +30 -0
- data/lib/wamp/message_handler/result.rb +17 -0
- data/lib/wamp/message_handler/subscribe.rb +14 -0
- data/lib/wamp/message_handler/subscribed.rb +30 -0
- data/lib/wamp/message_handler/unregister.rb +14 -0
- data/lib/wamp/message_handler/unregistered.rb +32 -0
- data/lib/wamp/message_handler/unsubscribe.rb +14 -0
- data/lib/wamp/message_handler/unsubscribed.rb +33 -0
- data/lib/wamp/message_handler/welcome.rb +12 -0
- data/lib/wamp/message_handler.rb +75 -0
- data/lib/wamp/router/base.rb +45 -0
- data/lib/wamp/router/client.rb +55 -0
- data/lib/wamp/router/connection.rb +150 -0
- data/lib/wamp/router/realm.rb +92 -0
- data/lib/wamp/router/server.rb +83 -0
- data/lib/wamp/router.rb +12 -0
- data/lib/wamp/serializer/cbor.rb +18 -0
- data/lib/wamp/serializer/json.rb +18 -0
- data/lib/wamp/serializer/message_pack.rb +18 -0
- data/lib/wamp/serializer.rb +5 -0
- data/lib/wamp/type/error.rb +24 -0
- data/lib/wamp/type/event.rb +16 -0
- data/lib/wamp/type/invocation.rb +16 -0
- data/lib/wamp/type/publication.rb +14 -0
- data/lib/wamp/type/registration.rb +14 -0
- data/lib/wamp/type/result.rb +16 -0
- data/lib/wamp/type/subscription.rb +14 -0
- data/lib/wamp/type/success.rb +8 -0
- data/lib/wamp/type.rb +16 -0
- data/lib/wamp/version.rb +5 -0
- data/lib/wamp.rb +15 -0
- data/mkdocs.yml +67 -0
- data/sig/wamp/serializer/json.rbs +10 -0
- data/sig/wamp.rbs +11 -0
- data/wamp.gemspec +40 -0
- metadata +223 -0
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "delegate"
|
4
|
+
|
5
|
+
module Wamp
|
6
|
+
module Manager
|
7
|
+
# no:doc
|
8
|
+
module Event
|
9
|
+
# Base Class for Listening and Emitting events
|
10
|
+
# Each event should base as parent class
|
11
|
+
class Base < SimpleDelegator
|
12
|
+
attr_reader :session
|
13
|
+
|
14
|
+
def initialize(message, session)
|
15
|
+
super(message)
|
16
|
+
@session = session
|
17
|
+
end
|
18
|
+
|
19
|
+
def emit_event(message)
|
20
|
+
session.emit(emit_event_name, message)
|
21
|
+
end
|
22
|
+
|
23
|
+
def transmit
|
24
|
+
session.transmit(payload)
|
25
|
+
end
|
26
|
+
|
27
|
+
def listen_event_name
|
28
|
+
"request_#{request_id}"
|
29
|
+
end
|
30
|
+
|
31
|
+
def emit_event_name
|
32
|
+
"request_#{request_id}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def error?
|
36
|
+
false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Wamp
|
6
|
+
module Manager
|
7
|
+
module Event
|
8
|
+
# Call Message Event
|
9
|
+
class Call < Base
|
10
|
+
def add_event_listener(&block) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
11
|
+
on_progress = options.delete(:on_progress)
|
12
|
+
options.merge!(receive_progress: true) if on_progress
|
13
|
+
|
14
|
+
session.on(listen_event_name) do |result, error|
|
15
|
+
if error
|
16
|
+
block&.call(nil, error)
|
17
|
+
elsif result && result.details["progress"]
|
18
|
+
on_progress.call(result)
|
19
|
+
else
|
20
|
+
session.off(listen_event_name)
|
21
|
+
block&.call(result, nil)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
session.transmit(payload)
|
25
|
+
end
|
26
|
+
|
27
|
+
def emit_event(message)
|
28
|
+
manager = Wamp::Router::Registrations.invoke(message, session)
|
29
|
+
return manager.transmit if manager.error?
|
30
|
+
|
31
|
+
# Invocation Manager Receives Yield Message
|
32
|
+
manager.add_event_listener do |yield_msg|
|
33
|
+
result = Message::Result.new(message.request_id, {}, *yield_msg.args, **yield_msg.kwargs)
|
34
|
+
session.transmit(result.payload)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
require "openssl"
|
5
|
+
|
6
|
+
module Wamp
|
7
|
+
module Manager
|
8
|
+
module Event
|
9
|
+
# Welcome Message Event
|
10
|
+
class Challenge < Base
|
11
|
+
def emit_event_name
|
12
|
+
:challenge
|
13
|
+
end
|
14
|
+
|
15
|
+
def emit_event(challenge)
|
16
|
+
session.emit(emit_event_name, challenge)
|
17
|
+
send_authenticate(session.authenticate(challenge))
|
18
|
+
end
|
19
|
+
|
20
|
+
def send_authenticate(authenticate)
|
21
|
+
session.transmit(authenticate.payload)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Wamp
|
6
|
+
module Manager
|
7
|
+
module Event
|
8
|
+
# Welcome Message Event
|
9
|
+
class Error < Base
|
10
|
+
def emit_event_name
|
11
|
+
"request_#{request_id}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def emit_event(message)
|
15
|
+
session.emit(emit_event_name, nil, message)
|
16
|
+
|
17
|
+
begin
|
18
|
+
raise message.error if message.error
|
19
|
+
rescue StandardError => e
|
20
|
+
puts "Error: #{e.message}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def error?
|
25
|
+
true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Wamp
|
6
|
+
module Manager
|
7
|
+
module Event
|
8
|
+
# Event Message Event
|
9
|
+
class Event < Base
|
10
|
+
def emit_event_name
|
11
|
+
"event_#{subscription_id}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def emit_event(message)
|
15
|
+
session.emit(emit_event_name, message)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "abort"
|
4
|
+
|
5
|
+
module Wamp
|
6
|
+
module Manager
|
7
|
+
module Event
|
8
|
+
# Abort Message Event
|
9
|
+
class Goodbye < Abort
|
10
|
+
def emit_event(_message)
|
11
|
+
reply = Message::Goodbye.new({}, "wamp.close.goodbye_and_out")
|
12
|
+
session.transmit(reply.payload)
|
13
|
+
super
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
require_relative "../../router"
|
5
|
+
|
6
|
+
module Wamp
|
7
|
+
module Manager
|
8
|
+
module Event
|
9
|
+
# Hello Message Event
|
10
|
+
class Hello < Base
|
11
|
+
def add_event_listener
|
12
|
+
session.transmit(payload)
|
13
|
+
end
|
14
|
+
|
15
|
+
def emit_event(hello)
|
16
|
+
session.emit(:authenticate, hello) # handle second hello message
|
17
|
+
auth_session = Wamp::Router::Session::Base.new(hello)
|
18
|
+
message = update_session_id_and_return(auth_session.handle_auth)
|
19
|
+
session.transmit(message.payload)
|
20
|
+
|
21
|
+
session.on(:authenticate) do |authenticate|
|
22
|
+
welcome_or_error = update_session_id_and_return(auth_session.authenticate(authenticate))
|
23
|
+
session.transmit(welcome_or_error.payload)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def update_session_id_and_return(message)
|
28
|
+
session.session_id = message.session_id if message.respond_to?(:session_id) # welcome message
|
29
|
+
message
|
30
|
+
end
|
31
|
+
|
32
|
+
def listen_event_name
|
33
|
+
:join
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Wamp
|
6
|
+
module Manager
|
7
|
+
module Event
|
8
|
+
# Unregistered Message Event
|
9
|
+
class Invocation < Base
|
10
|
+
def add_event_listener(&callback)
|
11
|
+
session.on(listen_event_name) do |yield_msg|
|
12
|
+
session.off(listen_event_name)
|
13
|
+
callback.call(yield_msg)
|
14
|
+
end
|
15
|
+
transmit
|
16
|
+
end
|
17
|
+
|
18
|
+
def emit_event_name
|
19
|
+
"registration_#{registration_id}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Wamp
|
6
|
+
module Manager
|
7
|
+
module Event
|
8
|
+
# Publish Message Event
|
9
|
+
class Publish < Base
|
10
|
+
def add_event_listener(&block)
|
11
|
+
session.transmit(payload)
|
12
|
+
return unless block_given?
|
13
|
+
|
14
|
+
session.on(listen_event_name) do |publication|
|
15
|
+
session.off(listen_event_name)
|
16
|
+
block.call(publication, nil)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "registered"
|
4
|
+
|
5
|
+
module Wamp
|
6
|
+
module Manager
|
7
|
+
module Event
|
8
|
+
# Register Message Event
|
9
|
+
class Register < Base
|
10
|
+
def add_event_listener(handler, &block)
|
11
|
+
session.transmit(payload)
|
12
|
+
session.on(listen_event_name) do |registered, error|
|
13
|
+
session.off(listen_event_name)
|
14
|
+
block&.call(registered, error)
|
15
|
+
|
16
|
+
unless error
|
17
|
+
manager = Registered.new(registered, session)
|
18
|
+
manager.add_event_listener(handler)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def emit_event(message)
|
24
|
+
msg = Wamp::Router::Registrations.register(message, session)
|
25
|
+
session.transmit(msg.payload)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Wamp
|
6
|
+
module Manager
|
7
|
+
module Event
|
8
|
+
# Registered Message Event
|
9
|
+
class Registered < Base
|
10
|
+
# Adding listener for invocation message
|
11
|
+
def listen_event_name
|
12
|
+
"registration_#{registration_id}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def add_event_listener(handler)
|
16
|
+
session.on(listen_event_name) do |invocation|
|
17
|
+
details = {}
|
18
|
+
details = { details: yield_method(invocation) } if invocation.details["receive_progress"]
|
19
|
+
result = handler.call(*invocation.args, **invocation.kwargs, **details)
|
20
|
+
message = Message::Yield.new(invocation.request_id, {}, result)
|
21
|
+
session.transmit(message.payload)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def yield_method(invocation)
|
26
|
+
klass = Struct.new(:invocation, :session) do
|
27
|
+
def progress(*args, **kwargs)
|
28
|
+
message = Message::Yield.new(invocation.request_id, { progress: true }, *args, **kwargs)
|
29
|
+
session.transmit(message.payload)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
klass.new(invocation, session)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
require_relative "subscribed"
|
5
|
+
|
6
|
+
module Wamp
|
7
|
+
module Manager
|
8
|
+
module Event
|
9
|
+
# Subscribe Message Event
|
10
|
+
class Subscribe < Base
|
11
|
+
def subscription
|
12
|
+
@subscription ||= Subscription.new(__getobj__, session)
|
13
|
+
end
|
14
|
+
|
15
|
+
def add_event_listener(listener, &block)
|
16
|
+
session.on(listen_event_name) do |subscribed, error|
|
17
|
+
subscription.subscription_id = subscribed.subscription_id if subscribed
|
18
|
+
|
19
|
+
session.off(listen_event_name)
|
20
|
+
block.call(subscribed, error) if block_given?
|
21
|
+
add_subscribed_event_listner(subscribed, listener)
|
22
|
+
end
|
23
|
+
session.transmit(payload)
|
24
|
+
end
|
25
|
+
|
26
|
+
def listen_event_name
|
27
|
+
"request_#{request_id}"
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def add_subscribed_event_listner(message, listener)
|
33
|
+
manager = Subscribed.new(message, session)
|
34
|
+
manager.add_event_listener(listener)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Wamp
|
6
|
+
module Manager
|
7
|
+
module Event
|
8
|
+
# Subscribed Message Event
|
9
|
+
class Subscribed < Base
|
10
|
+
def add_event_listener(listener)
|
11
|
+
session.on(listen_event_name) do |event|
|
12
|
+
listener.call(*event.args, **event.kwargs)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def emit_event_name
|
17
|
+
"request_#{request_id}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def listen_event_name
|
21
|
+
"event_#{subscription_id}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Wamp
|
6
|
+
module Manager
|
7
|
+
module Event
|
8
|
+
# Unregister Message Event
|
9
|
+
class Unregister < Base
|
10
|
+
def add_event_listener(&block)
|
11
|
+
session.transmit(payload)
|
12
|
+
session.on(listen_event_name) do |unregistered, error|
|
13
|
+
block&.call(unregistered, error)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Wamp
|
6
|
+
module Manager
|
7
|
+
module Event
|
8
|
+
# Unsubscribe Message Event
|
9
|
+
class Unsubscribe < Base
|
10
|
+
def add_event_listener(handler)
|
11
|
+
session.on(listen_event_name) do |unsubscribed, error|
|
12
|
+
session.off(listen_event_name)
|
13
|
+
handler&.call(unsubscribed, error)
|
14
|
+
remove_event_listening
|
15
|
+
end
|
16
|
+
session.transmit(payload)
|
17
|
+
end
|
18
|
+
|
19
|
+
def remove_event_listening
|
20
|
+
session.off(clear_event_name)
|
21
|
+
end
|
22
|
+
|
23
|
+
def clear_event_name
|
24
|
+
"event_#{subscription_id}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Wamp
|
6
|
+
module Manager
|
7
|
+
module Event
|
8
|
+
# Welcome Message Event
|
9
|
+
class Welcome < Base
|
10
|
+
def emit_event_name
|
11
|
+
:join
|
12
|
+
end
|
13
|
+
|
14
|
+
def emit_event(welcome)
|
15
|
+
session.session_id = welcome.session_id
|
16
|
+
session.emit(emit_event_name, session)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "event/hello"
|
4
|
+
require_relative "event/welcome"
|
5
|
+
require_relative "event/abort"
|
6
|
+
require_relative "event/challenge"
|
7
|
+
require_relative "event/authenticate"
|
8
|
+
require_relative "event/goodbye"
|
9
|
+
|
10
|
+
require_relative "event/error"
|
11
|
+
|
12
|
+
require_relative "event/subscribe"
|
13
|
+
require_relative "event/subscribed"
|
14
|
+
require_relative "event/unsubscribe"
|
15
|
+
require_relative "event/unsubscribed"
|
16
|
+
require_relative "event/publish"
|
17
|
+
require_relative "event/published"
|
18
|
+
require_relative "event/event"
|
19
|
+
|
20
|
+
require_relative "event/call"
|
21
|
+
require_relative "event/result"
|
22
|
+
|
23
|
+
require_relative "event/register"
|
24
|
+
require_relative "event/registered"
|
25
|
+
|
26
|
+
require_relative "event/unregister"
|
27
|
+
require_relative "event/unregistered"
|
28
|
+
|
29
|
+
require_relative "event/invocation"
|
30
|
+
require_relative "event/yield"
|
31
|
+
|
32
|
+
module Wamp
|
33
|
+
module Manager
|
34
|
+
# handles creating correct event managers
|
35
|
+
module Event
|
36
|
+
# methods responsbile for instantiating correct event
|
37
|
+
module ClassMethods
|
38
|
+
def resolve(message, session)
|
39
|
+
klass_name = demodulize(message.class.name)
|
40
|
+
klass = constantize("Wamp::Manager::Event::#{klass_name}")
|
41
|
+
klass.new(message, session)
|
42
|
+
end
|
43
|
+
|
44
|
+
def demodulize(path)
|
45
|
+
path = path.to_s
|
46
|
+
if i = path.rindex("::") # rubocop:disable Lint/AssignmentInCondition
|
47
|
+
path[(i + 2), path.length]
|
48
|
+
else
|
49
|
+
path
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def constantize(camel_cased_word)
|
54
|
+
Object.const_get(camel_cased_word)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
extend ClassMethods
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|