intrinio 0.0.1 → 0.1.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: 55d5ef7008a5e1984530c0b3f2b47fa58453505c
4
- data.tar.gz: 1a4a941a3b2218fb3f20e2193ecca822bc0717cd
3
+ metadata.gz: 4d0685eb48926073584dcdce2b696f9ff9e16cff
4
+ data.tar.gz: 92d8f5b8c2dd0cddea07f789c82e09933287876f
5
5
  SHA512:
6
- metadata.gz: cbe11b914de9f015cf022bf076e0cce9de9a8cf1681c860be35981af8c978c6e8577fb1d72d995e6d9523edc883b0a2d732366bd951b226f77e5a8d2141bd3bb
7
- data.tar.gz: 15e067f9bafbaedf8c51cb2c0b1f27e53574dfadadbd9f5219fe50eaf3f99b0b47966a04cd1380894201ea534cfdb43525e4af17a03bafb58c5b6898957a9e90
6
+ metadata.gz: 5940954864a1e0fd987dbc6c119a8804023d5a3b0cac93f75ee3f752c2b3bb65d138bd070a1249b97801cf71c4e236c5e22c3c63c0efd65b4e7a7aa422ab116e
7
+ data.tar.gz: 74e9ee1c8d6a5f16ff78495f89c063d2b503fd04acfaa5dbd5c38245fa2602df5bc24822b7af33dd54d231e4670b08f687a0a5ef9cb714329c56bf260e419de1
data/README.md CHANGED
@@ -13,6 +13,7 @@ This gem provides both a Ruby library and a command line interface for the
13
13
 
14
14
  ---
15
15
 
16
+
16
17
  Install
17
18
  --------------------------------------------------
18
19
 
@@ -26,16 +27,18 @@ Or with bundler:
26
27
  gem 'intrinio'
27
28
  ```
28
29
 
30
+
29
31
  Features
30
32
  --------------------------------------------------
31
33
 
32
34
  * Easy to use interface.
33
35
  * Use as a library or through the command line.
34
- * Access any Intrinio endpoint directly.
35
- * Display output in various formats.
36
- * Save output to a file.
36
+ * Access any Intrinio endpoint and option directly.
37
+ * Display output as JSON or CSV.
38
+ * Save output to a file as JSON or CSV.
37
39
  * Includes a built in file cache (disabled by default).
38
40
 
41
+
39
42
  Usage
40
43
  --------------------------------------------------
41
44
 
@@ -68,12 +71,26 @@ result = intrinio.get! "indices", type: 'economic', page_size: 5
68
71
  # => JSON string
69
72
  ```
70
73
 
74
+ When calling any endpoint that returns a `data` attribute, you can also
75
+ call `get_csv` in order to convert the data to a CSV string.
76
+
77
+ ```ruby
78
+ result = intrinio.get_csv "indices", page_size: 5
79
+ # => CSV string
80
+ ```
81
+
71
82
  To save the output directly to a file, use the `save` method:
72
83
 
73
84
  ```ruby
74
85
  intrinio.save "filename.json", "indices", type: 'economic', page_size: 5
75
86
  ```
76
87
 
88
+ Or, to save CSV, use the `save_csv` method:
89
+
90
+ ```ruby
91
+ intrinio.save_csv "filename.csv" "indices", page_size: 5
92
+ ```
93
+
77
94
  Debugging your request and adding "sticky" query parameters that stay with
78
95
  you for the following requests is also easy:
79
96
 
@@ -86,6 +103,7 @@ puts intrinio.historical_data identifier: '$INTDSRUSM193N', item: 'level'
86
103
  intrinio.param page_size: nil # remove param
87
104
  ```
88
105
 
106
+
89
107
  Command Line
90
108
  --------------------------------------------------
91
109
 
@@ -105,6 +123,26 @@ These commands are available:
105
123
 
106
124
  Run `intrinio --help` for more information, or view the [full usage help][2].
107
125
 
126
+ Examples:
127
+
128
+ ```bash
129
+ # Shows the first 5 indices
130
+ $ intrinio see indices page_size:5
131
+
132
+ # Pass arguments that require spaces
133
+ $ intrinio see indices "query:interest rate" page_size:5
134
+
135
+ # Saves a file
136
+ $ intrinio save aapl.json historical_data identifier:AAPL \
137
+ item:adj_close_price frequency:monthly page_size:10
138
+
139
+ # Shows the URL that Intrinio has constructed, good for debugging
140
+ $ intrinio url indices query:interest page_size:5
141
+ # => https://api.intrinio.com/indices?query=interest&page_size=5
142
+
143
+ ```
144
+
145
+
108
146
  Caching
109
147
  --------------------------------------------------
110
148
 
data/lib/intrinio.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'intrinio/version'
2
+ require 'intrinio/exceptions'
2
3
  require 'intrinio/web_api'
3
4
  require 'intrinio/api'
4
5
  require 'intrinio/command_line'
data/lib/intrinio/api.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'json'
2
+ require 'csv'
2
3
 
3
4
  module Intrinio
4
5
  # Provides access to all the Intrinio API endpoints
@@ -6,6 +7,11 @@ module Intrinio
6
7
  attr_reader :opts
7
8
 
8
9
  def initialize(opts={})
10
+ if opts[:auth]
11
+ opts[:username], opts[:password] = opts[:auth].split ':'
12
+ opts.delete :auth
13
+ end
14
+
9
15
  defaults = {
10
16
  username: nil,
11
17
  password: nil,
@@ -35,5 +41,27 @@ module Intrinio
35
41
 
36
42
  super opts[:base_url]
37
43
  end
44
+
45
+ def get_csv(*args)
46
+ result = get *args
47
+
48
+ raise Intrinio::BadResponse, "Result is not a hash" unless result.is_a? Hash
49
+ raise Intrinio::IncompatibleResponse, "Result does not contain a data attribute" unless result.has_key? :data
50
+
51
+ data = result[:data]
52
+
53
+ header = data.first.keys
54
+ result = CSV.generate do |csv|
55
+ csv << header
56
+ data.each { |row| csv << row.values }
57
+ end
58
+
59
+ result
60
+ end
61
+
62
+ def save_csv(file, *args)
63
+ data = get_csv *args
64
+ File.write file, data
65
+ end
38
66
  end
39
67
  end
@@ -27,6 +27,8 @@ module Intrinio
27
27
 
28
28
  private
29
29
 
30
+ attr_reader :csv
31
+
30
32
  def intrinio!
31
33
  Intrinio::API.new options
32
34
  end
@@ -37,6 +39,7 @@ module Intrinio
37
39
  path = args['PATH']
38
40
  params = args['PARAMS']
39
41
  file = args['FILE']
42
+ @csv = args['--csv']
40
43
 
41
44
  return get(path, params) if args['get']
42
45
  return pretty(path, params) if args['pretty']
@@ -46,16 +49,23 @@ module Intrinio
46
49
  end
47
50
 
48
51
  def get(path, params)
49
- puts intrinio.get! path, translate_params(params)
52
+ if csv
53
+ puts intrinio.get_csv path, translate_params(params)
54
+ else
55
+ puts intrinio.get! path, translate_params(params)
56
+ end
50
57
  end
51
58
 
52
59
  def save(file, path, params)
53
- success = intrinio.save file, path, translate_params(params)
60
+ if csv
61
+ success = intrinio.save_csv file, path, translate_params(params)
62
+ else
63
+ success = intrinio.save file, path, translate_params(params)
64
+ end
54
65
  puts success ? "Saved #{file}" : "Saving failed"
55
66
  end
56
67
 
57
68
  def pretty(path, params)
58
- intrinio.format = :json
59
69
  response = intrinio.get path, translate_params(params)
60
70
  puts JSON.pretty_generate response
61
71
  end
@@ -1,11 +1,11 @@
1
1
  Intrinio
2
2
 
3
3
  Usage:
4
- intrinio get PATH [PARAMS...]
4
+ intrinio get [--csv] PATH [PARAMS...]
5
5
  intrinio pretty PATH [PARAMS...]
6
6
  intrinio see PATH [PARAMS...]
7
7
  intrinio url PATH [PARAMS...]
8
- intrinio save FILE PATH [PARAMS...]
8
+ intrinio save [--csv] FILE PATH [PARAMS...]
9
9
  intrinio (-h|--help|--version)
10
10
 
11
11
  Commands:
@@ -36,3 +36,29 @@ Parameters:
36
36
 
37
37
  FILE:
38
38
  Path to the output file.
39
+
40
+ Flags:
41
+ --csv
42
+ When this flag is provided, the data will be converted to CSV before
43
+ it is displayed or saved. Note that this works only with endpoints that
44
+ have a 'data' attribute.
45
+
46
+ Examples:
47
+ intrinio see indices page_size:5
48
+
49
+ intrinio pretty indices "query:interest rate" page_size:5
50
+
51
+ intrinio see companies identifier:AAPL
52
+
53
+ intrinio see historical_data identifier:\$INTDSRUSM193N item:level \
54
+ start_date:2015-01-01
55
+
56
+ intrinio see historical_data identifier:\$SP500 item:percent_change \
57
+ frequency:monthly page_size:10
58
+
59
+ intrinio save aapl.json historical_data identifier:AAPL \
60
+ item:adj_close_price frequency:monthly page_size:10
61
+
62
+ intrinio get --csv indices page_size:5
63
+
64
+ intrinio save --csv indices.csv indices page_size:5
@@ -0,0 +1,4 @@
1
+ module Intrinio
2
+ class BadResponse < StandardError; end
3
+ class IncompatibleResponse < StandardError; end
4
+ end
@@ -1,3 +1,3 @@
1
1
  module Intrinio
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -16,7 +16,7 @@ module Intrinio
16
16
 
17
17
  # Allow using any method as the first segment of the path
18
18
  # object.user 'details' becomes object.get 'user/details'
19
- def method_missing(method_sym, *arguments, &block)
19
+ def method_missing(method_sym, *arguments, &_block)
20
20
  get "/#{method_sym}", *arguments
21
21
  end
22
22
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: intrinio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-29 00:00:00.000000000 Z
11
+ date: 2017-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docopt
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '4.2'
103
+ version: '5.0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '4.2'
110
+ version: '5.0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: byebug
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -163,6 +163,7 @@ files:
163
163
  - lib/intrinio/api.rb
164
164
  - lib/intrinio/command_line.rb
165
165
  - lib/intrinio/docopt.txt
166
+ - lib/intrinio/exceptions.rb
166
167
  - lib/intrinio/version.rb
167
168
  - lib/intrinio/web_api.rb
168
169
  homepage: https://github.com/DannyBen/intrinio