sensei_eod_utils 0.0.31 → 0.0.32

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
  SHA256:
3
- metadata.gz: 5d6b956c73badfbaeb9920f1df08838ebd17d791cd7abc46a8fd28087e528264
4
- data.tar.gz: ce006b39ffa6bf2e8ddd5c6cd473ea8d429e3c881a177a44d6c13c3cc5c24865
3
+ metadata.gz: 64a39923d3abb5be3ce45f0b4035d4b4f44b479a179637cabbd1f33d75b95fd0
4
+ data.tar.gz: 6e944db43e109c73b98170887ce7ea6fdd29d1585b5df8f03c0aab98b58f0b08
5
5
  SHA512:
6
- metadata.gz: f6c8fb2fe24dace721dbdb81aa27a4dccf9bb13cf2e97d2f0ffbaa916fbdb56ae880338c91260bd21b7e3cc448434490244ea117455dc91a93d977bc98cf9eaf
7
- data.tar.gz: da2d455f1645e556ef0e483381173d423409c3422b7ccaceed373b67d4440a588d8006c2fb94120972ff4d65b9c625bf4302628e79e1dcb3b51d8c182c444369
6
+ metadata.gz: ce7092e42848ecfde557ef90276492930bf987b22f891600f3bf113a577a930ad8c6fa8a5bd3da418a566823189f1f3bab45b5414de60ec190849ff1ea9ca2b9
7
+ data.tar.gz: 1d1793286540a735917f359edd5b2e32049282a871a5e33e9b834e61ca4dad64184676f4570a3500dcf82f461bd5edf9251f668161fc86729e638843c384bdbf
data/Gemfile CHANGED
@@ -6,7 +6,7 @@ ruby '2.5.5'
6
6
  gem 'ruby-enum'
7
7
 
8
8
  gem 'httparty'
9
- # gem 'redis'
9
+ gem 'redis'
10
10
  gem 'oj'
11
11
 
12
12
  group :development do
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'redis'
4
+
5
+ module Cache
6
+ class Redis
7
+ class << self
8
+ def set(key, value, expiry = 3600)
9
+ redis.set(key, value, ex: expiry)
10
+ end
11
+
12
+ def get(key)
13
+ redis.get(key)
14
+ end
15
+
16
+ private
17
+
18
+ def redis
19
+ @redis ||= Redis.new(url: ENV['REDIS_URL'])
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,16 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'oj'
4
+ require_relative '../cache/redis.rb'
5
+
3
6
  module EodFacade
4
7
  class Eod < ::EodFacade::Base
5
8
  class << self
6
9
  def call(symbol, params = {})
7
- response = make_request(url_path(symbol), params.merge(fmt: 'json'))
10
+ unless Cache::Redis.get(redis_key(symbol))
11
+ response = make_request(url_path(symbol), params.merge(fmt: 'json'))
12
+
13
+ unless response.success?
14
+ raise ArgumentError, "Error fetching end of day data for #{symbol}"
15
+ end
8
16
 
9
- unless response.success?
10
- raise ArgumentError, "Error fetching end of day data for #{symbol}"
17
+ EodRedis::Service.set(
18
+ redis_key(symbol),
19
+ response.parsed_response
20
+ )
11
21
  end
12
22
 
13
- response.parsed_response
23
+ Oj.load(Cache::Redis.get(redis_key(symbol)))
14
24
  end
15
25
 
16
26
  private
@@ -18,6 +28,10 @@ module EodFacade
18
28
  def url_path(symbol)
19
29
  "/eod/#{symbol}"
20
30
  end
31
+
32
+ def redis_key(sybmol)
33
+ "#{symbol}_eod"
34
+ end
21
35
  end
22
36
  end
23
37
  end
@@ -1,18 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'oj'
4
+ require_relative '../cache/redis.rb'
4
5
 
5
6
  module EodFacade
6
7
  class Fundamentals < ::EodFacade::Base
7
8
  class << self
8
9
  def call(symbol)
9
- response = make_request(url_path(symbol))
10
+ unless Cache::Redis.get(redis_key(symbol))
11
+ response = make_request(url_path(symbol))
12
+
13
+ unless response.success?
14
+ raise ArgumentError, "Error fetching fundamentals data for #{symbol}"
15
+ end
10
16
 
11
- unless response.success?
12
- raise ArgumentError, "Error fetching fundamentals data for #{symbol}"
17
+ EodRedis::Service.set(
18
+ redis_key(symbol),
19
+ response.parsed_response
20
+ )
13
21
  end
14
22
 
15
- response.parsed_response
23
+ Oj.load(Cache::Redis.get(redis_key(symbol)))
16
24
  end
17
25
 
18
26
  private
@@ -20,6 +28,10 @@ module EodFacade
20
28
  def url_path(symbol)
21
29
  "/fundamentals/#{symbol}"
22
30
  end
31
+
32
+ def redis_key(sybmol)
33
+ "#{symbol}_fundamentals"
34
+ end
23
35
  end
24
36
  end
25
37
  end
@@ -1,15 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'oj'
4
+ require_relative '../cache/redis.rb'
4
5
 
5
6
  module EodFacade
6
7
  class Options < ::EodFacade::Base
7
8
  class << self
8
9
  def call(symbol)
9
- # unless EodServices::InstrumentType.option?(symbol)
10
- # raise ArgumentError, "Option contract #{symbol} not found or is invalid"
11
- # end
12
-
13
10
  underlying = EodServices::Contract.underlying_symbol(symbol)
14
11
  expiry = EodServices::Contract.contract_expiry(symbol)
15
12
  option_type = contract_type(symbol)
@@ -18,13 +15,20 @@ module EodFacade
18
15
  raise ArgumentError, "Invalid expiration date for option #{symbol}"
19
16
  end
20
17
 
21
- response = make_request(url_path(underlying), params(expiry))
22
-
23
- unless response.success?
24
- raise ArgumentError, "Error fetching options data for #{symbol}"
18
+ unless Cache::Redis.get(redis_key(underlying, expiry))
19
+ response = make_request(url_path(underlying))
20
+
21
+ unless response.success?
22
+ raise ArgumentError, "Error fetching fundamentals data for #{symbol}"
23
+ end
24
+
25
+ EodRedis::Service.set(
26
+ redis_key(symbol),
27
+ response.parsed_response
28
+ )
25
29
  end
26
30
 
27
- contracts = response.parsed_response
31
+ Oj.load(Cache::Redis.get(redis_key(underlying, expiry)))
28
32
 
29
33
  contract_hash(
30
34
  symbol: symbol,
@@ -71,6 +75,10 @@ module EodFacade
71
75
  'STOCK'
72
76
  end
73
77
  end
78
+
79
+ def redis_key(underlying, expiry)
80
+ "#{underlying}_#{expiry.to_s}_options"
81
+ end
74
82
  end
75
83
  end
76
84
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'sensei_eod_utils'
5
- s.version = '0.0.31'
5
+ s.version = '0.0.32'
6
6
  s.date = '2019-12-20'
7
7
  s.summary = 'Sensei trader utility functions and Eod api facade'
8
8
  s.authors = ['Nishant Shah']
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensei_eod_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.31
4
+ version: 0.0.32
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nishant Shah
@@ -63,6 +63,7 @@ files:
63
63
  - Gemfile
64
64
  - Gemfile.lock
65
65
  - README.md
66
+ - lib/cache/redis.rb
66
67
  - lib/eod_facade/base.rb
67
68
  - lib/eod_facade/constants.rb
68
69
  - lib/eod_facade/eod.rb