ish_manager 0.1.8.281 → 0.1.8.282
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/ish_manager/option_watches_controller.rb +60 -0
- data/app/controllers/ish_manager/stock_watches_controller.rb +4 -0
- data/app/models/ish_manager/ability.rb +3 -1
- data/app/views/ish_manager/option_watches/_form.haml +37 -0
- data/app/views/ish_manager/stock_watches/index.haml +16 -2
- data/config/routes.rb +1 -0
- data/lib/tasks/ish_manager_tasks.rake +1 -8
- data/lib/tasks/warbler_tasks.rake +55 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 62ac19ed592915fa7a6434a0a61ee2b9efa4d1cd988ac354391abe13e061138f
|
4
|
+
data.tar.gz: 44beb8d38194b1615c5d2d40168ac1acb8d2eccd53034f5652e3a425caecf7a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a946c5fd3c36b6156b323015e647ced9570b22ea41962133db97a7d01bc8887784e78d06f542750714c7a8fee04fafbc239f465bcc0d253e88bd5ccaf168d5c5
|
7
|
+
data.tar.gz: 8467f4cbb960f3d1eba742d834660a73eb7817486ab5fd98389276f22f945c66cb3653888b646c68b7ecbc173c14ba47cf829566eb36a0bc5d81ed9e40dd4053
|
@@ -0,0 +1,60 @@
|
|
1
|
+
|
2
|
+
class IshManager::OptionWatchesController < IshManager::ApplicationController
|
3
|
+
|
4
|
+
layout 'ish_manager/application2'
|
5
|
+
|
6
|
+
## alphabetized : )
|
7
|
+
|
8
|
+
def create
|
9
|
+
@option_watch = Warbler::OptionWatch.new permitted_params
|
10
|
+
authorize! :create, @option_watch
|
11
|
+
flag = @option_watch.save
|
12
|
+
if flag
|
13
|
+
flash[:notice] = 'Created option watch.'
|
14
|
+
else
|
15
|
+
flash[:alert] = "Cannot create option watch: #{@option_watch.errors.messages}"
|
16
|
+
end
|
17
|
+
redirect_to controller: 'stock_watches', action: 'index'
|
18
|
+
end
|
19
|
+
|
20
|
+
def destroy
|
21
|
+
@w = Warbler::StockWatch.find params[:id]
|
22
|
+
authorize! :destroy, @w
|
23
|
+
flag = @w.destroy
|
24
|
+
if flag
|
25
|
+
flash[:notice] = 'Success.'
|
26
|
+
else
|
27
|
+
flash[:alert] = @w.errors.messages
|
28
|
+
end
|
29
|
+
redirect_to controller: 'stock_watches', action: 'index'
|
30
|
+
end
|
31
|
+
|
32
|
+
def index
|
33
|
+
authorize! :open_permission, IshManager::Ability
|
34
|
+
flash[:notice] = 'Redirected option->stock watch index'
|
35
|
+
# redirect_to controller: IshManager::StockWatchesController, action: 'index'
|
36
|
+
redirect_to controller: 'stock_watches', action: 'index'
|
37
|
+
end
|
38
|
+
|
39
|
+
def update
|
40
|
+
@option_watch = Warbler::OptionWatch.find params[:id]
|
41
|
+
authorize! :update, @option_watch
|
42
|
+
flag = @option_watch.update_attributes permitted_params
|
43
|
+
if flag
|
44
|
+
flash[:notice] = 'Updated option watch.'
|
45
|
+
else
|
46
|
+
flash[:alert] = "Cannot update option watch: #{@option_watch.errors.messages}"
|
47
|
+
end
|
48
|
+
redirect_to controller: 'stock_watches', action: 'index'
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def permitted_params
|
54
|
+
params[:warbler_option_watch].permit!
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
|
@@ -3,6 +3,8 @@ class IshManager::StockWatchesController < IshManager::ApplicationController
|
|
3
3
|
|
4
4
|
layout 'ish_manager/application2'
|
5
5
|
|
6
|
+
## alphabetized : )
|
7
|
+
|
6
8
|
def create
|
7
9
|
@stock_watch = Warbler::StockWatch.new permitted_params
|
8
10
|
authorize! :create, @stock_watch
|
@@ -33,6 +35,8 @@ class IshManager::StockWatchesController < IshManager::ApplicationController
|
|
33
35
|
@stock_watches = Warbler::StockWatch.order_by( ticker: :asc, direction: :asc, price: :desc
|
34
36
|
).includes( :profile )
|
35
37
|
@stock_watch = Warbler::StockWatch.new
|
38
|
+
@option_watches = Warbler::OptionWatch.order_by( ticker: :asc, direction: :asc, price: :desc ).includes( :profile )
|
39
|
+
@option_watch = Warbler::OptionWatch.new
|
36
40
|
end
|
37
41
|
|
38
42
|
def update
|
@@ -7,7 +7,7 @@ class IshManager::Ability
|
|
7
7
|
#
|
8
8
|
# signed in user
|
9
9
|
#
|
10
|
-
|
10
|
+
if !user.blank?
|
11
11
|
|
12
12
|
#
|
13
13
|
# only sudoer... total power
|
@@ -100,6 +100,8 @@ class IshManager::Ability
|
|
100
100
|
#
|
101
101
|
user ||= ::User.new
|
102
102
|
|
103
|
+
can [ :open_permission ], IshManager::Ability
|
104
|
+
|
103
105
|
can [ :show ], ::Gallery do |gallery|
|
104
106
|
gallery.is_public
|
105
107
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
- if option_watch.persisted?
|
3
|
+
.float-left= button_to '[X]', option_watch_path(option_watch.id), method: :delete, data: { confirm: 'Are you sure?' }
|
4
|
+
|
5
|
+
|
6
|
+
- url = option_watches_path if !option_watch.persisted?
|
7
|
+
- url = option_watch_path( option_watch ) if option_watch.persisted?
|
8
|
+
|
9
|
+
= form_for option_watch, :url => url, :html => { :class => 'form-inline well' } do |f|
|
10
|
+
.flex-row
|
11
|
+
.form-group
|
12
|
+
= f.label :action
|
13
|
+
= f.select :action, options_for_select( Warbler::StockWatch::ACTIONS.map{|a|[a,a]}, :selected => option_watch.action )
|
14
|
+
.form-group
|
15
|
+
= f.label :profile
|
16
|
+
= f.select :profile, options_for_select( [[nil,nil]]+@profiles.map{|p|[p.email,p.id]}, :selected => option_watch.profile ? option_watch.profile.id : nil )
|
17
|
+
.form-group
|
18
|
+
%label.control-label When
|
19
|
+
= f.text_field :ticker, :class => 'form-control', :placeholder => 'ticker'
|
20
|
+
.form-group
|
21
|
+
%label.control-label Type
|
22
|
+
= f.select :contractType, options_for_select( [['none',nil],['PUT', 'PUT'], ['CALL', 'CALL']], :selected => option_watch.contractType )
|
23
|
+
.form-group
|
24
|
+
%label.control-label On date
|
25
|
+
= f.text_field :date, :class => 'form-control', :placeholder => 'date'
|
26
|
+
.form-group
|
27
|
+
%label.control-label Strike
|
28
|
+
= f.number_field :strike, :step => 0.01, :placeholder => "0.01"
|
29
|
+
.form-group
|
30
|
+
%label.control-label Is
|
31
|
+
= f.select :direction, options_for_select( Warbler::StockWatch::DIRECTIONS.map{|d|[d,d]}, :selected => option_watch.direction )
|
32
|
+
.form-group
|
33
|
+
%label.control-label Price
|
34
|
+
= f.number_field :price, :step => 0.01, :placeholder => "0.01"
|
35
|
+
.form-group
|
36
|
+
= f.submit ">", :class => %w(btn blue)
|
37
|
+
|
@@ -1,10 +1,24 @@
|
|
1
1
|
|
2
2
|
%h4 Stock Watches
|
3
3
|
|
4
|
-
%hr
|
5
4
|
- @stock_watches.each do |stock|
|
5
|
+
%hr
|
6
6
|
= render 'form', :stock_watch => stock
|
7
|
-
|
7
|
+
|
8
8
|
%hr
|
9
9
|
%h5 New
|
10
10
|
= render 'form', :stock_watch => @stock_watch
|
11
|
+
|
12
|
+
|
13
|
+
%hr
|
14
|
+
%hr
|
15
|
+
|
16
|
+
%h4 Option Watches
|
17
|
+
|
18
|
+
- @option_watches.each do |option|
|
19
|
+
%hr
|
20
|
+
= render 'ish_manager/option_watches/form', option_watch: option
|
21
|
+
|
22
|
+
%hr
|
23
|
+
%h5 New
|
24
|
+
= render 'ish_manager/option_watches/form', option_watch: @option_watch
|
data/config/routes.rb
CHANGED
@@ -4,10 +4,6 @@ def puts! a, b=''
|
|
4
4
|
puts a.inspect
|
5
5
|
end
|
6
6
|
|
7
|
-
class Warbler::StockWatch
|
8
|
-
SLEEP_TIME_SECONDS = 60
|
9
|
-
end
|
10
|
-
|
11
7
|
namespace :ish_manager do
|
12
8
|
|
13
9
|
desc "every user needs a user_profile"
|
@@ -27,9 +23,6 @@ namespace :ish_manager do
|
|
27
23
|
while true
|
28
24
|
stocks = Warbler::StockWatch.where( notification_type: :EMAIL )
|
29
25
|
stocks.each do |stock|
|
30
|
-
|
31
|
-
puts! stock, 'stock'
|
32
|
-
|
33
26
|
begin
|
34
27
|
Timeout::timeout( 10 ) do
|
35
28
|
out = Warbler::Ameritrade::Api.get_quote({ symbol: stock.ticker })
|
@@ -40,7 +33,7 @@ namespace :ish_manager do
|
|
40
33
|
end
|
41
34
|
end
|
42
35
|
rescue Exception => e
|
43
|
-
puts! e, '
|
36
|
+
puts! e, 'Error in ish_manager:watch_stocks :'
|
44
37
|
end
|
45
38
|
end
|
46
39
|
sleep Warbler::StockWatch::SLEEP_TIME_SECONDS
|
@@ -0,0 +1,55 @@
|
|
1
|
+
|
2
|
+
def puts! a, b=''
|
3
|
+
puts "+++ +++ #{b}:"
|
4
|
+
pp a
|
5
|
+
end
|
6
|
+
|
7
|
+
namespace :warbler do
|
8
|
+
|
9
|
+
## @TODO: this is still in ish_manager namespace, need to actually move it here.
|
10
|
+
desc 'watch the stocks, and trigger actions - not alphavantage, tda now. 2021-08-08'
|
11
|
+
task watch_stocks: :environment do
|
12
|
+
while true
|
13
|
+
stocks = Warbler::StockWatch.where( notification_type: :EMAIL )
|
14
|
+
stocks.each do |stock|
|
15
|
+
begin
|
16
|
+
Timeout::timeout( 10 ) do
|
17
|
+
out = Warbler::Ameritrade::Api.get_quote({ symbol: stock.ticker })
|
18
|
+
r = out[:lastPrice]
|
19
|
+
if stock.direction == :ABOVE && r >= stock.price ||
|
20
|
+
stock.direction == :BELOW && r <= stock.price
|
21
|
+
IshManager::ApplicationMailer.stock_alert( stock ).deliver
|
22
|
+
end
|
23
|
+
end
|
24
|
+
rescue Exception => e
|
25
|
+
puts! e, 'Error in ish_manager:watch_stocks :'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
sleep Warbler::StockWatch::SLEEP_TIME_SECONDS
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
desc 'watch option: contractType=PUT|CALL strike symbol date=yyyy-mm-dd'
|
33
|
+
task watch_options: :environment do
|
34
|
+
while true
|
35
|
+
option_watches = Warbler::OptionWatch.where( notification_type: :EMAIL )
|
36
|
+
option_watches.each do |option|
|
37
|
+
begin
|
38
|
+
Timeout::timeout( 10 ) do
|
39
|
+
## opts = { contractType: 'PUT', strike: 355.0, symbol: 'NVDA', date: '2022-02-18' }
|
40
|
+
out = Warbler::Ameritrade::Api.get_option( option )
|
41
|
+
r = out[:last]
|
42
|
+
if option.direction == :ABOVE && r >= option.price ||
|
43
|
+
option.direction == :BELOW && r <= option.price
|
44
|
+
Warbler::ApplicationMailer.option_alert( option ).deliver
|
45
|
+
end
|
46
|
+
end
|
47
|
+
rescue Exception => e
|
48
|
+
puts! e, 'Error in ish_manager:watch_options :'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
sleep Warbler::OptionWatch::SLEEP_TIME_SECONDS
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ish_manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.8.
|
4
|
+
version: 0.1.8.282
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- piousbox
|
@@ -202,6 +202,7 @@ files:
|
|
202
202
|
- app/controllers/ish_manager/maps_controller.rb
|
203
203
|
- app/controllers/ish_manager/markers_controller.rb
|
204
204
|
- app/controllers/ish_manager/newsitems_controller.rb
|
205
|
+
- app/controllers/ish_manager/option_watches_controller.rb
|
205
206
|
- app/controllers/ish_manager/orders_controller.rb
|
206
207
|
- app/controllers/ish_manager/payments_controller.rb
|
207
208
|
- app/controllers/ish_manager/photos_controller.rb
|
@@ -305,6 +306,7 @@ files:
|
|
305
306
|
- app/views/ish_manager/newsitems/edit.haml
|
306
307
|
- app/views/ish_manager/newsitems/index.haml
|
307
308
|
- app/views/ish_manager/newsitems/new.haml
|
309
|
+
- app/views/ish_manager/option_watches/_form.haml
|
308
310
|
- app/views/ish_manager/payments/index.haml
|
309
311
|
- app/views/ish_manager/photos/_meta.haml
|
310
312
|
- app/views/ish_manager/photos/_meta_manager.haml
|
@@ -380,6 +382,7 @@ files:
|
|
380
382
|
- lib/systemd/system/watch_stocks.service
|
381
383
|
- lib/tasks/ish_manager_tasks.rake
|
382
384
|
- lib/tasks/migrate.rake
|
385
|
+
- lib/tasks/warbler_tasks.rake
|
383
386
|
homepage: http://wasya.co
|
384
387
|
licenses:
|
385
388
|
- MIT
|