cryptum 0.0.358 → 0.0.360

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  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 +31 -0
  7. data/.rubocop_todo.yml +36 -0
  8. data/.ruby-gemset +1 -0
  9. data/.ruby-version +1 -0
  10. data/CODE_OF_CONDUCT.md +84 -0
  11. data/Gemfile +38 -0
  12. data/LICENSE +674 -0
  13. data/README.md +87 -0
  14. data/Rakefile +19 -0
  15. data/bin/cryptum +73 -0
  16. data/bin/cryptum-forecast +200 -0
  17. data/bin/cryptum-repl +73 -0
  18. data/bin/cryptum_autoinc_version +38 -0
  19. data/build_cryptum_gem.sh +58 -0
  20. data/cryptum.gemspec +52 -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/etc/open_ai.yaml.EXAMPLE +1 -0
  36. data/git_commit.sh +22 -0
  37. data/lib/cryptum/api.rb +688 -0
  38. data/lib/cryptum/bot_conf.rb +197 -0
  39. data/lib/cryptum/event/bot_conf.rb +34 -0
  40. data/lib/cryptum/event/buy.rb +145 -0
  41. data/lib/cryptum/event/cancel.rb +35 -0
  42. data/lib/cryptum/event/exit.rb +35 -0
  43. data/lib/cryptum/event/gtfo.rb +36 -0
  44. data/lib/cryptum/event/history.rb +108 -0
  45. data/lib/cryptum/event/key_press.rb +64 -0
  46. data/lib/cryptum/event/order_book.rb +34 -0
  47. data/lib/cryptum/event/pane.rb +65 -0
  48. data/lib/cryptum/event/parse.rb +181 -0
  49. data/lib/cryptum/event/scroll.rb +200 -0
  50. data/lib/cryptum/event/sell.rb +124 -0
  51. data/lib/cryptum/event.rb +27 -0
  52. data/lib/cryptum/log.rb +34 -0
  53. data/lib/cryptum/matrix.rb +181 -0
  54. data/lib/cryptum/open_ai.rb +156 -0
  55. data/lib/cryptum/option/choice.rb +28 -0
  56. data/lib/cryptum/option.rb +206 -0
  57. data/lib/cryptum/order_book/generate.rb +114 -0
  58. data/lib/cryptum/order_book/indicator.rb +15 -0
  59. data/lib/cryptum/order_book/market_trend.rb +137 -0
  60. data/lib/cryptum/order_book/profit_margin.rb +55 -0
  61. data/lib/cryptum/order_book.rb +19 -0
  62. data/lib/cryptum/portfolio/balance.rb +123 -0
  63. data/lib/cryptum/portfolio.rb +15 -0
  64. data/lib/cryptum/ui/command.rb +314 -0
  65. data/lib/cryptum/ui/key_press_event.rb +33 -0
  66. data/lib/cryptum/ui/market_trend.rb +77 -0
  67. data/lib/cryptum/ui/order_execute_details.rb +297 -0
  68. data/lib/cryptum/ui/order_execution.rb +573 -0
  69. data/lib/cryptum/ui/order_plan.rb +512 -0
  70. data/lib/cryptum/ui/order_plan_details.rb +240 -0
  71. data/lib/cryptum/ui/order_timer.rb +136 -0
  72. data/lib/cryptum/ui/portfolio.rb +221 -0
  73. data/lib/cryptum/ui/signal_engine.rb +109 -0
  74. data/lib/cryptum/ui/terminal_window.rb +111 -0
  75. data/lib/cryptum/ui/ticker.rb +319 -0
  76. data/lib/cryptum/ui.rb +343 -0
  77. data/lib/cryptum/version.rb +5 -0
  78. data/lib/cryptum/web_sock/coinbase.rb +104 -0
  79. data/lib/cryptum/web_sock/event_machine.rb +276 -0
  80. data/lib/cryptum/web_sock.rb +16 -0
  81. data/lib/cryptum.rb +120 -0
  82. data/order_books/.gitkeep +0 -0
  83. data/reinstall_cryptum_gemset.sh +29 -0
  84. data/spec/lib/cryptum/api_spec.rb +10 -0
  85. data/spec/lib/cryptum/event_spec.rb +10 -0
  86. data/spec/lib/cryptum/log_spec.rb +10 -0
  87. data/spec/lib/cryptum/option_spec.rb +10 -0
  88. data/spec/lib/cryptum/order_book/generate_spec.rb +10 -0
  89. data/spec/lib/cryptum/order_book/market_trend_spec.rb +10 -0
  90. data/spec/lib/cryptum/order_book_spec.rb +10 -0
  91. data/spec/lib/cryptum/ui/command_spec.rb +10 -0
  92. data/spec/lib/cryptum/ui/ticker_spec.rb +10 -0
  93. data/spec/lib/cryptum/ui_spec.rb +10 -0
  94. data/spec/lib/cryptum/web_sock_spec.rb +10 -0
  95. data/spec/lib/cryptum_spec.rb +10 -0
  96. data/spec/spec_helper.rb +3 -0
  97. data/upgrade_Gemfile_gems.sh +20 -0
  98. data/upgrade_cryptum.sh +13 -0
  99. data/upgrade_gem.sh +4 -0
  100. data/upgrade_ruby.sh +45 -0
  101. metadata +112 -9
@@ -0,0 +1,276 @@
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
+ # This module is the primary module to handle
11
+ # Web Socket Events from Coinbase
12
+ module EventMachine
13
+ # Supported Method Parameters::
14
+ # Cryptum::WS.run(
15
+ # )
16
+ public_class_method def self.run(opts = {})
17
+ env = opts[:env]
18
+ option_choice = opts[:option_choice]
19
+ terminal_win = opts[:terminal_win]
20
+ event_history = opts[:event_history]
21
+ indicator_status = opts[:indicator_status]
22
+ bot_conf = opts[:bot_conf]
23
+
24
+ max_conn_attempts = 30
25
+ conn_attempt = 0
26
+
27
+ begin
28
+ conn_attempt += 1
29
+ event_history.reconnected = true if conn_attempt > 1
30
+
31
+ EM.run do
32
+ # Iterate as fast as possible
33
+ # This ensures candle timing is accurate
34
+ # and everything is fast as possible
35
+ # Defaults to 100ms, 5ms is the lowest possible
36
+ delay_ms = 5
37
+ delay_ms_cast_as_decimal = delay_ms * 0.001
38
+ EM.set_quantum(delay_ms)
39
+
40
+ ws = Cryptum::WebSock::Coinbase.connect(
41
+ option_choice: option_choice,
42
+ env: env
43
+ )
44
+
45
+ ws.on :open do |_event|
46
+ ws.send(
47
+ Cryptum::WebSock::Coinbase.subscribe_message(
48
+ option_choice: option_choice,
49
+ env: env
50
+ )
51
+ )
52
+ end
53
+
54
+ ws.on :message do |event|
55
+ # TODO: The Speed of the UI is dictated by the
56
+ # Frequency of WebSocket Messages Coming Through.
57
+ # Explore another way to decouple required events
58
+ # (such as keypresses) from only being triggered
59
+ # when messages come through.
60
+
61
+ event_history.event = JSON.parse(
62
+ event.data,
63
+ symbolize_names: true
64
+ )
65
+ event_history.event_type = event_history.event[:type].to_s.to_sym
66
+
67
+ event_history = Cryptum::Event::Parse.websocket_msg(
68
+ env: env,
69
+ terminal_win: terminal_win,
70
+ option_choice: option_choice,
71
+ event_history: event_history,
72
+ indicator_status: indicator_status,
73
+ bot_conf: bot_conf
74
+ )
75
+
76
+ # Detect Key Press Events
77
+ Cryptum::Event::KeyPress.detect(terminal_win: terminal_win)
78
+
79
+ # Cancel ALL Open Orders when
80
+ # C is pressed
81
+ if terminal_win.key_press_event.key_c
82
+ Cryptum::Event::Cancel.open_orders(
83
+ terminal_win: terminal_win,
84
+ option_choice: option_choice,
85
+ env: env
86
+ )
87
+ end
88
+
89
+ # Get the F* Out (GTFO) when
90
+ # G is pressed
91
+ if terminal_win.key_press_event.key_g
92
+ event_history = Cryptum::Event::GTFO.now(
93
+ terminal_win: terminal_win,
94
+ option_choice: option_choice,
95
+ env: env,
96
+ event_history: event_history,
97
+ bot_conf: bot_conf
98
+ )
99
+ end
100
+
101
+ # Reload Bot Conf when r is Pressed
102
+ if terminal_win.key_press_event.key_r
103
+ bot_conf = Cryptum::Event::BotConf.reload(
104
+ terminal_win: terminal_win,
105
+ event_history: event_history,
106
+ option_choice: option_choice
107
+ )
108
+ end
109
+
110
+ # Only Write Order Book to File when
111
+ # W is Pressed
112
+ if terminal_win.key_press_event.key_w
113
+ Cryptum::Event::OrderBook.write(
114
+ terminal_win: terminal_win,
115
+ event_history: event_history
116
+ )
117
+ end
118
+
119
+ # Exit if x is Pressed
120
+ if terminal_win.key_press_event.key_x
121
+ Cryptum::Event::Exit.gracefully(
122
+ terminal_win: terminal_win,
123
+ event_history: event_history,
124
+ option_choice: option_choice,
125
+ env: env
126
+ )
127
+ end
128
+
129
+ # TAB through Order Plan / Order Execution Window Panes
130
+ if terminal_win.key_press_event.key_tab
131
+ Cryptum::Event::Pane.switch(
132
+ terminal_win: terminal_win,
133
+ event_history: event_history
134
+ )
135
+ end
136
+
137
+ # Scroll Up Order Plan / Order Execution Window Panes
138
+ if terminal_win.key_press_event.key_up_arrow
139
+ Cryptum::Event::Scroll.up(
140
+ terminal_win: terminal_win,
141
+ event_history: event_history
142
+ )
143
+ end
144
+
145
+ # Scroll Down Order Plan / Order Execution Window Panes
146
+ if terminal_win.key_press_event.key_down_arrow
147
+ Cryptum::Event::Scroll.down(
148
+ terminal_win: terminal_win,
149
+ event_history: event_history
150
+ )
151
+ end
152
+
153
+ # Scroll Up Order Plan / Order Execution Window Panes Faster
154
+ if terminal_win.key_press_event.key_page_up
155
+ Cryptum::Event::Scroll.page_up(
156
+ terminal_win: terminal_win,
157
+ event_history: event_history
158
+ )
159
+ end
160
+
161
+ # Scroll Down Order Plan / Order Execution Window Panes Faster
162
+ if terminal_win.key_press_event.key_page_down
163
+ Cryptum::Event::Scroll.page_down(
164
+ terminal_win: terminal_win,
165
+ event_history: event_history
166
+ )
167
+ end
168
+
169
+ # Scroll to Top of Order Plan / Order Execution Window Panes
170
+ if terminal_win.key_press_event.key_home
171
+ Cryptum::Event::Scroll.top(
172
+ terminal_win: terminal_win,
173
+ event_history: event_history
174
+ )
175
+ end
176
+
177
+ # Scroll to Bottom of Order Plan / Order Execution Window Panes
178
+ if terminal_win.key_press_event.key_end
179
+ Cryptum::Event::Scroll.bottom(
180
+ terminal_win: terminal_win,
181
+ event_history: event_history
182
+ )
183
+ end
184
+
185
+ # Open / Close Order Plan / Order Execution Details Window
186
+ if terminal_win.key_press_event.key_enter
187
+ Cryptum::Event::Pane.toggle_details(
188
+ terminal_win: terminal_win,
189
+ event_history: event_history
190
+ )
191
+ end
192
+ end
193
+
194
+ ws.on :close do
195
+ raise Errno::ECONNRESET
196
+ end
197
+
198
+ EM.add_periodic_timer(delay_ms_cast_as_decimal) do
199
+ order_countdown = Cryptum::UI::OrderTimer.refresh(
200
+ option_choice: option_choice,
201
+ event_history: event_history,
202
+ order_timer_win: terminal_win.order_timer_section,
203
+ indicator_status: indicator_status,
204
+ key_press_event: terminal_win.key_press_event
205
+ )
206
+
207
+ if (order_countdown.zero? || order_countdown.negative?) &&
208
+ !event_history.red_pill
209
+
210
+ # Ready to Submit a BUY order
211
+ event_history.order_ready = true
212
+
213
+ # Reload Bot Conf (i.e. Risk Allocation),
214
+ # Recalculate Order Plan, and Write to File
215
+ terminal_win.key_press_event.key_r = true
216
+ end
217
+ end
218
+
219
+ EM.add_periodic_timer(option_choice.market_trend_reset) do
220
+ # NOTE: To ensure the integrity of event_history is maintained,
221
+ # changes to its contenta _MUST_ stay in thos block.
222
+ event_history.order_book[:market_trend][:buy] = 0
223
+ event_history.order_book[:market_trend][:sell] = 0
224
+ event_history.order_book[:last_trend_reset] = Time.now.strftime(
225
+ '%Y-%m-%d %H:%M:%S.%N%z'
226
+ )
227
+
228
+ # Reload Bot Conf (i.e. Risk Allocation)
229
+ # Recalculate Order Plan, and Write to File
230
+ terminal_win.key_press_event.key_r = true
231
+ # IMPORTANT:
232
+ # Wait for Order Plan recalculation to occur
233
+ # once Cryptum::UI::OrderPlan is refreshed
234
+ # in Cryptum::Event _BEFORE_ writing the order
235
+ # book to file.
236
+ end
237
+ end
238
+ rescue Faye::WebSocket::API::ErrorEvent,
239
+ Errno::ECONNREFUSED,
240
+ Errno::ECONNRESET,
241
+ LoadError => e
242
+
243
+ File.open('/tmp/cryptum-errors.txt', 'a') do |f|
244
+ f.puts Time.now.strftime('%Y-%m-%d %H:%M:%S.%N %z')
245
+ f.puts "Module: #{self}"
246
+ f.puts "#{e}\n\n\n"
247
+ end
248
+
249
+ raise e if conn_attempt > max_conn_attempts
250
+
251
+ sleep 1
252
+ retry
253
+ ensure
254
+ $stdout.flush
255
+ end
256
+ rescue Interrupt
257
+ # Exit Gracefully if CTRL+C is Pressed During Session
258
+ Cryptum.exit_gracefully(
259
+ which_self: self,
260
+ event_history: event_history,
261
+ option_choice: option_choice,
262
+ env: env
263
+ )
264
+ rescue StandardError => e
265
+ raise e
266
+ end
267
+
268
+ # Display Usage for this Module
269
+ public_class_method def self.help
270
+ puts "USAGE:
271
+ logger = #{self}.create()
272
+ "
273
+ end
274
+ end
275
+ end
276
+ 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
+ require 'cryptum/web_sock/coinbase'
8
+ require '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,120 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rbtrace'
4
+ require 'yaml'
5
+ require 'json'
6
+ require 'fileutils'
7
+ require 'tty-spinner'
8
+ # Root-Level Namespace for cryptum
9
+ module Cryptum
10
+ $stdout.sync = true
11
+ $stdout.flush
12
+
13
+ require 'cryptum/api'
14
+ require 'cryptum/bot_conf'
15
+ require 'cryptum/event'
16
+ require 'cryptum/log'
17
+ require 'cryptum/matrix'
18
+ require 'cryptum/open_ai'
19
+ require 'cryptum/option'
20
+ require 'cryptum/order_book'
21
+ require 'cryptum/portfolio'
22
+ require 'cryptum/ui'
23
+ require 'cryptum/version'
24
+ require 'cryptum/web_sock'
25
+
26
+ public_class_method def self.bin
27
+ File.join root, 'bin'
28
+ end
29
+
30
+ public_class_method def self.etc
31
+ File.join root, 'etc'
32
+ end
33
+
34
+ public_class_method def self.lib
35
+ File.join root, 'lib'
36
+ end
37
+
38
+ public_class_method def self.order_book
39
+ File.join root, 'order_book'
40
+ end
41
+
42
+ public_class_method def self.root
43
+ File.dirname __dir__
44
+ end
45
+
46
+ public_class_method def self.open_symbol
47
+ "\u00f8"
48
+ end
49
+
50
+ public_class_method def self.up_arrow
51
+ "\u2191"
52
+ end
53
+
54
+ public_class_method def self.down_arrow
55
+ "\u2193"
56
+ end
57
+
58
+ public_class_method def self.flat_arrow
59
+ '_'
60
+ end
61
+
62
+ # Add Commas to Large Numbers to Make it Easier to Read
63
+ public_class_method def self.beautify_large_number(opts = {})
64
+ value = opts[:value].to_s
65
+
66
+ split_str_num = value.split('.')
67
+ whole_num = split_str_num.first
68
+ fraction = 0
69
+ fraction = split_str_num.last if split_str_num.length > 1
70
+
71
+ is_negative = false
72
+ is_negative = true if whole_num.chars.first == '-'
73
+ whole_num = whole_num[1..] if is_negative
74
+ beautify_whole = whole_num.reverse.scan(/.{1,3}/).join(',').reverse
75
+ beautify_num = "#{beautify_whole}.#{fraction}" unless is_negative
76
+ beautify_num = "-#{beautify_whole}.#{fraction}" if is_negative
77
+
78
+ beautify_num
79
+ rescue Interrupt
80
+ # Exit Gracefully if CTRL+C is Pressed During Session
81
+ Cryptum.exit_gracefully(which_self: self)
82
+ rescue StandardError => e
83
+ # Produce a Stacktrace for anything else
84
+ Curses.close_screen
85
+ raise e
86
+ end
87
+
88
+ public_class_method def self.exit_gracefully(opts = {})
89
+ which_self = opts[:which_self]
90
+ event_history = opts[:event_history]
91
+ # option_choice = opts[:option_choice]
92
+ # env = opts[:env]
93
+
94
+ # Clear out candle data to ensure
95
+ # Cryptum Statistics Only Apply to
96
+ # Live Sessions
97
+ if event_history
98
+ File.write(
99
+ order_book_file,
100
+ JSON.pretty_generate(event_history.order_book)
101
+ )
102
+ end
103
+
104
+ Curses.close_screen
105
+ puts "Interrupt detected in #{which_self}...goodbye."
106
+
107
+ exit 0
108
+ rescue NameError
109
+ puts "\nInterrupt detected in #{which_self}...goodbye."
110
+
111
+ exit 0
112
+ rescue StandardError => e
113
+ # Produce a Stacktrace for anything else
114
+ raise e
115
+ end
116
+
117
+ public_class_method def self.help
118
+ constants.sort
119
+ end
120
+ 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"
data/upgrade_gem.sh ADDED
@@ -0,0 +1,4 @@
1
+ #!/bin/bash --login
2
+ printf "Updating RubyGems (i.e. gem command)..."
3
+ gem update --system
4
+ echo "complete."
data/upgrade_ruby.sh ADDED
@@ -0,0 +1,45 @@
1
+ #!/bin/bash --login
2
+ # USE THIS SCRIPT WHEN UPGRADING RUBY
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
+ function usage() {
14
+ echo $"Usage: $0 <new ruby version e.g. 2.4.4> <optional bool running from build_cryptum_gem.sh>"
15
+ exit 1
16
+ }
17
+
18
+ if [[ -f '/etc/profile.d/rvm.sh' ]]; then
19
+ source /etc/profile.d/rvm.sh
20
+ fi
21
+
22
+ new_ruby_version=$1
23
+ if [[ $2 != '' ]]; then
24
+ old_ruby_version=$2
25
+ else
26
+ old_ruby_version=`cat ${cryptum_root}/.ruby-version`
27
+ fi
28
+
29
+ ruby_gemset=`cat ${cryptum_root}/.ruby-gemset`
30
+
31
+ if [[ $# < 1 ]]; then
32
+ usage
33
+ fi
34
+
35
+ # Upgrade RVM
36
+ export rvmsudo_secure_path=1
37
+ rvmsudo rvm get head
38
+ rvm reload
39
+
40
+ # Install New Version of RubyGems & Ruby
41
+ cd $cryptum_root && ./upgrade_gem.sh
42
+ rvmsudo rvm install ruby-$new_ruby_version
43
+ echo $new_ruby_version > $cryptum_root/.ruby-version
44
+
45
+ cd $cryptum_root && rvm use $new_ruby_version@$ruby_gemset && ./build_cryptum_gem.sh