kaspay 0.0.4 → 0.0.5
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/README.md +20 -1
- data/lib/kaspay/version.rb +1 -1
- data/lib/kaspay.rb +77 -12
- 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: 43081c96cd556ee5cc3f775ef57e9b4b2f7139e9
|
4
|
+
data.tar.gz: be34341f29d037b715d41cb0fb2f4366c6975690
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a2fc30b97487116b4761f12110d435d046da79e6d293aabde5f49ac014c821ecdecb17ef3c0964705c223b8ffc8f41ce39bab261eb375639869d8b3519df676
|
7
|
+
data.tar.gz: a81f7ade37886a8b8b9e0c5ca87b33532acdd96aaa41aca62ff88e9978b70445958af9362077f5d28d6375e1e6be5b1c0bcada06d77f7e3aec72f806f0bc5217
|
data/README.md
CHANGED
@@ -21,15 +21,34 @@ In `Gemfile`:
|
|
21
21
|
gem 'kaspay'
|
22
22
|
|
23
23
|
## Examples
|
24
|
-
###Code
|
24
|
+
### Code
|
25
25
|
```ruby
|
26
26
|
require 'kaspay'
|
27
27
|
|
28
28
|
kaspay = KasPay.login email: "email@example.com", password: "yOurp@sSw0rD"
|
29
|
+
# Alternative:
|
30
|
+
# kaspay = KasPay.login
|
31
|
+
# kaspay.email = "email@example.com"
|
32
|
+
# kaspay.password = "yOurp@sSw0rD"
|
29
33
|
puts "#{kaspay.get_name}'s savings with account number #{kaspay.get_acc_num}:"
|
34
|
+
# `<method>` is an alias for `get_<method>`. So, you can use `kaspay.name` or `kaspay.acc_num` instead.
|
30
35
|
puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|
31
36
|
puts " Bank A balance".ljust(15) + ": " + "Rp 500,000.00".rjust(20)
|
32
37
|
puts " Bank B balance".ljust(15) + ": " + "Rp 600,000.00".rjust(20)
|
33
38
|
puts " KasPay balance".ljust(15) + ": " + kaspay.get_balance.to_s.rjust(20)
|
34
39
|
puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|
40
|
+
puts " Total balance".ljust(15) + ": " + (kaspay.balance + 500000 + KasPay::Money.new(600000)).to_s.rjust(20)
|
41
|
+
puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|
42
|
+
kaspay.logout!
|
43
|
+
```
|
44
|
+
### Output
|
45
|
+
```ruby
|
46
|
+
#=> John Doe's savings with account number 12345678:
|
47
|
+
#=> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
48
|
+
#=> Bank A balance: Rp 500,000.00
|
49
|
+
#=> Bank B balance: Rp 600,000.00
|
50
|
+
#=> KasPay balance: Rp 915,826.00
|
51
|
+
#=> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
52
|
+
#=> Total balance : Rp 2,015,826.00
|
53
|
+
#=> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
35
54
|
```
|
data/lib/kaspay/version.rb
CHANGED
data/lib/kaspay.rb
CHANGED
@@ -1,55 +1,91 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
# @author Adrian Setyadi
|
3
|
+
# Copyright 2015
|
4
|
+
#
|
5
|
+
require 'pstore'
|
3
6
|
require 'watir'
|
4
7
|
require 'headless'
|
5
8
|
require_relative 'meta_stuff'
|
6
9
|
require_relative 'kernel_patch'
|
7
10
|
|
8
11
|
class KasPay
|
12
|
+
# Assign methods from MetaStuff module as KasPay class methods
|
9
13
|
extend MetaStuff
|
10
14
|
|
15
|
+
# A bunch of constants belong to KasPay.
|
16
|
+
BASE_URL = "https://www.kaspay.com"
|
17
|
+
LOGIN_URL = BASE_URL + "/login"
|
18
|
+
THINGS_TO_GET = %w(name balance acc_num).map(&:to_sym)
|
19
|
+
THE_GET_METHODS = add__get__to(THINGS_TO_GET)
|
20
|
+
DATA_DIR = ENV['HOME'] + "/.kaspay"
|
21
|
+
DATA_PATH = DATA_DIR + "/kaspay.dat"
|
22
|
+
|
23
|
+
# Opening KasPay class singleton scope
|
11
24
|
class << self
|
12
|
-
|
25
|
+
|
26
|
+
# A list of kaspay.com static pages to open for the sake of
|
27
|
+
# the information.
|
28
|
+
static_pages = %w(about term) # more will come
|
29
|
+
|
30
|
+
# Iterate through static pages list to make methods named the
|
31
|
+
# the same as the member of the list. These methods will be
|
32
|
+
# the class methods of KasPay.
|
33
|
+
# Example usage:
|
34
|
+
# `about_page = KasPay.about`
|
13
35
|
static_pages.each do |page|
|
14
36
|
define_method(page) do
|
37
|
+
# Watir::Browser object is created when it's not exist.
|
15
38
|
browse BASE_URL if (defined?(@@browser)).nil?
|
16
39
|
@@browser.goto "#{BASE_URL}/#{page}"
|
17
40
|
@@browser.div(id: "body").text
|
18
41
|
end
|
19
42
|
end
|
20
43
|
|
44
|
+
# Creates Watir::Browser object for navigating web pages.
|
21
45
|
def browse url
|
22
46
|
@@headless = Headless.new
|
23
47
|
@@headless.start
|
24
48
|
@@browser = Watir::Browser.start url
|
25
49
|
end
|
26
50
|
|
51
|
+
# Creates an alias for `KasPay.term` method, which is
|
52
|
+
# `KasPay.terms`
|
27
53
|
alias_method :terms, :term
|
54
|
+
|
55
|
+
# Changes class method `new` to `login` (the more natural
|
56
|
+
# name) to make an instance of KasPay.
|
28
57
|
alias_method :login, :new
|
58
|
+
# Hidden to force the use of `login` as the class method
|
59
|
+
# for instantiation.
|
29
60
|
private :new
|
30
61
|
end
|
31
|
-
|
32
|
-
BASE_URL = "https://www.kaspay.com"
|
33
|
-
LOGIN_URL = BASE_URL + "/login"
|
34
|
-
THINGS_TO_GET = %w(name balance acc_num).map(&:to_sym)
|
35
|
-
THE_GET_METHODS = add__get__to(THINGS_TO_GET)
|
36
62
|
|
63
|
+
# Creates browser and headless methods for browsing without
|
64
|
+
# a visible browser or 'head', and email and password methods
|
65
|
+
# for reading @email and @password instance variables.
|
37
66
|
attr_accessor :browser
|
38
67
|
attr_accessor :headless
|
39
68
|
attr_reader :email
|
40
69
|
attr_reader :password
|
70
|
+
|
71
|
+
# Some methods need to be inaccessible
|
41
72
|
private :headless
|
42
73
|
private :headless=
|
43
74
|
private :password
|
44
75
|
|
45
|
-
|
46
|
-
|
76
|
+
# Accept a hash argument from class methods `login`
|
77
|
+
def initialize user = { email: nil, password: nil }
|
78
|
+
unless user[:email] == nil || user[:password] == nil
|
47
79
|
@email = user[:email]
|
48
80
|
@password = user[:password]
|
49
81
|
login
|
50
82
|
end
|
51
83
|
end
|
52
84
|
|
85
|
+
# Actually starts the login process after email and password
|
86
|
+
# provided. This is actualy different from the class method
|
87
|
+
# `login` that only creates KasPay object and compounding the
|
88
|
+
# data for login.
|
53
89
|
def login
|
54
90
|
headless = Headless.new
|
55
91
|
headless.start
|
@@ -61,16 +97,18 @@ class KasPay
|
|
61
97
|
browser.button(name: 'button').click
|
62
98
|
end
|
63
99
|
|
100
|
+
# Sets email input
|
64
101
|
def email= mail
|
65
102
|
@email = mail
|
66
103
|
login if user_data_complete?
|
67
104
|
end
|
68
105
|
|
106
|
+
# Sets password input
|
69
107
|
def password= pass
|
70
108
|
@password = pass
|
71
109
|
login if user_data_complete?
|
72
110
|
end
|
73
|
-
|
111
|
+
|
74
112
|
def current_url
|
75
113
|
browser.url
|
76
114
|
end
|
@@ -111,9 +149,26 @@ class KasPay
|
|
111
149
|
end
|
112
150
|
|
113
151
|
def user_data_complete?
|
114
|
-
email
|
152
|
+
!email.nil? && !password.nil?
|
115
153
|
end
|
116
154
|
|
155
|
+
def save_login login_name
|
156
|
+
Dir.mkdir(DATA_DIR) unless Dir.exists?(DATA_DIR)
|
157
|
+
kasdb = PStore.new(DATA_PATH)
|
158
|
+
kasdb.transaction do
|
159
|
+
kasdb[login_name] = {email: email, password: password}
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def load_login login_name
|
164
|
+
kasdb = PStore.new(DATA_PATH)
|
165
|
+
kasdb.transaction do
|
166
|
+
@email = kasdb[login_name][:email]
|
167
|
+
@password = kasdb[login_name][:password]
|
168
|
+
return kasdb[login_name]
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
117
172
|
def inspect
|
118
173
|
"#<#{self.class}:0x#{(object_id << 1).to_s(16)} logged_in=#{logged_in?}>"
|
119
174
|
end
|
@@ -122,7 +177,7 @@ class KasPay
|
|
122
177
|
if THINGS_TO_GET.include? m
|
123
178
|
send("get_#{m}")
|
124
179
|
else
|
125
|
-
|
180
|
+
super
|
126
181
|
end
|
127
182
|
end
|
128
183
|
|
@@ -137,6 +192,16 @@ class KasPay
|
|
137
192
|
|
138
193
|
private
|
139
194
|
|
195
|
+
def login_data_exists?
|
196
|
+
data = nil
|
197
|
+
begin
|
198
|
+
PStore.new("kaspay.dat").tap{|x| x.transaction{ data = x.roots}}
|
199
|
+
return (data != [])
|
200
|
+
rescue NameError
|
201
|
+
return false
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
140
205
|
def logout_link
|
141
206
|
logout_link = browser.a(href: "https://www.kaspay.com/account/logout")
|
142
207
|
end
|