cryptum 0.0.230

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.
Files changed (91) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/main.yml +16 -0
  3. data/.gitignore +30 -0
  4. data/.rspec +3 -0
  5. data/.rspec_status +0 -0
  6. data/.rubocop.yml +5 -0
  7. data/.rubocop_todo.yml +250 -0
  8. data/.ruby-gemset +1 -0
  9. data/.ruby-version +1 -0
  10. data/CODE_OF_CONDUCT.md +84 -0
  11. data/Gemfile +36 -0
  12. data/LICENSE +674 -0
  13. data/README.md +72 -0
  14. data/Rakefile +19 -0
  15. data/bin/cryptum +72 -0
  16. data/bin/cryptum-forecast +199 -0
  17. data/bin/cryptum-repl +73 -0
  18. data/bin/cryptum_autoinc_version +38 -0
  19. data/build_cryptum_gem.sh +52 -0
  20. data/cryptum.gemspec +50 -0
  21. data/cryptum_container.sh +1 -0
  22. data/docker/cryptum.json +60 -0
  23. data/docker/cryptum_container.sh +59 -0
  24. data/docker/packer_secrets.json.EXAMPLE +7 -0
  25. data/docker/provisioners/cryptum.sh +11 -0
  26. data/docker/provisioners/docker_bashrc.sh +2 -0
  27. data/docker/provisioners/docker_rvm.sh +22 -0
  28. data/docker/provisioners/init_image.sh +28 -0
  29. data/docker/provisioners/post_install.sh +6 -0
  30. data/docker/provisioners/ruby.sh +16 -0
  31. data/docker/provisioners/upload_globals.sh +49 -0
  32. data/etc/bot_confs/.gitkeep +0 -0
  33. data/etc/bot_confs/BOT_CONF.TEMPLATE +10 -0
  34. data/etc/coinbase_pro.yaml.EXAMPLE +8 -0
  35. data/git_commit.sh +22 -0
  36. data/lib/cryptum/api.rb +693 -0
  37. data/lib/cryptum/bot_conf.rb +76 -0
  38. data/lib/cryptum/event/buy.rb +144 -0
  39. data/lib/cryptum/event/cancel.rb +49 -0
  40. data/lib/cryptum/event/history.rb +64 -0
  41. data/lib/cryptum/event/key_press.rb +64 -0
  42. data/lib/cryptum/event/sell.rb +120 -0
  43. data/lib/cryptum/event.rb +168 -0
  44. data/lib/cryptum/log.rb +34 -0
  45. data/lib/cryptum/matrix.rb +181 -0
  46. data/lib/cryptum/option/choice.rb +26 -0
  47. data/lib/cryptum/option.rb +161 -0
  48. data/lib/cryptum/order_book/generate.rb +111 -0
  49. data/lib/cryptum/order_book/indicator.rb +16 -0
  50. data/lib/cryptum/order_book/market_trend.rb +161 -0
  51. data/lib/cryptum/order_book/profit_margin.rb +55 -0
  52. data/lib/cryptum/order_book/weighted_avg.rb +157 -0
  53. data/lib/cryptum/order_book.rb +156 -0
  54. data/lib/cryptum/portfolio/balance.rb +123 -0
  55. data/lib/cryptum/portfolio.rb +15 -0
  56. data/lib/cryptum/ui/command.rb +274 -0
  57. data/lib/cryptum/ui/key_press_event.rb +22 -0
  58. data/lib/cryptum/ui/market_trend.rb +117 -0
  59. data/lib/cryptum/ui/order_execution.rb +478 -0
  60. data/lib/cryptum/ui/order_plan.rb +376 -0
  61. data/lib/cryptum/ui/order_timer.rb +119 -0
  62. data/lib/cryptum/ui/portfolio.rb +231 -0
  63. data/lib/cryptum/ui/signal_engine.rb +122 -0
  64. data/lib/cryptum/ui/terminal_window.rb +95 -0
  65. data/lib/cryptum/ui/ticker.rb +317 -0
  66. data/lib/cryptum/ui.rb +306 -0
  67. data/lib/cryptum/version.rb +5 -0
  68. data/lib/cryptum/web_sock/coinbase.rb +94 -0
  69. data/lib/cryptum/web_sock/event_machine.rb +182 -0
  70. data/lib/cryptum/web_sock.rb +16 -0
  71. data/lib/cryptum.rb +183 -0
  72. data/order_books/.gitkeep +0 -0
  73. data/reinstall_cryptum_gemset.sh +29 -0
  74. data/spec/lib/cryptum/api_spec.rb +10 -0
  75. data/spec/lib/cryptum/event_spec.rb +10 -0
  76. data/spec/lib/cryptum/log_spec.rb +10 -0
  77. data/spec/lib/cryptum/option_spec.rb +10 -0
  78. data/spec/lib/cryptum/order_book/generate_spec.rb +10 -0
  79. data/spec/lib/cryptum/order_book/market_trend_spec.rb +10 -0
  80. data/spec/lib/cryptum/order_book_spec.rb +10 -0
  81. data/spec/lib/cryptum/ui/command_spec.rb +10 -0
  82. data/spec/lib/cryptum/ui/ticker_spec.rb +10 -0
  83. data/spec/lib/cryptum/ui_spec.rb +10 -0
  84. data/spec/lib/cryptum/web_sock_spec.rb +10 -0
  85. data/spec/lib/cryptum_spec.rb +10 -0
  86. data/spec/spec_helper.rb +3 -0
  87. data/upgrade_Gemfile_gems.sh +20 -0
  88. data/upgrade_cryptum.sh +13 -0
  89. data/upgrade_gem.sh +4 -0
  90. data/upgrade_ruby.sh +46 -0
  91. metadata +472 -0
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faye/websocket'
4
+
5
+ module Cryptum
6
+ # This plugin is used to Establish a Web
7
+ # Socket Connection with Coinbase
8
+ module WebSock
9
+ module Coinbase
10
+ # Supported Method Parameters::
11
+ # Cryptum::WebSock.connect(
12
+ # )
13
+ public_class_method def self.connect(opts = {})
14
+ option_choice = opts[:option_choice]
15
+ env = opts[:env]
16
+
17
+ cb_pro_ws_feed = 'wss://ws-feed.pro.coinbase.com'
18
+ cb_pro_ws_feed = 'wss://ws-feed-public.sandbox.pro.coinbase.com' if env[:env] == :sandbox
19
+ if option_choice.proxy
20
+ tls_opts = {
21
+ verify_peer: false
22
+ }
23
+
24
+ proxy_opts = {
25
+ origin: option_choice.proxy
26
+ }
27
+
28
+ ws = Faye::WebSocket::Client.new(
29
+ cb_pro_ws_feed,
30
+ [],
31
+ tls: tls_opts,
32
+ proxy: proxy_opts,
33
+ ping: 30
34
+ )
35
+ else
36
+ ws = Faye::WebSocket::Client.new(
37
+ cb_pro_ws_feed,
38
+ [],
39
+ ping: 30
40
+ )
41
+ end
42
+
43
+ ws
44
+ rescue Interrupt
45
+ # Exit Gracefully if CTRL+C is Pressed During Session
46
+ Cryptum.exit_gracefully(which_self: self)
47
+ rescue StandardError => e
48
+ raise e
49
+ end
50
+
51
+ public_class_method def self.subscribe_message(opts = {})
52
+ option_choice = opts[:option_choice]
53
+ env = opts[:env]
54
+ product_id = option_choice.symbol.to_s.gsub('_', '-').upcase
55
+
56
+ api_secret = env[:api_secret]
57
+ api_signature_response = Cryptum::API.generate_signature(
58
+ api_secret: api_secret
59
+ )
60
+ api_key = env[:api_key]
61
+ api_passphrase = env[:api_passphrase]
62
+ api_timestamp = api_signature_response[:api_timestamp]
63
+ api_signature = api_signature_response[:api_signature]
64
+
65
+ "{
66
+ \"type\": \"subscribe\",
67
+ \"product_ids\": [
68
+ \"#{product_id}\"
69
+ ],
70
+ \"channels\": [
71
+ \"heartbeat\",
72
+ \"level2\",
73
+ \"ticker\",
74
+ \"user\"
75
+ ],
76
+ \"key\": \"#{api_key}\",
77
+ \"passphrase\": \"#{api_passphrase}\",
78
+ \"timestamp\": \"#{api_timestamp}\",
79
+ \"signature\": \"#{api_signature}\"
80
+ }"
81
+ rescue StandardError => e
82
+ raise e
83
+ end
84
+
85
+ # Display Usage for this Module
86
+
87
+ public_class_method def self.help
88
+ puts "USAGE:
89
+ logger = #{self}.create()
90
+ "
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,182 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eventmachine'
4
+ require 'json'
5
+
6
+ module Cryptum
7
+ # This plugin is used to Establish a Web
8
+ # Socket Connection with Coinbase
9
+ module WebSock
10
+ module EventMachine
11
+ # Supported Method Parameters::
12
+ # Cryptum::WS.run(
13
+ # )
14
+ public_class_method def self.run(opts = {})
15
+ env = opts[:env]
16
+ option_choice = opts[:option_choice]
17
+ terminal_win = opts[:terminal_win]
18
+ event_history = opts[:event_history]
19
+ indicator_status = opts[:indicator_status]
20
+
21
+ max_conn_attempts = 30
22
+ conn_attempt = 0
23
+
24
+ begin
25
+ conn_attempt += 1
26
+ event_history.reconnected = true if conn_attempt > 1
27
+
28
+ # Automatically Create Bot Configs if they don't
29
+ # Exist and Initialize Automated Trading Parameters
30
+ bot_conf = Cryptum.read_bot_conf(option_choice: option_choice)
31
+
32
+ EM.run do
33
+ # Iterate as fast as possible
34
+ # This ensures candle timing is accurate
35
+ # and everything is fast as possible
36
+ # Defaults to 100ms, 5ms is the lowest possible
37
+ delay_ms = 5
38
+ delay_ms_cast_as_decimal = delay_ms * 0.001
39
+ EM.set_quantum(delay_ms)
40
+
41
+ ws = Cryptum::WebSock::Coinbase.connect(
42
+ option_choice: option_choice,
43
+ env: env
44
+ )
45
+
46
+ ws.on :open do |_event|
47
+ ws.send(
48
+ Cryptum::WebSock::Coinbase.subscribe_message(
49
+ option_choice: option_choice,
50
+ env: env
51
+ )
52
+ )
53
+ end
54
+
55
+ ws.on :message do |event|
56
+ ai_enabled = bot_conf[:artifical_intelligence]
57
+ event_history.event = JSON.parse(
58
+ event.data,
59
+ symbolize_names: true
60
+ )
61
+ event_history.event_type = event_history.event[:type].to_s.to_sym
62
+ event_history = Cryptum::Event.parse(
63
+ env: env,
64
+ terminal_win: terminal_win,
65
+ option_choice: option_choice,
66
+ event_history: event_history,
67
+ indicator_status: indicator_status,
68
+ bot_conf: bot_conf,
69
+ ai_enabled: ai_enabled
70
+ )
71
+
72
+ # Decent for Debugging Events
73
+ # puts event_history.inspect
74
+ # Decent for Debugging MACD & RSI History
75
+ # puts indicator_status.inspect
76
+
77
+ # Detect Key Press Events
78
+ Cryptum::Event::KeyPress.detect(terminal_win: terminal_win)
79
+
80
+ # Get the F* Out (GTFO) when
81
+ # G is pressed
82
+ if terminal_win.key_press_event.key_g
83
+ event_history = Cryptum::API.gtfo(
84
+ option_choice: option_choice,
85
+ env: env,
86
+ event_history: event_history,
87
+ bot_conf: bot_conf
88
+ )
89
+ terminal_win.key_press_event.key_g = false
90
+ end
91
+
92
+ # Only Reload Bot Conf when
93
+ # R is Pressed
94
+ if terminal_win.key_press_event.key_r
95
+ bot_conf = Cryptum.read_bot_conf(option_choice: option_choice)
96
+ terminal_win.key_press_event.key_r = false
97
+ end
98
+
99
+ # Only Write Order Book to File when
100
+ # W is Pressed
101
+ if terminal_win.key_press_event.key_w
102
+ order_book_file = event_history.order_book[:path]
103
+ File.open(order_book_file, 'w') do |f|
104
+ f.puts event_history.order_book.to_json
105
+ end
106
+ terminal_win.key_press_event.key_w = false
107
+ end
108
+
109
+ # Exit if x is Pressed
110
+ if terminal_win.key_press_event.key_x
111
+ terminal_win.key_press_event.key_x = false
112
+ Cryptum.exit_gracefully(
113
+ which_self: self,
114
+ event_history: event_history,
115
+ option_choice: option_choice,
116
+ env: env
117
+ )
118
+ end
119
+ end
120
+
121
+ ws.on :close do
122
+ raise Errno::ECONNRESET
123
+ end
124
+
125
+ EM.add_periodic_timer(delay_ms_cast_as_decimal) do
126
+ order_countdown = Cryptum::UI::OrderTimer.refresh(
127
+ option_choice: option_choice,
128
+ event_history: event_history,
129
+ order_timer_win: terminal_win.order_timer_section,
130
+ indicator_status: indicator_status,
131
+ key_press_event: terminal_win.key_press_event
132
+ )
133
+
134
+ event_history.order_ready = true if order_countdown.zero? ||
135
+ order_countdown.negative?
136
+ end
137
+
138
+ EM.add_periodic_timer(option_choice.market_trend_reset) do
139
+ Cryptum::OrderBook::MarketTrend.reset(
140
+ option_choice: option_choice,
141
+ terminal_win: terminal_win,
142
+ event_history: event_history,
143
+ bot_conf: bot_conf
144
+ )
145
+ end
146
+ end
147
+ rescue Faye::WebSocket::API::ErrorEvent,
148
+ Errno::ECONNREFUSED,
149
+ Errno::ECONNRESET => e
150
+
151
+ File.open('/tmp/cryptum-errors.txt', 'a') do |f|
152
+ f.puts Time.now.strftime('%Y-%m-%d %H:%M:%S.%N %z')
153
+ f.puts "Module: #{self}"
154
+ f.puts "#{e}\n\n\n"
155
+ end
156
+
157
+ raise e if conn_attempt > max_conn_attempts
158
+
159
+ sleep 1
160
+ retry
161
+ end
162
+ rescue Interrupt
163
+ # Exit Gracefully if CTRL+C is Pressed During Session
164
+ Cryptum.exit_gracefully(
165
+ which_self: self,
166
+ event_history: event_history,
167
+ option_choice: option_choice,
168
+ env: env
169
+ )
170
+ rescue StandardError => e
171
+ raise e
172
+ end
173
+
174
+ # Display Usage for this Module
175
+ public_class_method def self.help
176
+ puts "USAGE:
177
+ logger = #{self}.create()
178
+ "
179
+ end
180
+ end
181
+ end
182
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cryptum
4
+ # This plugin is used to Establish a Web
5
+ # Socket Connection with Coinbase
6
+ module WebSock
7
+ autoload :Coinbase, 'cryptum/web_sock/coinbase'
8
+ autoload :EventMachine, 'cryptum/web_sock/event_machine'
9
+
10
+ # Display Usage for this Module
11
+
12
+ public_class_method def self.help
13
+ constants.sort
14
+ end
15
+ end
16
+ end
data/lib/cryptum.rb ADDED
@@ -0,0 +1,183 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cryptum/version'
4
+ require 'rbtrace'
5
+ require 'yaml'
6
+ require 'json'
7
+ require 'fileutils'
8
+ require 'tty-spinner'
9
+
10
+ # Root-Level Namespace for cryptum
11
+ module Cryptum
12
+ $stdout.sync = true
13
+ $stdout.flush
14
+
15
+ autoload :API, 'cryptum/api'
16
+ autoload :BotConf, 'cryptum/bot_conf'
17
+ autoload :Event, 'cryptum/event'
18
+ autoload :Indicator, 'cryptum/indicator'
19
+ autoload :Log, 'cryptum/log'
20
+ autoload :Matrix, 'cryptum/matrix'
21
+ autoload :Option, 'cryptum/option'
22
+ autoload :OrderBook, 'cryptum/order_book'
23
+ autoload :Portfolio, 'cryptum/portfolio'
24
+ autoload :ProbabilityEngine, 'cryptum/probability_engine'
25
+ autoload :UI, 'cryptum/ui'
26
+ autoload :WebSock, 'cryptum/web_sock'
27
+
28
+ public_class_method def self.bin
29
+ File.join root, 'bin'
30
+ end
31
+
32
+ public_class_method def self.etc
33
+ File.join root, 'etc'
34
+ end
35
+
36
+ public_class_method def self.lib
37
+ File.join root, 'lib'
38
+ end
39
+
40
+ public_class_method def self.order_book
41
+ File.join root, 'order_book'
42
+ end
43
+
44
+ public_class_method def self.root
45
+ File.dirname __dir__
46
+ end
47
+
48
+ public_class_method def self.open_symbol
49
+ "\u00f8"
50
+ end
51
+
52
+ public_class_method def self.up_arrow
53
+ "\u2191"
54
+ end
55
+
56
+ public_class_method def self.down_arrow
57
+ "\u2193"
58
+ end
59
+
60
+ public_class_method def self.flat_arrow
61
+ '_'
62
+ end
63
+
64
+ # Deserialize Cryptum Bot Conf
65
+ public_class_method def self.read_bot_conf(opts = {})
66
+ option_choice = opts[:option_choice]
67
+
68
+ bot_conf_file = "#{option_choice.repo_root}/etc/bot_confs/#{option_choice.symbol}_bot_conf.yaml"
69
+ unless File.exist?(bot_conf_file)
70
+ FileUtils.cp(
71
+ "#{option_choice.repo_root}/etc/bot_confs/BOT_CONF.TEMPLATE",
72
+ bot_conf_file
73
+ )
74
+ end
75
+
76
+ YAML.load_file(
77
+ bot_conf_file,
78
+ symbolize_names: true
79
+ )
80
+ rescue Errno::ENOENT, NoMethodError => e
81
+ File.open('/tmp/cryptum-errors.txt', 'a') do |f|
82
+ f.puts Time.now.strftime('%Y-%m-%d %H:%M:%S.%N %z')
83
+ f.puts "Module: #{self}"
84
+ f.puts "#{e}\n\n\n"
85
+ end
86
+
87
+ retry
88
+ rescue Interrupt
89
+ # Exit Gracefully if CTRL+C is Pressed During Session
90
+ Cryptum.exit_gracefully(which_self: self)
91
+ rescue StandardError => e
92
+ # Produce a Stacktrace for anything else
93
+ Curses.close_screen
94
+ raise e
95
+ end
96
+
97
+ # Update Key/Value Pair in Bot Conf and Serialize to YAML File
98
+ public_class_method def self.update_bot_conf_key(opts = {})
99
+ option_choice = opts[:option_choice]
100
+ bot_conf = opts[:bot_conf]
101
+ key = opts[:key].to_s.to_sym
102
+ value = opts[:value]
103
+
104
+ bot_conf_file = "#{option_choice.repo_root}/etc/bot_confs/#{option_choice.symbol}_bot_conf.yaml"
105
+
106
+ bot_conf[key] = value
107
+ File.write(bot_conf_file, bot_conf.to_yaml)
108
+ rescue Errno::ENOENT, NoMethodError => e
109
+ File.open('/tmp/cryptum-errors.txt', 'a') do |f|
110
+ f.puts Time.now.strftime('%Y-%m-%d %H:%M:%S.%N %z')
111
+ f.puts "Module: #{self}"
112
+ f.puts "#{e}\n\n\n"
113
+ end
114
+
115
+ retry
116
+ rescue Interrupt
117
+ # Exit Gracefully if CTRL+C is Pressed During Session
118
+ Cryptum.exit_gracefully(which_self: self)
119
+ rescue StandardError => e
120
+ # Produce a Stacktrace for anything else
121
+ Curses.close_screen
122
+ raise e
123
+ end
124
+
125
+ # Update Key/Value Pair in Bot Conf and Serialize to YAML File
126
+ public_class_method def self.beautify_large_number(opts = {})
127
+ value = opts[:value].to_s
128
+
129
+ split_str_num = value.split('.')
130
+ whole_num = split_str_num.first
131
+ fraction = 0
132
+ fraction = split_str_num.last if split_str_num.length > 1
133
+
134
+ is_negative = false
135
+ is_negative = true if whole_num.split('').first == '-'
136
+ whole_num = whole_num[1..] if is_negative
137
+ beautify_whole = whole_num.reverse.scan(/.{1,3}/).join(',').reverse
138
+ beautify_num = "#{beautify_whole}.#{fraction}" unless is_negative
139
+ beautify_num = "-#{beautify_whole}.#{fraction}" if is_negative
140
+
141
+ return beautify_num
142
+ rescue Interrupt
143
+ # Exit Gracefully if CTRL+C is Pressed During Session
144
+ Cryptum.exit_gracefully(which_self: self)
145
+ rescue StandardError => e
146
+ # Produce a Stacktrace for anything else
147
+ Curses.close_screen
148
+ raise e
149
+ end
150
+
151
+ public_class_method def self.exit_gracefully(opts = {})
152
+ which_self = opts[:which_self]
153
+ event_history = opts[:event_history]
154
+ option_choice = opts[:option_choice]
155
+ env = opts[:env]
156
+
157
+ # Clear out candle data to ensure
158
+ # Cryptum Statistics Only Apply to
159
+ # Live Sessions
160
+ if event_history
161
+ order_book_file = event_history.order_book[:path]
162
+ File.open(order_book_file, 'w') do |f|
163
+ f.puts event_history.order_book.to_json
164
+ end
165
+ end
166
+
167
+ Curses.close_screen
168
+ puts "Interrupt detected in #{which_self}...goodbye."
169
+
170
+ exit 0
171
+ rescue NameError
172
+ puts "\nInterrupt detected in #{which_self}...goodbye."
173
+
174
+ exit 0
175
+ rescue StandardError => e
176
+ # Produce a Stacktrace for anything else
177
+ raise e
178
+ end
179
+
180
+ public_class_method def self.help
181
+ constants.sort
182
+ end
183
+ end
File without changes
@@ -0,0 +1,29 @@
1
+ #!/bin/bash --login
2
+ # USE THIS SCRIPT WHEN UPGRADING VERSIONS IN Gemfile
3
+ if [[ $CRYPTUM_ROOT == '' ]]; then
4
+ if [[ ! -d '/opt/cryptum' ]]; then
5
+ cryptum_root=$(pwd)
6
+ else
7
+ cryptum_root='/opt/cryptum'
8
+ fi
9
+ else
10
+ cryptum_root="${CRYPTUM_ROOT}"
11
+ fi
12
+
13
+ if [[ -f '/etc/profile.d/rvm.sh' ]]; then
14
+ source /etc/profile.d/rvm.sh
15
+ fi
16
+
17
+ ruby_version=`cat ${cryptum_root}/.ruby-version`
18
+ ruby_gemset=`cat ${cryptum_root}/.ruby-gemset`
19
+ rvm use ruby-$ruby_version@global
20
+ rvm gemset --force delete $ruby_gemset
21
+ if [[ -f "${cryptum_root}/Gemfile.lock" ]]; then
22
+ rvmsudo rm $cryptum_root/Gemfile.lock
23
+ fi
24
+
25
+ rvm use ruby-$ruby_version@$ruby_gemset --create
26
+ export rvmsudo_secure_path=1
27
+ rvmsudo gem install bundler
28
+ rvmsudo bundle install
29
+ rvm --default ruby-$ruby_version@$ruby_gemset
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Cryptum::API do
6
+ it 'should display information for existing help method' do
7
+ help_response = Cryptum::API
8
+ expect(help_response).to respond_to :help
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Cryptum::Event do
6
+ it 'should display information for existing help method' do
7
+ help_response = Cryptum::Event
8
+ expect(help_response).to respond_to :help
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Cryptum::Log do
6
+ it 'should display information for existing help method' do
7
+ help_response = Cryptum::Log
8
+ expect(help_response).to respond_to :help
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Cryptum::Option do
6
+ it 'should return data for help method' do
7
+ help_response = Cryptum::Option.help
8
+ expect(help_response).not_to be_nil
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Cryptum::OrderBook::Generate do
6
+ it 'should display information for existing help method' do
7
+ help_response = Cryptum::OrderBook::Generate
8
+ expect(help_response).to respond_to :help
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Cryptum::OrderBook::MarketTrend do
6
+ it 'should display information for existing help method' do
7
+ help_response = Cryptum::OrderBook::MarketTrend
8
+ expect(help_response).to respond_to :help
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Cryptum::OrderBook do
6
+ it 'should display information for existing help method' do
7
+ help_response = Cryptum::OrderBook
8
+ expect(help_response).to respond_to :help
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Cryptum::UI::Command do
6
+ it 'should display information for existing help method' do
7
+ help_response = Cryptum::UI::Command
8
+ expect(help_response).to respond_to :help
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Cryptum::UI::Ticker do
6
+ it 'should display information for existing help method' do
7
+ help_response = Cryptum::UI::Ticker
8
+ expect(help_response).to respond_to :help
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Cryptum::UI do
6
+ it 'should return data for help method' do
7
+ help_response = Cryptum::UI.help
8
+ expect(help_response).not_to be_nil
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Cryptum::WebSock do
6
+ it 'should display information for existing help method' do
7
+ help_response = Cryptum::WebSock
8
+ expect(help_response).to respond_to :help
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Cryptum do
6
+ it 'should return data for help method' do
7
+ help_response = Cryptum.help
8
+ expect(help_response).not_to be_nil
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cryptum'
@@ -0,0 +1,20 @@
1
+ #!/bin/bash --login
2
+ cat Gemfile | awk '{print $2}' | grep -E "^'.+$" | grep -v -e rubygems.org | while read gem; do
3
+ this_gem=`echo $gem | sed "s/'//g" | sed 's/\,//g'`
4
+ latest_version=`gem search -r $this_gem | grep -E "^${this_gem}\s.+$" | awk '{print $2}' | sed 's/(//g' | sed 's/)//g' | sed 's/,//g'`
5
+ echo "${this_gem} => $latest_version"
6
+ os=`uname -s`
7
+ if [[ $os == 'Linux' ]]; then
8
+ if [[ $this_gem == 'bundler' ]]; then
9
+ sed -i "s/^gem '${this_gem}'.*$/gem '${this_gem}', '>=${latest_version}'/g" Gemfile
10
+ else
11
+ sed -i "s/^gem '${this_gem}'.*$/gem '${this_gem}', '${latest_version}'/g" Gemfile
12
+ fi
13
+ elif [[ $os == 'Darwin' ]]; then
14
+ if [[ $this_gem == 'bundler' ]]; then
15
+ sed -i '' "s/^gem '${this_gem}'.*$/gem '${this_gem}', '>=${latest_version}'/g" Gemfile
16
+ else
17
+ sed -i '' "s/^gem '${this_gem}'.*$/gem '${this_gem}', '${latest_version}'/g" Gemfile
18
+ fi
19
+ fi
20
+ done
@@ -0,0 +1,13 @@
1
+ #!/bin/bash --login
2
+ if [[ $CRYPTUM_ROOT == '' ]]; then
3
+ if [[ ! -d '/opt/cryptum' ]]; then
4
+ cryptum_root=$(pwd)
5
+ else
6
+ cryptum_root='/opt/cryptum'
7
+ fi
8
+ else
9
+ cryptum_root="${CRYPTUM_ROOT}"
10
+ fi
11
+
12
+ export rvmsudo_secure_path=1
13
+ rvmsudo /bin/bash --login -c "cd ${cryptum_root} && ./build_cryptum_gem.sh"