huginn_ynab_agent 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c1ebd6448202099af8545e72e99b4a9b165338f3ab33db2704343185cf0372da
4
+ data.tar.gz: 34047a4ad974779a30daf2062eb893330cce19b1dc734e60bdbd225af626aa09
5
+ SHA512:
6
+ metadata.gz: df3a6e55f1c02b6225c04051ffd2f9c16aacff9ef94c2727372d7f056d9274628d321354520d490b38d3263829d09fecea0ecd15cc383a8ec2f9fcc48ac4d501
7
+ data.tar.gz: fd46136b8ba1389ca615b32239dd4a281d774bf62e340dc3cc9765f5ed0b1c318a3a983dcd4c82917aeb96c4ec58db4bf182e4108f419372412ac58a065d2d06
@@ -0,0 +1,3 @@
1
+ require 'huginn_agent'
2
+
3
+ HuginnAgent.register 'huginn_ynab_agent/ynab_agent'
@@ -0,0 +1,57 @@
1
+ module Agents
2
+ class YnabAgent < Agent
3
+ include FormConfigurable
4
+
5
+ can_dry_run!
6
+ cannot_be_scheduled!
7
+
8
+ def working?
9
+ true
10
+ end
11
+
12
+ def default_options
13
+ {}
14
+ end
15
+
16
+ form_configurable :ynab_token
17
+ def validate_options
18
+ if options['ynab_token'].blank?
19
+ errors.add(:base, 'YNAB access token is required')
20
+ end
21
+ end
22
+
23
+ def default_options
24
+ {'ynab_token' => "{% credential YNAB_TOKEN %}"}
25
+ end
26
+
27
+ def receive(incoming_events)
28
+ incoming_events.each do |event|
29
+ log("Creating transaction with payee #{event.payload['payee_name']}")
30
+ payload = {
31
+ 'transaction' => {
32
+ 'account_id' => event.payload['account_id'],
33
+ 'category_id' => event.payload['category_id'],
34
+ 'payee_name' => event.payload['payee_name'],
35
+ 'date' => event.payload['date'] || Date.today.to_s,
36
+ 'amount' => (event.payload['amount'] * 1000).to_i,
37
+ 'memo' => event.payload['memo'] || '',
38
+ 'cleared' => event.payload['cleared'] || 'uncleared',
39
+ },
40
+ }
41
+
42
+ url = "https://api.youneedabudget.com/v1/budgets/#{event.payload['budget_id']}/transactions"
43
+ resp = Faraday.post(url, payload.to_json) do |req|
44
+ req.headers['Content-Type'] = 'application/json'
45
+ req.headers['Authorization'] = "Bearer #{interpolated['ynab_token']}"
46
+ end
47
+
48
+ if resp.status < 200 || resp.status >= 300
49
+ error("Received bad response from YNAB (#{resp.status}): #{resp.body}")
50
+ else
51
+ log("Success!\n Response: #{resp.body}")
52
+ create_event payload: JSON.parse(resp.body)['data']
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: huginn_ynab_agent
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Steve Gattuso
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-01-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 12.3.3
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 12.3.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: huginn_agent
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description:
56
+ email:
57
+ - steve@stevegattuso.me
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/huginn_ynab_agent.rb
63
+ - lib/huginn_ynab_agent/ynab_agent.rb
64
+ homepage: https://github.com/stevenleeg/huginn_ynab_agent
65
+ licenses: []
66
+ metadata: {}
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubygems_version: 3.1.2
83
+ signing_key:
84
+ specification_version: 4
85
+ summary: Huginn Agent to interact with the YNAB API
86
+ test_files: []