ish_manager 0.1.8.281 → 0.1.8.282
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.
- 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
|