quandl_operation 0.1.22 → 0.1.23
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/lib/quandl/operation/version.rb +1 -1
- metadata +2 -10
- data/lib/quandl/operation/qdformat/dump.rb +0 -58
- data/lib/quandl/operation/qdformat/load.rb +0 -70
- data/lib/quandl/operation/qdformat/node.rb +0 -51
- data/lib/quandl/operation/qdformat.rb +0 -24
- data/spec/lib/quandl/operation/qdformat/load_spec.rb +0 -55
- data/spec/lib/quandl/operation/qdformat/node_spec.rb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24dc5a778c39638babaa1bb5640e042a26ffba1c
|
4
|
+
data.tar.gz: c4f5211b7f4425f872939e7bb08c12a955af4691
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d12d77624a61d51560f2d214189b826174a8bc291460a2651d8075fe398418925fc4e6fb1bda4155d7f566ce70932edc8858330c477f4c2d8191f420f70e5f85
|
7
|
+
data.tar.gz: 60f8fdb3179b09437abe62f09dd720d43167ce3bab8ca5ad567c56450aba674c870738f9410f926d63be54bd559e0e042465720b719a080d8cb8bcc3ae1d501e
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quandl_operation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.23
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Hilscher
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -148,18 +148,12 @@ files:
|
|
148
148
|
- lib/quandl/operation/core_ext/string.rb
|
149
149
|
- lib/quandl/operation/core_ext/time.rb
|
150
150
|
- lib/quandl/operation/parse.rb
|
151
|
-
- lib/quandl/operation/qdformat.rb
|
152
|
-
- lib/quandl/operation/qdformat/dump.rb
|
153
|
-
- lib/quandl/operation/qdformat/load.rb
|
154
|
-
- lib/quandl/operation/qdformat/node.rb
|
155
151
|
- lib/quandl/operation/transform.rb
|
156
152
|
- lib/quandl/operation/version.rb
|
157
153
|
- quandl_operation.gemspec
|
158
154
|
- spec/lib/quandl/operation/collapse_spec.rb
|
159
155
|
- spec/lib/quandl/operation/date_spec.rb
|
160
156
|
- spec/lib/quandl/operation/parse_spec.rb
|
161
|
-
- spec/lib/quandl/operation/qdformat/load_spec.rb
|
162
|
-
- spec/lib/quandl/operation/qdformat/node_spec.rb
|
163
157
|
- spec/lib/quandl/operation/transform_spec.rb
|
164
158
|
- spec/spec_helper.rb
|
165
159
|
homepage: http://blake.hilscher.ca/
|
@@ -190,7 +184,5 @@ test_files:
|
|
190
184
|
- spec/lib/quandl/operation/collapse_spec.rb
|
191
185
|
- spec/lib/quandl/operation/date_spec.rb
|
192
186
|
- spec/lib/quandl/operation/parse_spec.rb
|
193
|
-
- spec/lib/quandl/operation/qdformat/load_spec.rb
|
194
|
-
- spec/lib/quandl/operation/qdformat/node_spec.rb
|
195
187
|
- spec/lib/quandl/operation/transform_spec.rb
|
196
188
|
- spec/spec_helper.rb
|
@@ -1,58 +0,0 @@
|
|
1
|
-
module Quandl
|
2
|
-
module Operation
|
3
|
-
class QDFormat
|
4
|
-
|
5
|
-
class Dump
|
6
|
-
|
7
|
-
ATTRIBUTES = [:source_code, :code, :name, :description]
|
8
|
-
|
9
|
-
class << self
|
10
|
-
|
11
|
-
def nodes(*args)
|
12
|
-
Array(args).flatten.collect{|r| node(r) }.join("\n")
|
13
|
-
end
|
14
|
-
|
15
|
-
def node(node)
|
16
|
-
self.new(node).to_qdf
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
attr_accessor :node
|
22
|
-
|
23
|
-
def initialize(r)
|
24
|
-
self.node = r
|
25
|
-
end
|
26
|
-
|
27
|
-
def to_qdf
|
28
|
-
[ attributes,
|
29
|
-
"-\n",
|
30
|
-
column_names,
|
31
|
-
data
|
32
|
-
].compact.join
|
33
|
-
end
|
34
|
-
|
35
|
-
def attributes
|
36
|
-
attrs = ATTRIBUTES.inject({}) do |memo, name|
|
37
|
-
name = name.to_s
|
38
|
-
memo[name] = node.send(name) if node.respond_to?(name) && node.send(name).present?
|
39
|
-
memo
|
40
|
-
end
|
41
|
-
attrs.to_yaml[4..-1]
|
42
|
-
end
|
43
|
-
|
44
|
-
def data
|
45
|
-
data = node.data.is_a?(Array) ? node.data.collect(&:to_csv).join : node.data
|
46
|
-
data = data.to_csv if data.respond_to?(:to_csv)
|
47
|
-
data
|
48
|
-
end
|
49
|
-
|
50
|
-
def column_names
|
51
|
-
node.column_names.to_csv if node.column_names.present?
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
class Quandl::Operation::QDFormat::Load
|
2
|
-
|
3
|
-
SECTION_DELIMITER = '-'
|
4
|
-
|
5
|
-
class << self
|
6
|
-
|
7
|
-
def from_file(path)
|
8
|
-
from_string(File.read(path).strip)
|
9
|
-
end
|
10
|
-
|
11
|
-
def from_string(input)
|
12
|
-
nodes = []
|
13
|
-
section_type = :data
|
14
|
-
input.each_line do |rline|
|
15
|
-
# strip whitespace
|
16
|
-
line = rline.strip.rstrip
|
17
|
-
# ignore comments and blank lines
|
18
|
-
next if line[0] == '#' || line.blank?
|
19
|
-
|
20
|
-
# are we looking at an attribute?
|
21
|
-
if line =~ attribute_format
|
22
|
-
# if we are leaving the data section
|
23
|
-
# then this is the start of a new node
|
24
|
-
nodes << { attributes: '', data: '' } if section_type == :data
|
25
|
-
# update the section to attributes
|
26
|
-
section_type = :attributes
|
27
|
-
|
28
|
-
# have we reached the end of the attributes?
|
29
|
-
elsif line[0] == '-'
|
30
|
-
# update the section to data
|
31
|
-
section_type = :data
|
32
|
-
# skip to the next line
|
33
|
-
next
|
34
|
-
end
|
35
|
-
# add the line to it's section in the current node.
|
36
|
-
# YAML must include whitespace
|
37
|
-
nodes[-1][section_type] += (section_type == :data) ? "#{line}\n" : rline
|
38
|
-
end
|
39
|
-
# append the current node
|
40
|
-
nodes = parse_nodes(nodes)
|
41
|
-
nodes = initialize_nodes(nodes)
|
42
|
-
nodes
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
|
-
protected
|
47
|
-
|
48
|
-
def parse_nodes(nodes)
|
49
|
-
nodes.collect do |node|
|
50
|
-
# parse attrs as yaml
|
51
|
-
node[:attributes] = YAML.load( node[:attributes] )
|
52
|
-
# parse data as csv
|
53
|
-
node[:attributes][:data] = CSV.parse(node[:data])
|
54
|
-
node
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def initialize_nodes(nodes)
|
59
|
-
nodes.collect do |node|
|
60
|
-
Quandl::Operation::QDFormat::Node.new(node[:attributes])
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def attribute_format
|
65
|
-
/^([a-z0-9_]+): (.+)/
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
class Quandl::Operation::QDFormat::Node
|
2
|
-
|
3
|
-
ATTRIBUTES = :source_code, :code, :name, :description, :column_names, :data
|
4
|
-
attr_accessor *ATTRIBUTES
|
5
|
-
|
6
|
-
def initialize(attrs)
|
7
|
-
assign_attributes(attrs)
|
8
|
-
end
|
9
|
-
|
10
|
-
def assign_attributes(attrs)
|
11
|
-
attrs.each do |key, value|
|
12
|
-
self.send("#{key}=", value) if self.respond_to?(key)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def attributes
|
17
|
-
ATTRIBUTES.inject({}){|m,k| m[k] = self.send(k); m }
|
18
|
-
end
|
19
|
-
|
20
|
-
def inspect
|
21
|
-
"<##{self.class.name} #{attributes.to_s} >"
|
22
|
-
end
|
23
|
-
|
24
|
-
def full_code=(value)
|
25
|
-
value = value.split('/')
|
26
|
-
self.source_code = value[0]
|
27
|
-
self.code = value[1]
|
28
|
-
end
|
29
|
-
|
30
|
-
def full_code
|
31
|
-
[source_code, code].join('/')
|
32
|
-
end
|
33
|
-
|
34
|
-
def description=(value)
|
35
|
-
@description = value.to_s.gsub('\n', "\n")
|
36
|
-
end
|
37
|
-
|
38
|
-
def data=(rows)
|
39
|
-
self.column_names = rows.shift unless rows.first.collect{|r| r.to_s.numeric? }.include?(true)
|
40
|
-
@data = rows
|
41
|
-
end
|
42
|
-
|
43
|
-
def column_names=(names)
|
44
|
-
@column_names = Array(names).flatten.collect{|n| n.strip.rstrip }
|
45
|
-
end
|
46
|
-
|
47
|
-
def to_qdf
|
48
|
-
Quandl::Operation::QDFormat::Dump.node(self)
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'csv'
|
2
|
-
require 'yaml'
|
3
|
-
|
4
|
-
require 'quandl/operation/qdformat/dump'
|
5
|
-
require 'quandl/operation/qdformat/load'
|
6
|
-
require 'quandl/operation/qdformat/node'
|
7
|
-
|
8
|
-
class Quandl::Operation::QDFormat
|
9
|
-
class << self
|
10
|
-
|
11
|
-
def load(input)
|
12
|
-
Quandl::Operation::QDFormat::Load.from_string(input)
|
13
|
-
end
|
14
|
-
|
15
|
-
def load_file(file_path)
|
16
|
-
Quandl::Operation::QDFormat::Load.from_file(file_path)
|
17
|
-
end
|
18
|
-
|
19
|
-
def dump(nodes)
|
20
|
-
Quandl::Operation::QDFormat::Dump.nodes(nodes)
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'quandl/operation/qdformat'
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Quandl::Operation::QDFormat::Load do
|
6
|
-
|
7
|
-
let(:qdf_dataset){
|
8
|
-
%Q{
|
9
|
-
# first dataset
|
10
|
-
source_code: NSE
|
11
|
-
code: OIL
|
12
|
-
name: Oil India Limited
|
13
|
-
description: |-
|
14
|
-
Here is a description with multiple lines.
|
15
|
-
This is the second line.
|
16
|
-
-
|
17
|
-
Date, Value, High, Low
|
18
|
-
2013-11-20,9.99470588235294,11.003235294117646,14.00164705882353
|
19
|
-
2013-11-19,10.039388096885814,,14.09718770934256
|
20
|
-
|
21
|
-
# Second dataset
|
22
|
-
code: DATASET_CODE_2
|
23
|
-
source_code: SOURCE_CODE_2
|
24
|
-
name: Test Dataset Name 2
|
25
|
-
description: Here is a description with multiple lines.
|
26
|
-
-
|
27
|
-
Date, Value, High, Low
|
28
|
-
2013-11-20,9.99470588235294,11.003235294117646,14.00164705882353
|
29
|
-
2013-11-19,10.039388096885814,,14.09718770934256
|
30
|
-
2013-11-18,11.039388096885814,,15.09718770934256
|
31
|
-
}
|
32
|
-
}
|
33
|
-
|
34
|
-
describe ".from_string" do
|
35
|
-
|
36
|
-
let(:collection){ Quandl::Operation::QDFormat::Load.from_string(qdf_dataset) }
|
37
|
-
subject{ collection }
|
38
|
-
|
39
|
-
its(:count){ should eq 2 }
|
40
|
-
|
41
|
-
describe "#first" do
|
42
|
-
subject{ collection.first }
|
43
|
-
|
44
|
-
it{ should be_a Quandl::Operation::QDFormat::Node }
|
45
|
-
its(:source_code){ should eq 'NSE' }
|
46
|
-
its(:code){ should eq 'OIL' }
|
47
|
-
its(:name){ should eq 'Oil India Limited' }
|
48
|
-
its(:description){ should eq "Here is a description with multiple lines.\nThis is the second line." }
|
49
|
-
its(:column_names){ should eq ['Date', 'Value', 'High', 'Low'] }
|
50
|
-
its(:data){ should eq [["2013-11-20", "9.99470588235294", "11.003235294117646", "14.00164705882353"],
|
51
|
-
["2013-11-19", "10.039388096885814", nil, "14.09718770934256"]] }
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'quandl/operation/qdformat'
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Quandl::Operation::QDFormat::Node do
|
6
|
-
|
7
|
-
let(:attributes) { {
|
8
|
-
code: 'DATASET_CODE_2',
|
9
|
-
source_code: 'SOURCE_CODE',
|
10
|
-
name: 'Test Dataset Name 2',
|
11
|
-
description: "Here is a description with multiple lines.\n This is the second line.",
|
12
|
-
column_names: ['Date', 'Value', 'High', 'Low'],
|
13
|
-
data: [["2013-11-20", "9.99470588235294", "11.003235294117646", "14.00164705882353"],
|
14
|
-
["2013-11-19", "10.039388096885814", nil, "14.09718770934256"]],
|
15
|
-
}}
|
16
|
-
|
17
|
-
subject{ Quandl::Operation::QDFormat::Node.new(attributes) }
|
18
|
-
|
19
|
-
its(:code){ should eq 'DATASET_CODE_2' }
|
20
|
-
its(:source_code){ should eq 'SOURCE_CODE' }
|
21
|
-
its(:name){ should eq 'Test Dataset Name 2' }
|
22
|
-
its(:description){ should eq "Here is a description with multiple lines.\n This is the second line." }
|
23
|
-
its(:column_names){ should eq ['Date', 'Value', 'High', 'Low'] }
|
24
|
-
its(:data){ should eq [["2013-11-20", "9.99470588235294", "11.003235294117646", "14.00164705882353"],
|
25
|
-
["2013-11-19", "10.039388096885814", nil, "14.09718770934256"]] }
|
26
|
-
|
27
|
-
its(:attributes){ should eq attributes }
|
28
|
-
|
29
|
-
its(:to_qdf){ should eq %Q{source_code: SOURCE_CODE
|
30
|
-
code: DATASET_CODE_2
|
31
|
-
name: Test Dataset Name 2
|
32
|
-
description: |-
|
33
|
-
Here is a description with multiple lines.
|
34
|
-
This is the second line.
|
35
|
-
-
|
36
|
-
Date,Value,High,Low
|
37
|
-
2013-11-20,9.99470588235294,11.003235294117646,14.00164705882353
|
38
|
-
2013-11-19,10.039388096885814,,14.09718770934256
|
39
|
-
}}
|
40
|
-
|
41
|
-
end
|