accern 3.0.1 → 3.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b7c204397deb420cd177d017a494a87cd0760267
4
- data.tar.gz: 9295d9b66d5228f0a4655492868cb648b21a4264
3
+ metadata.gz: d98bb97d1e447d5ab00d4543d233a81c79320976
4
+ data.tar.gz: dbb9c2da127d6da30b59406b1cee447be57c5767
5
5
  SHA512:
6
- metadata.gz: 5b7b7a02503dd010f9138faccfd89b7de6b4a558f86c384c12c6e1dd76bbd82e08fb837824a4b6c4dac709105702b3dd885609d4eab39b1ae7e9868f96ccd0c3
7
- data.tar.gz: 26194881673928fa452e03f8b36d7659869f32a790e683432612c22c0af817b6fb66bcfe20c1c7f06f6d22677360fdea187bd3b39da3ab999f803a8870ec68e2
6
+ metadata.gz: 9ae51b0a920b3fd85d90ac62226055232daa7598dbe19292670e39206356ff519788cccdc1c6dee2d1e56879ef3381f7093450e548153d6dfb25496a0c7fad33
7
+ data.tar.gz: f8a5b856fe9aaa653c46022646697d9a8ab40a603b853f5fdbc6535996a0f04abf9698776371b59d4d647d395134341259985a406c9b8f738e9655db4808785a
data/.gitignore CHANGED
@@ -12,3 +12,5 @@
12
12
  # rspec failure tracking
13
13
  .rspec_status
14
14
  test_home
15
+ alpha_last_id.yml
16
+ feed.jsonl
data/README.md CHANGED
@@ -7,7 +7,11 @@ A command line interface for the Accern API. Which is used for streaming the rea
7
7
  ## Installation
8
8
 
9
9
  ```shell
10
- gem install accern
10
+ # default macOS Ruby
11
+ $ sudo gem install accern
12
+
13
+ # When using a Ruby version manager
14
+ $ gem install accern
11
15
  ```
12
16
 
13
17
  ## Usage
@@ -26,7 +30,62 @@ The the next time you run `accern` the client will begin streaming the full data
26
30
  To reset and bring up the getting started prompts run:
27
31
 
28
32
  ```shell
29
- accern --init
33
+ $ accern --init
34
+ ```
35
+
36
+ ### Filter by ticker
37
+
38
+ ```shell
39
+ # single ticker
40
+ $ accern --ticker appl
41
+
42
+ # multiple tickers
43
+ $ accern --ticker "appl,amzn"
44
+ ```
45
+
46
+ ### Filter by ticker file
47
+ Create a newline delimited ticker file:
48
+
49
+ ```
50
+ appl
51
+ amzn
52
+ ```
53
+
54
+ ```shell
55
+ $ accern --ticker-file ./my_tickers.txt
56
+ ```
57
+
58
+ ### Filter by index
59
+
60
+ The index value must be one of the following values
61
+
62
+ index | expected value
63
+ -----------------|----------------------
64
+ S&P 500 | sp500
65
+ Russell 1000 | russell1000
66
+ Russell 3000 | russell3000
67
+ Wilshire 5000 | wilshire5000
68
+ Barron's 400 | barrons400
69
+ DOW 30 | dow30
70
+
71
+ ```shell
72
+ # single index
73
+ $ accern --index sp500
74
+
75
+ # multiple indexes
76
+ $ accern --index "dow30,russell1000"
77
+ ```
78
+
79
+ ### Filter by index file
80
+ Create a newline delimited index file with the any of the allowed values:
81
+
82
+ ```
83
+ dow30
84
+ sp500
85
+ ```
86
+
87
+ ```shell
88
+ $ accern --index-file ./my_indexes.txt
30
89
  ```
31
90
 
32
91
  ## Contributing
@@ -6,7 +6,7 @@ require 'accern/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'accern'
8
8
  spec.version = Accern::VERSION
9
- spec.authors = ['Carlos Espejo']
9
+ spec.authors = ['Carlos Espejo', 'Kerry Imai']
10
10
  spec.email = ['vendors@accern.com']
11
11
  spec.summary = 'A command line interface for the Accern API.'
12
12
  spec.homepage = 'https://github.com/Accern/accern'
@@ -12,14 +12,14 @@ require 'pry'
12
12
  # require "irb"
13
13
  # IRB.start(__FILE__)
14
14
 
15
- # args = ['-h']
16
- # args = []
17
15
 
18
- args = {token: "0652400596ecf80e014176dd4bc17044",
19
- format: :json}
20
16
 
21
- a = Accern::Alpha.new(args)
22
17
 
23
- # c = Accern::Cli.new(args)
24
18
 
19
+ ticker = "amzn,aapl"
20
+ # ["--ticker", "aapp,amaz,lol"]
21
+ # token: '08b14780c4b4aae5ac97d92c33d25495',
22
+ args = {format: :json, index: "sp500"}
23
+ c = Accern::Cli.new( args: ["--index", "sp500,barrons400"])
25
24
  binding.pry
25
+ # ticker=amzn&
@@ -1,10 +1,12 @@
1
1
  module Accern
2
2
  class Alpha
3
3
  attr_reader :token, :base_url, :uri, :last_id, :new_id, :docs,
4
- :format, :flat, :params
4
+ :format, :flat, :params, :ticker, :index
5
5
 
6
- def initialize(token:, format: :json, params: {})
6
+ def initialize(token:, ticker:, index:, format: :json)
7
7
  @token = token
8
+ @ticker = ticker
9
+ @index = index
8
10
  @format = format
9
11
  @params = params
10
12
  @base_url = 'http://feed.accern.com/v3/alphas'
@@ -14,9 +16,7 @@ module Accern
14
16
  end
15
17
 
16
18
  def download(path)
17
- uri.query = URI.encode_www_form(last_id: last_id) if last_id
18
- puts uri
19
-
19
+ create_uri
20
20
  format_response(
21
21
  Net::HTTP.new(uri.host, uri.port).request_get(uri, header)
22
22
  )
@@ -42,15 +42,29 @@ module Accern
42
42
  puts e.backtrace
43
43
  end
44
44
 
45
- def download_loop(path)
45
+ def download_loop(path:)
46
46
  loop do
47
47
  download(path)
48
48
  sleep 8
49
49
  end
50
50
  end
51
51
 
52
+
53
+ def create_uri
54
+ uri.query = URI.encode_www_form(combine_query)
55
+ puts uri
56
+ end
57
+
52
58
  private
53
59
 
60
+ def combine_query
61
+ filters = Hash.new
62
+ filters[:ticker] = ticker unless ticker.empty?
63
+ filters[:last_id] = last_id if last_id
64
+ filters[:index] = index unless index.empty?
65
+ filters
66
+ end
67
+
54
68
  def header
55
69
  { 'Authorization' => %(Token token="#{token}"), 'User-Agent' => "Accern #{VERSION} (#{RUBY_PLATFORM})" }
56
70
  end
@@ -1,7 +1,8 @@
1
1
  module Accern
2
2
  class Cli
3
3
  attr_reader :stdout, :stdin, :token, :filetype, :valid_types, :config_path,
4
- :options, :args, :feed
4
+ :options, :args, :feed, :tickers,:indexes
5
+
5
6
 
6
7
  def initialize(stdout: $stdout, stdin: $stdin, args: [], feed: Alpha)
7
8
  @stdout = stdout
@@ -12,6 +13,8 @@ module Accern
12
13
  @valid_types = %w(json csv)
13
14
  @config_path = "#{ENV['HOME']}/.accern.rc.yml"
14
15
  @feed = feed
16
+ @tickers = []
17
+ @indexes = []
15
18
  end
16
19
 
17
20
  def start
@@ -21,8 +24,8 @@ module Accern
21
24
  if options[:init]
22
25
  ask_for_info
23
26
  else
24
- feed.new(token: token, format: filetype.to_sym)
25
- .download_loop('./feed.jsonl')
27
+ feed.new(token: token, format: filetype.to_sym, ticker: tickers.join(','), index: indexes.join(','))
28
+ .download_loop(path: './feed.jsonl')
26
29
  end
27
30
  end
28
31
 
@@ -58,13 +61,45 @@ module Accern
58
61
  puts Accern::VERSION
59
62
  exit
60
63
  end
64
+
65
+ opts.on("--ticker NAME", "Filters document by ticker") do |tic|
66
+
67
+ options[:ticker] = tic.to_s.downcase.split(',')
68
+ @tickers += options[:ticker]
69
+ end
70
+
71
+ opts.on("--ticker-file PATH", "Receives the path to a file that has tickers") do |t_path|
72
+ options[:ticker_path] = t_path
73
+ @tickers += read_file(t_path)
74
+ end
75
+
76
+ index_options = ['sp500', 'russell1000', 'russell3000', 'wilshire5000', 'barrons400', 'dow30']
77
+ opts.on("--index TYPE", "Filters document by index") do |i|
78
+ options[:index] = i.to_s.downcase.split(',')
79
+ options[:index] = sanitizes_input(options[:index])
80
+ raise OptionParser::InvalidArgument.new("Invalid index options") unless (options[:index] - index_options).empty?
81
+ @indexes += options[:index]
82
+ end
83
+
84
+ opts.on("--index-file PATH", "get filter indexes from file") do |i_path|
85
+ parsed = read_file(i_path)
86
+ parsed = sanitizes_input(parsed)
87
+ raise OptionParser::InvalidArgument.new("Invalid index options") unless (parsed - index_options).empty?
88
+ @indexes += parsed
89
+ end
90
+
61
91
  end
62
92
 
63
93
  parser.parse!(args)
94
+ @tickers = sanitizes_input(@tickers)
64
95
  end
65
96
 
66
97
  private
67
98
 
99
+ def sanitizes_input(arg)
100
+ arg.map {|t| t.gsub(/\W/, '')}
101
+ end
102
+
68
103
  def ask_for_info
69
104
  ask_for_token
70
105
  # ask_for_filetype
@@ -93,5 +128,10 @@ module Accern
93
128
  File.write(config_path, config.to_yaml)
94
129
  stdout.puts 'Your client is now configured and settings saved to ~/.accern.rc.yml.'
95
130
  end
131
+
132
+ def read_file(path)
133
+ return [] unless File.exist?(path)
134
+ File.readlines(path).map { |x| x.downcase.chomp }
135
+ end
96
136
  end
97
137
  end
@@ -1,3 +1,3 @@
1
1
  module Accern
2
- VERSION = '3.0.1'.freeze
2
+ VERSION = '3.2.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: accern
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Espejo
8
+ - Kerry Imai
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2017-02-24 00:00:00.000000000 Z
12
+ date: 2017-03-17 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler