doodle_rails 0.0.1 → 0.0.2
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/app/controllers/doodle/auth_controller.rb +3 -3
- data/app/controllers/doodle/channels_controller.rb +10 -0
- data/app/controllers/doodle/chat_controller.rb +30 -14
- data/app/controllers/doodle/conversations_controller.rb +15 -3
- data/app/controllers/doodle/keywords_controller.rb +15 -2
- data/app/controllers/doodle/messages_controller.rb +28 -0
- data/app/controllers/doodle/users_controller.rb +1 -2
- data/app/helpers/doodle/keywords_helper.rb +9 -0
- data/app/helpers/doodle/reports_helper.rb +37 -0
- data/app/models/doodle/channel.rb +4 -0
- data/app/models/doodle/history.rb +35 -0
- data/app/models/doodle/protocol.rb +22 -10
- data/app/models/doodle/user/analyst.rb +6 -2
- data/app/models/doodle/user.rb +5 -1
- data/app/models/doodle/user_channel.rb +11 -0
- data/app/services/doodle/keyword/action/finder_service.rb +8 -0
- data/app/services/doodle/keyword/finder_service.rb +5 -1
- data/app/services/doodle/keyword/text/finder_service.rb +8 -0
- data/app/services/doodle/protocol/finalizer_service.rb +1 -0
- data/app/services/doodle/protocol/finder_service.rb +23 -4
- data/app/services/layer/conversation/finder_service.rb +11 -0
- data/config/routes.rb +11 -11
- data/db/migrate/20160211202503_create_doodle_user_channels.rb +1 -1
- data/db/migrate/20160320142137_create_doodle_users.rb +3 -2
- data/db/migrate/20160320175917_create_doodle_protocols.rb +2 -0
- data/lib/doodle/version.rb +1 -1
- data/test/dummy/tmp/pids/server.pid +1 -0
- metadata +46 -38
- data/test/dummy/config/private_key.pem +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 579622ab1e8deccb39248454da64333e6f4c9d7e
|
4
|
+
data.tar.gz: 55bd433fcfd2b66144591e8b535a4eb9b5102eec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2f53e6fd36837eea86fb38b8a00aaec571bbcf15bef048f2cb78f0b66d6c6cc021b271ba12b7ddf65f33f959fe8694bb29ffd27c6c7ad63f634bfad92f12d75
|
7
|
+
data.tar.gz: 31394809f20813d159f903e1a604797cdffbf5db2e81c39dff78cc32eabe6b6830c6a25a8c98f04ecb3f81169ae838c80b6914a8dab3c307c17a70fa183fb7ea
|
@@ -3,17 +3,17 @@ require_dependency "doodle/application_controller"
|
|
3
3
|
module Doodle
|
4
4
|
class AuthController < ApplicationController
|
5
5
|
def authenticate
|
6
|
-
@user = User.where(
|
6
|
+
@user = User.where(password: auth_params[:password], login: auth_params[:login], type: auth_params[:type]).first
|
7
7
|
|
8
8
|
if @user.present?
|
9
|
-
render json: { login: @user.login, session_token: token_creator_service.token }
|
9
|
+
render json: { id: @user.id, login: @user.login, session_token: token_creator_service.token }
|
10
10
|
else
|
11
11
|
render json: { error: "When authenticate user" }
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
def auth_params
|
16
|
-
@params ||= params.require(:auth).permit(:login, :
|
16
|
+
@params ||= params.require(:auth).permit(:login, :password, :type)
|
17
17
|
end
|
18
18
|
|
19
19
|
def token_creator_service
|
@@ -2,33 +2,43 @@ require_dependency "doodle/application_controller"
|
|
2
2
|
|
3
3
|
module Doodle
|
4
4
|
class ChatController < ApplicationController
|
5
|
+
before_filter :find_analyst
|
5
6
|
|
6
7
|
def has_protocols?
|
7
|
-
protocols =
|
8
|
-
|
8
|
+
protocols = protocol_finder_service.waiting_on_user_channels(@user)
|
9
|
+
|
10
|
+
render json: { has_protocols: protocols.count }, status: 200
|
9
11
|
end
|
10
12
|
|
11
13
|
def next
|
12
|
-
|
13
|
-
|
14
|
-
if join_service.break_limit? && protocol.blank?
|
15
|
-
render json: { error: 'Analyst already have limit of protocols in progress' }, status: 422
|
14
|
+
if @user.blank?
|
15
|
+
render json: { error: 'Dont found this analyst' }
|
16
16
|
else
|
17
|
-
|
18
|
-
|
17
|
+
protocol = protocol_finder_service.next_for_user(@user)
|
18
|
+
|
19
|
+
if protocol.blank?
|
20
|
+
render json: { error: 'Dont found protocols for this channel' }
|
21
|
+
else
|
22
|
+
join_service = chat_join_service(protocol, @user)
|
23
|
+
if join_service.break_limit? && protocol.blank?
|
24
|
+
render json: { error: 'Analyst already have limit of protocols in progress' }, status: 422
|
25
|
+
else
|
26
|
+
join_service.join(protocol.channel_id)
|
27
|
+
render json: { conversation: protocol.conversation_id }, status: 200
|
28
|
+
end
|
29
|
+
end
|
19
30
|
end
|
20
31
|
end
|
21
32
|
|
22
33
|
def finalize
|
23
|
-
|
24
|
-
protocol = protocol_finder_service.find_by_conversation(params.require(:id))
|
34
|
+
protocol = protocol_finder_service.find_by_conversation(params.require(:conversation_id))
|
25
35
|
|
26
|
-
if
|
27
|
-
render json: { text: "Protocol
|
36
|
+
if protocol.blank?
|
37
|
+
render json: { text: "Protocol isn't found"}, status: 422
|
28
38
|
else
|
29
39
|
|
30
40
|
protocol_finalizer_service(protocol).call
|
31
|
-
chat_join_service(protocol, user).out(protocol.channel.name)
|
41
|
+
chat_join_service(protocol, protocol.user).out(protocol.channel.name) if params.require(:login)
|
32
42
|
|
33
43
|
render json: { id: protocol.id, text: "Protocol finalized with success" }
|
34
44
|
end
|
@@ -45,6 +55,12 @@ module Doodle
|
|
45
55
|
def protocol_finder_service
|
46
56
|
@finder_service ||= Protocol::FinderService.new
|
47
57
|
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def find_analyst
|
62
|
+
@user = User::Analyst.find_by_login(params.require(:login))
|
63
|
+
end
|
64
|
+
|
48
65
|
end
|
49
66
|
end
|
50
|
-
|
@@ -8,14 +8,27 @@ module Doodle
|
|
8
8
|
if channel.present?
|
9
9
|
conversation = conversation_creator_service([params.require(:login)]).call
|
10
10
|
protocol = protocol_creator_service(channel, conversation).call
|
11
|
-
render json: { protocol_id: protocol.id,
|
11
|
+
render json: { protocol_id: protocol.id, protocol_status: protocol.status, channel: channel.name, conversation_id: conversation.id }, status: 201
|
12
12
|
else
|
13
13
|
render json: { error: 'Channel dont found, Please create channel with this name first' }
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
def messages
|
18
|
+
if params.permit(:conversation_id).present?
|
19
|
+
@conversation = finder_service.call
|
20
|
+
render json: @conversation.messages.to_json, status: 200
|
21
|
+
else
|
22
|
+
render json: { error: 'conversation_id can\'t be blank'}, status: 404
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def finder_service
|
27
|
+
@finder_service ||= Layer::Conversation::FinderService.new("layer:///conversations/#{params.require(:conversation_id)}")
|
28
|
+
end
|
29
|
+
|
17
30
|
def channel_finder_service
|
18
|
-
@channel_finder_service ||= Channel::FinderService.new(
|
31
|
+
@channel_finder_service ||= Channel::FinderService.new(id: params.require(:channel_id))
|
19
32
|
end
|
20
33
|
|
21
34
|
def protocol_creator_service(channel, conversation)
|
@@ -27,4 +40,3 @@ module Doodle
|
|
27
40
|
end
|
28
41
|
end
|
29
42
|
end
|
30
|
-
|
@@ -17,16 +17,29 @@ module Doodle
|
|
17
17
|
if params[:keyword].present?
|
18
18
|
render json: finder_service.to_json
|
19
19
|
else
|
20
|
-
render json: Keyword.all.to_json
|
20
|
+
render json: Keyword::Text.all.to_json
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
def all_actions
|
25
|
+
render json: Doodle::Keyword::Action.all
|
26
|
+
end
|
27
|
+
|
28
|
+
def action
|
29
|
+
@keyword = Doodle::Keyword::Action::FinderService.new(name: params.require(:name)).call.first
|
30
|
+
if @keyword
|
31
|
+
render json: Doodle::KeywordsHelper.stub_action(@keyword)
|
32
|
+
else
|
33
|
+
render json: {error: 'Missing Action Keyword'}, status: 404
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
24
37
|
def keyword_params
|
25
38
|
params.require(:keyword).permit(:name, :value, :type)
|
26
39
|
end
|
27
40
|
|
28
41
|
def finder_service
|
29
|
-
@finder_service || Doodle::Keyword::FinderService.new(keyword_params)
|
42
|
+
@finder_service || Doodle::Keyword::Text::FinderService.new(keyword_params)
|
30
43
|
end
|
31
44
|
end
|
32
45
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require_dependency "doodle/application_controller"
|
2
|
+
|
3
|
+
module Doodle
|
4
|
+
class MessagesController < ApplicationController
|
5
|
+
def create
|
6
|
+
conversation = Layer::Conversation.find(conversation_params[:id])
|
7
|
+
|
8
|
+
if !message_params[:parts][0]['body'].blank?
|
9
|
+
message = conversation.messages.create(message_params)
|
10
|
+
render json: message, status: 201
|
11
|
+
else
|
12
|
+
render text: 'body cant be blank', status: 422
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
def conversation_params
|
18
|
+
params.require(:conversation)
|
19
|
+
end
|
20
|
+
|
21
|
+
def message_params
|
22
|
+
{
|
23
|
+
sender: conversation_params[:sender],
|
24
|
+
parts: conversation_params[:parts].respond_to?(:values) ? conversation_params[:parts].values : conversation_params[:parts]
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -18,7 +18,6 @@ module Doodle
|
|
18
18
|
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
21
|
def create
|
23
22
|
user = User.new(users_params)
|
24
23
|
if user.save
|
@@ -29,7 +28,7 @@ module Doodle
|
|
29
28
|
end
|
30
29
|
|
31
30
|
def users_params
|
32
|
-
params.require(:user).permit(:login, :
|
31
|
+
params.require(:user).permit(:login, :password, :type)
|
33
32
|
end
|
34
33
|
end
|
35
34
|
end
|
@@ -1,4 +1,13 @@
|
|
1
1
|
module Doodle
|
2
2
|
module KeywordsHelper
|
3
|
+
module_function
|
4
|
+
|
5
|
+
def stub_action(keyword)
|
6
|
+
{
|
7
|
+
name: keyword.name,
|
8
|
+
nodes: { imap: true, pop: true, smtp: false },
|
9
|
+
options: { postal: '89% Utilizado', domain: 'Locaweb MX', anti_spam: 'ativo' }
|
10
|
+
}
|
11
|
+
end
|
3
12
|
end
|
4
13
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Doodle
|
2
|
+
module ReportsHelper
|
3
|
+
module_function
|
4
|
+
|
5
|
+
def online_users_and_protocols_in_progress
|
6
|
+
result = []
|
7
|
+
protocols_in_progress = Doodle::Protocol.number_by_user(Doodle::UserChannel.user_by_status(UserChannel::STATUSES[:online]))
|
8
|
+
protocols_in_progress.each do |k, v|
|
9
|
+
result << {login: User.find(k).login, number: v}
|
10
|
+
end
|
11
|
+
result
|
12
|
+
end
|
13
|
+
|
14
|
+
def waiting_users
|
15
|
+
result = []
|
16
|
+
Doodle::User::Analyst.inative.pluck(:login).each do |v|
|
17
|
+
result << {login: v}
|
18
|
+
end
|
19
|
+
result
|
20
|
+
end
|
21
|
+
|
22
|
+
def protocol_with_status(status)
|
23
|
+
result = []
|
24
|
+
Doodle::Channel.all.pluck(:name).each do |n|
|
25
|
+
result << {name: n, number: Protocol.in_channel_with_status(n, status).count}
|
26
|
+
end
|
27
|
+
result
|
28
|
+
end
|
29
|
+
|
30
|
+
def service_metrics
|
31
|
+
{
|
32
|
+
waiting_time: "#{Doodle::Protocol.average_waiting_time.round / 60.to_f} min",
|
33
|
+
service_time: "#{Doodle::Protocol.average_service_time.round / 60.to_f} min"
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -5,6 +5,10 @@ module Doodle
|
|
5
5
|
|
6
6
|
has_many :protocols
|
7
7
|
|
8
|
+
accepts_nested_attributes_for :user_channels, allow_destroy: true
|
9
|
+
|
10
|
+
scope :has_user?, -> (channel_name, user_login) { joins(:users).where(name: channel_name, 'doodle_users.login' => user_login) }
|
11
|
+
|
8
12
|
def self.find_protocols_by_channel(name)
|
9
13
|
Channel.find_by_name(name).protocols
|
10
14
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Doodle
|
2
|
+
class History
|
3
|
+
def initialize(conversation)
|
4
|
+
@conversation = conversation
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.find(conversation_id)
|
8
|
+
self.new(Layer::Conversation.find("layer:///conversations/#{conversation_id}"))
|
9
|
+
end
|
10
|
+
|
11
|
+
def messages
|
12
|
+
@conversation.messages.entries.map do |e|
|
13
|
+
Message.new(e)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Message
|
19
|
+
def initialize(entries)
|
20
|
+
@entries = entries
|
21
|
+
end
|
22
|
+
|
23
|
+
def parts
|
24
|
+
@entries.parts.map { |p| {body: p.try(:[], 'body'), mime_type: p.try(:[], 'mime_type')} }
|
25
|
+
end
|
26
|
+
|
27
|
+
def sender
|
28
|
+
@entries.sender.try(:[], 'user_id') || @entries.sender.try(:[], 'name')
|
29
|
+
end
|
30
|
+
|
31
|
+
def sent_at
|
32
|
+
@entries.sent_at
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -4,6 +4,21 @@ module Doodle
|
|
4
4
|
belongs_to :channel
|
5
5
|
belongs_to :user
|
6
6
|
|
7
|
+
STATUSES = {
|
8
|
+
waiting: 'waiting',
|
9
|
+
in_progress: 'in_progress',
|
10
|
+
finalized: 'finalized'
|
11
|
+
}
|
12
|
+
|
13
|
+
scope :by_user, ->(user_ids) { where(user_id: user_ids) }
|
14
|
+
scope :by_date, ->(start_date = Time.now.beginning_of_month, end_date = Time.now) { where(created_at: start_date...end_date) }
|
15
|
+
scope :by_status, ->(status) { by_date.where(status: status) }
|
16
|
+
scope :number_by_user, ->(user_ids) { by_status(STATUSES[:in_progress]).by_user(user_ids).group(:user_id).count }
|
17
|
+
scope :in_channel_with_status, -> (channel, status) { by_status(status).joins(:channel).where("#{Doodle::Channel.table_name}.name" => channel) }
|
18
|
+
scope :in_channels_with_status, -> (channels, status) { by_status(status).joins(:channel).where(:"#{Doodle::Channel.table_name}.id" => channels) }
|
19
|
+
scope :average_service_time, -> () { by_date.average(:duration) }
|
20
|
+
scope :average_waiting_time, -> () { by_date.average(:waiting_time) }
|
21
|
+
|
7
22
|
aasm column: :status do
|
8
23
|
state :waiting, initial: true
|
9
24
|
state :in_progress
|
@@ -13,7 +28,7 @@ module Doodle
|
|
13
28
|
|
14
29
|
event :progress do
|
15
30
|
before do
|
16
|
-
self.update(in_progress_at: Time.now)
|
31
|
+
self.update(in_progress_at: Time.now, waiting_time: (Time.now - self.created_at))
|
17
32
|
end
|
18
33
|
|
19
34
|
transitions from: :waiting, to: :in_progress
|
@@ -21,17 +36,16 @@ module Doodle
|
|
21
36
|
|
22
37
|
event :finalize do
|
23
38
|
before do
|
24
|
-
self.update(finalized_at: Time.now)
|
39
|
+
self.update(finalized_at: Time.now, duration: (Time.now - self.created_at))
|
25
40
|
end
|
26
41
|
|
27
42
|
transitions from: :in_progress, to: :finalized
|
28
43
|
end
|
29
44
|
end
|
30
45
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
(self.finalized_at - self.created_at).round
|
46
|
+
def duration_min
|
47
|
+
return nil if self.finalized_at.blank?
|
48
|
+
"#{(self.finalized_at - self.created_at).round / 60} min"
|
35
49
|
end
|
36
50
|
|
37
51
|
def log_status_change
|
@@ -55,10 +69,8 @@ module Doodle
|
|
55
69
|
conversation.save
|
56
70
|
end
|
57
71
|
|
58
|
-
def
|
59
|
-
|
60
|
-
protocol.progress!
|
61
|
-
protocol
|
72
|
+
def conversation
|
73
|
+
self.conversation_id.split('/').last
|
62
74
|
end
|
63
75
|
|
64
76
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module Doodle
|
2
2
|
class User::Analyst < User
|
3
3
|
|
4
|
-
def enter_in_channel(
|
5
|
-
user_channel =
|
4
|
+
def enter_in_channel(channel_id)
|
5
|
+
user_channel = self.user_channels.where(channel_id: channel_id).first
|
6
6
|
user_channel.turn_online! if user_channel.may_turn_online?
|
7
7
|
end
|
8
8
|
|
@@ -14,5 +14,9 @@ module Doodle
|
|
14
14
|
def user_channel_by_name(name)
|
15
15
|
self.user_channels.joins(:channel).where('doodle_channels.name' => name).first
|
16
16
|
end
|
17
|
+
|
18
|
+
def break_limit_concurrent_protocols?
|
19
|
+
self.protocols.where.not(status: 'finalized').count > self.concurrent_protocols
|
20
|
+
end
|
17
21
|
end
|
18
22
|
end
|
data/app/models/doodle/user.rb
CHANGED
@@ -2,8 +2,12 @@ module Doodle
|
|
2
2
|
class User < ActiveRecord::Base
|
3
3
|
has_many :user_channels
|
4
4
|
has_many :channels, through: :user_channels
|
5
|
+
has_many :protocols
|
5
6
|
|
7
|
+
scope :inative, -> { User.where.not(id: UserChannel.user_by_status('online')) }
|
6
8
|
|
7
|
-
|
9
|
+
def has_permission?(channel)
|
10
|
+
Channel.has_user?(channel, self.login).count > 0
|
11
|
+
end
|
8
12
|
end
|
9
13
|
end
|
@@ -5,6 +5,17 @@ module Doodle
|
|
5
5
|
belongs_to :user
|
6
6
|
belongs_to :channel
|
7
7
|
|
8
|
+
accepts_nested_attributes_for :user
|
9
|
+
accepts_nested_attributes_for :channel
|
10
|
+
|
11
|
+
scope :by_status, ->(status) { where(status: status) }
|
12
|
+
scope :user_by_status, ->(status) { by_status(status).group(:user_id).pluck(:user_id).compact }
|
13
|
+
|
14
|
+
STATUSES = {
|
15
|
+
online: 'online',
|
16
|
+
offline: 'offline'
|
17
|
+
}
|
18
|
+
|
8
19
|
aasm column: :status do
|
9
20
|
state :offline, initial: true
|
10
21
|
state :online
|
@@ -1,13 +1,32 @@
|
|
1
1
|
module Doodle
|
2
2
|
class Protocol::FinderService
|
3
|
-
def next
|
4
|
-
Protocol.
|
3
|
+
def next(channel)
|
4
|
+
protocol = Protocol.in_channel_with_status(user_channels_ids(user), Protocol::STATUSES[:waiting]).first
|
5
|
+
return nil if protocol.blank?
|
6
|
+
protocol.progress!
|
7
|
+
protocol
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
def next_for_user(user)
|
12
|
+
protocol = Protocol.in_channels_with_status(user_channels_ids(user), Protocol::STATUSES[:waiting]).first
|
13
|
+
return nil if protocol.blank?
|
14
|
+
protocol.progress!
|
15
|
+
protocol
|
16
|
+
end
|
17
|
+
|
18
|
+
def waiting_on_user_channels(user)
|
19
|
+
Protocol.in_channels_with_status(user_channels_ids(user), Protocol::STATUSES[:waiting])
|
5
20
|
end
|
6
21
|
|
7
22
|
def find_by_conversation(id)
|
8
23
|
Protocol.find_by_conversation_id(id)
|
9
24
|
end
|
10
|
-
end
|
11
|
-
end
|
12
25
|
|
26
|
+
private
|
27
|
+
def user_channels_ids(user)
|
28
|
+
user.channels.pluck(:id)
|
29
|
+
end
|
13
30
|
|
31
|
+
end
|
32
|
+
end
|
data/config/routes.rb
CHANGED
@@ -3,23 +3,23 @@ Doodle::Engine.routes.draw do
|
|
3
3
|
resources :users, only: [:index, :create]
|
4
4
|
resources :keywords, only: [:index, :create]
|
5
5
|
|
6
|
+
get 'keywords/action', to: 'keywords#action'
|
7
|
+
get 'keywords/all_actions', to: 'keywords#all_actions'
|
8
|
+
|
6
9
|
post 'authenticate', to: 'auth#authenticate'
|
7
|
-
|
10
|
+
|
8
11
|
|
9
12
|
post '/conversations', to: 'conversations#create'
|
10
|
-
post '/chat/:channel/next', to: 'chat#next'
|
13
|
+
#post '/chat/:channel/next', to: 'chat#next'
|
14
|
+
get '/chat/:login/has_protocols', to: 'chat#has_protocols?'
|
15
|
+
post '/chat/:login/next', to: 'chat#next'
|
11
16
|
|
12
17
|
post '/chat/finalize', to: 'chat#finalize'
|
13
18
|
|
14
|
-
#
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
#
|
19
|
-
# post '/users/:channel/join', to: 'users#join'
|
20
|
-
#
|
21
|
-
# post '/conversations/messages', to: 'conversations#messages'
|
22
|
-
# post '/messages', to: 'messages#create'
|
19
|
+
post '/conversations/messages', to: 'conversations#messages'
|
20
|
+
post '/messages', to: 'messages#create'
|
21
|
+
|
22
|
+
get '/channels', to: 'channels#index'
|
23
23
|
|
24
24
|
|
25
25
|
end
|
@@ -4,7 +4,7 @@ class CreateDoodleUserChannels < ActiveRecord::Migration
|
|
4
4
|
t.belongs_to :user, index: true, foreign_key: true
|
5
5
|
t.belongs_to :channel, index: true, foreign_key: true
|
6
6
|
t.string :status
|
7
|
-
t.
|
7
|
+
t.boolean :enable
|
8
8
|
|
9
9
|
t.timestamps null: false
|
10
10
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
class CreateDoodleUsers < ActiveRecord::Migration
|
2
2
|
def change
|
3
3
|
create_table :doodle_users do |t|
|
4
|
-
t.string :login
|
5
|
-
t.string :
|
4
|
+
t.string :login, unique: true
|
5
|
+
t.string :password
|
6
6
|
t.string :type
|
7
|
+
t.integer :concurrent_protocols
|
7
8
|
|
8
9
|
t.timestamps null: false
|
9
10
|
end
|
data/lib/doodle/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
6929
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: doodle_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel Malaquias
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -58,15 +58,19 @@ files:
|
|
58
58
|
- app/assets/stylesheets/doodle/users.css
|
59
59
|
- app/controllers/doodle/application_controller.rb
|
60
60
|
- app/controllers/doodle/auth_controller.rb
|
61
|
+
- app/controllers/doodle/channels_controller.rb
|
61
62
|
- app/controllers/doodle/chat_controller.rb
|
62
63
|
- app/controllers/doodle/conversations_controller.rb
|
63
64
|
- app/controllers/doodle/keywords_controller.rb
|
65
|
+
- app/controllers/doodle/messages_controller.rb
|
64
66
|
- app/controllers/doodle/users_controller.rb
|
65
67
|
- app/helpers/doodle/application_helper.rb
|
66
68
|
- app/helpers/doodle/auth_helper.rb
|
67
69
|
- app/helpers/doodle/keywords_helper.rb
|
70
|
+
- app/helpers/doodle/reports_helper.rb
|
68
71
|
- app/helpers/doodle/users_helper.rb
|
69
72
|
- app/models/doodle/channel.rb
|
73
|
+
- app/models/doodle/history.rb
|
70
74
|
- app/models/doodle/keyword.rb
|
71
75
|
- app/models/doodle/keyword/action.rb
|
72
76
|
- app/models/doodle/keyword/text.rb
|
@@ -77,11 +81,14 @@ files:
|
|
77
81
|
- app/models/doodle/user_channel.rb
|
78
82
|
- app/services/doodle/channel/finder_service.rb
|
79
83
|
- app/services/doodle/chat/join_service.rb
|
84
|
+
- app/services/doodle/keyword/action/finder_service.rb
|
80
85
|
- app/services/doodle/keyword/finder_service.rb
|
86
|
+
- app/services/doodle/keyword/text/finder_service.rb
|
81
87
|
- app/services/doodle/protocol/creator_service.rb
|
82
88
|
- app/services/doodle/protocol/finalizer_service.rb
|
83
89
|
- app/services/doodle/protocol/finder_service.rb
|
84
90
|
- app/services/layer/conversation/creator_service.rb
|
91
|
+
- app/services/layer/conversation/finder_service.rb
|
85
92
|
- app/services/layer/token_creator_service.rb
|
86
93
|
- app/views/layouts/doodle/application.html.erb
|
87
94
|
- config/initializers/layer.rb
|
@@ -127,7 +134,6 @@ files:
|
|
127
134
|
- test/dummy/config/initializers/session_store.rb
|
128
135
|
- test/dummy/config/initializers/wrap_parameters.rb
|
129
136
|
- test/dummy/config/locales/en.yml
|
130
|
-
- test/dummy/config/private_key.pem
|
131
137
|
- test/dummy/config/routes.rb
|
132
138
|
- test/dummy/config/secrets.yml
|
133
139
|
- test/dummy/db/development.sqlite3
|
@@ -137,6 +143,7 @@ files:
|
|
137
143
|
- test/dummy/public/422.html
|
138
144
|
- test/dummy/public/500.html
|
139
145
|
- test/dummy/public/favicon.ico
|
146
|
+
- test/dummy/tmp/pids/server.pid
|
140
147
|
- test/fixtures/doodle/keywords.yml
|
141
148
|
- test/fixtures/doodle/users.yml
|
142
149
|
- test/integration/navigation_test.rb
|
@@ -169,50 +176,51 @@ specification_version: 4
|
|
169
176
|
summary: A Rails Engine for vists based in Layer Plataform
|
170
177
|
test_files:
|
171
178
|
- test/controllers/doodle/auth_controller_test.rb
|
172
|
-
- test/controllers/doodle/users_controller_test.rb
|
173
179
|
- test/controllers/doodle/keywords_controller_test.rb
|
174
|
-
- test/
|
175
|
-
- test/
|
176
|
-
- test/dummy/public/422.html
|
177
|
-
- test/dummy/public/404.html
|
178
|
-
- test/dummy/public/500.html
|
179
|
-
- test/dummy/log/development.log
|
180
|
-
- test/dummy/bin/setup
|
181
|
-
- test/dummy/bin/bundle
|
182
|
-
- test/dummy/bin/rake
|
183
|
-
- test/dummy/bin/rails
|
184
|
-
- test/dummy/app/controllers/application_controller.rb
|
185
|
-
- test/dummy/app/views/layouts/application.html.erb
|
180
|
+
- test/controllers/doodle/users_controller_test.rb
|
181
|
+
- test/doodle_test.rb
|
186
182
|
- test/dummy/app/assets/javascripts/application.js
|
187
183
|
- test/dummy/app/assets/stylesheets/application.css
|
184
|
+
- test/dummy/app/controllers/application_controller.rb
|
188
185
|
- test/dummy/app/helpers/application_helper.rb
|
189
|
-
- test/dummy/
|
190
|
-
- test/dummy/
|
191
|
-
- test/dummy/
|
192
|
-
- test/dummy/
|
193
|
-
- test/dummy/
|
194
|
-
- test/dummy/config/
|
186
|
+
- test/dummy/app/views/layouts/application.html.erb
|
187
|
+
- test/dummy/bin/bundle
|
188
|
+
- test/dummy/bin/rails
|
189
|
+
- test/dummy/bin/rake
|
190
|
+
- test/dummy/bin/setup
|
191
|
+
- test/dummy/config/application.rb
|
192
|
+
- test/dummy/config/boot.rb
|
193
|
+
- test/dummy/config/database.yml
|
194
|
+
- test/dummy/config/environment.rb
|
195
|
+
- test/dummy/config/environments/development.rb
|
196
|
+
- test/dummy/config/environments/production.rb
|
197
|
+
- test/dummy/config/environments/test.rb
|
198
|
+
- test/dummy/config/initializers/assets.rb
|
195
199
|
- test/dummy/config/initializers/backtrace_silencers.rb
|
196
|
-
- test/dummy/config/initializers/
|
200
|
+
- test/dummy/config/initializers/cookies_serializer.rb
|
197
201
|
- test/dummy/config/initializers/filter_parameter_logging.rb
|
202
|
+
- test/dummy/config/initializers/inflections.rb
|
198
203
|
- test/dummy/config/initializers/mime_types.rb
|
199
|
-
- test/dummy/config/initializers/assets.rb
|
200
204
|
- test/dummy/config/initializers/session_store.rb
|
201
|
-
- test/dummy/config/
|
202
|
-
- test/dummy/config/boot.rb
|
203
|
-
- test/dummy/config/application.rb
|
204
|
-
- test/dummy/config/routes.rb
|
205
|
-
- test/dummy/config/private_key.pem
|
206
|
-
- test/dummy/config/environments/production.rb
|
207
|
-
- test/dummy/config/environments/test.rb
|
208
|
-
- test/dummy/config/environments/development.rb
|
209
|
-
- test/dummy/config/database.yml
|
205
|
+
- test/dummy/config/initializers/wrap_parameters.rb
|
210
206
|
- test/dummy/config/locales/en.yml
|
211
|
-
- test/dummy/config/
|
212
|
-
- test/
|
213
|
-
- test/
|
214
|
-
- test/
|
207
|
+
- test/dummy/config/routes.rb
|
208
|
+
- test/dummy/config/secrets.yml
|
209
|
+
- test/dummy/config.ru
|
210
|
+
- test/dummy/db/development.sqlite3
|
211
|
+
- test/dummy/db/schema.rb
|
212
|
+
- test/dummy/log/development.log
|
213
|
+
- test/dummy/public/404.html
|
214
|
+
- test/dummy/public/422.html
|
215
|
+
- test/dummy/public/500.html
|
216
|
+
- test/dummy/public/favicon.ico
|
217
|
+
- test/dummy/Rakefile
|
218
|
+
- test/dummy/README.rdoc
|
219
|
+
- test/dummy/tmp/pids/server.pid
|
215
220
|
- test/fixtures/doodle/keywords.yml
|
221
|
+
- test/fixtures/doodle/users.yml
|
216
222
|
- test/integration/navigation_test.rb
|
223
|
+
- test/models/doodle/keyword_test.rb
|
224
|
+
- test/models/doodle/user_test.rb
|
217
225
|
- test/test_helper.rb
|
218
|
-
|
226
|
+
has_rdoc:
|
@@ -1,15 +0,0 @@
|
|
1
|
-
-----BEGIN RSA PRIVATE KEY-----
|
2
|
-
MIICXQIBAAKBgQCSD4Ga2raKX4Ao1OVDUC4vfhbe4pjFh2Y+f5xzsiJ08qZ1Pdcz
|
3
|
-
Lt42UboOaObjXRqv1KSHsukwXIVQO+HdfOILf5uq6rGVdeEQpaSMymtChP4s767U
|
4
|
-
zjBdABYWqEyKiX9zP5aMDmUToQYsW0Lxhzn6qq+bLHkr2CklloJoQkU8lQIDAQAB
|
5
|
-
AoGAZDt753bb+c1bt6mRw0XMzA6tRzsdN8CZK56LEOJXvwWdsatEeP1axNAE7EqU
|
6
|
-
18ZWv/8fAXiHigaT/eF6OHKw88WyYUAYWS0L0PrIDT/+KQj86xZoUVGgz8nXHnaw
|
7
|
-
2TwFx1xX4jPppAP+3DznvFnU2mnhsMLEMlMY1uLsaAuuCsECQQDBlXlOlYiFW/kf
|
8
|
-
ZtDdlaxqR4/M0a7AIl8IB75cngQ0SC8ziTXFGiYmcnDgKoy3lu4UIUCY3g7lM9YZ
|
9
|
-
AxWl8e2dAkEAwSduQ1Bau3aQuAThZAsTWTa1zG0Dqb8RUZPTIkffV5nP8t/L6R5Y
|
10
|
-
0AXnm6HF5jpeXn+4pJX+y8FaNzP20W7VWQJAZg9gPUYpC+ZJmXyjca+Pjxjbf6is
|
11
|
-
8S8t2xX6DupgXRARkqIsbxYyNuLvD8BfIAu6yXIelHm+cKi7n8Q4jZzXIQJBAJKs
|
12
|
-
RJitHhkYcdCrNBRqLKkkWG0BozR1OMt/u2ZeuYSl8jj2JLvDJaHhufx+ne60CBEu
|
13
|
-
X6HrnO5QxxcASL7EsRECQQC8Y06TKIZZb8sPMIDsHePrbGemgiNT8LB5o0BpXZXy
|
14
|
-
f71b9gdd6sRTK348Auje62StD1kRo/DDyqHozXko4L9B
|
15
|
-
-----END RSA PRIVATE KEY-----
|