Skip to content

Commit 8ec826c

Browse files
Merge pull request #45 from nsidc/srch-135
SRCH-135
2 parents 1825b7f + 1fb8981 commit 8ec826c

31 files changed

+594
-459
lines changed

.rubocop.yml

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ require:
55
AllCops:
66
Include:
77
- tasks/*.rake
8+
- lib/**/*.rb
9+
- spec/**/*.rb
810
- Guardfile
911
- Rakefile
1012
Exclude:
@@ -15,6 +17,10 @@ AllCops:
1517
Layout/EmptyLinesAroundAttributeAccessor:
1618
Enabled: true
1719

20+
Layout/HashAlignment:
21+
EnforcedColonStyle: table
22+
EnforcedHashRocketStyle: table
23+
1824
Layout/LineLength:
1925
Enabled: false
2026

@@ -37,16 +43,19 @@ Metrics/AbcSize:
3743
Max: 20
3844

3945
Metrics/ClassLength:
40-
Max: 125
46+
Max: 200
4147

4248
Metrics/CyclomaticComplexity:
43-
Max: 8
49+
Max: 10
4450

4551
Metrics/MethodLength:
4652
Max: 30
4753

4854
Metrics/ModuleLength:
49-
Max: 101
55+
Max: 200
56+
57+
Metrics/PerceivedComplexity:
58+
Max: 10
5059

5160
Style/Documentation:
5261
Enabled: false
@@ -80,3 +89,26 @@ Style/RescueModifier:
8089

8190
Style/SlicingWithRange:
8291
Enabled: true
92+
93+
# RSPEC SPECIFIC
94+
95+
RSpec/DescribeClass:
96+
Enabled: false
97+
98+
RSpec/ExampleLength:
99+
Max: 30
100+
101+
RSpec/FilePath:
102+
Enabled: false
103+
104+
RSpec/MultipleExpectations:
105+
Max: 10
106+
107+
RSpec/MultipleMemoizedHelpers:
108+
Max: 10
109+
110+
RSpec/NestedGroups:
111+
Max: 5
112+
113+
RSpec/VerifiedDoubleReference:
114+
EnforcedStyle: string

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## Unreleased
2+
3+
- Update Rubocop configuration to actually run against files, and make
4+
necessary corrections to comply with Rubocop styling.
5+
16
## v6.2.0 (2022-07-18)
27

38
- Remove deprecated harvesters and associated tests, helpers, etc.

Gemfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
PATH
22
remote: .
33
specs:
4-
search_solr_tools (6.2.0)
4+
search_solr_tools (6.3.0.pre.1)
55
ffi-geos (~> 2.4.0)
66
iso8601 (~> 0.13.0)
77
multi_json (~> 1.15.0)

bin/search_solr_tools

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class SolrHarvestCLI < Thor
4747
end
4848

4949
ping_status = SearchSolrTools::Helpers::HarvestStatus.new(
50-
SearchSolrTools::Helpers::HarvestStatus::PING_SOLR => solr_success,
50+
SearchSolrTools::Helpers::HarvestStatus::PING_SOLR => solr_success,
5151
SearchSolrTools::Helpers::HarvestStatus::PING_SOURCE => source_success
5252
)
5353
raise SearchSolrTools::Errors::HarvestError, ping_status unless ping_status.ok?
@@ -64,9 +64,9 @@ class SolrHarvestCLI < Thor
6464
puts "Target: #{target}"
6565
begin
6666
harvest_class = get_harvester_class(target)
67-
harvester = harvest_class.new(options[:environment], die_on_failure)
67+
harvester = harvest_class.new(options[:environment], die_on_failure:)
6868
ping_status = SearchSolrTools::Helpers::HarvestStatus.new(
69-
SearchSolrTools::Helpers::HarvestStatus::PING_SOLR => harvester.ping_solr,
69+
SearchSolrTools::Helpers::HarvestStatus::PING_SOLR => harvester.ping_solr,
7070
SearchSolrTools::Helpers::HarvestStatus::PING_SOURCE => harvester.ping_source
7171
)
7272
raise SearchSolrTools::Errors::HarvestError, ping_status unless ping_status.ok?
@@ -120,7 +120,7 @@ class SolrHarvestCLI < Thor
120120
no_tasks do
121121
def harvester_map
122122
{
123-
'nsidc' => SearchSolrTools::Harvesters::NsidcJson,
123+
'nsidc' => SearchSolrTools::Harvesters::NsidcJson,
124124
'nsidc_auto_suggest' => SearchSolrTools::Harvesters::NsidcAutoSuggest
125125
}
126126
end

lib/search_solr_tools.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
# frozen_string_literal: true
2+
13
require_relative 'search_solr_tools/config/environments'
24
require_relative 'search_solr_tools/version'
35

46
require_relative 'search_solr_tools/helpers/harvest_status'
57
require_relative 'search_solr_tools/errors/harvest_error'
68

7-
%w( harvesters translators ).each do |subdir|
9+
%w[harvesters translators].each do |subdir|
810
Dir[File.join(__dir__, 'search_solr_tools', subdir, '*.rb')].each { |file| require file }
911
end

lib/search_solr_tools/config/environments.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
# frozen_string_literal: true
2+
13
require 'yaml'
24

35
module SearchSolrTools
46
# configuration to work with solr locally, or on integration/qa/staging/prod
57
module SolrEnvironments
6-
YAML_ENVS = YAML.load_file(File.expand_path('../environments.yaml', __FILE__))
8+
YAML_ENVS = YAML.load_file(File.expand_path('environments.yaml', __dir__))
79

810
def self.[](env = :development)
911
YAML_ENVS[:common].merge(YAML_ENVS[env.to_sym])
Lines changed: 44 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# frozen_string_literal: true
2+
13
module SearchSolrTools
24
module Errors
35
class HarvestError < StandardError
@@ -10,55 +12,65 @@ class HarvestError < StandardError
1012
ERRCODE_OTHER = 128
1113

1214
ERRCODE_DESC = {
13-
ERRCODE_SOLR_PING => 'Solr instance did not return a successful ping',
14-
ERRCODE_SOURCE_PING => 'Source to be harvested did not return a successful ping',
15-
ERRCODE_SOURCE_NO_RESULTS => 'Source to be harvested returned no documents matching query',
16-
ERRCODE_SOURCE_HARVEST_ERROR => 'One or more source documents returned an error when trying to retrieve or translate',
17-
ERRCODE_DOCUMENT_INVALID => 'One or more documents to be harvested was invalid (malformed)',
18-
ERRCODE_INGEST_ERROR => 'Solr returned an error trying to ingest one or more harvested documents',
19-
ERRCODE_OTHER => 'General error code for non-harvest related issues'
15+
ERRCODE_SOLR_PING => 'Solr instance did not return a successful ping',
16+
ERRCODE_SOURCE_PING => 'Source to be harvested did not return a successful ping',
17+
ERRCODE_SOURCE_NO_RESULTS => 'Source to be harvested returned no documents matching query',
18+
ERRCODE_SOURCE_HARVEST_ERROR => 'One or more source documents returned an error when trying to retrieve or translate',
19+
ERRCODE_DOCUMENT_INVALID => 'One or more documents to be harvested was invalid (malformed)',
20+
ERRCODE_INGEST_ERROR => 'Solr returned an error trying to ingest one or more harvested documents',
21+
ERRCODE_OTHER => 'General error code for non-harvest related issues'
2022
}.freeze
2123

2224
PING_ERRCODE_MAP = {
23-
'ping_solr' => ERRCODE_SOLR_PING,
24-
'ping_source' => ERRCODE_SOURCE_PING,
25-
}
25+
'ping_solr' => ERRCODE_SOLR_PING,
26+
'ping_source' => ERRCODE_SOURCE_PING
27+
}.freeze
2628

2729
STATUS_ERRCODE_MAP = {
28-
Helpers::HarvestStatus::HARVEST_NO_DOCS => ERRCODE_SOURCE_NO_RESULTS,
29-
Helpers::HarvestStatus::HARVEST_FAILURE => ERRCODE_SOURCE_HARVEST_ERROR,
30-
Helpers::HarvestStatus::INGEST_ERR_INVALID_DOC => ERRCODE_DOCUMENT_INVALID,
31-
Helpers::HarvestStatus::INGEST_ERR_SOLR_ERROR => ERRCODE_INGEST_ERROR,
32-
Helpers::HarvestStatus::OTHER_ERROR => ERRCODE_OTHER
30+
Helpers::HarvestStatus::HARVEST_NO_DOCS => ERRCODE_SOURCE_NO_RESULTS,
31+
Helpers::HarvestStatus::HARVEST_FAILURE => ERRCODE_SOURCE_HARVEST_ERROR,
32+
Helpers::HarvestStatus::INGEST_ERR_INVALID_DOC => ERRCODE_DOCUMENT_INVALID,
33+
Helpers::HarvestStatus::INGEST_ERR_SOLR_ERROR => ERRCODE_INGEST_ERROR,
34+
Helpers::HarvestStatus::OTHER_ERROR => ERRCODE_OTHER
3335
}.freeze
3436

3537
# If code is -1, it means display all error codes
3638
def self.describe_exit_code(code = -1)
39+
code_list = code_to_list(code)
40+
41+
codes = {}
42+
code_list.each do |k|
43+
next if code == -1 && !ERRCODE_DESC.keys.include?(k) # skip INVALID CODE if showing all codes
44+
45+
codes[k] = ERRCODE_DESC.keys.include?(k) ? ERRCODE_DESC[k] : 'INVALID CODE NUMBER'
46+
end
47+
48+
codes
49+
end
50+
51+
# Loop through all bit-flag values to produce a list of integers
52+
def self.code_to_list(code)
3753
code = code.to_i
3854
code_list = []
3955

40-
# Loop through all bit-flag values
4156
[128, 64, 32, 16, 8, 4, 2, 1].each do |k|
4257
if code >= k || code == -1
4358
code_list.prepend k
4459
code -= k unless code == -1
4560
end
4661
end
4762

48-
codes = {}
49-
code_list.each do |k|
50-
next if code == -1 && !ERRCODE_DESC.keys.include?(k) # skip INVALID CODE if showing all codes
51-
codes[k] = ERRCODE_DESC.keys.include?(k) ? ERRCODE_DESC[k] : 'INVALID CODE NUMBER'
52-
end
53-
54-
codes
63+
code_list
5564
end
5665

57-
def initialize(status, message=nil)
66+
def initialize(status, message = nil)
5867
@status_data = status
5968
@other_message = message
69+
70+
super message
6071
end
6172

73+
# rubocop:disable Metrics/AbcSize
6274
def exit_code
6375
if @status_data.nil?
6476
puts "OTHER ERROR REPORTED: #{@other_message}"
@@ -70,19 +82,20 @@ def exit_code
7082
code = 0
7183
code += ERRCODE_SOLR_PING unless @status_data.ping_solr
7284
code += ERRCODE_SOURCE_PING unless @status_data.ping_source
73-
code += ERRCODE_SOURCE_NO_RESULTS if @status_data.status[Helpers::HarvestStatus::HARVEST_NO_DOCS] > 0
74-
code += ERRCODE_SOURCE_HARVEST_ERROR if @status_data.status[Helpers::HarvestStatus::HARVEST_FAILURE] > 0
75-
code += ERRCODE_DOCUMENT_INVALID if @status_data.status[Helpers::HarvestStatus::INGEST_ERR_INVALID_DOC] > 0
76-
code += ERRCODE_INGEST_ERROR if @status_data.status[Helpers::HarvestStatus::INGEST_ERR_SOLR_ERROR] > 0
85+
code += ERRCODE_SOURCE_NO_RESULTS if @status_data.status[Helpers::HarvestStatus::HARVEST_NO_DOCS].positive?
86+
code += ERRCODE_SOURCE_HARVEST_ERROR if @status_data.status[Helpers::HarvestStatus::HARVEST_FAILURE].positive?
87+
code += ERRCODE_DOCUMENT_INVALID if @status_data.status[Helpers::HarvestStatus::INGEST_ERR_INVALID_DOC].positive?
88+
code += ERRCODE_INGEST_ERROR if @status_data.status[Helpers::HarvestStatus::INGEST_ERR_SOLR_ERROR].positive?
7789

78-
code = ERRCODE_OTHER if code == 0
90+
code = ERRCODE_OTHER if code.zero?
7991

8092
code
8193
end
94+
# rubocop:enable Metrics/AbcSize
8295

8396
def message
84-
self.class.describe_exit_code(exit_code).map{|c,v| v}.join("\n")
97+
self.class.describe_exit_code(exit_code).map { |_c, v| v }.join("\n")
8598
end
8699
end
87100
end
88-
end
101+
end

lib/search_solr_tools/harvesters/auto_suggest.rb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# frozen_string_literal: true
2+
13
require_relative 'base'
24
require 'json'
35
require 'rest-client'
@@ -6,8 +8,8 @@ module SearchSolrTools
68
module Harvesters
79
# Use the nsidc_oai core to populate the auto_suggest core
810
class AutoSuggest < Base
9-
def initialize(env = 'development', die_on_failure = false)
10-
super env, die_on_failure
11+
def initialize(env = 'development', die_on_failure: false)
12+
super
1113
@env_settings = SolrEnvironments[@environment] # super sets @environment.
1214
end
1315

@@ -50,7 +52,7 @@ def add_documents_to_solr(add_docs)
5052

5153
if status == Helpers::HarvestStatus::INGEST_OK
5254
puts "Added #{add_docs.size} auto suggest documents in one commit"
53-
return Helpers::HarvestStatus.new(Helpers::HarvestStatus::INGEST_OK => add_docs)
55+
Helpers::HarvestStatus.new(Helpers::HarvestStatus::INGEST_OK => add_docs)
5456
else
5557
puts "Failed adding #{add_docs.size} documents in single commit, retrying one by one"
5658
new_add_docs = []

0 commit comments

Comments
 (0)