lita-service 0.1.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 +7 -0
- data/.gitignore +18 -0
- data/.rubocop.yml +5 -0
- data/.ruby-version +1 -0
- data/.travis.yml +9 -0
- data/Gemfile +4 -0
- data/README.md +55 -0
- data/Rakefile +9 -0
- data/dump.rdb +0 -0
- data/lib/lita-service.rb +26 -0
- data/lib/lita/handlers/customer.rb +97 -0
- data/lib/lita/handlers/service.rb +78 -0
- data/lib/lita/helpers/messages_helper.rb +28 -0
- data/lib/lita/interactors/add_all.rb +66 -0
- data/lib/lita/interactors/add_quantity.rb +81 -0
- data/lib/lita/interactors/base_interactor.rb +19 -0
- data/lib/lita/interactors/change_value.rb +81 -0
- data/lib/lita/interactors/create_service.rb +57 -0
- data/lib/lita/interactors/delete_customer.rb +65 -0
- data/lib/lita/interactors/delete_service.rb +43 -0
- data/lib/lita/interactors/inscribe_customer.rb +81 -0
- data/lib/lita/interactors/list_services.rb +25 -0
- data/lib/lita/interactors/reset_quantity.rb +74 -0
- data/lib/lita/interactors/show_service.rb +41 -0
- data/lib/lita/repositories/redis.rb +38 -0
- data/lita-service.gemspec +28 -0
- data/locales/en.yml +32 -0
- data/spec/lita/handlers/customer_spec.rb +215 -0
- data/spec/lita/handlers/service_spec.rb +150 -0
- data/spec/lita/helpers/messages_helper_spec.rb +34 -0
- data/spec/lita/interactors/add_all_spec.rb +100 -0
- data/spec/lita/interactors/add_quantity_spec.rb +129 -0
- data/spec/lita/interactors/change_value_spec.rb +99 -0
- data/spec/lita/interactors/create_service_spec.rb +52 -0
- data/spec/lita/interactors/delete_customer_spec.rb +87 -0
- data/spec/lita/interactors/delete_service_spec.rb +49 -0
- data/spec/lita/interactors/inscribe_customer_spec.rb +119 -0
- data/spec/lita/interactors/list_services_spec.rb +51 -0
- data/spec/lita/interactors/reset_quantity_spec.rb +96 -0
- data/spec/lita/interactors/show_service_spec.rb +52 -0
- data/spec/lita/repositories/redis_spec.rb +71 -0
- data/spec/spec_helper.rb +19 -0
- data/templates/.gitkeep +0 -0
- data/templates/error.erb +1 -0
- data/templates/list_services.erb +10 -0
- data/templates/message.erb +1 -0
- data/templates/service_created.erb +1 -0
- data/templates/service_show.erb +30 -0
- metadata +233 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'lita/repositories/redis'
|
3
|
+
|
4
|
+
module Lita
|
5
|
+
module Interactors
|
6
|
+
# Base interactors behaviour
|
7
|
+
class BaseInteractor
|
8
|
+
attr_reader :handler, :message, :error
|
9
|
+
|
10
|
+
def success?
|
11
|
+
error.nil?
|
12
|
+
end
|
13
|
+
|
14
|
+
def repository
|
15
|
+
Repositories::Redis.new(handler.redis)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'lita/helpers/messages_helper'
|
3
|
+
|
4
|
+
module Lita
|
5
|
+
module Interactors
|
6
|
+
# Set the given value to a user
|
7
|
+
class ChangeValue < BaseInteractor
|
8
|
+
include Lita::Helpers::MessagesHelper
|
9
|
+
|
10
|
+
attr_reader :data
|
11
|
+
|
12
|
+
def initialize(handler, data)
|
13
|
+
@handler = handler
|
14
|
+
@data = data
|
15
|
+
end
|
16
|
+
|
17
|
+
def perform
|
18
|
+
if service_exists?
|
19
|
+
update_costumer_if_exist
|
20
|
+
else
|
21
|
+
@error = msg_not_found(service_name: name)
|
22
|
+
end
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def name
|
29
|
+
@name ||= data[1]
|
30
|
+
end
|
31
|
+
|
32
|
+
def customer_name
|
33
|
+
@customer_name ||= data[2].delete('@')
|
34
|
+
end
|
35
|
+
|
36
|
+
def customer_value
|
37
|
+
@customer_value ||= data[3].to_i
|
38
|
+
end
|
39
|
+
|
40
|
+
def service
|
41
|
+
@service ||= repository.find(name)
|
42
|
+
end
|
43
|
+
|
44
|
+
def customer
|
45
|
+
service[:customers][customer_name.to_sym]
|
46
|
+
end
|
47
|
+
|
48
|
+
def service_exists?
|
49
|
+
repository.exists?(name)
|
50
|
+
end
|
51
|
+
|
52
|
+
def customer_exists?
|
53
|
+
service[:customers].keys.include?(customer_name.to_sym)
|
54
|
+
end
|
55
|
+
|
56
|
+
def update_costumer_if_exist
|
57
|
+
if customer_exists?
|
58
|
+
update_customer_value
|
59
|
+
else
|
60
|
+
@error = msg_customer_not_found(service_name: name,
|
61
|
+
customer_name: customer_name)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def update_customer_value
|
66
|
+
change_value
|
67
|
+
repository.update(service)
|
68
|
+
end
|
69
|
+
|
70
|
+
def change_value
|
71
|
+
old_value = customer[:value]
|
72
|
+
customer[:value] = customer_value
|
73
|
+
|
74
|
+
@message = I18n.t('lita.handlers.service.set_value.success',
|
75
|
+
old_value: old_value,
|
76
|
+
customer_name: customer_name,
|
77
|
+
customer_value: customer_value)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'lita/helpers/messages_helper'
|
3
|
+
|
4
|
+
module Lita
|
5
|
+
module Interactors
|
6
|
+
# Create a new service with the given data,
|
7
|
+
# validating does not exist any service with the same name
|
8
|
+
class CreateService < BaseInteractor
|
9
|
+
include Lita::Helpers::MessagesHelper
|
10
|
+
|
11
|
+
attr_reader :data
|
12
|
+
|
13
|
+
def initialize(handler, data)
|
14
|
+
@handler = handler
|
15
|
+
@data = data
|
16
|
+
end
|
17
|
+
|
18
|
+
def perform
|
19
|
+
if service_exists?
|
20
|
+
@error = msg_duplicated(service_name: name)
|
21
|
+
else
|
22
|
+
@message = create_service
|
23
|
+
end
|
24
|
+
self
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def name
|
30
|
+
@name ||= data[1]
|
31
|
+
end
|
32
|
+
|
33
|
+
def value
|
34
|
+
@value ||= data[2].to_i
|
35
|
+
end
|
36
|
+
|
37
|
+
def service_exists?
|
38
|
+
repository.exists?(name)
|
39
|
+
end
|
40
|
+
|
41
|
+
def create_service
|
42
|
+
service = build_service
|
43
|
+
repository.add(service)
|
44
|
+
service
|
45
|
+
end
|
46
|
+
|
47
|
+
def build_service
|
48
|
+
{
|
49
|
+
name: name,
|
50
|
+
value: value,
|
51
|
+
state: 'active',
|
52
|
+
customers: {}
|
53
|
+
}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'lita/helpers/messages_helper'
|
3
|
+
|
4
|
+
module Lita
|
5
|
+
module Interactors
|
6
|
+
# Inscribes a customer in a service
|
7
|
+
class DeleteCustomer < BaseInteractor
|
8
|
+
include Lita::Helpers::MessagesHelper
|
9
|
+
|
10
|
+
attr_reader :data
|
11
|
+
|
12
|
+
def initialize(handler, data)
|
13
|
+
@handler = handler
|
14
|
+
@data = data
|
15
|
+
end
|
16
|
+
|
17
|
+
def perform
|
18
|
+
if service_exists?
|
19
|
+
delete_customer_if_in_service
|
20
|
+
else
|
21
|
+
@error = msg_not_found(service_name: name)
|
22
|
+
end
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def name
|
29
|
+
@name ||= data[1]
|
30
|
+
end
|
31
|
+
|
32
|
+
def customer_name
|
33
|
+
@customer_name ||= data[3].delete('@')
|
34
|
+
end
|
35
|
+
|
36
|
+
def service
|
37
|
+
@service ||= repository.find(name)
|
38
|
+
end
|
39
|
+
|
40
|
+
def service_exists?
|
41
|
+
repository.exists?(name)
|
42
|
+
end
|
43
|
+
|
44
|
+
def customer_in_service?
|
45
|
+
service[:customers].keys.include?(customer_name.to_sym)
|
46
|
+
end
|
47
|
+
|
48
|
+
def delete_customer_if_in_service
|
49
|
+
if customer_in_service?
|
50
|
+
delete_customer_from_service
|
51
|
+
else
|
52
|
+
@error = msg_customer_not_found(service_name: name,
|
53
|
+
customer_name: customer_name)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def delete_customer_from_service
|
58
|
+
service[:customers].delete(customer_name.to_sym)
|
59
|
+
repository.update(service)
|
60
|
+
@message = I18n.t('lita.handlers.service.delete_customer.success',
|
61
|
+
service_name: name, customer_name: customer_name)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'lita/helpers/messages_helper'
|
3
|
+
|
4
|
+
module Lita
|
5
|
+
module Interactors
|
6
|
+
# Deletes an existing service that matches with the given name
|
7
|
+
class DeleteService < BaseInteractor
|
8
|
+
include Lita::Helpers::MessagesHelper
|
9
|
+
|
10
|
+
attr_reader :data
|
11
|
+
|
12
|
+
def initialize(handler, data)
|
13
|
+
@handler = handler
|
14
|
+
@data = data
|
15
|
+
end
|
16
|
+
|
17
|
+
def perform
|
18
|
+
if service_exists?
|
19
|
+
delete_service
|
20
|
+
@message = I18n.t('lita.handlers.service.delete.success',
|
21
|
+
service_name: name)
|
22
|
+
else
|
23
|
+
@error = msg_not_found(service_name: name)
|
24
|
+
end
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def name
|
31
|
+
@name ||= data[2]
|
32
|
+
end
|
33
|
+
|
34
|
+
def service_exists?
|
35
|
+
repository.exists?(name)
|
36
|
+
end
|
37
|
+
|
38
|
+
def delete_service
|
39
|
+
repository.delete(name)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'lita/helpers/messages_helper'
|
3
|
+
|
4
|
+
module Lita
|
5
|
+
module Interactors
|
6
|
+
# Inscribes a customer in a service
|
7
|
+
class InscribeCustomer < BaseInteractor
|
8
|
+
include Lita::Helpers::MessagesHelper
|
9
|
+
|
10
|
+
attr_reader :data
|
11
|
+
|
12
|
+
def initialize(handler, data)
|
13
|
+
@handler = handler
|
14
|
+
@data = data
|
15
|
+
end
|
16
|
+
|
17
|
+
def perform
|
18
|
+
if service_exists?
|
19
|
+
inscribe_customer_if_new
|
20
|
+
else
|
21
|
+
@error = msg_not_found(service_name: name)
|
22
|
+
end
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def name
|
29
|
+
@name ||= data[1]
|
30
|
+
end
|
31
|
+
|
32
|
+
def customer_name
|
33
|
+
@customer_name ||= data[2].delete('@')
|
34
|
+
end
|
35
|
+
|
36
|
+
def customer_value
|
37
|
+
@customer_value ||= data[3].to_s
|
38
|
+
end
|
39
|
+
|
40
|
+
def service
|
41
|
+
@service ||= repository.find(name)
|
42
|
+
end
|
43
|
+
|
44
|
+
def service_exists?
|
45
|
+
repository.exists?(name)
|
46
|
+
end
|
47
|
+
|
48
|
+
def new_customer?
|
49
|
+
!service[:customers].keys.include?(customer_name.to_sym)
|
50
|
+
end
|
51
|
+
|
52
|
+
def inscribe_customer_if_new
|
53
|
+
if new_customer?
|
54
|
+
add_customer
|
55
|
+
else
|
56
|
+
@error = msg_customer_duplicated(service_name: name,
|
57
|
+
customer_name: customer_name)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def add_customer
|
62
|
+
service[:customers][customer_name.to_sym] = customer
|
63
|
+
repository.update(service)
|
64
|
+
@message = I18n.t('lita.handlers.service.inscribe.success',
|
65
|
+
service_name: name, customer_name: customer_name)
|
66
|
+
end
|
67
|
+
|
68
|
+
def customer
|
69
|
+
{
|
70
|
+
quantity: 0,
|
71
|
+
value: calculate_value
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
def calculate_value
|
76
|
+
return customer_value.to_i unless customer_value.empty?
|
77
|
+
service[:value]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Lita
|
3
|
+
module Interactors
|
4
|
+
# List all services
|
5
|
+
class ListServices < BaseInteractor
|
6
|
+
attr_reader :data
|
7
|
+
|
8
|
+
def initialize(handler, data)
|
9
|
+
@handler = handler
|
10
|
+
@data = data
|
11
|
+
end
|
12
|
+
|
13
|
+
def perform
|
14
|
+
@message = services
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def services
|
21
|
+
@service ||= repository.all
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'lita/helpers/messages_helper'
|
3
|
+
|
4
|
+
module Lita
|
5
|
+
module Interactors
|
6
|
+
# Set the customer quantity to zero
|
7
|
+
class ResetQuantity < BaseInteractor
|
8
|
+
include Lita::Helpers::MessagesHelper
|
9
|
+
|
10
|
+
attr_reader :data
|
11
|
+
|
12
|
+
def initialize(handler, data)
|
13
|
+
@handler = handler
|
14
|
+
@data = data
|
15
|
+
end
|
16
|
+
|
17
|
+
def perform
|
18
|
+
if service_exists?
|
19
|
+
update_costumer_if_exist
|
20
|
+
else
|
21
|
+
@error = msg_not_found(service_name: name)
|
22
|
+
end
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def name
|
29
|
+
@name ||= data[1]
|
30
|
+
end
|
31
|
+
|
32
|
+
def customer_name
|
33
|
+
@customer_name ||= data[2].delete('@')
|
34
|
+
end
|
35
|
+
|
36
|
+
def service
|
37
|
+
@service ||= repository.find(name)
|
38
|
+
end
|
39
|
+
|
40
|
+
def customer
|
41
|
+
service[:customers][customer_name.to_sym]
|
42
|
+
end
|
43
|
+
|
44
|
+
def service_exists?
|
45
|
+
repository.exists?(name)
|
46
|
+
end
|
47
|
+
|
48
|
+
def customer_exists?
|
49
|
+
service[:customers].keys.include?(customer_name.to_sym)
|
50
|
+
end
|
51
|
+
|
52
|
+
def update_costumer_if_exist
|
53
|
+
if customer_exists?
|
54
|
+
update_customer_quantity
|
55
|
+
else
|
56
|
+
@error = msg_customer_not_found(service_name: name,
|
57
|
+
customer_name: customer_name)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def update_customer_quantity
|
62
|
+
reset_quantity
|
63
|
+
repository.update(service)
|
64
|
+
end
|
65
|
+
|
66
|
+
def reset_quantity
|
67
|
+
customer[:quantity] = 0
|
68
|
+
|
69
|
+
@message = I18n.t('lita.handlers.service.reset.success',
|
70
|
+
customer_name: customer_name)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|