journala 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/journala.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "journala"
8
- s.version = "0.1.3"
8
+ s.version = "0.1.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Robert Kaufman"]
@@ -26,7 +26,9 @@ Gem::Specification.new do |s|
26
26
  "lib/journala/entry.rb",
27
27
  "lib/journala/journal.rb",
28
28
  "lib/journala/row.rb",
29
- "lib/journala/value.rb"
29
+ "lib/journala/value.rb",
30
+ "lib/journala/parsers/chase.rb",
31
+ "lib/journala/parsers.rb"
30
32
  ]
31
33
  s.homepage = "http://github.com/kirkland/journala"
32
34
  s.licenses = ["MIT"]
@@ -0,0 +1 @@
1
+ require 'journala/parsers/chase'
@@ -0,0 +1,59 @@
1
+ require 'hpricot'
2
+ require 'json'
3
+
4
+ module Journala
5
+ module Parsers
6
+ class Chase
7
+
8
+ # for debugging. in normal usage you only need @journal, which is returned anyway
9
+ attr_accessor :doc, :json, :data, :journal
10
+
11
+ def self.parse(input_filename="Account Activity.html")
12
+ @doc = open(input_filename) {|f| Hpricot(f) }
13
+
14
+ # data is contained inside a script tag
15
+ script = @doc.search("#chaseui-pagecontent").search("script")[0].inner_html
16
+
17
+ @data = script.match(/activity = ({.*})/)[1]
18
+ @json = JSON.parse(@data)
19
+
20
+ @journal = Journal.new
21
+
22
+ @json['Posted'].each do |raw_entry|
23
+ entry = Entry.new
24
+
25
+ m,d,y = raw_entry['tranDate'].split('/')
26
+ entry.date = %{#{y}/#{m.rjust(2, '0')}/#{d.rjust(2, '0')}}
27
+
28
+ m,d,y = raw_entry['postDate'].split('/')
29
+ posted_date = %{#{y}/#{m.rjust(2, '0')}/#{d.rjust(2, '0')}}
30
+ amount = raw_entry['amount'].gsub(/\$/, '')
31
+ merchant = raw_entry['merchantName']
32
+ trans_type = raw_entry['tranType']
33
+ trans_id = raw_entry['tranId']
34
+
35
+ entry.description = "#{merchant} (posted #{posted_date}) (transaction id: #{trans_id})"
36
+
37
+ r1 = Row.new
38
+ r1.account = 'Liabilities:Amazon/Chase CC'
39
+ r1.amount = 0 - amount.to_f
40
+ entry.rows << r1
41
+
42
+ r2 = Row.new
43
+ r2.account = trans_type == 'Payment' ? 'Assets:Current Assets:Central Bank' : 'Expenses:Uncategorized'
44
+ r2.amount = 0 - r1.amount
45
+ entry.rows << r2
46
+
47
+
48
+ if !['Sale', 'Return', 'Payment'].include?(trans_type)
49
+ raise "oh no found type: #{entry.type} ! what do i do?!"
50
+ end
51
+
52
+ @journal.entries << entry
53
+ end
54
+
55
+ @journal
56
+ end
57
+ end
58
+ end
59
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: journala
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-11-25 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70099074010140 !ruby/object:Gem::Requirement
16
+ requirement: &70128459515540 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70099074010140
24
+ version_requirements: *70128459515540
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: jeweler
27
- requirement: &70099074009560 !ruby/object:Gem::Requirement
27
+ requirement: &70128459514600 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70099074009560
35
+ version_requirements: *70128459514600
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rcov
38
- requirement: &70099074008780 !ruby/object:Gem::Requirement
38
+ requirement: &70128459513740 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70099074008780
46
+ version_requirements: *70128459513740
47
47
  description: a library that reads and write ledger format ledger files
48
48
  email: rob.m.kaufman@gmail.com
49
49
  executables: []
@@ -62,6 +62,8 @@ files:
62
62
  - lib/journala/journal.rb
63
63
  - lib/journala/row.rb
64
64
  - lib/journala/value.rb
65
+ - lib/journala/parsers/chase.rb
66
+ - lib/journala/parsers.rb
65
67
  homepage: http://github.com/kirkland/journala
66
68
  licenses:
67
69
  - MIT