fine_ants 1.2.0 → 1.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fa66f515564aac911448db2c86e2657720b037ff
4
- data.tar.gz: 2db921e79de8fb46b7f8c1321c2e12180c04c772
3
+ metadata.gz: bdfd25caa322ccfb9cadc91f34bbe37193220c56
4
+ data.tar.gz: 32edb4b9d2e7d33dcda39819df4cb01167f0d8e9
5
5
  SHA512:
6
- metadata.gz: 64f0b77656425eabd3ce562f1c19f96cd32b98030a2bf4111b40965246a32c09b68194230e85afc26e1535d585e10a1cebe69321462a5c915774688e6433f13a
7
- data.tar.gz: 27de194d5cfbca097eebd86926261d2f9b8a4d00abcfd42347de93fe5cf2abbe1955d374d6a416abe16763d7ccfc4340f5092859b60360a5939db781f9139c32
6
+ metadata.gz: 8266c49f0559ca3a1207f01c8423f72eddbc3fe469cf310437c60acae857b55d211f4af3bfa02eddd94444c3fcf975d9a9f3bad451ecfd695f0021f53376f877
7
+ data.tar.gz: 20df6842aec3549e9a84a46d5ff22351aaedb181c47d07b32a4767bec156475c6eb5f973b6b316a99f3607ac74e0b485cb03ca3d6f8532f1d4ab821f7b4377f9
data/README.md CHANGED
@@ -61,6 +61,8 @@ Right now, FineAnts ships with adapters for:
61
61
  * [PNC Personal Banking](https://www.pnc.com/en/personal-banking.html)
62
62
  * [Betterment](https://www.betterment.com)
63
63
  * [Chase](https://www.chase.com)
64
+ * [Simple](https://www.simple.com)
65
+ * [Target REDcard](https://rcam.target.com)
64
66
 
65
67
  You can also implement your own adapter and pass it to `FineAnts.download`. The
66
68
  expected public contract of an adapter is:
@@ -0,0 +1,55 @@
1
+ require "bigdecimal"
2
+
3
+ module FineAnts
4
+ module Adapters
5
+ class Simple
6
+ def initialize(credentials)
7
+ @user = credentials[:user]
8
+ @password = credentials[:password]
9
+ end
10
+
11
+ def login
12
+ visit "https://www.simple.com"
13
+ click_link "Log In"
14
+
15
+ fill_in "username", :with => @user
16
+ fill_in "passphrase", :with => @password
17
+ click_button "Sign in"
18
+ verify_login!
19
+ end
20
+
21
+ def download
22
+ balance = find(".sts-available").find("b").text
23
+ available_balance = find("#sts-flag").text.strip
24
+ user_name = find(".masthead-username").text
25
+
26
+ [
27
+ {
28
+ :adapter => :simple,
29
+ :user => @user,
30
+ :id => "#{user_name}",
31
+ :name => "#{user_name}",
32
+ :amount => parse_currency(balance),
33
+ :available_amount => parse_currency(available_balance),
34
+ }
35
+ ].tap{ logout! }
36
+ end
37
+
38
+ private
39
+ def logout!
40
+ visit "https://bank.simple.com/signout"
41
+ end
42
+
43
+ def parse_currency(currency_string)
44
+ BigDecimal.new(currency_string.match(/\$?(.*)$/)[1].gsub(/,/,''))
45
+ end
46
+
47
+ def verify_login!
48
+ find("h2", text: "Safe-to-Spend")
49
+ rescue Capybara::ElementNotFound
50
+ raise FineAnts::LoginFailedError.new
51
+ end
52
+ end
53
+ end
54
+ end
55
+
@@ -0,0 +1,60 @@
1
+ require "bigdecimal"
2
+
3
+ module FineAnts
4
+ module Adapters
5
+ class Target
6
+ def initialize(credentials)
7
+ @user = credentials[:user]
8
+ @password = credentials[:password]
9
+ end
10
+
11
+ def login
12
+ visit "https://rcam.target.com/default.aspx"
13
+
14
+ fill_in "Login_UserName", :with => @user
15
+ fill_in "Login_Password", :with => @password
16
+ find("#Login_btnSignIn_btnSignIn").click
17
+
18
+ verify_login!
19
+ end
20
+
21
+ def download
22
+ balance = find("#AcctSummaryRCAM_AcctTbl_CrntBal").text
23
+ available_balance = find("#AcctSummaryRCAM_AcctTbl_CredAvail").text
24
+ next_due_date = find("#AcctSummaryRCAM_AcctTbl_PmtDueDt").text
25
+ card_number = find("#AccountAcctNum").text.delete("For your REDcard ending in: ")
26
+
27
+ [
28
+ {
29
+ :adapter => :target,
30
+ :user => @user,
31
+ :id => "REDcard #{card_number}",
32
+ :name => "REDcard #{card_number}",
33
+ :type => :credit_card,
34
+ :amount => -1 * parse_currency(balance),
35
+ :available_amount => parse_currency(available_balance),
36
+ :next_due_date => parse_due_date(next_due_date)
37
+ }
38
+ ]
39
+ end
40
+
41
+ private
42
+
43
+ def parse_currency(currency_string)
44
+ BigDecimal.new(currency_string.match(/\$(.*)$/)[1].delete(","))
45
+ end
46
+
47
+ def parse_due_date(date_string)
48
+ return nil if date_string == "-"
49
+ date_string
50
+ end
51
+
52
+ def verify_login!
53
+ find "span#DefaultPageTitle", text: "View Account Summary"
54
+ rescue Capybara::ElementNotFound
55
+ raise FineAnts::LoginFailedError.new
56
+ end
57
+ end
58
+ end
59
+ end
60
+
@@ -1,9 +1,7 @@
1
1
  require "capybara/dsl"
2
2
 
3
- require "fine_ants/adapters/vanguard"
4
- require "fine_ants/adapters/pnc"
5
- require "fine_ants/adapters/betterment"
6
- require "fine_ants/adapters/chase"
3
+ # Autoload all predefined adapters
4
+ Dir[File.join(File.dirname(__FILE__), 'adapters', '*.rb')].each { |f| require f }
7
5
 
8
6
  module FineAnts
9
7
  module Adapters
@@ -1,3 +1,3 @@
1
1
  module FineAnts
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fine_ants
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Searls
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-11-30 00:00:00.000000000 Z
11
+ date: 2016-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capybara
@@ -100,6 +100,8 @@ files:
100
100
  - lib/fine_ants/adapters/betterment.rb
101
101
  - lib/fine_ants/adapters/chase.rb
102
102
  - lib/fine_ants/adapters/pnc.rb
103
+ - lib/fine_ants/adapters/simple.rb
104
+ - lib/fine_ants/adapters/target.rb
103
105
  - lib/fine_ants/adapters/vanguard.rb
104
106
  - lib/fine_ants/capybara_setup.rb
105
107
  - lib/fine_ants/login_failed_error.rb