lita-chilean-bip 1.0.0 → 1.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 +4 -4
- data/lib/lita/handlers/chilean_bip.rb +62 -62
- data/lita-chilean-bip.gemspec +1 -1
- data/locales/en.yml +2 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 190ff3e223f889a9963bc190ace1a1f658e23fd8
|
4
|
+
data.tar.gz: 081c324ca3c43d485141f570238c21c15bc3ff0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 673a460c18b2a11ef904fab2d9f508460f12c3a258c119f7b53beedb110375c4013946ff6cbeb49df260bffbcaf88894f310ee0679325766556994508f53f451
|
7
|
+
data.tar.gz: e81fe14a20c9639e8a5209078ab88a2f6e23e941c650da81de069c977412aea184800064840d157d9699f2d3600f530764eb2459766472ba62d92d68692eef9b
|
@@ -1,90 +1,90 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
1
3
|
module Lita
|
2
4
|
module Handlers
|
3
|
-
class
|
5
|
+
class ChileanBip < Handler
|
6
|
+
|
7
|
+
REDIS_KEY = 'lita-chilean-bip'
|
4
8
|
|
5
|
-
|
6
|
-
|
9
|
+
route %r{^bip\s*(\d+)}i, :bip_balance, help: { 'bip ...' => 'gets the balance for BIP card ...' }
|
10
|
+
route %r{^my bip is (\d+)}i, :store_bip, help: { 'my bip is ...' => "stores the user's BIP card ..." }
|
11
|
+
route %r{^bip}i, :stored_bip_balance, help: { 'bip' => "gets the balance for stored user's BIP card" }
|
12
|
+
|
13
|
+
def bip_balance(response)
|
14
|
+
card_number = card_number_from_response(response)
|
15
|
+
return response.reply interpolate_message('invalid_number') unless validate_card_number card_number
|
16
|
+
balance_for_card_number(card_number, response)
|
7
17
|
end
|
8
18
|
|
9
|
-
|
19
|
+
def store_bip(response)
|
20
|
+
card_number = card_number_from_response(response)
|
21
|
+
return response.reply interpolate_message('invalid_number') unless validate_card_number card_number
|
22
|
+
key_user = key_from_user response.user
|
23
|
+
redis.hset(REDIS_KEY, key_user, card_number)
|
24
|
+
response.reply interpolate_message('card_stored', {})
|
25
|
+
end
|
10
26
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
targets = request.params['targets'] || '#general'
|
16
|
-
rooms = []
|
17
|
-
targets.split(',').each do |param_target|
|
18
|
-
rooms << param_target
|
19
|
-
end
|
20
|
-
rooms.each do |room|
|
21
|
-
target = Source.new(room: room)
|
22
|
-
robot.send_message(target, message)
|
23
|
-
end
|
27
|
+
def stored_bip_balance(response)
|
28
|
+
key_user = key_from_user response.user
|
29
|
+
card_number = redis.hget(REDIS_KEY, key_user)
|
30
|
+
balance_for_card_number(card_number, response)
|
24
31
|
end
|
25
32
|
|
26
33
|
private
|
27
34
|
|
28
|
-
def
|
29
|
-
|
30
|
-
request.body.read
|
35
|
+
def card_number_from_response(response)
|
36
|
+
response.matches[0][0]
|
31
37
|
end
|
32
38
|
|
33
|
-
def
|
34
|
-
|
39
|
+
def key_from_user(user)
|
40
|
+
user.to_s.downcase.strip
|
35
41
|
end
|
36
42
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
|
43
|
+
def balance_for_card_number(card_number, response)
|
44
|
+
html = post_query_for_card card_number
|
45
|
+
data = parse_data_from_html html
|
46
|
+
return response.reply interpolate_message('service_down') if data[:balance] =~ /.*mal.*/
|
47
|
+
response.reply interpolate_message('actual_balance', data)
|
41
48
|
end
|
42
49
|
|
43
|
-
def
|
44
|
-
|
45
|
-
if data[:object_attributes].key? :target_branch
|
46
|
-
# Merge request
|
47
|
-
data[:object_attributes][:link] = "#{data[:object_attributes][:target_branch]}/#{data[:object_attributes][:iid]}"
|
48
|
-
build_message "web.#{data[:object_kind]}.#{data[:object_attributes][:state]}", data[:object_attributes]
|
49
|
-
else
|
50
|
-
# Issue
|
51
|
-
build_message "web.#{data[:object_kind]}.#{data[:object_attributes][:state]}", data[:object_attributes]
|
52
|
-
end
|
53
|
-
else
|
54
|
-
# Push has no object kind
|
55
|
-
branch = data[:ref].split('/').drop(2).join('/')
|
56
|
-
data[:link] = data[:repository][:name]
|
57
|
-
if data[:before] =~ /^0+$/
|
58
|
-
build_message 'web.push.new_branch', data
|
59
|
-
else
|
60
|
-
build_message 'web.push.add_to_branch', data
|
61
|
-
end
|
62
|
-
end
|
63
|
-
rescue
|
64
|
-
Lita.logger.warn "Error formatting message: #{data.inspect}"
|
50
|
+
def validate_card_number(card_number)
|
51
|
+
card_number =~ /\d{8}/
|
65
52
|
end
|
66
53
|
|
67
|
-
|
54
|
+
def post_query_for_card(card_number)
|
55
|
+
headers = {
|
56
|
+
'Content-Type' => 'application/x-www-form-urlencoded',
|
57
|
+
'Host' => 'saldobip.com',
|
58
|
+
'Origin' => 'http://saldobip.com',
|
59
|
+
'Referer' => 'http://saldobip.com/',
|
60
|
+
'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36'
|
61
|
+
}
|
68
62
|
|
69
|
-
|
70
|
-
|
71
|
-
|
63
|
+
conn = Faraday.new(:url => 'http://saldobip.com') do |faraday|
|
64
|
+
faraday.request :url_encoded # form-encode POST params
|
65
|
+
faraday.response :logger # log requests to STDOUT
|
66
|
+
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
|
67
|
+
end
|
72
68
|
|
73
|
-
|
74
|
-
|
75
|
-
rescue MultiJson::LoadError => e
|
76
|
-
Lita.logger.error("Could not parse JSON payload from Github: #{e.message}")
|
77
|
-
return
|
69
|
+
response = conn.post '/', { NumTarjeta: card_number, pedirSaldo: '' }, headers
|
70
|
+
response.body
|
78
71
|
end
|
79
72
|
|
80
|
-
def
|
81
|
-
|
82
|
-
|
83
|
-
|
73
|
+
def parse_data_from_html(response)
|
74
|
+
tag_data = []
|
75
|
+
doc = Nokogiri::HTML(response)
|
76
|
+
doc.css('#resultados #datos strong').each do |tag|
|
77
|
+
tag_data << tag.content
|
78
|
+
end
|
79
|
+
data = tag_data.empty? ? {} : { balance: tag_data[0], date: tag_data[1] }
|
80
|
+
data
|
84
81
|
end
|
85
82
|
|
83
|
+
def interpolate_message(key, data={})
|
84
|
+
t(key) % data
|
85
|
+
end
|
86
86
|
end
|
87
87
|
|
88
|
-
Lita.register_handler(
|
88
|
+
Lita.register_handler(ChileanBip)
|
89
89
|
end
|
90
90
|
end
|
data/lita-chilean-bip.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = 'lita-chilean-bip'
|
3
|
-
spec.version = '1.
|
3
|
+
spec.version = '1.1.0'
|
4
4
|
spec.authors = ['Emilio Figueroa']
|
5
5
|
spec.email = ['emiliofigueroatorres@gmail.com']
|
6
6
|
spec.description = %q{A Lita handler for checking the BIP card balance}
|
data/locales/en.yml
CHANGED
@@ -2,6 +2,7 @@ en:
|
|
2
2
|
lita:
|
3
3
|
handlers:
|
4
4
|
chilean_bip:
|
5
|
+
card_stored: "Yay! I'll remember it for later."
|
5
6
|
invalid_number: "Mmmh.. It seems like you gave me an invalid number"
|
6
7
|
service_down: "Ouch! I can't get your balance for now"
|
7
|
-
actual_balance: "
|
8
|
+
actual_balance: "..and your balance is: %{balance} (until %{date})"
|