capwatch 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 000f32a565b6dafa5501081aa9a2a3313b0f175c
4
- data.tar.gz: 80db47e61d7cbc641bb3df642ba5d65cbaffbf45
3
+ metadata.gz: a1948bc7ce49d8876cac71b83efadf1614338e50
4
+ data.tar.gz: 21cc5c7ce8e803633586e33cf72c603bd228a12a
5
5
  SHA512:
6
- metadata.gz: 06eab9913ef29c60ba435044ab592eafd74b6cacf9efddd44b1b6cd0c3e06930adb3e6ac37cb2fe19b275bb12f9a9d6a260d9c587eacac8981789c9556bfbc61
7
- data.tar.gz: 4750372c817c113075a02feb582c57f5dc9db79b1aa07c6521f5b696b88daaef794f0a26cb65f66c9523992616ffb9b6b722278f94aee0cba568172c1fa5f0a4
6
+ metadata.gz: 077e0e4685f19bf2e9ba99f99293879c501afccc0c0410ab2fb1a8d74508fbd02a002b75f4c58b7459671c6f5491ed7ea1f51013d90b5081165f93b396eba431
7
+ data.tar.gz: 909f0362a1623819a41d3024a1d9263436655fa525dfb27965b3d0bdcac0da4cf0a03ffe26c6cbf54065151493c2c63b79c10f636f497fcf68e4efff6465eda1
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Capwatch
2
2
 
3
3
  [![Build Status](https://travis-ci.org/bugaiov/capwatch.svg?branch=master)](https://travis-ci.org/bugaiov/capwatch)
4
- [![Coverage Status](https://coveralls.io/repos/github/bugaiov/capwatch/badge.svg?branch=master)](https://coveralls.io/github/bugaiov/capwatch?branch=master)
4
+ [![Coverage Status](https://coveralls.io/repos/github/bugaiov/capwatch/badge.svg)](https://coveralls.io/github/bugaiov/capwatch)
5
5
  [![Gem Version](https://badge.fury.io/rb/capwatch.svg)](https://badge.fury.io/rb/capwatch)
6
6
 
7
7
  Watch your cryptoportfolio in a console
@@ -13,7 +13,7 @@ Watch your cryptoportfolio in a console
13
13
  $ gem install capwatch
14
14
  $ capwatch
15
15
 
16
- Don't forget to edit `~/.capwatch` with the amount of cryptocurrencies that you hold.
16
+ Don't forget to edit `~/.capwatch` with a number of cryptocurrencies you hold.
17
17
 
18
18
  ## Telegram
19
19
 
@@ -25,7 +25,7 @@ If you want to get portfolio notifications on demand into your telegram, you'll
25
25
 
26
26
  $capwatch -e <bot_token>
27
27
 
28
- Currently Capwatch supports only two commands
28
+ Currently, Capwatch supports only two commands
29
29
 
30
30
  - `/watch` - shows the entire portfolio
31
31
  - `/cap` - shows only the footer of the portfolio, e.g. summaries
@@ -1,15 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
2
 
4
3
  require "bundler/setup"
5
4
  require "capwatch"
6
5
 
7
- # You can add fixtures and/or initialization code here to make experimenting
8
- # with your gem easier. You can also use a different console, if you like.
6
+ include Capwatch
7
+ require "pry"
9
8
 
10
- # (If you use this, don't forget to add pry to your Gemfile!)
11
- # require "pry"
12
- # Pry.start
9
+ Pry.start
13
10
 
14
- require "irb"
15
- IRB.start(__FILE__)
@@ -32,4 +32,5 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency "pry", "~> 0.10"
33
33
  spec.add_development_dependency "rake", "~> 10.0"
34
34
  spec.add_development_dependency "rspec", "~> 3.0"
35
+ spec.add_development_dependency "fakefs", "~> 0.11"
35
36
  end
@@ -16,12 +16,12 @@ if options.telegram
16
16
  Telegram.new(options.telegram).start
17
17
  else
18
18
  loop do
19
- config = FundConfig.new
19
+ config = Fund::Config.new
20
20
  provider = Providers::CoinMarketCap.new
21
21
  fund = Fund.new(provider: provider, config: config)
22
22
  system("clear")
23
23
  puts fund.console_table
24
- puts "\nHey there! This is a Demo Fund. Please set up your fund by editing the \"#{FundConfig::DEMO_CONFIG_FILE}\" in your home directory".green if config.demo?
24
+ puts "\nHey there! This is a Demo Fund. Please set up your fund by editing the \"#{Fund::Config::Local::FILE_NAME}\" in your home directory".green if config.demo?
25
25
  sleep options.tick
26
26
  end
27
27
  end
@@ -6,8 +6,7 @@ require "telegram_bot"
6
6
 
7
7
  require "capwatch/version"
8
8
  require "capwatch/fund"
9
- require "capwatch/fund_config"
10
- require "capwatch/fund_calculator"
9
+ require "capwatch/fund/config"
11
10
  require "capwatch/providers/coin_market_cap"
12
11
  require "capwatch/exchange"
13
12
  require "capwatch/cli"
@@ -41,13 +41,27 @@ module Capwatch
41
41
  end
42
42
 
43
43
  def build
44
- calculator.assign_quantity
45
- calculator.assign_prices
46
- calculator.distribution
44
+ assign_quantity
45
+ assign_prices
46
+ distribution
47
47
  end
48
48
 
49
- def calculator
50
- @calculator ||= FundCalculator.new(self)
49
+ def assign_quantity
50
+ coins.each do |coin|
51
+ coin.quantity = positions[coin.symbol]
52
+ end
53
+ end
54
+
55
+ def assign_prices
56
+ coins.each do |coin|
57
+ provider.update_coin(coin)
58
+ end
59
+ end
60
+
61
+ def distribution
62
+ coins.each do |coin|
63
+ coin.distribution = coin.value_btc / value_btc
64
+ end
51
65
  end
52
66
 
53
67
  def serialize
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+
5
+ module Capwatch
6
+ class Fund
7
+ class Config
8
+ extend Forwardable
9
+
10
+ attr_reader :parser, :source
11
+ def_delegators :@parser, :name, :positions, :name=, :positions=
12
+
13
+ def initialize(source: nil)
14
+ @source = source || dynamic_source
15
+ @parser = Parser.new(source: dynamic_source)
16
+ end
17
+
18
+ def dynamic_source
19
+ File.exist?(File.expand_path((Remote::FILE_NAME))) ? Remote.new : Local.new
20
+ end
21
+
22
+ def coins
23
+ positions.map do |symbol, quantity|
24
+ Coin.new do |coin|
25
+ coin.symbol = symbol
26
+ coin.quantity = quantity
27
+ end
28
+ end
29
+ end
30
+
31
+ def demo?
32
+ name == Demo::NAME
33
+ end
34
+
35
+ class Parser
36
+ attr_accessor :name, :positions, :raw_data
37
+
38
+ def initialize(source:)
39
+ @raw_data = source.get_data
40
+ end
41
+
42
+ def parse
43
+ @parse ||= JSON.parse(raw_data)
44
+ end
45
+
46
+ def positions
47
+ @positions ||= parse["symbols"]
48
+ end
49
+
50
+ def name
51
+ @name ||= parse["name"]
52
+ end
53
+
54
+ end
55
+
56
+ class Remote
57
+ FILE_NAME = "~/.capwatch.remote"
58
+
59
+ def fetch(remote_url)
60
+ open(remote_url).read
61
+ end
62
+
63
+ def get_data
64
+ remote_file_url = File.open(File.expand_path(FILE_NAME)).read.strip
65
+ fetch(remote_file_url)
66
+ end
67
+
68
+ end
69
+
70
+ class Local
71
+ FILE_NAME = "~/.capwatch"
72
+
73
+ def get_data
74
+ create_demo_file!
75
+ File.open(File.expand_path(FILE_NAME)).read
76
+ end
77
+
78
+ def create_demo_file!
79
+ Demo.new.create_demo_config unless File.exist?(File.expand_path((Local::FILE_NAME)))
80
+ end
81
+
82
+ end
83
+
84
+ class Demo
85
+ NAME = "Your Demo Fund"
86
+
87
+ def demo_fund_raw_data
88
+ file_path = File.join(__dir__, "..", "..", "funds", "basic.json")
89
+ demo_fund = File.expand_path(file_path)
90
+ File.open(demo_fund).read
91
+ end
92
+
93
+ def create_demo_config
94
+ file_name = File.expand_path(Local::FILE_NAME)
95
+ File.open(file_name, "w") do |file|
96
+ file.write(demo_fund_raw_data.gsub!("Basic Fund", NAME))
97
+ end
98
+ end
99
+
100
+ end
101
+
102
+ end
103
+ end
104
+
105
+ end
@@ -18,7 +18,7 @@ module Capwatch
18
18
  end
19
19
 
20
20
  def new_fund
21
- config = FundConfig.new
21
+ config = Fund::Config.new
22
22
  provider = Providers::CoinMarketCap.new
23
23
  Fund.new(provider: provider, config: config)
24
24
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Capwatch
4
- VERSION = "0.2.3"
4
+ VERSION = "0.2.4"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capwatch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Bugaiov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-16 00:00:00.000000000 Z
11
+ date: 2017-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: terminal-table
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '3.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: fakefs
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.11'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.11'
111
125
  description: Watches your cryptoportfolio
112
126
  email:
113
127
  - nick@bugaiov.com
@@ -134,8 +148,7 @@ files:
134
148
  - lib/capwatch/console.rb
135
149
  - lib/capwatch/exchange.rb
136
150
  - lib/capwatch/fund.rb
137
- - lib/capwatch/fund_calculator.rb
138
- - lib/capwatch/fund_config.rb
151
+ - lib/capwatch/fund/config.rb
139
152
  - lib/capwatch/providers/coin_market_cap.rb
140
153
  - lib/capwatch/telegram.rb
141
154
  - lib/capwatch/version.rb
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Capwatch
4
- class FundCalculator
5
-
6
- attr_accessor :fund
7
-
8
- def initialize(fund)
9
- @fund = fund
10
- end
11
-
12
- def assign_quantity
13
- fund.coins.each do |coin|
14
- coin.quantity = fund.positions[coin.symbol]
15
- end
16
- end
17
-
18
- def assign_prices
19
- fund.coins.each do |coin|
20
- fund.provider.update_coin(coin)
21
- end
22
- end
23
-
24
- def distribution
25
- fund.coins.each do |coin|
26
- coin.distribution = coin.value_btc / fund.value_btc
27
- end
28
- end
29
-
30
- end
31
- end
@@ -1,69 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Capwatch
4
- class FundConfig
5
-
6
- DEMO_CONFIG_NAME = "Your Demo Fund"
7
- DEMO_CONFIG_FILE = "~/.capwatch"
8
-
9
- attr_accessor :name, :positions, :config_path
10
-
11
- def initialize(config_path = nil)
12
- @config_path = config_path || File.expand_path(DEMO_CONFIG_FILE)
13
- demo_config! unless config_exists?
14
- end
15
-
16
- def positions
17
- @positions ||= parsed_config["symbols"]
18
- end
19
-
20
- def name
21
- @name ||= parsed_config["name"]
22
- end
23
-
24
- def parsed_config
25
- parse @config_path
26
- end
27
-
28
- def coins
29
- positions.map do |symbol, quantity|
30
- Coin.new do |coin|
31
- coin.symbol = symbol
32
- coin.quantity = quantity
33
- end
34
- end
35
- end
36
-
37
- def demo?
38
- name == DEMO_CONFIG_NAME
39
- end
40
-
41
- private
42
-
43
- def open_config(path)
44
- File.open(path).read
45
- end
46
-
47
- def parse(path)
48
- JSON.parse open_config(path)
49
- end
50
-
51
- def config_exists?
52
- File.exist? @config_path
53
- end
54
-
55
- def demo_fund
56
- file_path = File.join(__dir__, "..", "..", "lib", "funds", "basic.json")
57
- demo_fund = File.expand_path(file_path)
58
- File.open(demo_fund).read
59
- end
60
-
61
- def demo_config!
62
- @config_path = File.expand_path(@config_path)
63
- File.open(@config_path, "w") do |file|
64
- file.write(demo_fund.gsub!("Basic Fund", DEMO_CONFIG_NAME))
65
- end
66
- end
67
-
68
- end
69
- end