birds 0.0.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 +7 -0
- data/COPYING +663 -0
- data/ChangeLog +7 -0
- data/README +41 -0
- data/Rakefile +46 -0
- data/config.ru.sample +4 -0
- data/lib/birds/app/controllers.rb +115 -0
- data/lib/birds/app/helpers/controller.rb +110 -0
- data/lib/birds/app/helpers/view.rb +131 -0
- data/lib/birds/app/helpers.rb +31 -0
- data/lib/birds/app/public/favicon.ico +0 -0
- data/lib/birds/app/settings.rb +86 -0
- data/lib/birds/app/views/_documents.erb +13 -0
- data/lib/birds/app/views/_facets.erb +30 -0
- data/lib/birds/app/views/browse.erb +22 -0
- data/lib/birds/app/views/document.erb +12 -0
- data/lib/birds/app/views/index.erb +64 -0
- data/lib/birds/app/views/layout.erb +83 -0
- data/lib/birds/app/views/scroll.erb +23 -0
- data/lib/birds/app.rb +52 -0
- data/lib/birds/rack_app.rb +2 -0
- data/lib/birds/version.rb +27 -0
- data/lib/birds.rb +67 -0
- metadata +169 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
<div class="row">
|
2
|
+
<div class="col-md-9">
|
3
|
+
<form action="<%= url('/search') %>" method="GET" class="form-inline" role="form">
|
4
|
+
<div class="form-group">
|
5
|
+
<label class="control-label sr-only" for="q">Query</label>
|
6
|
+
<input type="search" class="form-control input-lg" name="q" id="q" size="40" value="<%=h @query %>" required="required" placeholder="Enter Query…" list="sample_queries" />
|
7
|
+
<datalist id="sample_queries">
|
8
|
+
<% for label, value in settings.sample_queries %>
|
9
|
+
<option label="<%=h label %>" value="<%=h value %>" />
|
10
|
+
<% end %>
|
11
|
+
</datalist>
|
12
|
+
</div>
|
13
|
+
<button type="submit" class="btn btn-default btn-lg" title="Search">
|
14
|
+
<%= glyphicon(:search) %> Search
|
15
|
+
</button>
|
16
|
+
</form>
|
17
|
+
|
18
|
+
<% if @filter %>
|
19
|
+
<ul class="list-inline" style="margin-top: 0.5em"><!-- XXX -->
|
20
|
+
<% for filter in @filter %>
|
21
|
+
<li style="line-height: 1.7em"><!-- XXX -->
|
22
|
+
<%= link_to_search('×', @query, *@filter - [filter], class: 'close', title: 'Remove filter') %>
|
23
|
+
<code><%=h filter %></code>
|
24
|
+
</li>
|
25
|
+
<% end %>
|
26
|
+
</ul>
|
27
|
+
<% end %>
|
28
|
+
|
29
|
+
<% if @result %>
|
30
|
+
<%= erb :_documents, locals: { documents: @result, explain: @explain, start: @offset + 1 } %>
|
31
|
+
<%= pagination_for(:search, query_params) %>
|
32
|
+
</div>
|
33
|
+
<div class="col-md-3">
|
34
|
+
<%= erb :_facets %>
|
35
|
+
<% else %>
|
36
|
+
<h2>Query syntax</h2>
|
37
|
+
|
38
|
+
<dl class="dl-horizontal">
|
39
|
+
<dt><code>term</code></dt>
|
40
|
+
<dd>Query term <em>should</em> occur.</dd>
|
41
|
+
<dt><code>+term</code></dt>
|
42
|
+
<dd>Query term <em>must</em> occur.</dd>
|
43
|
+
<dt><code>-term</code></dt>
|
44
|
+
<dd>Query term <em>must not</em> occur.</dd>
|
45
|
+
<dt><code>term*</code></dt>
|
46
|
+
<dd>Wildcard search for <em>zero or more</em> characters.</dd>
|
47
|
+
<dt><code>term?</code></dt>
|
48
|
+
<dd>Wildcard search for <em>one</em> character.</dd>
|
49
|
+
<dt><code>"..."</code></dt>
|
50
|
+
<dd>Phrase search.</dd>
|
51
|
+
<dt><code>term~<kbd>n</kbd></code></dt>
|
52
|
+
<dd>Fuzzy search.
|
53
|
+
<span class="text-muted">(The number <kbd>n</kbd> is optional)</span></dd>
|
54
|
+
<dt><code>term^<kbd>n</kbd></code></dt>
|
55
|
+
<dd>Boosting.
|
56
|
+
<span class="text-muted">(The number <kbd>n</kbd> is required)</span></dd>
|
57
|
+
<dt><code>field:term</code></dt>
|
58
|
+
<dd>Field-specific search.</dd>
|
59
|
+
</dl>
|
60
|
+
|
61
|
+
<p>For further details, see <a href="http://lucene.apache.org/core/<%=h settings.solr.solr_version.tr('.', '_') %>/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#Overview">here</a> or <a href="http://yonik.com/solr/query-syntax/">here</a>.</p>
|
62
|
+
<% end %>
|
63
|
+
</div>
|
64
|
+
</div>
|
@@ -0,0 +1,83 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8" />
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
7
|
+
|
8
|
+
<title><%=h @page_title %><% if @page_title_extra %> (<%=h @page_title_extra %>)<% end %> · <%=h settings.site_title %></title>
|
9
|
+
|
10
|
+
<link rel="shortcut icon" href="<%= url('/favicon.ico') %>" />
|
11
|
+
|
12
|
+
<link rel="stylesheet" href="<%=h settings.bootstrap_url %>/css/bootstrap.min.css" />
|
13
|
+
<link rel="stylesheet" href="<%=h settings.bootstrap_url %>/css/bootstrap-theme.min.css" />
|
14
|
+
<link rel="stylesheet" href="<%= url('/css/birds.css') %>" />
|
15
|
+
</head>
|
16
|
+
<body>
|
17
|
+
<a class="sr-only" href="#content">Skip to main content</a>
|
18
|
+
|
19
|
+
<div id="wrap">
|
20
|
+
<header class="navbar navbar-default" id="top" role="banner">
|
21
|
+
<div class="container">
|
22
|
+
<div class="navbar-header">
|
23
|
+
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
24
|
+
<span class="sr-only">Toggle navigation</span>
|
25
|
+
<span class="icon-bar"></span>
|
26
|
+
<span class="icon-bar"></span>
|
27
|
+
<span class="icon-bar"></span>
|
28
|
+
</button>
|
29
|
+
<a class="navbar-brand" href="<%= url('/') %>" title="<%=h settings.site_title %>">
|
30
|
+
<% bird = { 'Search' => 2, 'Browse' => 1, 'Scroll' => 3 }[@page_title] || :s %>
|
31
|
+
<img src="<%= url("/images/bird#{bird}.png") %>" alt="Bird<%= bird %>" />
|
32
|
+
</a>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<nav class="collapse navbar-collapse" role="navigation">
|
36
|
+
<ul class="nav navbar-nav">
|
37
|
+
<%= nav_item('/search', 'Search', 'Search for documents') %>
|
38
|
+
<%= nav_item('/browse', 'Browse', 'Browse by category') unless settings.browse_fields.empty? %>
|
39
|
+
<%= nav_item('/scroll', 'Scroll', 'Scroll through indexes') unless settings.scroll_fields.empty? %>
|
40
|
+
</ul>
|
41
|
+
<ul class="nav navbar-nav navbar-right">
|
42
|
+
<li><a href="<%= url('/help') %>" title="View help pages">Help</a></li>
|
43
|
+
</ul>
|
44
|
+
<form action="<%= url('/search') %>" method="GET" class="navbar-form navbar-right" role="search">
|
45
|
+
<div class="form-group">
|
46
|
+
<input type="search" class="form-control" title="Quick search" name="qq" id="qq" required="required" placeholder="Search" />
|
47
|
+
</div>
|
48
|
+
<button type="submit" class="btn btn-default" title="Search"><%= glyphicon(:search) %></button>
|
49
|
+
</form>
|
50
|
+
</nav>
|
51
|
+
</div>
|
52
|
+
</header>
|
53
|
+
|
54
|
+
<main id="content" role="main">
|
55
|
+
<div class="container">
|
56
|
+
<% if @code && @error %>
|
57
|
+
<p><big>Oops... <%=h @code %> – <%=h @error %></big></p>
|
58
|
+
<% else %>
|
59
|
+
<h1><%=h @page_title %><% if @page_title_extra %> <small>(<%=h @page_title_extra %>)</small><% end %></h1>
|
60
|
+
<%= yield %>
|
61
|
+
<% end %>
|
62
|
+
</div>
|
63
|
+
</main>
|
64
|
+
|
65
|
+
<div id="push"></div>
|
66
|
+
</div>
|
67
|
+
|
68
|
+
<footer role="contentinfo">
|
69
|
+
<div class="container">
|
70
|
+
<p>
|
71
|
+
<em>powered by</em> <a href="//lucene.apache.org/solr/">Solr</a>
|
72
|
+
<em>and</em> <a href="http://sinatrarb.com">Sinatra</a>
|
73
|
+
— <a href="//blackwinter.github.com/birds">Birds</a>
|
74
|
+
<strong>v<%= Birds::VERSION %></strong>
|
75
|
+
</p>
|
76
|
+
</div>
|
77
|
+
</footer>
|
78
|
+
|
79
|
+
<script src="//code.jquery.com/jquery-2.1.0.min.js"></script>
|
80
|
+
<script src="<%=h settings.bootstrap_url %>/js/bootstrap.min.js"></script>
|
81
|
+
<script src="<%= url('/js/birds.js') %>"></script>
|
82
|
+
</body>
|
83
|
+
</html>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<% if @result %>
|
2
|
+
<ol start="<%= @start + 1 %>">
|
3
|
+
<% for document in @result %>
|
4
|
+
<li><%= link_to_document(document) %></li>
|
5
|
+
<% end %>
|
6
|
+
</ol>
|
7
|
+
<%= pagination_for(:scroll, @field, @letter) %>
|
8
|
+
<% elsif @fields %>
|
9
|
+
<ul>
|
10
|
+
<% for field, label in @fields %>
|
11
|
+
<li><%= link_to(h(label), :scroll, field) %></li>
|
12
|
+
<% end %>
|
13
|
+
</ul>
|
14
|
+
<% else %>
|
15
|
+
<ul>
|
16
|
+
<% for letter, count in @letters %>
|
17
|
+
<li>
|
18
|
+
<%= link_to(h(letter), :scroll, @field, letter) %>
|
19
|
+
<span class="badge"><%=h count %></span>
|
20
|
+
</li>
|
21
|
+
<% end %>
|
22
|
+
</ul>
|
23
|
+
<% end %>
|
data/lib/birds/app.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
#--
|
4
|
+
###############################################################################
|
5
|
+
# #
|
6
|
+
# Birds -- Bibliographic information retrieval & document search #
|
7
|
+
# #
|
8
|
+
# Copyright (C) 2014-2015 Jens Wille #
|
9
|
+
# #
|
10
|
+
# Birds is free software: you can redistribute it and/or modify it under the #
|
11
|
+
# terms of the GNU Affero General Public License as published by the Free #
|
12
|
+
# Software Foundation, either version 3 of the License, or (at your option) #
|
13
|
+
# any later version. #
|
14
|
+
# #
|
15
|
+
# Birds is distributed in the hope that it will be useful, but WITHOUT ANY #
|
16
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
|
17
|
+
# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for #
|
18
|
+
# more details. #
|
19
|
+
# #
|
20
|
+
# You should have received a copy of the GNU Affero General Public License #
|
21
|
+
# along with Birds. If not, see <http://www.gnu.org/licenses/>. #
|
22
|
+
# #
|
23
|
+
###############################################################################
|
24
|
+
#++
|
25
|
+
|
26
|
+
require 'sinatra/bells'
|
27
|
+
|
28
|
+
class Birds
|
29
|
+
|
30
|
+
class App < Sinatra::Bells
|
31
|
+
|
32
|
+
set_root __FILE__
|
33
|
+
|
34
|
+
set :default_render, { json: :render_json }
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def to_render_hash
|
39
|
+
super(
|
40
|
+
d: @document || @result.to_a,
|
41
|
+
e: @error,
|
42
|
+
q: @query
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
require_relative 'app/helpers'
|
51
|
+
require_relative 'app/settings'
|
52
|
+
require_relative 'app/controllers'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class Birds
|
2
|
+
|
3
|
+
module Version
|
4
|
+
|
5
|
+
MAJOR = 0
|
6
|
+
MINOR = 0
|
7
|
+
TINY = 0
|
8
|
+
|
9
|
+
class << self
|
10
|
+
|
11
|
+
# Returns array representation.
|
12
|
+
def to_a
|
13
|
+
[MAJOR, MINOR, TINY]
|
14
|
+
end
|
15
|
+
|
16
|
+
# Short-cut for version string.
|
17
|
+
def to_s
|
18
|
+
to_a.join('.')
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
VERSION = Version.to_s
|
26
|
+
|
27
|
+
end
|
data/lib/birds.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
#--
|
4
|
+
###############################################################################
|
5
|
+
# #
|
6
|
+
# Birds -- Bibliographic information retrieval & document search #
|
7
|
+
# #
|
8
|
+
# Copyright (C) 2014-2015 Jens Wille #
|
9
|
+
# #
|
10
|
+
# Birds is free software: you can redistribute it and/or modify it under the #
|
11
|
+
# terms of the GNU Affero General Public License as published by the Free #
|
12
|
+
# Software Foundation, either version 3 of the License, or (at your option) #
|
13
|
+
# any later version. #
|
14
|
+
# #
|
15
|
+
# Birds is distributed in the hope that it will be useful, but WITHOUT ANY #
|
16
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
|
17
|
+
# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for #
|
18
|
+
# more details. #
|
19
|
+
# #
|
20
|
+
# You should have received a copy of the GNU Affero General Public License #
|
21
|
+
# along with Birds. If not, see <http://www.gnu.org/licenses/>. #
|
22
|
+
# #
|
23
|
+
###############################################################################
|
24
|
+
#++
|
25
|
+
|
26
|
+
require 'rack'
|
27
|
+
require 'forwardable'
|
28
|
+
|
29
|
+
class Birds
|
30
|
+
|
31
|
+
extend Forwardable
|
32
|
+
|
33
|
+
DEFAULT_CONFIG = 'config.ru'
|
34
|
+
|
35
|
+
class << self
|
36
|
+
|
37
|
+
def app(path)
|
38
|
+
app_class(path).new!
|
39
|
+
end
|
40
|
+
|
41
|
+
def rack_app
|
42
|
+
new(__FILE__.sub(/\.rb\z/, '/rack_app'))
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def app_class(path)
|
48
|
+
(@app_class ||= {})[path] ||= Rack::Builder.parse_file(path).first
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
def initialize(path = DEFAULT_CONFIG)
|
54
|
+
self.app = self.class.app(File.expand_path(path))
|
55
|
+
end
|
56
|
+
|
57
|
+
attr_accessor :app
|
58
|
+
|
59
|
+
def_delegators 'app.settings', :solr, :solr_opts
|
60
|
+
|
61
|
+
def count
|
62
|
+
solr.count.to_i
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
require_relative 'birds/version'
|
metadata
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: birds
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jens Wille
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-08-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sinatra-bells
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.0'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.0.2
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.0.2
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: solr4r
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.0'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.0.4
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.0'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 0.0.4
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: unicode
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0.4'
|
60
|
+
type: :runtime
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0.4'
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: hen
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0.8'
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 0.8.3.pre1
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0.8'
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: 0.8.3.pre1
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: rake
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
type: :development
|
95
|
+
prerelease: false
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
description: Experimental information retrieval system for bibliographic data.
|
102
|
+
email: jens.wille@gmail.com
|
103
|
+
executables: []
|
104
|
+
extensions: []
|
105
|
+
extra_rdoc_files:
|
106
|
+
- README
|
107
|
+
- COPYING
|
108
|
+
- ChangeLog
|
109
|
+
files:
|
110
|
+
- COPYING
|
111
|
+
- ChangeLog
|
112
|
+
- README
|
113
|
+
- Rakefile
|
114
|
+
- config.ru.sample
|
115
|
+
- lib/birds.rb
|
116
|
+
- lib/birds/app.rb
|
117
|
+
- lib/birds/app/controllers.rb
|
118
|
+
- lib/birds/app/helpers.rb
|
119
|
+
- lib/birds/app/helpers/controller.rb
|
120
|
+
- lib/birds/app/helpers/view.rb
|
121
|
+
- lib/birds/app/public/favicon.ico
|
122
|
+
- lib/birds/app/settings.rb
|
123
|
+
- lib/birds/app/views/_documents.erb
|
124
|
+
- lib/birds/app/views/_facets.erb
|
125
|
+
- lib/birds/app/views/browse.erb
|
126
|
+
- lib/birds/app/views/document.erb
|
127
|
+
- lib/birds/app/views/index.erb
|
128
|
+
- lib/birds/app/views/layout.erb
|
129
|
+
- lib/birds/app/views/scroll.erb
|
130
|
+
- lib/birds/rack_app.rb
|
131
|
+
- lib/birds/version.rb
|
132
|
+
homepage: http://github.com/blackwinter/birds
|
133
|
+
licenses:
|
134
|
+
- AGPL-3.0
|
135
|
+
metadata: {}
|
136
|
+
post_install_message: |2+
|
137
|
+
|
138
|
+
birds-0.0.0 [2014-03-19]:
|
139
|
+
|
140
|
+
* Birthday :-)
|
141
|
+
|
142
|
+
rdoc_options:
|
143
|
+
- "--title"
|
144
|
+
- birds Application documentation (v0.0.0)
|
145
|
+
- "--charset"
|
146
|
+
- UTF-8
|
147
|
+
- "--line-numbers"
|
148
|
+
- "--all"
|
149
|
+
- "--main"
|
150
|
+
- README
|
151
|
+
require_paths:
|
152
|
+
- lib
|
153
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 1.9.3
|
158
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '0'
|
163
|
+
requirements: []
|
164
|
+
rubyforge_project:
|
165
|
+
rubygems_version: 2.4.8
|
166
|
+
signing_key:
|
167
|
+
specification_version: 4
|
168
|
+
summary: Bibliographic information retrieval & document search.
|
169
|
+
test_files: []
|