blacklight 4.2.2 → 4.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -3
- data/Gemfile +6 -0
- data/VERSION +1 -1
- data/app/assets/stylesheets/blacklight/_catalog.css.scss +2 -2
- data/app/assets/stylesheets/blacklight/_header.css.scss +15 -31
- data/app/assets/stylesheets/blacklight/_modal.css.scss +4 -0
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +8 -3
- data/app/helpers/blacklight/facets_helper_behavior.rb +1 -1
- data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +5 -4
- data/app/views/catalog/_home.html.erb +1 -5
- data/app/views/catalog/show.html.erb +2 -3
- data/app/views/search_history/index.html.erb +2 -6
- data/blacklight.gemspec +1 -1
- data/gemfiles/rails3.gemfile +6 -1
- data/gemfiles/rails4.gemfile +5 -0
- data/lib/blacklight/catalog.rb +4 -8
- data/lib/blacklight/configuration/facet_field.rb +1 -1
- data/lib/blacklight/configuration/search_field.rb +2 -2
- data/lib/blacklight/configuration/solr_field.rb +11 -2
- data/lib/blacklight/configuration/sort_field.rb +1 -1
- data/lib/generators/blacklight/blacklight_generator.rb +3 -7
- data/lib/generators/blacklight/templates/config/solr.yml +1 -1
- data/lib/solrmarc.log.1 +854 -0
- data/spec/controllers/bookmarks_controller_spec.rb +1 -1
- data/spec/controllers/catalog_controller_spec.rb +20 -20
- data/spec/helpers/blacklight_helper_spec.rb +44 -31
- data/spec/helpers/catalog_helper_spec.rb +5 -5
- data/spec/helpers/facets_helper_spec.rb +48 -48
- data/spec/helpers/search_history_constraints_helper_spec.rb +14 -3
- data/spec/lib/blacklight_solr_document_more_like_this_spec.rb +1 -1
- data/spec/lib/blacklight_solr_response_spec.rb +1 -1
- data/spec/lib/search_fields_spec.rb +1 -1
- data/spec/lib/solr_helper_spec.rb +4 -4
- data/spec/models/solr_docment_spec.rb +1 -1
- data/spec/test_app_templates/Gemfile.extra +4 -11
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +2 -2
- data/spec/test_app_templates/lib/tasks/blacklight_test_app.rake +22 -0
- data/spec/views/catalog/_facets.html.erb_spec.rb +6 -6
- data/spec/views/catalog/_index_default.erb_spec.rb +11 -13
- data/spec/views/catalog/_show_default.erb_spec.rb +11 -13
- data/spec/views/catalog/index.atom.builder_spec.rb +2 -2
- data/tasks/blacklight.rake +7 -4
- metadata +7 -6
- data/spec/test_app_templates/lib/tasks/rspec.rake +0 -8
@@ -56,9 +56,9 @@ describe SearchHistoryConstraintsHelper do
|
|
56
56
|
@params = {:q => "history", :f => {"some_facet" => ["value1", "value1"], "other_facet" => ["other1"]}}
|
57
57
|
end
|
58
58
|
it "should call lesser methods" do
|
59
|
-
helper.stub
|
60
|
-
helper.stub
|
61
|
-
helper.
|
59
|
+
helper.stub(:blacklight_config).and_return(@config)
|
60
|
+
helper.stub(:default_search_field).and_return(Blacklight::Configuration::SearchField.new(:key => 'default_search_field', :display_label => 'Default'))
|
61
|
+
helper.stub(:label_for_search_field).with(nil).and_return('')
|
62
62
|
# API hooks expect this to be so
|
63
63
|
response = helper.render_search_to_s(@params)
|
64
64
|
|
@@ -68,6 +68,17 @@ describe SearchHistoryConstraintsHelper do
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
+
describe "render_search_to_s_filters" do
|
72
|
+
it "should render a constraint for a selected facet in the config" do
|
73
|
+
response = helper.render_search_to_s_filters(:f => {"some_facet" => ["value1", "value2"]})
|
74
|
+
expect(response).to eq("<span class=\"constraint\"><span class=\"filterName\">Some:</span><span class=\"filterValues\"><span class=\"filterValue\">value1</span><span class=\"filterSeparator\"> and </span><span class=\"filterValue\">value2</span></span></span>")
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should render a constraint for a selected facet not in the config" do
|
78
|
+
response = helper.render_search_to_s_filters(:f => {"undefined_facet" => ["value1", "value2"]})
|
79
|
+
expect(response).to eq("<span class=\"constraint\"><span class=\"filterName\">Undefined Facet:</span><span class=\"filterValues\"><span class=\"filterValue\">value1</span><span class=\"filterSeparator\"> and </span><span class=\"filterValue\">value2</span></span></span>")
|
80
|
+
end
|
81
|
+
end
|
71
82
|
|
72
83
|
|
73
84
|
end
|
@@ -8,7 +8,7 @@ describe Blacklight::Solr::Document::MoreLikeThis do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should pluck the MoreLikeThis results from the Solr Response" do
|
11
|
-
mock_solr_response =
|
11
|
+
mock_solr_response = double(:more_like => [{'id' => 'abc'}])
|
12
12
|
result = @mock_class.new({:id => '123'}, mock_solr_response).more_like_this
|
13
13
|
result.should have(1).item
|
14
14
|
result.first.should be_a_kind_of(SolrDocument)
|
@@ -157,7 +157,7 @@ describe Blacklight::SolrResponse do
|
|
157
157
|
it "should provide MoreLikeThis suggestions" do
|
158
158
|
raw_response = eval(mock_response_with_more_like_this)
|
159
159
|
r = Blacklight::SolrResponse.new(raw_response, {})
|
160
|
-
r.more_like(
|
160
|
+
r.more_like(double(:id => '79930185')).should have(2).items
|
161
161
|
end
|
162
162
|
|
163
163
|
def mock_query_response
|
@@ -21,7 +21,7 @@ describe Blacklight::SearchFields do
|
|
21
21
|
|
22
22
|
before(:each) do
|
23
23
|
@search_field_obj = MockConfig.new
|
24
|
-
@search_field_obj.stub
|
24
|
+
@search_field_obj.stub(:blacklight_config).and_return(@config)
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should return search field list with calculated :label when needed" do
|
@@ -193,7 +193,7 @@ describe 'Blacklight::SolrHelper' do
|
|
193
193
|
end
|
194
194
|
|
195
195
|
it "should pass date-type fields through" do
|
196
|
-
blacklight_config.facet_fields.stub(:[]).with('facet_name').and_return(
|
196
|
+
blacklight_config.facet_fields.stub(:[]).with('facet_name').and_return(double(:date => true, :query => nil, :tag => nil))
|
197
197
|
|
198
198
|
facet_value_to_fq_string("facet_name", "2012-01-01").should == "facet_name:2012-01-01"
|
199
199
|
end
|
@@ -203,7 +203,7 @@ describe 'Blacklight::SolrHelper' do
|
|
203
203
|
end
|
204
204
|
|
205
205
|
it "should add tag local parameters" do
|
206
|
-
blacklight_config.facet_fields.stub(:[]).with('facet_name').and_return(
|
206
|
+
blacklight_config.facet_fields.stub(:[]).with('facet_name').and_return(double(:query => nil, :tag => 'asdf', :date => nil))
|
207
207
|
|
208
208
|
facet_value_to_fq_string("facet_name", true).should == "{!tag=asdf}facet_name:true"
|
209
209
|
facet_value_to_fq_string("facet_name", "my value").should == "{!raw f=facet_name tag=asdf}my value"
|
@@ -1014,7 +1014,7 @@ describe 'Blacklight::SolrHelper' do
|
|
1014
1014
|
|
1015
1015
|
describe "#get_solr_response_for_field_values" do
|
1016
1016
|
before do
|
1017
|
-
@mock_response =
|
1017
|
+
@mock_response = double()
|
1018
1018
|
@mock_response.stub(:docs => [])
|
1019
1019
|
end
|
1020
1020
|
it "should contruct a solr query based on the field and value pair" do
|
@@ -1041,7 +1041,7 @@ describe 'Blacklight::SolrHelper' do
|
|
1041
1041
|
# more like this
|
1042
1042
|
# nearby on shelf
|
1043
1043
|
it "should raise a Blacklight exception if RSolr can't connect to the Solr instance" do
|
1044
|
-
Blacklight.solr.stub
|
1044
|
+
Blacklight.solr.stub(:get).and_raise(Errno::ECONNREFUSED)
|
1045
1045
|
expect { find(:a => 123) }.to raise_exception(/Unable to connect to Solr instance/)
|
1046
1046
|
end
|
1047
1047
|
end
|
@@ -81,7 +81,7 @@ end
|
|
81
81
|
end
|
82
82
|
|
83
83
|
it "should not try to create marc for objects w/out stored marc (marcxml test only at this time)" do
|
84
|
-
# TODO: Create another
|
84
|
+
# TODO: Create another double object that does not have marc-xml in it and make
|
85
85
|
# sure everything fails gracefully
|
86
86
|
@hash_without_marcxml = get_hash_without_marcxml['response']['docs'][0]
|
87
87
|
@solrdoc_without_marc = SolrDocument.new(@hash_without_marcxml)
|
@@ -1,5 +1,4 @@
|
|
1
1
|
platforms :jruby do
|
2
|
-
gem 'jruby-openssl'
|
3
2
|
gem 'activerecord-jdbcsqlite3-adapter'
|
4
3
|
gem 'jdbc-sqlite3'
|
5
4
|
gem 'mediashelf-loggable', '>= 0.4.8'
|
@@ -8,22 +7,16 @@ end
|
|
8
7
|
|
9
8
|
platforms :ruby do
|
10
9
|
gem 'sqlite3'
|
11
|
-
gem 'execjs'
|
12
|
-
gem 'therubyracer', '~> 0.10.2'
|
13
10
|
end
|
14
11
|
|
15
|
-
gem 'blacklight', :path => '../../'
|
16
12
|
gem 'jquery-rails'
|
17
13
|
|
18
|
-
# For testing
|
19
|
-
group :development, :test do
|
20
|
-
gem 'rspec-rails', '~> 2.13.1'
|
21
|
-
end
|
22
|
-
|
23
14
|
group :test do
|
15
|
+
gem 'rspec-rails', '~> 2.13'
|
24
16
|
gem 'generator_spec'
|
25
|
-
gem 'cucumber
|
26
|
-
gem '
|
17
|
+
gem 'cucumber'
|
18
|
+
gem 'cucumber-rails', :git => 'https://github.com/cucumber/cucumber-rails.git', :branch => 'master_rails4_test', :require => false
|
19
|
+
gem 'database_cleaner', '>= 1.0.1'
|
27
20
|
if defined? :JRUBY_VERSION
|
28
21
|
gem 'capybara', '~> 1.0'
|
29
22
|
else
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rspec/core/rake_task'
|
2
|
+
require 'cucumber/rake/task'
|
3
|
+
|
4
|
+
desc "run the blacklight gem spec"
|
5
|
+
gem_home = File.expand_path('../../../../..', __FILE__)
|
6
|
+
|
7
|
+
namespace :blacklight_test_app do
|
8
|
+
|
9
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
10
|
+
t.pattern = gem_home + '/spec/**/*_spec.rb'
|
11
|
+
t.rspec_opts = "--colour"
|
12
|
+
t.ruby_opts = "-I#{gem_home}/spec"
|
13
|
+
end
|
14
|
+
|
15
|
+
Cucumber::Rake::Task.new({:ok => 'test:prepare'}, 'Run features that should pass') do |t|
|
16
|
+
t.cucumber_opts = gem_home + "/features/**/*.feature"
|
17
|
+
end
|
18
|
+
|
19
|
+
desc 'Alias for cucumber:ok'
|
20
|
+
task :cucumber => 'cucumber:ok'
|
21
|
+
|
22
|
+
end
|
@@ -13,13 +13,13 @@ describe "catalog/_facets" do
|
|
13
13
|
|
14
14
|
it "should have a header" do
|
15
15
|
|
16
|
-
@mock_field_1 =
|
16
|
+
@mock_field_1 = double(:field => 'facet_field_1',
|
17
17
|
:label => 'label')
|
18
|
-
@mock_display_facet_1 =
|
18
|
+
@mock_display_facet_1 = double(:name => 'facet_field_1', :items => [Blacklight::SolrResponse::Facets::FacetItem.new(:value => 'Value', :hits => 1234)])
|
19
19
|
view.stub(:facet_field_names => [:facet_field_1],
|
20
20
|
:facet_limit_for => 10 )
|
21
21
|
|
22
|
-
@response =
|
22
|
+
@response = double()
|
23
23
|
@response.stub(:facet_by_field_name).with(:facet_field_1) { @mock_display_facet_1 }
|
24
24
|
|
25
25
|
view.stub(:render_facet_partials => '')
|
@@ -29,13 +29,13 @@ describe "catalog/_facets" do
|
|
29
29
|
|
30
30
|
describe "facet display" do
|
31
31
|
before do
|
32
|
-
@mock_field_1 =
|
32
|
+
@mock_field_1 = double(:field => 'facet_field_1',
|
33
33
|
:label => 'label')
|
34
|
-
@mock_display_facet_1 =
|
34
|
+
@mock_display_facet_1 = double(:name => 'facet_field_1', :items => [Blacklight::SolrResponse::Facets::FacetItem.new(:value => 'Value', :hits => 1234)])
|
35
35
|
view.stub(:facet_field_names => [:facet_field_1],
|
36
36
|
:facet_limit_for => 10 )
|
37
37
|
|
38
|
-
@response =
|
38
|
+
@response = double()
|
39
39
|
@response.stub(:facet_by_field_name).with(:facet_field_1) { @mock_display_facet_1 }
|
40
40
|
|
41
41
|
end
|
@@ -21,27 +21,25 @@ describe "/catalog/_index_default.erb" do
|
|
21
21
|
@fname_3 = "empty_field"
|
22
22
|
@fname_4 = "four_field"
|
23
23
|
|
24
|
-
@document =
|
25
|
-
@document.
|
26
|
-
@document.
|
27
|
-
@document.
|
28
|
-
@document.
|
24
|
+
@document = double("solr_doc")
|
25
|
+
@document.stub(:get).with(@fname_1, hash_including(:sep => nil)).and_return("val_1")
|
26
|
+
@document.stub(:get).with(@fname_2, hash_including(:sep => nil)).and_return("val_2")
|
27
|
+
@document.stub(:get).with(@fname_3, hash_including(:sep => nil)).and_return(nil)
|
28
|
+
@document.stub(:get).with(@fname_4, hash_including(:sep => nil)).and_return("val_4")
|
29
29
|
|
30
|
-
@document.
|
31
|
-
@document.
|
32
|
-
@document.
|
33
|
-
@document.
|
34
|
-
@document.should_receive(:'has?').with(anything()).any_number_of_times.and_return(true)
|
30
|
+
@document.stub(:has?).with(@fname_1).and_return(true)
|
31
|
+
@document.stub(:has?).with(@fname_2).and_return(true)
|
32
|
+
@document.stub(:has?).with(@fname_3).and_return(false)
|
33
|
+
@document.stub(:has?).with(@fname_4).and_return(true)
|
35
34
|
|
36
35
|
# cover any remaining fields in initalizer
|
37
|
-
@document.
|
38
|
-
@document.should_receive(:[]).any_number_of_times
|
36
|
+
@document.stub(:[])
|
39
37
|
|
40
38
|
@flabel_1 = "One:"
|
41
39
|
@flabel_3 = "Three:"
|
42
40
|
@flabel_4 = "Four:"
|
43
41
|
|
44
|
-
view.stub
|
42
|
+
view.stub(:blacklight_config).and_return(@config)
|
45
43
|
assigns[:document] = @document
|
46
44
|
@rendered = view.render_document_partial @document, :index
|
47
45
|
end
|
@@ -23,27 +23,25 @@ describe "/catalog/_show_default.html.erb" do
|
|
23
23
|
@fname_3 = "empty_field"
|
24
24
|
@fname_4 = "four_field"
|
25
25
|
|
26
|
-
@document =
|
27
|
-
@document.
|
28
|
-
@document.
|
29
|
-
@document.
|
30
|
-
@document.
|
26
|
+
@document = double("solr_doc")
|
27
|
+
@document.stub(:get).with(@fname_1, hash_including(:sep => nil)).and_return("val_1")
|
28
|
+
@document.stub(:get).with(@fname_2, hash_including(:sep => nil)).and_return("val_2")
|
29
|
+
@document.stub(:get).with(@fname_3, hash_including(:sep => nil)).and_return(nil)
|
30
|
+
@document.stub(:get).with(@fname_4, hash_including(:sep => nil)).and_return("val_4")
|
31
31
|
|
32
|
-
@document.
|
33
|
-
@document.
|
34
|
-
@document.
|
35
|
-
@document.
|
36
|
-
@document.should_receive(:'has?').with(anything()).any_number_of_times.and_return(true)
|
32
|
+
@document.stub(:'has?').with(@fname_1).and_return(true)
|
33
|
+
@document.stub(:'has?').with(@fname_2).and_return(true)
|
34
|
+
@document.stub(:'has?').with(@fname_3).and_return(false)
|
35
|
+
@document.stub(:'has?').with(@fname_4).and_return(true)
|
37
36
|
|
38
37
|
# cover any remaining fields in initalizer
|
39
|
-
@document.
|
40
|
-
@document.should_receive(:[]).any_number_of_times
|
38
|
+
@document.stub(:[])
|
41
39
|
|
42
40
|
@flabel_1 = "One:"
|
43
41
|
@flabel_3 = "Two:"
|
44
42
|
@flabel_4 = "Four:"
|
45
43
|
|
46
|
-
view.stub
|
44
|
+
view.stub(:blacklight_config).and_return(@config)
|
47
45
|
assigns[:document] = @document
|
48
46
|
@rendered = view.render_document_partial @document, :show
|
49
47
|
end
|
@@ -30,8 +30,8 @@ describe "catalog/index" do
|
|
30
30
|
# but okay.
|
31
31
|
|
32
32
|
params.merge!( @params )
|
33
|
-
view.stub
|
34
|
-
view.stub
|
33
|
+
view.stub(:blacklight_config).and_return(@config)
|
34
|
+
view.stub(:search_field_options_for_select).and_return([])
|
35
35
|
|
36
36
|
render :template => 'catalog/index', :formats => [:atom]
|
37
37
|
|
data/tasks/blacklight.rake
CHANGED
@@ -40,9 +40,9 @@ namespace :blacklight do
|
|
40
40
|
|
41
41
|
desc "Run specs"
|
42
42
|
task :spec => [:generate] do |t|
|
43
|
-
|
43
|
+
spec_options = ENV['SPEC'] ? " SPEC=#{File.join(GEM_ROOT, ENV['SPEC'])}" : ''
|
44
44
|
within_test_app do
|
45
|
-
system "rake
|
45
|
+
system "rake blacklight_test_app:spec#{spec_options}"
|
46
46
|
abort "Error running spec" unless $?.success?
|
47
47
|
end
|
48
48
|
end
|
@@ -50,7 +50,7 @@ namespace :blacklight do
|
|
50
50
|
desc "Run cucumber features"
|
51
51
|
task :cucumber => [:generate] do |t|
|
52
52
|
within_test_app do
|
53
|
-
system "rake
|
53
|
+
system "CUCUMBER_OPTS='../../features' rake blacklight_test_app:cucumber"
|
54
54
|
abort "Error running cucumber" unless $?.success?
|
55
55
|
end
|
56
56
|
end
|
@@ -68,7 +68,10 @@ namespace :blacklight do
|
|
68
68
|
puts "Generating rails app"
|
69
69
|
`rails new #{TEST_APP}`
|
70
70
|
puts "Copying gemfile"
|
71
|
-
|
71
|
+
open("#{TEST_APP}/Gemfile", 'a') do |f|
|
72
|
+
f.write File.read(TEST_APP_TEMPLATES + "/Gemfile.extra")
|
73
|
+
f.write "gem 'blacklight', :path => '../../'"
|
74
|
+
end
|
72
75
|
puts "Copying generator"
|
73
76
|
`cp -r #{TEST_APP_TEMPLATES}/lib/generators #{TEST_APP}/lib`
|
74
77
|
within_test_app do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blacklight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Rochkind
|
@@ -16,7 +16,7 @@ authors:
|
|
16
16
|
autorequire:
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
|
-
date: 2013-07-
|
19
|
+
date: 2013-07-30 00:00:00.000000000 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: rails
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
47
|
+
version: '1.6'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1.
|
54
|
+
version: '1.6'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: marc
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -416,6 +416,7 @@ files:
|
|
416
416
|
- lib/railties/blacklight_cucumber.rake
|
417
417
|
- lib/railties/blacklight_rspec.rake
|
418
418
|
- lib/railties/solr_marc.rake
|
419
|
+
- lib/solrmarc.log.1
|
419
420
|
- spec/controllers/application_controller_spec.rb
|
420
421
|
- spec/controllers/bookmarks_controller_spec.rb
|
421
422
|
- spec/controllers/catalog_controller_spec.rb
|
@@ -460,7 +461,7 @@ files:
|
|
460
461
|
- spec/support/include_text.rb
|
461
462
|
- spec/test_app_templates/Gemfile.extra
|
462
463
|
- spec/test_app_templates/lib/generators/test_app_generator.rb
|
463
|
-
- spec/test_app_templates/lib/tasks/
|
464
|
+
- spec/test_app_templates/lib/tasks/blacklight_test_app.rake
|
464
465
|
- spec/views/catalog/_constraints_element.html.erb_spec.rb
|
465
466
|
- spec/views/catalog/_document_list.html.erb_spec.rb
|
466
467
|
- spec/views/catalog/_facets.html.erb_spec.rb
|
@@ -565,7 +566,7 @@ test_files:
|
|
565
566
|
- spec/support/include_text.rb
|
566
567
|
- spec/test_app_templates/Gemfile.extra
|
567
568
|
- spec/test_app_templates/lib/generators/test_app_generator.rb
|
568
|
-
- spec/test_app_templates/lib/tasks/
|
569
|
+
- spec/test_app_templates/lib/tasks/blacklight_test_app.rake
|
569
570
|
- spec/views/catalog/_constraints_element.html.erb_spec.rb
|
570
571
|
- spec/views/catalog/_document_list.html.erb_spec.rb
|
571
572
|
- spec/views/catalog/_facets.html.erb_spec.rb
|
@@ -1,8 +0,0 @@
|
|
1
|
-
require 'rspec/core/rake_task'
|
2
|
-
desc "run the blacklight gem spec"
|
3
|
-
gem_home = File.expand_path('../../../../..', __FILE__)
|
4
|
-
RSpec::Core::RakeTask.new(:myspec) do |t|
|
5
|
-
t.pattern = gem_home + '/spec/**/*_spec.rb'
|
6
|
-
t.rspec_opts = "--colour"
|
7
|
-
t.ruby_opts = "-I#{gem_home}/spec"
|
8
|
-
end
|