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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.rubocop.yml +5 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +9 -0
  6. data/Gemfile +4 -0
  7. data/README.md +55 -0
  8. data/Rakefile +9 -0
  9. data/dump.rdb +0 -0
  10. data/lib/lita-service.rb +26 -0
  11. data/lib/lita/handlers/customer.rb +97 -0
  12. data/lib/lita/handlers/service.rb +78 -0
  13. data/lib/lita/helpers/messages_helper.rb +28 -0
  14. data/lib/lita/interactors/add_all.rb +66 -0
  15. data/lib/lita/interactors/add_quantity.rb +81 -0
  16. data/lib/lita/interactors/base_interactor.rb +19 -0
  17. data/lib/lita/interactors/change_value.rb +81 -0
  18. data/lib/lita/interactors/create_service.rb +57 -0
  19. data/lib/lita/interactors/delete_customer.rb +65 -0
  20. data/lib/lita/interactors/delete_service.rb +43 -0
  21. data/lib/lita/interactors/inscribe_customer.rb +81 -0
  22. data/lib/lita/interactors/list_services.rb +25 -0
  23. data/lib/lita/interactors/reset_quantity.rb +74 -0
  24. data/lib/lita/interactors/show_service.rb +41 -0
  25. data/lib/lita/repositories/redis.rb +38 -0
  26. data/lita-service.gemspec +28 -0
  27. data/locales/en.yml +32 -0
  28. data/spec/lita/handlers/customer_spec.rb +215 -0
  29. data/spec/lita/handlers/service_spec.rb +150 -0
  30. data/spec/lita/helpers/messages_helper_spec.rb +34 -0
  31. data/spec/lita/interactors/add_all_spec.rb +100 -0
  32. data/spec/lita/interactors/add_quantity_spec.rb +129 -0
  33. data/spec/lita/interactors/change_value_spec.rb +99 -0
  34. data/spec/lita/interactors/create_service_spec.rb +52 -0
  35. data/spec/lita/interactors/delete_customer_spec.rb +87 -0
  36. data/spec/lita/interactors/delete_service_spec.rb +49 -0
  37. data/spec/lita/interactors/inscribe_customer_spec.rb +119 -0
  38. data/spec/lita/interactors/list_services_spec.rb +51 -0
  39. data/spec/lita/interactors/reset_quantity_spec.rb +96 -0
  40. data/spec/lita/interactors/show_service_spec.rb +52 -0
  41. data/spec/lita/repositories/redis_spec.rb +71 -0
  42. data/spec/spec_helper.rb +19 -0
  43. data/templates/.gitkeep +0 -0
  44. data/templates/error.erb +1 -0
  45. data/templates/list_services.erb +10 -0
  46. data/templates/message.erb +1 -0
  47. data/templates/service_created.erb +1 -0
  48. data/templates/service_show.erb +30 -0
  49. 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