quandl-elasticsearch 2.1.0.rc5
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 +7 -0
- data/.gitignore +20 -0
- data/.rubocop.yml +34 -0
- data/COMMANDS.md +29 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +155 -0
- data/LICENSE.txt +22 -0
- data/README.md +50 -0
- data/Rakefile +1 -0
- data/config/elasticsearch.yml +32 -0
- data/elasticsearch/elasticsearch.yml +386 -0
- data/elasticsearch/logging.yml +56 -0
- data/elasticsearch/stopwords/english.txt +38 -0
- data/elasticsearch/synonyms/synonyms_english.txt +318 -0
- data/fixtures/vcr_cassettes/search_spec_database_1.yml +38 -0
- data/fixtures/vcr_cassettes/search_spec_database_2.yml +38 -0
- data/fixtures/vcr_cassettes/search_spec_dataset_1.yml +48 -0
- data/fixtures/vcr_cassettes/search_spec_dataset_2.yml +41 -0
- data/fixtures/vcr_cassettes/setup.yml +139 -0
- data/lib/quandl/elasticsearch.rb +61 -0
- data/lib/quandl/elasticsearch/base.rb +20 -0
- data/lib/quandl/elasticsearch/database.rb +22 -0
- data/lib/quandl/elasticsearch/dataset.rb +51 -0
- data/lib/quandl/elasticsearch/indice.rb +96 -0
- data/lib/quandl/elasticsearch/query.rb +282 -0
- data/lib/quandl/elasticsearch/search.rb +150 -0
- data/lib/quandl/elasticsearch/tag.rb +21 -0
- data/lib/quandl/elasticsearch/template.rb +189 -0
- data/lib/quandl/elasticsearch/utility.rb +6 -0
- data/lib/quandl/elasticsearch/version.rb +6 -0
- data/quandl +77 -0
- data/quandl-elasticsearch.gemspec +34 -0
- data/solano.yml +20 -0
- data/spec/lib/quandl/elasticsearch/database_spec.rb +98 -0
- data/spec/lib/quandl/elasticsearch/dataset_spec.rb +124 -0
- data/spec/lib/quandl/elasticsearch/indice_spec.rb +10 -0
- data/spec/lib/quandl/elasticsearch/query_spec.rb +239 -0
- data/spec/lib/quandl/elasticsearch/search_spec.rb +83 -0
- data/spec/lib/quandl/elasticsearch/template_spec.rb +182 -0
- data/spec/lib/quandl/elasticsearch/utility_spec.rb +10 -0
- data/spec/lib/quandl/elasticsearch_spec.rb +99 -0
- data/spec/spec_helper.rb +27 -0
- data/templates/database_mapping.json +11 -0
- data/templates/dataset_mapping.json +9 -0
- data/templates/quandl_delimiter.json +0 -0
- data/templates/search_term_mapping.json +13 -0
- data/tests/Database-Ratings.csv +405 -0
- data/tests/Database-Tags.csv +341 -0
- data/tests/compare.csv +1431 -0
- data/tests/compare.rb +33 -0
- data/tests/console.rb +4 -0
- data/tests/generated_db_tags.csv +341 -0
- data/tests/search.rb +14 -0
- data/tests/search_db_mapping.txt +402 -0
- data/tests/status.rb +2 -0
- data/tests/test_search.csv +87 -0
- data/tests/test_search.rb +113 -0
- data/tests/testing-list.txt +183 -0
- data/tests/top500searches.csv +477 -0
- metadata +300 -0
@@ -0,0 +1,189 @@
|
|
1
|
+
require_relative 'version'
|
2
|
+
|
3
|
+
module Quandl
|
4
|
+
module Elasticsearch
|
5
|
+
class Template
|
6
|
+
class << self
|
7
|
+
def gem_path
|
8
|
+
Pathname.new(Gem::Specification.find_by_name('quandl-elasticsearch', Quandl::Elasticsearch::VERSION).gem_dir)
|
9
|
+
end
|
10
|
+
|
11
|
+
def main_index
|
12
|
+
{ settings: { index: index_settings,
|
13
|
+
similarity: { quandl_bm25: quandl_bm25 },
|
14
|
+
analysis: { analyzer: analyzer, filter: filter, char_filter: char_filter } },
|
15
|
+
mappings: { database: { properties: database_mapping },
|
16
|
+
dataset: { _parent: { type: 'database' }, properties: dataset_mapping } } }
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def analyzer
|
22
|
+
{
|
23
|
+
keyword_lowercase: keyword_lowercase_analyzer,
|
24
|
+
quandl_index: quandl_text_analyzer,
|
25
|
+
quandl_search: quandl_search_analyzer
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def filter
|
30
|
+
{
|
31
|
+
quandl_synonym_filter: quandl_synonym_filter,
|
32
|
+
quandl_stemmer: quandl_stemmer,
|
33
|
+
quandl_stop_words: quandl_stop_words,
|
34
|
+
quandl_delimiter: quandl_delimiter
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
def char_filter
|
39
|
+
{
|
40
|
+
quandl_char_filter: quandl_char_filter
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
def quandl_text_analyzer
|
45
|
+
{
|
46
|
+
type: 'custom',
|
47
|
+
tokenizer: 'whitespace',
|
48
|
+
filter: %w(quandl_delimiter lowercase quandl_synonym_filter quandl_stop_words quandl_stemmer trim),
|
49
|
+
char_filter: %w(quandl_char_filter)
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
53
|
+
def quandl_search_analyzer
|
54
|
+
## without quandl_synonym_filte
|
55
|
+
{
|
56
|
+
type: 'custom',
|
57
|
+
tokenizer: 'whitespace',
|
58
|
+
filter: %w(quandl_delimiter lowercase quandl_stop_words quandl_stemmer trim),
|
59
|
+
char_filter: %w(quandl_char_filter)
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
def keyword_lowercase_analyzer
|
64
|
+
{
|
65
|
+
type: 'english',
|
66
|
+
tokenizer: 'keyword',
|
67
|
+
filter: 'lowercase',
|
68
|
+
stopwords: '_none_'
|
69
|
+
}
|
70
|
+
end
|
71
|
+
|
72
|
+
def quandl_synonym_filter
|
73
|
+
synonyms = []
|
74
|
+
File.read(gem_path.join('elasticsearch/synonyms/synonyms_english.txt')).each_line do |line|
|
75
|
+
clean_line = line.strip
|
76
|
+
next if clean_line[0] == '#' || clean_line =~ /^\s+$/
|
77
|
+
synonyms << clean_line
|
78
|
+
end
|
79
|
+
|
80
|
+
{
|
81
|
+
type: 'synonym',
|
82
|
+
synonyms: synonyms
|
83
|
+
}
|
84
|
+
end
|
85
|
+
|
86
|
+
def quandl_char_filter
|
87
|
+
# unicode table
|
88
|
+
{
|
89
|
+
type: 'mapping',
|
90
|
+
mappings: [
|
91
|
+
'\\u0060=>\\u0020', # `
|
92
|
+
'\\u002F=>\\u0020', # /
|
93
|
+
'\\u003A=>\\u0020', # :
|
94
|
+
'\\u002D=>\\u0020', # -
|
95
|
+
'\\u0028=>\\u0020', # (
|
96
|
+
'\\u0029=>\\u0020', # )
|
97
|
+
'\\u002C=>\\u0020', # ,
|
98
|
+
'\\u003B=>\\u0020' # ;
|
99
|
+
]
|
100
|
+
}
|
101
|
+
end
|
102
|
+
|
103
|
+
def quandl_stemmer
|
104
|
+
{
|
105
|
+
type: 'stemmer',
|
106
|
+
name: 'english'
|
107
|
+
}
|
108
|
+
end
|
109
|
+
|
110
|
+
def quandl_stop_words
|
111
|
+
stop_words = []
|
112
|
+
File.read(gem_path.join('elasticsearch/stopwords/english.txt')).each_line do |line|
|
113
|
+
clean_line = line.strip
|
114
|
+
next if clean_line[0] == '#' || clean_line =~ /^\s+$/
|
115
|
+
stop_words << clean_line
|
116
|
+
end
|
117
|
+
|
118
|
+
{
|
119
|
+
type: 'stop',
|
120
|
+
ignore_case: true,
|
121
|
+
stopwords: stop_words
|
122
|
+
}
|
123
|
+
end
|
124
|
+
|
125
|
+
def quandl_delimiter
|
126
|
+
{
|
127
|
+
type: 'word_delimiter',
|
128
|
+
split_on_case_change: true,
|
129
|
+
catenate_numbers: true,
|
130
|
+
preserve_original: true,
|
131
|
+
generate_word_parts: true,
|
132
|
+
split_on_numbers: true,
|
133
|
+
stem_english_prossessive: true,
|
134
|
+
type_table: ['& => ALPHA',
|
135
|
+
'_ => ALPHA',
|
136
|
+
'$ => DIGIT',
|
137
|
+
'% => DIGIT'],
|
138
|
+
protected_word: ['u.s.', 'u.s.a.']
|
139
|
+
}
|
140
|
+
end
|
141
|
+
|
142
|
+
def database_mapping
|
143
|
+
{
|
144
|
+
code: { type: 'string', store: true, norms: { enabled: false }, analyzer: 'keyword_lowercase' },
|
145
|
+
name: { type: 'string', store: true, norms: { enabled: true }, analyzer: 'quandl_index', search_analyzer: 'quandl_search' },
|
146
|
+
updated_at: { type: 'date' },
|
147
|
+
description: { type: 'string', store: true, norms: { enabled: true }, analyzer: 'quandl_index' },
|
148
|
+
documentation: { type: 'string', store: true, norms: { enabled: true }, analyzer: 'quandl_index' },
|
149
|
+
premium: { type: 'boolean', store: true, norms: { enabled: false } },
|
150
|
+
hidden: { type: 'boolean', store: true, norms: { enabled: false } },
|
151
|
+
exclusive: { type: 'boolean', store: true, norms: { enabled: false } },
|
152
|
+
type: { type: 'string', store: true, norms: { enabled: false }, index: 'not_analyzed' },
|
153
|
+
rating: { type: 'integer', store: true, norms: { enabled: false }, index: 'not_analyzed' },
|
154
|
+
tags: { type: 'string', store: true, norms: { enabled: false }, index: 'not_analyzed' }
|
155
|
+
}
|
156
|
+
end
|
157
|
+
|
158
|
+
def dataset_mapping
|
159
|
+
{
|
160
|
+
code: { type: 'string', store: true, norms: { enabled: false }, analyzer: 'keyword_lowercase' },
|
161
|
+
name: { type: 'string', store: true, norms: { enabled: true }, analyzer: 'quandl_index', search_analyzer: 'quandl_search' },
|
162
|
+
is_private: { type: 'boolean', norms: { enabled: false }, store: false },
|
163
|
+
type: { type: 'string', store: true, norms: { enabled: false }, index: 'not_analyzed' },
|
164
|
+
frequency: { type: 'string', store: false, norms: { enabled: false }, index: 'not_analyzed' },
|
165
|
+
to_date: { type: 'date', format: 'date', store: false, norms: { enabled: false } },
|
166
|
+
db_hidden: { type: 'boolean', norms: { enabled: false }, store: false },
|
167
|
+
db_exclusive: { type: 'boolean', norms: { enabled: false }, store: false },
|
168
|
+
sample: { type: 'boolean', norms: { enabled: false }, store: false }
|
169
|
+
}
|
170
|
+
end
|
171
|
+
|
172
|
+
def index_settings
|
173
|
+
{
|
174
|
+
number_of_shards: 1,
|
175
|
+
number_of_replicas: 0
|
176
|
+
}
|
177
|
+
end
|
178
|
+
|
179
|
+
def quandl_bm25
|
180
|
+
{
|
181
|
+
type: 'BM25',
|
182
|
+
k1: 0,
|
183
|
+
b: 0.75
|
184
|
+
}
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
data/quandl
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'commander/import'
|
5
|
+
require './tests/search.rb'
|
6
|
+
|
7
|
+
program :version, '0.0.1'
|
8
|
+
program :description, 'quandl-elasticsearch command line tools'
|
9
|
+
default_command :search
|
10
|
+
|
11
|
+
command :search do |c|
|
12
|
+
c.syntax = 'quandl_es search [options]'
|
13
|
+
c.summary = 'search v3 on staging'
|
14
|
+
c.description = c.summary
|
15
|
+
c.example 'search on query strings', './quand_es search -q "bank"'
|
16
|
+
c.example 'search based on query strings', './quandl_es search --query "natural gas future"'
|
17
|
+
c.example 'show search results for page 3.', './quandl_es search --q "bank" -p 3'
|
18
|
+
c.example 'show search results for page 2 and each page shows 25 results.', './quandl_es search --q "oil" -p 2 -s 25'
|
19
|
+
c.example 'serch for databases with term aaple and with tags USA and STOCKS', './quandl_es search --q "aapl" -g USA,STOCKS'
|
20
|
+
|
21
|
+
c.option '-q', '--query "query strings"', String, 'query strings'
|
22
|
+
c.option '-g', '--tags "tags list"', String, 'tag list'
|
23
|
+
c.option '-p', '--page PAGE_NUMBER', 'search results page number', Integer, 'page number'
|
24
|
+
c.option '-s', '--size PER_PAGE', 'search results per page', Integer, 'per page result'
|
25
|
+
c.option '-m', '--premium', String, 'only premium databases'
|
26
|
+
c.option '-f', '--free', String, 'only free databases'
|
27
|
+
c.option '-w', '--with-dataset', 'show dadatasets', String, 'show dataset'
|
28
|
+
c.action do |_args, options|
|
29
|
+
page = options.page ? options.page.to_i : 0
|
30
|
+
tags = options.tags ? options.tags.to_s : ''
|
31
|
+
|
32
|
+
f = options.free ? true : false
|
33
|
+
p = options.premium ? true : false
|
34
|
+
|
35
|
+
premium = nil
|
36
|
+
premium = false if f
|
37
|
+
premium = true if p
|
38
|
+
|
39
|
+
unless tags.empty?
|
40
|
+
tags.split(',').each do |t|
|
41
|
+
fail 'tags must be one of tag list' unless tag_list.include?(t)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
if options.query
|
45
|
+
result = search(options.query, tags, options.with_dataset, premium, page)
|
46
|
+
db_codes = result.map { |s| s['code'] }.reject(&:nil?)
|
47
|
+
r = { 'databases' => result }
|
48
|
+
puts JSON.pretty_generate(r)
|
49
|
+
puts "#{db_codes.count} hit databases code: #{db_codes.join(',')}"
|
50
|
+
else
|
51
|
+
system('./quandl_es search --help')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
command :dataset do |c|
|
57
|
+
c.option '-i', '--id DATABASE_id', String, 'database id'
|
58
|
+
c.option '-q', '--query SEARCH_QUERY', String, 'search query'
|
59
|
+
c.option '-p', '--page PAGE_NUMBER', 'search results page number', Integer, 'page number'
|
60
|
+
c.option '-s', '--size PER_PAGE', 'search results per page', Integer, 'per page result'
|
61
|
+
c.option '-f', '--frequency FREQUENCY_LIST', String, 'frequency list'
|
62
|
+
frequency_list = %w(daily weekly monthly "quarterly annual)
|
63
|
+
|
64
|
+
c.action do |_args, options|
|
65
|
+
frequency = options.frequency ? options.frequency : nil
|
66
|
+
page = options.page ? options.page.to_i : 0
|
67
|
+
# size = options.size ? options.size.to_i : 10
|
68
|
+
unless frequency.nil?
|
69
|
+
frequency.split(',').each do |d|
|
70
|
+
fail "frequency should be in #{frequency_list}" unless frequency_list.include?(d)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
query = options.query && options.query.strip != '' ? options.query : nil
|
74
|
+
r = dataset_search(options.id, query, frequency, page)
|
75
|
+
puts JSON.pretty_generate(r)
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'quandl/elasticsearch/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'quandl-elasticsearch'
|
8
|
+
spec.version = Quandl::Elasticsearch::VERSION
|
9
|
+
spec.authors = ['Jun Li']
|
10
|
+
spec.email = ['jun@quandl.com']
|
11
|
+
spec.description = 'Elasticsearch interface for Quandl'
|
12
|
+
spec.summary = 'Elasticsearch interface for Quandl'
|
13
|
+
spec.homepage = 'https://github.com/quandl/quandl-elasticsearch'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_runtime_dependency 'elasticsearch', '~> 1.0.17'
|
22
|
+
spec.add_runtime_dependency 'commander', '~> 4.3'
|
23
|
+
spec.add_runtime_dependency 'json', '~> 1.8.2'
|
24
|
+
spec.add_runtime_dependency 'quandl-config', '> 0.0.3', '< 2.0'
|
25
|
+
spec.add_development_dependency 'rspec'
|
26
|
+
spec.add_development_dependency 'pry'
|
27
|
+
spec.add_development_dependency 'rubocopter'
|
28
|
+
spec.add_development_dependency 'activesupport'
|
29
|
+
spec.add_development_dependency 'vcr'
|
30
|
+
spec.add_development_dependency 'simplecov'
|
31
|
+
spec.add_development_dependency 'webmock'
|
32
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
33
|
+
spec.add_development_dependency 'rake'
|
34
|
+
end
|
data/solano.yml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
environment:
|
2
|
+
'QUANDL_PROJECT': 'Elasticsearch Gem'
|
3
|
+
'SLACK_WEBHOOK': 'https://hooks.slack.com/services/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'
|
4
|
+
'TZ': 'UTC'
|
5
|
+
tool_config:
|
6
|
+
gc: '4.6'
|
7
|
+
ruby_version: 2.2.2
|
8
|
+
bundler_version: 1.10.5
|
9
|
+
rake:
|
10
|
+
rails_env: 'test'
|
11
|
+
solr: false
|
12
|
+
rabbitmq: false
|
13
|
+
redis: false
|
14
|
+
tests:
|
15
|
+
- bundle exec rubocopter --commit origin/master
|
16
|
+
test_pattern:
|
17
|
+
- spec/**_spec.rb
|
18
|
+
coverage: true
|
19
|
+
hooks:
|
20
|
+
post_build: 'gem install quandl_utility && qutil ci notify_slack'
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'quandl/elasticsearch/indice'
|
3
|
+
|
4
|
+
describe Quandl::Elasticsearch::Database do
|
5
|
+
describe '.initialize' do
|
6
|
+
it 'can return the correct object' do
|
7
|
+
record = { 'id' => 4 }
|
8
|
+
database = Quandl::Elasticsearch::Database.new(record)
|
9
|
+
expect(database).to be_a_kind_of(Quandl::Elasticsearch::Database)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '.id' do
|
14
|
+
it 'can return the correct id' do
|
15
|
+
record = { 'id' => 4 }
|
16
|
+
database = Quandl::Elasticsearch::Database.new(record)
|
17
|
+
expect(database.id).to eq(4)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '.data' do
|
22
|
+
it 'can return the correct data and does not flag as remove' do
|
23
|
+
record = { 'id' => 4, 'name' => 'Name', 'description' => 'Description',
|
24
|
+
'documentation' => 'Documentation', 'premium' => true, 'rating' => 5,
|
25
|
+
'deleted_at' => nil, 'type' => nil, 'hidden' => 'f',
|
26
|
+
'elasticsearch_flags' => 'USA,STOCKS', 'exclusive' => true }
|
27
|
+
database = Quandl::Elasticsearch::Database.new(record)
|
28
|
+
expect(database.remove?).to eq(false)
|
29
|
+
expect(database.data).to eq(name: 'Name', code: nil, description: 'Description', documentation: 'Documentation',
|
30
|
+
premium: true, hidden: false, tags: %w(USA STOCKS), exclusive: true)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '.remove' do
|
35
|
+
it 'can not remove correctly if it is hidden' do
|
36
|
+
record = { 'hidden' => 't', 'deleted_at' => nil, 'rating' => 1, 'type' => nil }
|
37
|
+
database1 = Quandl::Elasticsearch::Database.new(record)
|
38
|
+
expect(database1.remove?).to eq(false)
|
39
|
+
record = { 'hidden' => 'f', 'deleted_at' => nil, 'rating' => 1, 'type' => nil }
|
40
|
+
database2 = Quandl::Elasticsearch::Database.new(record)
|
41
|
+
expect(database2.remove?).to eq(false)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'can remove correctly if it is deleted_at' do
|
45
|
+
record = { 'deleted_at' => nil, 'rating' => 5, 'type' => nil }
|
46
|
+
database1 = Quandl::Elasticsearch::Database.new(record)
|
47
|
+
expect(database1.remove?).to eq(false)
|
48
|
+
record = { 'deleted_at' => '2015-01-01', 'rating' => 5, 'type' => nil }
|
49
|
+
database2 = Quandl::Elasticsearch::Database.new(record)
|
50
|
+
expect(database2.remove?).to eq(true)
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'can not remove correctly if it is rated zero or lower' do
|
54
|
+
record = { 'deleted_at' => nil, 'hidden' => 'f', 'rating' => 1, 'type' => nil }
|
55
|
+
database1 = Quandl::Elasticsearch::Database.new(record)
|
56
|
+
expect(database1.remove?).to eq(false)
|
57
|
+
record = { 'deleted_at' => nil, 'hidden' => 'f', 'rating' => 0, 'type' => nil }
|
58
|
+
database2 = Quandl::Elasticsearch::Database.new(record)
|
59
|
+
expect(database2.remove?).to eq(false)
|
60
|
+
record = { 'rating' => -10, 'deleted_at' => nil, 'hidden' => 'f', 'type' => nil }
|
61
|
+
database3 = Quandl::Elasticsearch::Database.new(record)
|
62
|
+
expect(database3.remove?).to eq(false)
|
63
|
+
record = { 'rating' => 4, 'deleted_at' => nil, 'hidden' => 'f', 'type' => nil }
|
64
|
+
database4 = Quandl::Elasticsearch::Database.new(record)
|
65
|
+
expect(database4.remove?).to eq(false)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'can remove correctly if it is not a Source' do
|
69
|
+
record = { 'type' => 'UserSource', 'rating' => 1 }
|
70
|
+
database1 = Quandl::Elasticsearch::Database.new(record)
|
71
|
+
expect(database1.remove?).to eq(true)
|
72
|
+
record = { 'type' => nil, 'rating' => 1 }
|
73
|
+
database2 = Quandl::Elasticsearch::Database.new(record)
|
74
|
+
expect(database2.remove?).to eq(false)
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'can remove correctly if rating <= 0' do
|
78
|
+
record = { 'rating' => 1 }
|
79
|
+
database1 = Quandl::Elasticsearch::Database.new(record)
|
80
|
+
expect(database1.remove?).to eq(false)
|
81
|
+
record = { 'rating' => nil }
|
82
|
+
database2 = Quandl::Elasticsearch::Database.new(record)
|
83
|
+
expect(database2.remove?).to eq(false)
|
84
|
+
record = { 'rating' => 0 }
|
85
|
+
database3 = Quandl::Elasticsearch::Database.new(record)
|
86
|
+
expect(database3.remove?).to eq(false)
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'can not remove correctly if it is hidden' do
|
90
|
+
record = { 'hidden' => 't' }
|
91
|
+
database1 = Quandl::Elasticsearch::Database.new(record)
|
92
|
+
expect(database1.remove?).to eq(false)
|
93
|
+
record = { 'hidden' => 'f', 'deleted_at' => nil, 'rating' => 1, 'type' => nil }
|
94
|
+
database2 = Quandl::Elasticsearch::Database.new(record)
|
95
|
+
expect(database2.remove?).to eq(false)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'quandl/elasticsearch/indice'
|
3
|
+
|
4
|
+
describe Quandl::Elasticsearch::Dataset do
|
5
|
+
describe '.initialize' do
|
6
|
+
it 'can return the correct object' do
|
7
|
+
record = { 'id' => 9, 'hidden' => 'f', 'deleted_at' => nil, 'rating' => 1, 'type' => nil }
|
8
|
+
dataset = Quandl::Elasticsearch::Dataset.new(record)
|
9
|
+
expect(dataset).to be_a_kind_of(Quandl::Elasticsearch::Dataset)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '.id' do
|
14
|
+
it 'can return the correct value' do
|
15
|
+
record = { 'id' => 9, 'type' => nil, 'deleted_at' => nil, 'state' => 'published' }
|
16
|
+
dataset = Quandl::Elasticsearch::Dataset.new(record)
|
17
|
+
expect(dataset.id).to eq(9)
|
18
|
+
expect(dataset.remove?).to eq(false)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '.database_id' do
|
23
|
+
it 'can return the correct value' do
|
24
|
+
record = { 'id' => 9, 'database_id' => 598_393 }
|
25
|
+
dataset = Quandl::Elasticsearch::Dataset.new(record)
|
26
|
+
expect(dataset.database_id).to eq(598_393)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '.data' do
|
31
|
+
it 'can return the correct value and does not flag as remove' do
|
32
|
+
# {:code=>nil, :name=>nil, :to_date=>nil, :frequency=>nil}
|
33
|
+
record = { 'id' => 9, 'deleted_at' => nil, 'type' => nil, 'state' => 'published',
|
34
|
+
'code' => 'Code', 'name' => 'Name', 'to_date' => '12122015',
|
35
|
+
'is_private' => false, 'frequency' => 'daily', 'db_hidden' => true,
|
36
|
+
'db_exclusive' => true, 'db_premium' => true, 'db_preview_enabled' => true,
|
37
|
+
'db_preview_datasets' => '' }
|
38
|
+
dataset = Quandl::Elasticsearch::Dataset.new(record)
|
39
|
+
expect(dataset.data).to eq(code: 'Code', name: 'Name', to_date: '12122015',
|
40
|
+
is_private: false, frequency: 'daily',
|
41
|
+
db_hidden: true, db_exclusive: true, sample: true)
|
42
|
+
expect(dataset.remove?).to eq(false)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '.remove' do
|
47
|
+
it 'can remove correctly if it is deleted_at' do
|
48
|
+
record = { 'type' => nil, 'deleted_at' => nil, 'is_private' => 'f' }
|
49
|
+
dataset1 = Quandl::Elasticsearch::Dataset.new(record)
|
50
|
+
expect(dataset1.remove?).to eq(false)
|
51
|
+
record = { 'deleted_at' => '2015-01-01' }
|
52
|
+
dataset2 = Quandl::Elasticsearch::Dataset.new(record)
|
53
|
+
expect(dataset2.remove?).to eq(true)
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'can remove correctly if it is not a dataset' do
|
57
|
+
record = { 'type' => 'Superset' }
|
58
|
+
dataset1 = Quandl::Elasticsearch::Dataset.new(record)
|
59
|
+
expect(dataset1.remove?).to eq(true)
|
60
|
+
record = { 'type' => nil, 'deleted_at' => nil, 'is_private' => 'f' }
|
61
|
+
dataset2 = Quandl::Elasticsearch::Dataset.new(record)
|
62
|
+
expect(dataset2.remove?).to eq(false)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe 'sample' do
|
67
|
+
subject { Quandl::Elasticsearch::Dataset.new(record).data }
|
68
|
+
|
69
|
+
let(:db_preview_datasets) { 'BBB,AAA,CCC' }
|
70
|
+
let(:db_preview_enabled) { 't' }
|
71
|
+
let(:db_premium) { 't' }
|
72
|
+
let(:code) { 'AAA' }
|
73
|
+
|
74
|
+
let(:record) do
|
75
|
+
{
|
76
|
+
'db_preview_datasets' => db_preview_datasets,
|
77
|
+
'db_preview_enabled' => db_preview_enabled,
|
78
|
+
'db_premium' => db_premium,
|
79
|
+
'code' => code
|
80
|
+
}
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'premium' do
|
84
|
+
context 'code is in preview datasets list' do
|
85
|
+
context 'previews not enabled' do
|
86
|
+
let(:db_preview_enabled) { 'f' }
|
87
|
+
|
88
|
+
it 'is not previewable' do
|
89
|
+
expect(subject[:sample]).to eq(false)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'previews enabled' do
|
94
|
+
it 'is previewable' do
|
95
|
+
expect(subject[:sample]).to eq(true)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'code is not in preview datasets list' do
|
101
|
+
let(:db_preview_datasets) { 'BBB,AA,CCC' }
|
102
|
+
|
103
|
+
it 'is not previewable' do
|
104
|
+
expect(subject[:sample]).to eq(false)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context 'preview datasets list is empty' do
|
109
|
+
let(:db_preview_datasets) { '' }
|
110
|
+
|
111
|
+
it 'is previewable since empty means all datasets are whitelisted' do
|
112
|
+
expect(subject[:sample]).to eq(true)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context 'free' do
|
118
|
+
let(:db_premium) { 'f' }
|
119
|
+
it 'is not previewable' do
|
120
|
+
expect(subject[:sample]).to eq(false)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|