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
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 74840cf12e701b8563b21eaa8f5d1591927b3240
|
4
|
+
data.tar.gz: d063cf8f4dd14ec643076ef2f3b114dfaf0ecdb4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: afb34ca45f217a64655d63c2db9fe0e03f1496e249fce39bdda900986e2b8bdc17602a1abb972d36e3e1a7aa06187e57a7566395caf952c7135b078a175ee470
|
7
|
+
data.tar.gz: 7ae656a384fceb9a4e3e6880c327ee71f83ab18c1608a1b8a28fe233939d7b48af50d5cccfb1e732d450f0100a8ef984a032f5a7a4e441c814bb658c7aab6c50
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.3.0
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# lita-service
|
2
|
+
|
3
|
+
[](https://travis-ci.org/equintana/lita-service)
|
4
|
+
[](https://coveralls.io/builds/8637437)
|
5
|
+
|
6
|
+
Plugin to create a service with value or custom value per client and to manage how many times a customer use or consume this service.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add lita-service to your Lita instance's Gemfile:
|
11
|
+
|
12
|
+
``` ruby
|
13
|
+
gem "lita-service"
|
14
|
+
```
|
15
|
+
|
16
|
+
## Usage
|
17
|
+
|
18
|
+
``` sh
|
19
|
+
lita service list
|
20
|
+
lita service create <NAME> <*VALUE> # Value will be set to 0 if empty.
|
21
|
+
lita service show <NAME>
|
22
|
+
lita service delete|remove <NAME>
|
23
|
+
|
24
|
+
lita service <NAME> inscribe <CUSTOMER> <*VALUE> # Value will be set to service's value if empty.
|
25
|
+
lita service <NAME> delete|remove <CUSTOMER>
|
26
|
+
lita service <NAME> add|sum <CUSTOMER> <*QUANTITY> # Quantity will be set to 1 if empty.
|
27
|
+
lita service <NAME> add|sum all <*QUANTITY> # Quantity will be set to 1 if empty.
|
28
|
+
lita service <NAME> value <CUSTOMER> <VALUE>
|
29
|
+
lita service <NAME> reset <CUSTOMER>
|
30
|
+
```
|
31
|
+
|
32
|
+
To show the available commands
|
33
|
+
```
|
34
|
+
lito help service
|
35
|
+
```
|
36
|
+
|
37
|
+
## Example
|
38
|
+
|
39
|
+
``` sh
|
40
|
+
lita service list
|
41
|
+
lita service create awesome-service 200
|
42
|
+
lita service show awesome-service
|
43
|
+
lita service delete awesome-service
|
44
|
+
lita service remove awesome-service
|
45
|
+
|
46
|
+
lita service awesome-service inscribe erlinis
|
47
|
+
lita service awesome-service add erlinis 2
|
48
|
+
lita service awesome-service sum erlinis 2
|
49
|
+
lita service awesome-service add all 3
|
50
|
+
lita service awesome-service sum all 3
|
51
|
+
lita service awesome-service delete erlinis
|
52
|
+
lita service awesome-service remove erlinis
|
53
|
+
lita service awesome-service value erlinis 300
|
54
|
+
lita service awesome-service reset erlinis
|
55
|
+
```
|
data/Rakefile
ADDED
data/dump.rdb
ADDED
Binary file
|
data/lib/lita-service.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'lita'
|
3
|
+
|
4
|
+
Lita.load_locales Dir[File.expand_path(
|
5
|
+
File.join('..', '..', 'locales', '*.yml'), __FILE__
|
6
|
+
)]
|
7
|
+
|
8
|
+
require 'lita/handlers/service'
|
9
|
+
require 'lita/handlers/customer'
|
10
|
+
require 'lita/interactors/base_interactor'
|
11
|
+
require 'lita/interactors/list_services'
|
12
|
+
require 'lita/interactors/create_service'
|
13
|
+
require 'lita/interactors/show_service'
|
14
|
+
require 'lita/interactors/delete_service'
|
15
|
+
require 'lita/interactors/inscribe_customer'
|
16
|
+
require 'lita/interactors/change_value'
|
17
|
+
require 'lita/interactors/add_quantity'
|
18
|
+
require 'lita/interactors/reset_quantity'
|
19
|
+
require 'lita/interactors/add_all'
|
20
|
+
require 'lita/interactors/delete_customer'
|
21
|
+
require 'lita/helpers/messages_helper'
|
22
|
+
|
23
|
+
Lita::Handlers::Service.template_root File.expand_path(
|
24
|
+
File.join('..', '..', 'templates'),
|
25
|
+
__FILE__
|
26
|
+
)
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Lita
|
3
|
+
module Handlers
|
4
|
+
# Handles all commands related to the customer
|
5
|
+
class Customer < Handler
|
6
|
+
namespace :service
|
7
|
+
|
8
|
+
def self.template_root
|
9
|
+
File.expand_path('../../../templates', __dir__)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Routes
|
13
|
+
route(/service ([\w-]+) inscribe ([\@\w-]+)( [0-9]*)?/, :inscribe,
|
14
|
+
command: true,
|
15
|
+
help: { 'service _<name>_ inscribe _<user> <*value>_' =>
|
16
|
+
'Registers to _<user>_ with value _<*value>_ on service _<name>_' })
|
17
|
+
|
18
|
+
route(/service ([\w-]+) (add|sum) ((?!(?:all))[\@\w-]+)( [0-9-]*)?/, :add,
|
19
|
+
command: true,
|
20
|
+
help: { 'service _<name>_ add|sum _<user> <*quantity>_' =>
|
21
|
+
'Adds _<*quantity>_ or 1 to a _<user>_ ' })
|
22
|
+
|
23
|
+
route(/service ([\w-]+) (add|sum) all( [0-9-]*)?$/, :add_all,
|
24
|
+
command: true,
|
25
|
+
help: { 'service _<name>_ add|sum all _<*quantity>_' =>
|
26
|
+
'Adds _<*quantity>_ or 1 to all users on service' })
|
27
|
+
|
28
|
+
route(/service ([\w-]+) reset ([\@\w-]+)/, :reset,
|
29
|
+
command: true,
|
30
|
+
help: { 'service _<name>_ reset _<user>_' =>
|
31
|
+
'Sets the quantity of the _<user>_ to zero' })
|
32
|
+
|
33
|
+
route(/service ([\w-]+) value ([\@\w-]+) ([0-9-]*)$/, :change_value,
|
34
|
+
command: true,
|
35
|
+
help: { 'service _<name>_ value _<user> <value>_' =>
|
36
|
+
'Sets the value _<value>_ to the _<user>_ on service' })
|
37
|
+
|
38
|
+
route(/service ([\w-]+) (delete|remove) ([\@\w-]+)/, :delete_customer,
|
39
|
+
command: true,
|
40
|
+
help: { 'service _<name>_ delete|remove _<user>_' =>
|
41
|
+
'Deletes a _<user>_ from a service called _<name>_' })
|
42
|
+
|
43
|
+
# Callbacks
|
44
|
+
def inscribe(response)
|
45
|
+
interactor = Interactors::InscribeCustomer.new(self, response.match_data).perform
|
46
|
+
template = :message
|
47
|
+
message = { message: interactor.message }
|
48
|
+
reply(template, message, response, interactor)
|
49
|
+
end
|
50
|
+
|
51
|
+
def change_value(response)
|
52
|
+
interactor = Interactors::ChangeValue.new(self, response.match_data).perform
|
53
|
+
template = :message
|
54
|
+
message = { message: interactor.message }
|
55
|
+
reply(template, message, response, interactor)
|
56
|
+
end
|
57
|
+
|
58
|
+
def add(response)
|
59
|
+
interactor = Interactors::AddQuantity.new(self, response.match_data).perform
|
60
|
+
template = :message
|
61
|
+
message = { message: interactor.message }
|
62
|
+
reply(template, message, response, interactor)
|
63
|
+
end
|
64
|
+
|
65
|
+
def add_all(response)
|
66
|
+
interactor = Interactors::AddAll.new(self, response.match_data).perform
|
67
|
+
template = :message
|
68
|
+
message = { message: interactor.message }
|
69
|
+
reply(template, message, response, interactor)
|
70
|
+
end
|
71
|
+
|
72
|
+
def reset(response)
|
73
|
+
interactor = Interactors::ResetQuantity.new(self, response.match_data).perform
|
74
|
+
template = :message
|
75
|
+
message = { message: interactor.message }
|
76
|
+
reply(template, message, response, interactor)
|
77
|
+
end
|
78
|
+
|
79
|
+
def delete_customer(response)
|
80
|
+
interactor = Interactors::DeleteCustomer.new(self, response.match_data).perform
|
81
|
+
template = :message
|
82
|
+
message = { message: interactor.message }
|
83
|
+
reply(template, message, response, interactor)
|
84
|
+
end
|
85
|
+
|
86
|
+
def reply(template, message, response, interactor)
|
87
|
+
unless interactor.success?
|
88
|
+
template = :error
|
89
|
+
message = { error: interactor.error }
|
90
|
+
end
|
91
|
+
response.reply(render_template(template, message))
|
92
|
+
end
|
93
|
+
|
94
|
+
Lita.register_handler(self)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Lita
|
3
|
+
module Handlers
|
4
|
+
# Handles all commands relative to the service
|
5
|
+
class Service < Handler
|
6
|
+
namespace :service
|
7
|
+
|
8
|
+
# Routes
|
9
|
+
route(/service ping/, :pong,
|
10
|
+
command: true,
|
11
|
+
help: { 'service ping' =>
|
12
|
+
'Replys _pong_ if the plugin is running' })
|
13
|
+
|
14
|
+
route(/service list/, :list,
|
15
|
+
command: true,
|
16
|
+
help: { 'service list' =>
|
17
|
+
'List all services' })
|
18
|
+
|
19
|
+
route(/service create ([\w-]+)( [0-9]*)?/, :create,
|
20
|
+
command: true,
|
21
|
+
help: { 'service create _<name> <*value>_' =>
|
22
|
+
'Create a new service called _<name>_ with value _<*value>_' })
|
23
|
+
|
24
|
+
route(/service show ([\w-]+)/, :show,
|
25
|
+
command: true,
|
26
|
+
help: { 'service show _<name>_' =>
|
27
|
+
'Shows information on service called _<name>_' })
|
28
|
+
|
29
|
+
route(/service (delete|remove) ([\w-]+)/, :delete,
|
30
|
+
command: true,
|
31
|
+
help: { 'service delete|remove _<name>_' =>
|
32
|
+
'Deletes a service called _<name>_' })
|
33
|
+
|
34
|
+
# Callbacks
|
35
|
+
def pong(response)
|
36
|
+
response.reply 'pong!'
|
37
|
+
end
|
38
|
+
|
39
|
+
def list(response)
|
40
|
+
interactor = Interactors::ListServices.new(self, response.match_data).perform
|
41
|
+
template = :list_services
|
42
|
+
message = { services: interactor.message }
|
43
|
+
reply(template, message, response, interactor)
|
44
|
+
end
|
45
|
+
|
46
|
+
def create(response)
|
47
|
+
interactor = Interactors::CreateService.new(self, response.match_data).perform
|
48
|
+
template = :service_created
|
49
|
+
message = { service: interactor.message }
|
50
|
+
reply(template, message, response, interactor)
|
51
|
+
end
|
52
|
+
|
53
|
+
def show(response)
|
54
|
+
interactor = Interactors::ShowService.new(self, response.match_data).perform
|
55
|
+
template = :service_show
|
56
|
+
message = { service: interactor.message }
|
57
|
+
reply(template, message, response, interactor)
|
58
|
+
end
|
59
|
+
|
60
|
+
def delete(response)
|
61
|
+
interactor = Interactors::DeleteService.new(self, response.match_data).perform
|
62
|
+
template = :message
|
63
|
+
message = { message: interactor.message }
|
64
|
+
reply(template, message, response, interactor)
|
65
|
+
end
|
66
|
+
|
67
|
+
def reply(template, message, response, interactor)
|
68
|
+
unless interactor.success?
|
69
|
+
template = :error
|
70
|
+
message = { error: interactor.error }
|
71
|
+
end
|
72
|
+
response.reply(render_template(template, message))
|
73
|
+
end
|
74
|
+
|
75
|
+
Lita.register_handler(self)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Lita
|
3
|
+
module Helpers
|
4
|
+
# Message Helper
|
5
|
+
module MessagesHelper
|
6
|
+
def msg_duplicated(service_name:)
|
7
|
+
I18n.t('lita.handlers.service.errors.duplicated',
|
8
|
+
service_name: service_name)
|
9
|
+
end
|
10
|
+
|
11
|
+
def msg_not_found(service_name:)
|
12
|
+
I18n.t('lita.handlers.service.errors.not_found',
|
13
|
+
service_name: service_name)
|
14
|
+
end
|
15
|
+
|
16
|
+
def msg_customer_not_found(service_name:, customer_name:)
|
17
|
+
I18n.t('lita.handlers.service.customer.not_found',
|
18
|
+
service_name: service_name, customer_name: customer_name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def msg_customer_duplicated(service_name:, customer_name:)
|
22
|
+
I18n.t('lita.handlers.service.customer.duplicated',
|
23
|
+
service_name: service_name,
|
24
|
+
customer_name: customer_name)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'lita/helpers/messages_helper'
|
3
|
+
|
4
|
+
module Lita
|
5
|
+
module Interactors
|
6
|
+
# Increases all customers' quantity with the given value
|
7
|
+
# or with 1 if nothing is specified.
|
8
|
+
class AddAll < BaseInteractor
|
9
|
+
include Lita::Helpers::MessagesHelper
|
10
|
+
|
11
|
+
attr_reader :data
|
12
|
+
DEFAULT_QUANTITY = 1
|
13
|
+
|
14
|
+
def initialize(handler, data)
|
15
|
+
@handler = handler
|
16
|
+
@data = data
|
17
|
+
end
|
18
|
+
|
19
|
+
def perform
|
20
|
+
if service_exists?
|
21
|
+
update_all_quantities
|
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[1]
|
32
|
+
end
|
33
|
+
|
34
|
+
def given_quantity
|
35
|
+
@customer_quantity ||= data[3].to_s
|
36
|
+
end
|
37
|
+
|
38
|
+
def service
|
39
|
+
@service ||= repository.find(name)
|
40
|
+
end
|
41
|
+
|
42
|
+
def service_exists?
|
43
|
+
repository.exists?(name)
|
44
|
+
end
|
45
|
+
|
46
|
+
def update_all_quantities
|
47
|
+
increment_quantities
|
48
|
+
repository.update(service)
|
49
|
+
@message = I18n.t('lita.handlers.service.add_all.success',
|
50
|
+
quantity: quantity_calculated)
|
51
|
+
end
|
52
|
+
|
53
|
+
def increment_quantities
|
54
|
+
quantity = quantity_calculated
|
55
|
+
service[:customers].map do |_key, customer_data|
|
56
|
+
customer_data[:quantity] += quantity
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def quantity_calculated
|
61
|
+
return given_quantity.to_i unless given_quantity.empty?
|
62
|
+
DEFAULT_QUANTITY
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'lita/helpers/messages_helper'
|
3
|
+
|
4
|
+
module Lita
|
5
|
+
module Interactors
|
6
|
+
# Adds the given quantity to the customer's balance
|
7
|
+
class AddQuantity < BaseInteractor
|
8
|
+
include Lita::Helpers::MessagesHelper
|
9
|
+
|
10
|
+
attr_reader :data
|
11
|
+
DEFAULT_QUANTITY = 1
|
12
|
+
|
13
|
+
def initialize(handler, data)
|
14
|
+
@handler = handler
|
15
|
+
@data = data
|
16
|
+
end
|
17
|
+
|
18
|
+
def perform
|
19
|
+
if service_exists?
|
20
|
+
update_costumer_if_exist
|
21
|
+
else
|
22
|
+
@error = msg_not_found(service_name: name)
|
23
|
+
end
|
24
|
+
self
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def name
|
30
|
+
@name ||= data[1]
|
31
|
+
end
|
32
|
+
|
33
|
+
def customer_name
|
34
|
+
@customer_name ||= data[3].delete('@')
|
35
|
+
end
|
36
|
+
|
37
|
+
def customer_quantity
|
38
|
+
@customer_quantity ||= data[4].to_s
|
39
|
+
end
|
40
|
+
|
41
|
+
def service
|
42
|
+
@service ||= repository.find(name)
|
43
|
+
end
|
44
|
+
|
45
|
+
def service_exists?
|
46
|
+
repository.exists?(name)
|
47
|
+
end
|
48
|
+
|
49
|
+
def customer_exists?
|
50
|
+
service[:customers].keys.include?(customer_name.to_sym)
|
51
|
+
end
|
52
|
+
|
53
|
+
def update_costumer_if_exist
|
54
|
+
if customer_exists?
|
55
|
+
update_customer_quantity
|
56
|
+
else
|
57
|
+
@error = msg_customer_not_found(service_name: name,
|
58
|
+
customer_name: customer_name)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def update_customer_quantity
|
63
|
+
new_quantity = increment_quantity
|
64
|
+
repository.update(service)
|
65
|
+
@message = I18n.t('lita.handlers.service.add.success',
|
66
|
+
quantity: quantity_calculated,
|
67
|
+
customer_name: customer_name,
|
68
|
+
customer_quantity: new_quantity)
|
69
|
+
end
|
70
|
+
|
71
|
+
def increment_quantity
|
72
|
+
service[:customers][customer_name.to_sym][:quantity] += quantity_calculated
|
73
|
+
end
|
74
|
+
|
75
|
+
def quantity_calculated
|
76
|
+
return customer_quantity.to_i unless customer_quantity.empty?
|
77
|
+
DEFAULT_QUANTITY
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|