diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1dcc37e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,32 @@
+# See https://help.github.com/articles/ignoring-files for more about ignoring files.
+#
+# If you find yourself ignoring temporary files generated by your text editor
+# or operating system, you probably want to add a global ignore instead:
+# git config --global core.excludesfile '~/.gitignore_global'
+
+# Ignore bundler config.
+/.bundle
+
+# Ignore the default SQLite database.
+/db/*.sqlite3
+/db/*.sqlite3-journal
+
+# Ignore all logfiles and tempfiles.
+/log/*
+!/log/.keep
+/tmp
+
+#Ignore Jetty
+/jetty/*
+
+# These files should be copied from the $file.yml.sample and tweaked
+# per environment.
+#config/database.yml
+#config/blacklight.yml
+#config/solr.yml
+#config/redis.yml
+#config/secrets.yml
+
+config/settings.local.yml
+config/settings/*.local.yml
+config/environments/*.local.yml
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 0000000..f49b165
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,55 @@
+source 'https://rubygems.org'
+
+
+# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
+gem 'rails', '4.2.4'
+# Use sqlite3 as the database for Active Record
+gem 'sqlite3'
+# Use SCSS for stylesheets
+gem 'sass-rails', '~> 5.0'
+# Use Uglifier as compressor for JavaScript assets
+gem 'uglifier', '>= 1.3.0'
+# Use CoffeeScript for .coffee assets and views
+gem 'coffee-rails', '~> 4.1.0'
+# See https://github.com/rails/execjs#readme for more supported runtimes
+# gem 'therubyracer', platforms: :ruby
+
+# Use jquery as the JavaScript library
+gem 'jquery-rails'
+# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
+gem 'turbolinks'
+# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
+gem 'jbuilder', '~> 2.0'
+# bundle exec rake doc:rails generates the API under doc/api.
+gem 'sdoc', '~> 0.4.0', group: :doc
+
+# Use ActiveModel has_secure_password
+# gem 'bcrypt', '~> 3.1.7'
+
+# Use Unicorn as the app server
+# gem 'unicorn'
+
+# Use Capistrano for deployment
+# gem 'capistrano-rails', group: :development
+
+group :development, :test do
+ # Call 'byebug' anywhere in the code to stop execution and get a debugger console
+ gem 'byebug'
+end
+
+group :development do
+ # Access an IRB console on exception pages or by using <%= console %> in views
+ gem 'web-console', '~> 2.0'
+
+ # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
+ gem 'spring'
+end
+
+gem 'blacklight', '>= 5.3.0'
+gem 'jettywrapper', '>= 2.0'
+gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw]
+gem 'rsolr', '~> 1.0.6'
+gem 'devise'
+gem 'devise-guests', '~> 0.3'
+gem 'blacklight-marc', '~> 5.0'
+gem 'config', '~> 1.0.0.beta3'
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 0000000..a256b6f
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,225 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ actionmailer (4.2.4)
+ actionpack (= 4.2.4)
+ actionview (= 4.2.4)
+ activejob (= 4.2.4)
+ mail (~> 2.5, >= 2.5.4)
+ rails-dom-testing (~> 1.0, >= 1.0.5)
+ actionpack (4.2.4)
+ actionview (= 4.2.4)
+ activesupport (= 4.2.4)
+ rack (~> 1.6)
+ rack-test (~> 0.6.2)
+ rails-dom-testing (~> 1.0, >= 1.0.5)
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
+ actionview (4.2.4)
+ activesupport (= 4.2.4)
+ builder (~> 3.1)
+ erubis (~> 2.7.0)
+ rails-dom-testing (~> 1.0, >= 1.0.5)
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
+ activejob (4.2.4)
+ activesupport (= 4.2.4)
+ globalid (>= 0.3.0)
+ activemodel (4.2.4)
+ activesupport (= 4.2.4)
+ builder (~> 3.1)
+ activerecord (4.2.4)
+ activemodel (= 4.2.4)
+ activesupport (= 4.2.4)
+ arel (~> 6.0)
+ activesupport (4.2.4)
+ i18n (~> 0.7)
+ json (~> 1.7, >= 1.7.7)
+ minitest (~> 5.1)
+ thread_safe (~> 0.3, >= 0.3.4)
+ tzinfo (~> 1.1)
+ arel (6.0.3)
+ autoprefixer-rails (6.1.0.1)
+ execjs
+ json
+ bcrypt (3.1.10)
+ binding_of_caller (0.7.2)
+ debug_inspector (>= 0.0.1)
+ blacklight (5.16.4)
+ bootstrap-sass (~> 3.2)
+ deprecation
+ kaminari (>= 0.15)
+ nokogiri (~> 1.6)
+ rails (>= 3.2.6, < 5)
+ rsolr (~> 1.0.11)
+ blacklight-marc (5.10.0)
+ blacklight (~> 5.10)
+ marc (>= 0.4.3, < 1.1)
+ rails
+ bootstrap-sass (3.3.5.1)
+ autoprefixer-rails (>= 5.0.0.1)
+ sass (>= 3.3.0)
+ builder (3.2.2)
+ byebug (8.2.0)
+ childprocess (0.5.8)
+ ffi (~> 1.0, >= 1.0.11)
+ coffee-rails (4.1.0)
+ coffee-script (>= 2.2.0)
+ railties (>= 4.0.0, < 5.0)
+ coffee-script (2.4.1)
+ coffee-script-source
+ execjs
+ coffee-script-source (1.10.0)
+ config (1.0.0)
+ activesupport (>= 3.0)
+ deep_merge (~> 1.0.0)
+ debug_inspector (0.0.2)
+ deep_merge (1.0.1)
+ deprecation (0.2.2)
+ activesupport
+ devise (3.5.2)
+ bcrypt (~> 3.0)
+ orm_adapter (~> 0.1)
+ railties (>= 3.2.6, < 5)
+ responders
+ thread_safe (~> 0.1)
+ warden (~> 1.2.3)
+ devise-guests (0.3.3)
+ devise
+ erubis (2.7.0)
+ execjs (2.6.0)
+ ffi (1.9.10)
+ globalid (0.3.6)
+ activesupport (>= 4.1.0)
+ i18n (0.7.0)
+ jbuilder (2.3.2)
+ activesupport (>= 3.0.0, < 5)
+ multi_json (~> 1.2)
+ jettywrapper (2.0.3)
+ activesupport (>= 3.0.0)
+ childprocess
+ i18n
+ logger
+ rubyzip
+ jquery-rails (4.0.5)
+ rails-dom-testing (~> 1.0)
+ railties (>= 4.2.0)
+ thor (>= 0.14, < 2.0)
+ json (1.8.3)
+ kaminari (0.16.3)
+ actionpack (>= 3.0.0)
+ activesupport (>= 3.0.0)
+ logger (1.2.8)
+ loofah (2.0.3)
+ nokogiri (>= 1.5.9)
+ mail (2.6.3)
+ mime-types (>= 1.16, < 3)
+ marc (1.0.0)
+ scrub_rb (>= 1.0.1, < 2)
+ unf
+ mime-types (2.6.2)
+ mini_portile (0.6.2)
+ minitest (5.8.2)
+ multi_json (1.11.2)
+ nokogiri (1.6.6.3)
+ mini_portile (~> 0.6.0)
+ orm_adapter (0.5.0)
+ rack (1.6.4)
+ rack-test (0.6.3)
+ rack (>= 1.0)
+ rails (4.2.4)
+ actionmailer (= 4.2.4)
+ actionpack (= 4.2.4)
+ actionview (= 4.2.4)
+ activejob (= 4.2.4)
+ activemodel (= 4.2.4)
+ activerecord (= 4.2.4)
+ activesupport (= 4.2.4)
+ bundler (>= 1.3.0, < 2.0)
+ railties (= 4.2.4)
+ sprockets-rails
+ rails-deprecated_sanitizer (1.0.3)
+ activesupport (>= 4.2.0.alpha)
+ rails-dom-testing (1.0.7)
+ activesupport (>= 4.2.0.beta, < 5.0)
+ nokogiri (~> 1.6.0)
+ rails-deprecated_sanitizer (>= 1.0.1)
+ rails-html-sanitizer (1.0.2)
+ loofah (~> 2.0)
+ railties (4.2.4)
+ actionpack (= 4.2.4)
+ activesupport (= 4.2.4)
+ rake (>= 0.8.7)
+ thor (>= 0.18.1, < 2.0)
+ rake (10.4.2)
+ rdoc (4.2.0)
+ responders (2.1.0)
+ railties (>= 4.2.0, < 5)
+ rsolr (1.0.13)
+ builder (>= 2.1.2)
+ rubyzip (1.1.7)
+ sass (3.4.19)
+ sass-rails (5.0.4)
+ railties (>= 4.0.0, < 5.0)
+ sass (~> 3.1)
+ sprockets (>= 2.8, < 4.0)
+ sprockets-rails (>= 2.0, < 4.0)
+ tilt (>= 1.1, < 3)
+ scrub_rb (1.0.1)
+ sdoc (0.4.1)
+ json (~> 1.7, >= 1.7.7)
+ rdoc (~> 4.0)
+ spring (1.4.3)
+ sprockets (3.4.0)
+ rack (> 1, < 3)
+ sprockets-rails (2.3.3)
+ actionpack (>= 3.0)
+ activesupport (>= 3.0)
+ sprockets (>= 2.8, < 4.0)
+ sqlite3 (1.3.11)
+ thor (0.19.1)
+ thread_safe (0.3.5)
+ tilt (2.0.1)
+ turbolinks (2.5.3)
+ coffee-rails
+ tzinfo (1.2.2)
+ thread_safe (~> 0.1)
+ uglifier (2.7.2)
+ execjs (>= 0.3.0)
+ json (>= 1.8.0)
+ unf (0.1.4)
+ unf_ext
+ unf_ext (0.0.7.1)
+ warden (1.2.3)
+ rack (>= 1.0)
+ web-console (2.2.1)
+ activemodel (>= 4.0)
+ binding_of_caller (>= 0.7.2)
+ railties (>= 4.0)
+ sprockets-rails (>= 2.0, < 4.0)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ blacklight (>= 5.3.0)
+ blacklight-marc (~> 5.0)
+ byebug
+ coffee-rails (~> 4.1.0)
+ config (~> 1.0.0.beta3)
+ devise
+ devise-guests (~> 0.3)
+ jbuilder (~> 2.0)
+ jettywrapper (>= 2.0)
+ jquery-rails
+ rails (= 4.2.4)
+ rsolr (~> 1.0.6)
+ sass-rails (~> 5.0)
+ sdoc (~> 0.4.0)
+ spring
+ sqlite3
+ turbolinks
+ tzinfo-data
+ uglifier (>= 1.3.0)
+ web-console (~> 2.0)
+
+BUNDLED WITH
+ 1.10.6
diff --git a/README.rdoc b/README.rdoc
new file mode 100644
index 0000000..dd4e97e
--- /dev/null
+++ b/README.rdoc
@@ -0,0 +1,28 @@
+== README
+
+This README would normally document whatever steps are necessary to get the
+application up and running.
+
+Things you may want to cover:
+
+* Ruby version
+
+* System dependencies
+
+* Configuration
+
+* Database creation
+
+* Database initialization
+
+* How to run the test suite
+
+* Services (job queues, cache servers, search engines, etc.)
+
+* Deployment instructions
+
+* ...
+
+
+Please feel free to use a different markup language if you do not plan to run
+rake doc:app.
diff --git a/Rakefile b/Rakefile
new file mode 100644
index 0000000..b012ebc
--- /dev/null
+++ b/Rakefile
@@ -0,0 +1,9 @@
+# Add your own tasks in files placed in lib/tasks ending in .rake,
+# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
+
+require File.expand_path('../config/application', __FILE__)
+
+Rails.application.load_tasks
+
+ZIP_URL = "https://github.com/projectblacklight/blacklight-jetty/archive/v4.10.3.zip"
+require 'jettywrapper'
diff --git a/app/assets/images/.keep b/app/assets/images/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
new file mode 100644
index 0000000..10d55ca
--- /dev/null
+++ b/app/assets/javascripts/application.js
@@ -0,0 +1,19 @@
+// This is a manifest file that'll be compiled into application.js, which will include all the files
+// listed below.
+//
+// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
+// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
+//
+// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
+// compiled file.
+//
+// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
+// about supported directives.
+//
+//= require jquery
+//= require jquery_ujs
+//= require turbolinks//
+// Required by Blacklight
+//= require blacklight/blacklight
+
+//= require_tree .
diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css
new file mode 100644
index 0000000..f9cd5b3
--- /dev/null
+++ b/app/assets/stylesheets/application.css
@@ -0,0 +1,15 @@
+/*
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
+ * listed below.
+ *
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
+ *
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
+ * compiled file so the styles you add here take precedence over styles defined in any styles
+ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
+ * file per style scope.
+ *
+ *= require_tree .
+ *= require_self
+ */
diff --git a/app/assets/stylesheets/blacklight.css.scss b/app/assets/stylesheets/blacklight.css.scss
new file mode 100644
index 0000000..3519d90
--- /dev/null
+++ b/app/assets/stylesheets/blacklight.css.scss
@@ -0,0 +1,5 @@
+@import 'bootstrap-sprockets';
+
+@import 'bootstrap';
+
+@import 'blacklight/blacklight';
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
new file mode 100644
index 0000000..2d9eb95
--- /dev/null
+++ b/app/controllers/application_controller.rb
@@ -0,0 +1,9 @@
+class ApplicationController < ActionController::Base
+ # Adds a few additional behaviors into the application controller
+ include Blacklight::Controller
+ layout 'blacklight'
+
+ # Prevent CSRF attacks by raising an exception.
+ # For APIs, you may want to use :null_session instead.
+ protect_from_forgery with: :exception
+end
diff --git a/app/controllers/catalog_controller.rb b/app/controllers/catalog_controller.rb
new file mode 100644
index 0000000..ed39a65
--- /dev/null
+++ b/app/controllers/catalog_controller.rb
@@ -0,0 +1,182 @@
+# -*- encoding : utf-8 -*-
+class CatalogController < ApplicationController
+ include Blacklight::Marc::Catalog
+
+ include Blacklight::Catalog
+
+ configure_blacklight do |config|
+ ## Default parameters to send to solr for all search-like requests. See also SearchBuilder#processed_parameters
+ config.default_solr_params = {
+ :qt => 'search',
+ :rows => 10
+ }
+
+ # solr path which will be added to solr base url before the other solr params.
+ #config.solr_path = 'select'
+
+ # items to show per page, each number in the array represent another option to choose from.
+ #config.per_page = [10,20,50,100]
+
+ ## Default parameters to send on single-document requests to Solr. These settings are the Blackligt defaults (see SearchHelper#solr_doc_params) or
+ ## parameters included in the Blacklight-jetty document requestHandler.
+ #
+ #config.default_document_solr_params = {
+ # :qt => 'document',
+ # ## These are hard-coded in the blacklight 'document' requestHandler
+ # # :fl => '*',
+ # # :rows => 1
+ # # :q => '{!raw f=id v=$id}'
+ #}
+
+ # solr field configuration for search results/index views
+ config.index.title_field = 'title_display'
+ config.index.display_type_field = 'format'
+
+ # solr field configuration for document/show views
+ #config.show.title_field = 'title_display'
+ #config.show.display_type_field = 'format'
+
+ # solr fields that will be treated as facets by the blacklight application
+ # The ordering of the field names is the order of the display
+ #
+ # Setting a limit will trigger Blacklight's 'more' facet values link.
+ # * If left unset, then all facet values returned by solr will be displayed.
+ # * If set to an integer, then "f.somefield.facet.limit" will be added to
+ # solr request, with actual solr request being +1 your configured limit --
+ # you configure the number of items you actually want _displayed_ in a page.
+ # * If set to 'true', then no additional parameters will be sent to solr,
+ # but any 'sniffed' request limit parameters will be used for paging, with
+ # paging at requested limit -1. Can sniff from facet.limit or
+ # f.specific_field.facet.limit solr request params. This 'true' config
+ # can be used if you set limits in :default_solr_params, or as defaults
+ # on the solr side in the request handler itself. Request handler defaults
+ # sniffing requires solr requests to be made with "echoParams=all", for
+ # app code to actually have it echo'd back to see it.
+ #
+ # :show may be set to false if you don't want the facet to be drawn in the
+ # facet bar
+ config.add_facet_field 'format', :label => 'Format'
+ config.add_facet_field 'pub_date', :label => 'Publication Year', :single => true
+ config.add_facet_field 'subject_topic_facet', :label => 'Topic', :limit => 20
+ config.add_facet_field 'language_facet', :label => 'Language', :limit => true
+ config.add_facet_field 'lc_1letter_facet', :label => 'Call Number'
+ config.add_facet_field 'subject_geo_facet', :label => 'Region'
+ config.add_facet_field 'subject_era_facet', :label => 'Era'
+
+ config.add_facet_field 'example_pivot_field', :label => 'Pivot Field', :pivot => ['format', 'language_facet']
+
+ config.add_facet_field 'example_query_facet_field', :label => 'Publish Date', :query => {
+ :years_5 => { :label => 'within 5 Years', :fq => "pub_date:[#{Time.now.year - 5 } TO *]" },
+ :years_10 => { :label => 'within 10 Years', :fq => "pub_date:[#{Time.now.year - 10 } TO *]" },
+ :years_25 => { :label => 'within 25 Years', :fq => "pub_date:[#{Time.now.year - 25 } TO *]" }
+ }
+
+
+ # Have BL send all facet field names to Solr, which has been the default
+ # previously. Simply remove these lines if you'd rather use Solr request
+ # handler defaults, or have no facets.
+ config.add_facet_fields_to_solr_request!
+
+ # solr fields to be displayed in the index (search results) view
+ # The ordering of the field names is the order of the display
+ config.add_index_field 'title_display', :label => 'Title'
+ config.add_index_field 'title_vern_display', :label => 'Title'
+ config.add_index_field 'author_display', :label => 'Author'
+ config.add_index_field 'author_vern_display', :label => 'Author'
+ config.add_index_field 'format', :label => 'Format'
+ config.add_index_field 'language_facet', :label => 'Language'
+ config.add_index_field 'published_display', :label => 'Published'
+ config.add_index_field 'published_vern_display', :label => 'Published'
+ config.add_index_field 'lc_callnum_display', :label => 'Call number'
+
+ # solr fields to be displayed in the show (single result) view
+ # The ordering of the field names is the order of the display
+ config.add_show_field 'title_display', :label => 'Title'
+ config.add_show_field 'title_vern_display', :label => 'Title'
+ config.add_show_field 'subtitle_display', :label => 'Subtitle'
+ config.add_show_field 'subtitle_vern_display', :label => 'Subtitle'
+ config.add_show_field 'author_display', :label => 'Author'
+ config.add_show_field 'author_vern_display', :label => 'Author'
+ config.add_show_field 'format', :label => 'Format'
+ config.add_show_field 'url_fulltext_display', :label => 'URL'
+ config.add_show_field 'url_suppl_display', :label => 'More Information'
+ config.add_show_field 'language_facet', :label => 'Language'
+ config.add_show_field 'published_display', :label => 'Published'
+ config.add_show_field 'published_vern_display', :label => 'Published'
+ config.add_show_field 'lc_callnum_display', :label => 'Call number'
+ config.add_show_field 'isbn_t', :label => 'ISBN'
+
+ # "fielded" search configuration. Used by pulldown among other places.
+ # For supported keys in hash, see rdoc for Blacklight::SearchFields
+ #
+ # Search fields will inherit the :qt solr request handler from
+ # config[:default_solr_parameters], OR can specify a different one
+ # with a :qt key/value. Below examples inherit, except for subject
+ # that specifies the same :qt as default for our own internal
+ # testing purposes.
+ #
+ # The :key is what will be used to identify this BL search field internally,
+ # as well as in URLs -- so changing it after deployment may break bookmarked
+ # urls. A display label will be automatically calculated from the :key,
+ # or can be specified manually to be different.
+
+ # This one uses all the defaults set by the solr request handler. Which
+ # solr request handler? The one set in config[:default_solr_parameters][:qt],
+ # since we aren't specifying it otherwise.
+
+ config.add_search_field 'all_fields', :label => 'All Fields'
+
+
+ # Now we see how to over-ride Solr request handler defaults, in this
+ # case for a BL "search field", which is really a dismax aggregate
+ # of Solr search fields.
+
+ config.add_search_field('title') do |field|
+ # solr_parameters hash are sent to Solr as ordinary url query params.
+ field.solr_parameters = { :'spellcheck.dictionary' => 'title' }
+
+ # :solr_local_parameters will be sent using Solr LocalParams
+ # syntax, as eg {! qf=$title_qf }. This is neccesary to use
+ # Solr parameter de-referencing like $title_qf.
+ # See: http://wiki.apache.org/solr/LocalParams
+ field.solr_local_parameters = {
+ :qf => '$title_qf',
+ :pf => '$title_pf'
+ }
+ end
+
+ config.add_search_field('author') do |field|
+ field.solr_parameters = { :'spellcheck.dictionary' => 'author' }
+ field.solr_local_parameters = {
+ :qf => '$author_qf',
+ :pf => '$author_pf'
+ }
+ end
+
+ # Specifying a :qt only to show it's possible, and so our internal automated
+ # tests can test it. In this case it's the same as
+ # config[:default_solr_parameters][:qt], so isn't actually neccesary.
+ config.add_search_field('subject') do |field|
+ field.solr_parameters = { :'spellcheck.dictionary' => 'subject' }
+ field.qt = 'search'
+ field.solr_local_parameters = {
+ :qf => '$subject_qf',
+ :pf => '$subject_pf'
+ }
+ end
+
+ # "sort results by" select (pulldown)
+ # label in pulldown is followed by the name of the SOLR field to sort by and
+ # whether the sort is ascending or descending (it must be asc or desc
+ # except in the relevancy case).
+ config.add_sort_field 'score desc, pub_date_sort desc, title_sort asc', :label => 'relevance'
+ config.add_sort_field 'pub_date_sort desc, title_sort asc', :label => 'year'
+ config.add_sort_field 'author_sort asc, title_sort asc', :label => 'author'
+ config.add_sort_field 'title_sort asc, pub_date_sort desc', :label => 'title'
+
+ # If there are more than this many search results, no spelling ("did you
+ # mean") suggestion is offered.
+ config.spell_max = 5
+ end
+
+end
diff --git a/app/controllers/concerns/.keep b/app/controllers/concerns/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
new file mode 100644
index 0000000..de6be79
--- /dev/null
+++ b/app/helpers/application_helper.rb
@@ -0,0 +1,2 @@
+module ApplicationHelper
+end
diff --git a/app/mailers/.keep b/app/mailers/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/app/models/.keep b/app/models/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/app/models/concerns/.keep b/app/models/concerns/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/app/models/search_builder.rb b/app/models/search_builder.rb
new file mode 100644
index 0000000..efcef22
--- /dev/null
+++ b/app/models/search_builder.rb
@@ -0,0 +1,3 @@
+class SearchBuilder < Blacklight::SearchBuilder
+ include Blacklight::Solr::SearchBuilderBehavior
+end
diff --git a/app/models/solr_document.rb b/app/models/solr_document.rb
new file mode 100644
index 0000000..78680ac
--- /dev/null
+++ b/app/models/solr_document.rb
@@ -0,0 +1,36 @@
+# -*- encoding : utf-8 -*-
+class SolrDocument
+
+ include Blacklight::Solr::Document
+ # The following shows how to setup this blacklight document to display marc documents
+ extension_parameters[:marc_source_field] = :marc_display
+ extension_parameters[:marc_format_type] = :marcxml
+ use_extension( Blacklight::Solr::Document::Marc) do |document|
+ document.key?( :marc_display )
+ end
+
+ field_semantics.merge!(
+ :title => "title_display",
+ :author => "author_display",
+ :language => "language_facet",
+ :format => "format"
+ )
+
+
+
+ # self.unique_key = 'id'
+
+ # Email uses the semantic field mappings below to generate the body of an email.
+ SolrDocument.use_extension( Blacklight::Document::Email )
+
+ # SMS uses the semantic field mappings below to generate the body of an SMS email.
+ SolrDocument.use_extension( Blacklight::Document::Sms )
+
+ # DublinCore uses the semantic field mappings below to assemble an OAI-compliant Dublin Core document
+ # Semantic mappings of solr stored fields. Fields may be multi or
+ # single valued. See Blacklight::Document::SemanticFields#field_semantics
+ # and Blacklight::Document::SemanticFields#to_semantic_values
+ # Recommendation: Use field names from Dublin Core
+ use_extension( Blacklight::Document::DublinCore)
+
+end
diff --git a/app/models/user.rb b/app/models/user.rb
new file mode 100644
index 0000000..f7a1ebf
--- /dev/null
+++ b/app/models/user.rb
@@ -0,0 +1,20 @@
+class User < ActiveRecord::Base
+
+ if Blacklight::Utils.needs_attr_accessible?
+
+ attr_accessible :email, :password, :password_confirmation
+ end
+# Connects this user object to Blacklights Bookmarks.
+ include Blacklight::User
+ # Include default devise modules. Others available are:
+ # :confirmable, :lockable, :timeoutable and :omniauthable
+ devise :database_authenticatable, :registerable,
+ :recoverable, :rememberable, :trackable, :validatable
+
+ # Method added by Blacklight; Blacklight uses #to_s on your
+ # user class to get a user-displayable login/identifier for
+ # the account.
+ def to_s
+ email
+ end
+end
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
new file mode 100644
index 0000000..a693e72
--- /dev/null
+++ b/app/views/layouts/application.html.erb
@@ -0,0 +1,14 @@
+
+
+
+ Colligo
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
+ <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
+ <%= csrf_meta_tags %>
+
+
+
+<%= yield %>
+
+
+
diff --git a/bin/bundle b/bin/bundle
new file mode 100755
index 0000000..66e9889
--- /dev/null
+++ b/bin/bundle
@@ -0,0 +1,3 @@
+#!/usr/bin/env ruby
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
+load Gem.bin_path('bundler', 'bundle')
diff --git a/bin/rails b/bin/rails
new file mode 100755
index 0000000..1cd6d9f
--- /dev/null
+++ b/bin/rails
@@ -0,0 +1,10 @@
+#!/usr/bin/env ruby
+begin
+ spring_bin_path = File.expand_path('../spring', __FILE__)
+ load spring_bin_path
+rescue LoadError => e
+ raise unless e.message.end_with? spring_bin_path, 'spring/binstub'
+end
+APP_PATH = File.expand_path('../../config/application', __FILE__)
+require_relative '../config/boot'
+require 'rails/commands'
diff --git a/bin/rake b/bin/rake
new file mode 100755
index 0000000..7b1f640
--- /dev/null
+++ b/bin/rake
@@ -0,0 +1,10 @@
+#!/usr/bin/env ruby
+begin
+ spring_bin_path = File.expand_path('../spring', __FILE__)
+ load spring_bin_path
+rescue LoadError => e
+ raise unless e.message.end_with? spring_bin_path, 'spring/binstub'
+end
+require_relative '../config/boot'
+require 'rake'
+Rake.application.run
diff --git a/bin/setup b/bin/setup
new file mode 100755
index 0000000..acdb2c1
--- /dev/null
+++ b/bin/setup
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby
+require 'pathname'
+
+# path to your application root.
+APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
+
+Dir.chdir APP_ROOT do
+ # This script is a starting point to setup your application.
+ # Add necessary setup steps to this file:
+
+ puts "== Installing dependencies =="
+ system "gem install bundler --conservative"
+ system "bundle check || bundle install"
+
+ # puts "\n== Copying sample files =="
+ # unless File.exist?("config/database.yml")
+ # system "cp config/database.yml.sample config/database.yml"
+ # end
+
+ puts "\n== Preparing database =="
+ system "bin/rake db:setup"
+
+ puts "\n== Removing old logs and tempfiles =="
+ system "rm -f log/*"
+ system "rm -rf tmp/cache"
+
+ puts "\n== Restarting application server =="
+ system "touch tmp/restart.txt"
+end
diff --git a/bin/spring b/bin/spring
new file mode 100755
index 0000000..62ec28f
--- /dev/null
+++ b/bin/spring
@@ -0,0 +1,15 @@
+#!/usr/bin/env ruby
+
+# This file loads spring without using Bundler, in order to be fast.
+# It gets overwritten when you run the `spring binstub` command.
+
+unless defined?(Spring)
+ require 'rubygems'
+ require 'bundler'
+
+ if (match = Bundler.default_lockfile.read.match(/^GEM$.*?^ (?: )*spring \((.*?)\)$.*?^$/m))
+ Gem.paths = { 'GEM_PATH' => [Bundler.bundle_path.to_s, *Gem.path].uniq }
+ gem 'spring', match[1]
+ require 'spring/binstub'
+ end
+end
diff --git a/config.ru b/config.ru
new file mode 100644
index 0000000..bd83b25
--- /dev/null
+++ b/config.ru
@@ -0,0 +1,4 @@
+# This file is used by Rack-based servers to start the application.
+
+require ::File.expand_path('../config/environment', __FILE__)
+run Rails.application
diff --git a/config/SolrMarc/config-test.properties b/config/SolrMarc/config-test.properties
new file mode 100644
index 0000000..9649e27
--- /dev/null
+++ b/config/SolrMarc/config-test.properties
@@ -0,0 +1,37 @@
+# If using the solr:marc:index task, you can define environment-specific
+# config files that will be used instead of 'config.properties' for
+# a specific environment. config-development.properties,
+# config-production.properties, etc.
+
+# Relative paths for solrmarc.solr.war.path and solr.path are relative
+# to the location of SolrMarc.jar, which for blacklight is by default
+# in blacklight/config/solr_marc.
+
+# solrmarc.solr.war.path - must point to either a war file for the version of
+# Solr that you want to use, or to a directory of jar files extracted from a
+# Solr war files. If this is not provided, SolrMarc can only work by
+# communicating with a running Solr server.
+#solrmarc.solr.war.path=../jetty/webapps/solr.war
+# Path to your solr instance
+#solr.path = ../jetty/solr
+
+# Relative paths for solr.indexer can be relative to the location of
+# this config.properties file.
+solr.indexer = org.solrmarc.index.SolrIndexer
+solr.indexer.properties = index.properties
+
+# URL of running solr search engine to cause updates to be recognized.
+# * When solr.path and solrmarc.solr.war.path are defined, this is optional,
+# but if defined SolrMarc will issue a 'commit' after it's done indexing.
+# * Alternately, do not define solr.path or solrmarc.solr.war.path to have
+# SolrMarc use HTTP Post to add documents.
+# NOTE:
+# When using the solr:marc:index rake task, this value will be automatically
+# looked up from your solr.yml, and the value here will NOT be used.
+solr.hosturl = http://localhost:8888/solr/update
+
+# MARC handling parameters
+marc.to_utf_8 = true
+marc.permissive = true
+marc.default_encoding = MARC8
+marc.include_errors = false
diff --git a/config/SolrMarc/config.properties b/config/SolrMarc/config.properties
new file mode 100644
index 0000000..59f9a69
--- /dev/null
+++ b/config/SolrMarc/config.properties
@@ -0,0 +1,37 @@
+# If using the solr:marc:index task, you can define environment-specific
+# config files that will be used instead of 'config.properties' for
+# a specific environment. config-development.properties,
+# config-production.properties, etc.
+
+# Relative paths for solrmarc.solr.war.path and solr.path are relative
+# to the location of SolrMarc.jar, which for blacklight is by default
+# in blacklight/config/solr_marc.
+
+# solrmarc.solr.war.path - must point to either a war file for the version of
+# Solr that you want to use, or to a directory of jar files extracted from a
+# Solr war files. If this is not provided, SolrMarc can only work by
+# communicating with a running Solr server.
+# solrmarc.solr.war.path= ../../../../jetty/webapps/solr.war
+# Path to your solr instance
+# solr.path = ../../../../jetty/solr
+
+# Relative paths for solr.indexer can be relative to the location of
+# this config.properties file.
+solr.indexer = org.solrmarc.index.SolrIndexer
+solr.indexer.properties = index.properties
+
+# URL of running solr search engine to cause updates to be recognized.
+# * When solr.path and solrmarc.solr.war.path are defined, this is optional,
+# but if defined SolrMarc will issue a 'commit' after it's done indexing.
+# * Alternately, do not define solr.path or solrmarc.solr.war.path to have
+# SolrMarc use HTTP Post to add documents.
+# NOTE:
+# When using the solr:marc:index rake task, this value will be automatically
+# looked up from your solr.yml, and the value here will NOT be used.
+solr.hosturl = http://localhost:8983/solr/update
+
+# MARC handling parameters
+marc.to_utf_8 = true
+marc.permissive = true
+marc.default_encoding = MARC8
+marc.include_errors = false
diff --git a/config/SolrMarc/index.properties b/config/SolrMarc/index.properties
new file mode 100644
index 0000000..08b50e7
--- /dev/null
+++ b/config/SolrMarc/index.properties
@@ -0,0 +1,97 @@
+# for more information on solrmarc mappings,
+# see http://code.google.com/p/solrmarc/w/list
+#
+# GenericBlacklight uses these conventions, mostly.
+# _t for indexed fields (for searching)
+# _display for stored fields (for display in UI)
+# _facet for facet fields
+# _sort for sorting fields (fields used to sort results)
+#
+# see jetty/solr/conf/schema.xml in Blacklight demo project
+# see http://blacklight.rubyforge.org/ DEMO_README file
+
+id = 001, first
+marc_display = FullRecordAsXML
+text = custom, getAllSearchableFields(100, 900)
+
+language_facet = 008[35-37]:041a:041d, language_map.properties
+# format is for facet, display, and selecting partial for display in show view
+format = 007[0-1]:000[6-7]:000[6], (map.format), first
+isbn_t = 020a, (pattern_map.isbn_clean)
+material_type_display = custom, removeTrailingPunct(300aa)
+
+# Title fields
+# primary title
+title_t = custom, getLinkedFieldCombined(245a)
+title_display = custom, removeTrailingPunct(245a)
+title_vern_display = custom, getLinkedField(245a)
+# subtitle
+subtitle_t = custom, getLinkedFieldCombined(245b)
+subtitle_display = custom, removeTrailingPunct(245b)
+subtitle_vern_display = custom, getLinkedField(245b)
+# additional title fields
+title_addl_t = custom, getLinkedFieldCombined(245abnps:130[a-z]:240[a-gk-s]:210ab:222ab:242abnp:243[a-gk-s]:246[a-gnp]:247[a-gnp])
+title_added_entry_t = custom, getLinkedFieldCombined(700[gk-pr-t]:710[fgk-t]:711fgklnpst:730[a-gk-t]:740anp)
+title_series_t = custom, getLinkedFieldCombined(440anpv:490av)
+title_sort = custom, getSortableTitle
+
+# Author fields
+author_t = custom, getLinkedFieldCombined(100abcegqu:110abcdegnu:111acdegjnqu)
+author_addl_t = custom, getLinkedFieldCombined(700abcegqu:710abcdegnu:711acdegjnqu)
+author_display = custom, removeTrailingPunct(100abcdq:110[a-z]:111[a-z])
+author_vern_display = custom, getLinkedField(100abcdq:110[a-z]:111[a-z])
+author_sort = custom, getSortableAuthor
+
+# Subject fields
+subject_t = custom, getLinkedFieldCombined(600[a-u]:610[a-u]:611[a-u]:630[a-t]:650[a-e]:651ae:653aa:654[a-e]:655[a-c])
+subject_addl_t = custom, getLinkedFieldCombined(600[v-z]:610[v-z]:611[v-z]:630[v-z]:650[v-z]:651[v-z]:654[v-z]:655[v-z])
+subject_topic_facet = custom, removeTrailingPunct(600abcdq:610ab:611ab:630aa:650aa:653aa:654ab:655ab)
+subject_era_facet = custom, removeTrailingPunct(650y:651y:654y:655y)
+subject_geo_facet = custom, removeTrailingPunct(651a:650z)
+
+# Publication fields
+published_display = custom, removeTrailingPunct(260a)
+published_vern_display = custom, getLinkedField(260a)
+# used for facet and display, and copied for sort
+pub_date = custom, getDate
+
+# Call Number fields
+lc_callnum_display = 050ab, first
+lc_1letter_facet = 050a[0], callnumber_map.properties, first
+lc_alpha_facet = 050a, (pattern_map.lc_alpha), first
+lc_b4cutter_facet = 050a, first
+
+# URL Fields
+url_fulltext_display = custom, getFullTextUrls
+url_suppl_display = custom, getSupplUrls
+
+
+# MAPPINGS
+
+# format mapping
+# leader 06-07
+map.format.aa = Book
+map.format.ab = Serial
+map.format.am = Book
+map.format.as = Serial
+map.format.ta = Book
+map.format.tm = Book
+# leader 06
+map.format.c = Musical Score
+map.format.d = Musical Score
+map.format.e = Map or Globe
+map.format.f = Map or Globe
+map.format.i = Non-musical Recording
+map.format.j = Musical Recording
+map.format.k = Image
+map.format.m = Computer File
+# 007[0] when it doesn't clash with above
+map.format.h = Microform
+map.format.q = Musical Score
+map.format.v = Video
+# none of the above
+map.format = Unknown
+
+pattern_map.lc_alpha.pattern_0 = ^([A-Z]{1,3})\\d+.*=>$1
+
+pattern_map.isbn_clean.pattern_0 = ([- 0-9]*[0-9]).*=>$1
\ No newline at end of file
diff --git a/config/SolrMarc/index_scripts/dewey.bsh b/config/SolrMarc/index_scripts/dewey.bsh
new file mode 100644
index 0000000..1a388d7
--- /dev/null
+++ b/config/SolrMarc/index_scripts/dewey.bsh
@@ -0,0 +1,47 @@
+import org.marc4j.marc.Record;
+import org.solrmarc.tools.Utils;
+import org.solrmarc.tools.CallNumUtils;
+
+// define the base level indexer so that its methods can be called from the script.
+// note that the SolrIndexer code will set this value before the script methods are called.
+org.solrmarc.index.SolrIndexer indexer = null;
+
+/**
+ * returns the facet value for dewey hundreds digits, and dewey tens digits
+ * @param record
+ * @return Set of Strings containing facet value for dewey hundreds digits, and dewey tens digits
+ */
+Set getDeweyFacet(Record record, String propertiesMapName)
+{
+ LinkedHashSet resultSet = new LinkedHashSet();
+ Set values = indexer.getFieldList(record, "082a");
+ String mapName = indexer.loadTranslationMap(propertiesMapName);
+
+ for (String dewey : values)
+ {
+ if (! CallNumUtils.isValidDewey(dewey)) continue;
+ String hundreds = dewey.substring(0, 1) + "00";
+ String tens = dewey.substring(0,2) + "0";
+ String hundredsMapped = Utils.remap(hundreds, indexer.findMap(mapName), true);
+ String tensMapped = Utils.remap(tens, indexer.findMap(mapName), true);
+ if (hundredsMapped != null) resultSet.add(hundredsMapped);
+ if (tensMapped != null) resultSet.add(tensMapped);
+ }
+
+ return resultSet;
+}
+
+Set getDeweyText(Record record)
+{
+ LinkedHashSet resultSet = new LinkedHashSet();
+ Set values = indexer.getFieldList(record, "082a");
+
+ for (String dewey : values)
+ {
+ if (! CallNumUtils.isValidDewey(dewey)) continue;
+ dewey = dewey.replaceAll("/[.]", ".").replaceAll("/", " ");
+ resultSet.add(dewey);
+ }
+
+ return resultSet;
+}
diff --git a/config/SolrMarc/index_scripts/format.bsh b/config/SolrMarc/index_scripts/format.bsh
new file mode 100644
index 0000000..2905f53
--- /dev/null
+++ b/config/SolrMarc/index_scripts/format.bsh
@@ -0,0 +1,126 @@
+import org.marc4j.marc.Record;
+import org.solrmarc.tools.Utils;
+
+// define the base level indexer so that its methods can be called from the script.
+// note that the SolrIndexer code will set this value before the script methods are called.
+org.solrmarc.index.SolrIndexer indexer = null;
+
+/**
+ * Determine Record Format(s)
+ *
+ * @param Record record
+ * @return Set format of record
+ */
+
+public Set getFormat(Record record)
+{
+ Set result = new LinkedHashSet();
+
+ // check if there's an h in the 245
+ Set title_245h = indexer.getFieldList(record, "245h");
+ if (Utils.setItemContains(title_245h, "electronic resource"))
+ {
+ result.add("Electronic");
+ return result;
+ }
+ boolean field007hasC = false;
+ // check the 007 - this is a repeating field
+ // if we find a matching value there, grab it and return.
+ Set fields007 = indexer.getFieldList(record, "007[0-1]");
+ for (String f_007 : fields007)
+ {
+ f_007 = f_007.toUpperCase();
+ if (f_007.startsWith("A"))
+ if (f_007.equals( "AD")) result.add("Atlas");
+ else result.add("Map");
+ else if (f_007.startsWith("C"))
+ if (f_007.equals("CA")) result.add("TapeCartridge");
+ else if (f_007.equals("CB")) result.add("ChipCartridge");
+ else if (f_007.equals("CC")) result.add("DiscCartridge");
+ else if (f_007.equals("CF")) result.add("TapeCassette");
+ else if (f_007.equals("CH")) result.add("TapeReel");
+ else if (f_007.equals("CJ")) result.add("FloppyDisk");
+ else if (f_007.equals("CM")) result.add("CDROM");
+ else if (f_007.equals("C0")) result.add("CDROM");
+ else if (f_007.equals("CR")) field007hasC = true; // Do not return - this will cause anything with an 856 field to be labeled as "Electronic"
+ else result.add("Software");
+ else if (f_007.startsWith("D")) result.add("Globe");
+ else if (f_007.startsWith("F")) result.add("Braille");
+ else if (f_007.startsWith("G"))
+ if (f_007.equals("GC")) result.add("Filmstrip");
+ else if (f_007.equals("GD")) result.add("Filmstrip");
+ else if (f_007.equals("GT")) result.add("Transparency");
+ else result.add("Slide");
+ else if (f_007.startsWith("H")) result.add("Microfilm");
+ else if (f_007.startsWith("K"))
+ if (f_007.equals("KC")) result.add("Collage");
+ else if (f_007.equals("KD")) result.add("Drawing");
+ else if (f_007.equals("KE")) result.add("Painting");
+ else if (f_007.equals("KF")) result.add("Print");
+ else if (f_007.equals("KG")) result.add("Photonegative");
+ else if (f_007.equals("KJ")) result.add("Print");
+ else if (f_007.equals("KL")) result.add("Drawing");
+ else if (f_007.equals("K0")) result.add("FlashCard");
+ else if (f_007.equals("KN")) result.add("Chart");
+ else result.add("Photo");
+ else if (f_007.startsWith("M"))
+ if (f_007.equals("MF")) result.add("VideoCassette");
+ else if (f_007.equals("MR")) result.add("Filmstrip");
+ else result.add("MotionPicture");
+ else if (f_007.startsWith("O")) result.add("Kit");
+ else if (f_007.startsWith("Q")) result.add("MusicalScore");
+ else if (f_007.startsWith("R")) result.add("SensorImage");
+ else if (f_007.startsWith("S"))
+ if (f_007.equals("SD")) result.add("SoundDisc");
+ else if (f_007.equals("SS")) result.add("SoundCassette");
+ else result.add("SoundRecording");
+ else if (f_007.startsWith("V"))
+ if (f_007.equals("VC")) result.add("VideoCartridge");
+ else if (f_007.equals("VD")) result.add("VideoDisc");
+ else if (f_007.equals("VF")) result.add("VideoCassette");
+ else if (f_007.equals("VR")) result.add("VideoReel");
+ else result.add("Video");
+
+ // if we found a matching value and return it.
+ if (!result.isEmpty()) return result;
+ }
+ // check the Leader - this is NOT a repeating field
+ // if we find a matching value there, grab it and return.
+ String f_000 = indexer.getFirstFieldVal(record, null, "000[6-7]");
+ f_000 = f_000.toUpperCase();
+ if (f_000.startsWith("C")) result.add("MusicalScore");
+ else if (f_000.startsWith("D")) result.add("MusicalScore");
+ else if (f_000.startsWith("E")) result.add("Map");
+ else if (f_000.startsWith("F")) result.add("Map");
+ else if (f_000.startsWith("G")) result.add("Slide");
+ else if (f_000.startsWith("I")) result.add("SoundRecording");
+ else if (f_000.startsWith("J")) result.add("MusicRecording");
+ else if (f_000.startsWith("K")) result.add("Photo");
+ else if (f_000.startsWith("M")) result.add("Electronic");
+ else if (f_000.startsWith("O")) result.add("Kit");
+ else if (f_000.startsWith("P")) result.add("Kit");
+ else if (f_000.startsWith("R")) result.add("PhysicalObject");
+ else if (f_000.startsWith("T")) result.add("Manuscript");
+ else if (f_000.startsWith("A"))
+ {
+ if (f_000.equals("AM"))
+ {
+ if (field007hasC) result.add("eBook");
+ else result.add("Book");
+ }
+ else if (f_000.equals("AS"))
+ {
+ // Look in 008 to determine what type of Continuing Resource
+ String formatCode = indexer.getFirstFieldVal(record, null, "008[21]");
+ if (formatCode.equals("N")) result.add("Newspaper");
+ else if (formatCode.equals("P")) result.add("Journal");
+ else result.add("Serial");
+ }
+ }
+ // Nothing worked!
+ if (result.isEmpty()) {
+ result.add("Unknown");
+ }
+
+ return result;
+}
diff --git a/config/SolrMarc/translation_maps/README_MAPS b/config/SolrMarc/translation_maps/README_MAPS
new file mode 100644
index 0000000..0df9db5
--- /dev/null
+++ b/config/SolrMarc/translation_maps/README_MAPS
@@ -0,0 +1 @@
+This is the directory in which you should place locally defined translation maps.
diff --git a/config/SolrMarc/translation_maps/callnumber_map.properties b/config/SolrMarc/translation_maps/callnumber_map.properties
new file mode 100644
index 0000000..bb05f19
--- /dev/null
+++ b/config/SolrMarc/translation_maps/callnumber_map.properties
@@ -0,0 +1,407 @@
+# Map Call Number Classification pieces to User Friendly Description
+displayRawIfMissing = true
+
+# note: need more specific call numbers first so first matching is most specific
+AC = AC - Collections Works
+AE = AE - Encyclopedias
+AG = AG - General Reference Works
+AI = AI - Indexes
+AM = AM - Museums
+AN = AN - Newspapers
+AP = AP - Periodicals
+AS = AS - Academies & Learned Societies
+AY = AY - Yearbooks, Almanacs, Directories
+AZ = AZ - History of Scholarship & Learning
+A = A - General Works
+BC = BC - Logic
+BD = BD - Speculative Philosophy
+BF = BF - Psychology
+BH = BH - Aesthetics
+BJ = BJ - Ethics
+BL = BL - Religions (General)
+BM = BM - Judaism
+BP = BP - Islam, Bahaism, Theosophy, etc.
+BQ = BQ - Buddhism
+BR = BR - Christianity
+BS = BS - The Bible
+BT = BT - Doctrinal Theology
+BV = BV - Practical Theology
+BX = BX - Christian Denominations
+B = B - Philosophy, Psychology, Religion
+CB = CB - History of Civilization
+CC = CC - Archaeology
+CD = CD - Diplomatics
+CE = CE - Technical Chronology
+CJ = CJ - Numismatics
+CN = CN - Inscriptions
+CR = CR - Heraldry
+CS = CS - Genealogy
+CT = CT - Biography
+C = C - Historical Sciences (Archaeology, Genealogy)
+DA = DA - Great Britain (History)
+DB = DB - Austria, Liechtenstein, Czech Rep., Hungary, Slovakia (History)
+DC = DC - France (History)
+DD = DD - Germany (History)
+DE = DE - Greco-Roman World (History)
+DF = DF - Greece (History)
+DG = DG - Italy (History)
+DH = DH - Low Countries (History)
+DJK = DJK - Eastern Europe (History)
+DJ = DJ - Netherlands (History)
+DK = DK - Russia. Former Soviet Republics. Poland (History)
+DL = DL - Scandinavia (History)
+DP = DP - Spain. Portugal (History)
+DQ = DQ - Switzerland (History)
+DR = DR - Balkan Peninsula (History)
+DS = DS - Asia (History)
+DT = DT - Africa (History)
+DU = DU - OceanÃa (History)
+DX = DX - Gypsies (History)
+D = D - World History
+E = E - History of the Americas (General)
+F = F - History of the Americas (Local)
+GA = GA - Mathematical Geography, Cartography
+GB = GB - Physical Geography
+GC = GC - Oceanography
+GE = GE - Environmental Sciences
+GF = GF - Human Ecology, Anthropogeography
+GN = GN - Anthropology
+GR = GR - Folklore
+GT = GT - Manners & Customs
+GV = GV - Recreation. Leisure
+G = G - Geography, Anthropology, Recreation
+HA = HA - Statistics
+HB = HB - Economic Theory, Demography
+HC = HC - Economic History & Conditions
+HD = HD - Industries, Land use, Labor
+HE = HE - Transportation & Communications
+HF = HF - Commerce
+HG = HG - Finance
+HJ = HJ - Public Finance
+HM = HM - Sociology
+HN = HN - Social History & Conditions
+HQ = HQ - The Family, Marriage, Woman
+HS = HS - Societies
+HT = HT - Communities, Classes, Races
+HV = HV - Social Pathology, Social & Public Welfare, Criminology
+HX = HX - Socialism, Communism, Anarchism
+H = H - Social Sciences
+JA = JA - Political Science
+JC = JC - Political Theory
+JF = JF - Political Institutions
+JK = JK - Political Institutions (U.S.)
+JL = JL - Political Institutions (Canada, Latin America)
+JN = JN - Political Institutions (Europe)
+JQ = JQ - Political Institutions (Asia, Africa, Australia, Pacific Area)
+JS = JS - Local Government
+JV = JV - Colonies & Colonization, Emigration & Immigration
+JX = JX - International Law
+JZ = JZ - International Relations
+J = J - Political Science
+KBM = KBM - Jewish Law
+KBP = KBP - Islamic Law
+KBR = KBR - Canon Law
+KBU = KBU - Law of Roman Catholic Church
+KB = KB - Religious Law (General)
+KDC = KDC - Law of Scotland
+KDE = KDE - Law of Northern Ireland
+KDG = KDG - Law of Isle of Man, Channel Islands
+KDK = KDK - Law of Ireland (EIRE)
+KDZ = KDZ - Law of America, North America
+KD = KD - Law of England & Wales
+KE = KE - Law of Canada
+KF = KF - Law of the U.S.
+KG = KG - Law of Latin America, Mexico, Central America, West Indies, Caribbean
+KH = KH - South America
+KJA = KJA - Roman Law
+KJC = KJC - Regional Comparative & Uniform Law
+KJE = KJE - Regional Organization & Integration
+KJG = KJG - Law of Albania
+KJH = KJH - Law of Andorra
+KJJ = KJJ - Law of Austria
+KJK = KJK - Law of Belgium, Bosnia & Hercegovina (Republic)
+KJM = KJM - Law of Bulgaria, Croatia
+KJN = KJN - Law of Cyprus
+KJP = KJP - Law of Czechoslovakia, Czech Republic
+KJQ = KJQ - Law of Slovakia
+KJR = KJR - Law of Denmark
+KJS = KJS - Law of Estonia
+KJT = KJT - Law of Finland
+KJV = KJV - Law of France
+KJW = KJW - Law of French Regions, Provinces, Departments
+KJ = KJ - Law of Europe
+KKE = KKE - Law of Greece
+KKF = KKF - Law of Hungary
+KKG = KKG - Law of Iceland
+KKH = KKH - Law of Italy
+KKI = KKI - Law of Latvia
+KKJ = KKJ - Law of Lithuania, Liechtenstein
+KKK = KKK - Law of Luxemburg, Malta
+KKL = KKL - Law of Monaco
+KKM = KKM - Law of the Netherlands
+KKN = KKN - Law of Norway
+KKP = KKP - Law of Poland
+KKQ = KKQ - Law of Portugal
+KKR = KKR - Law of Romania
+KKT = KKT - Law of Spain
+KKV = KKV - Law of Sweden
+KKW = KKW - Law of Switzerland
+KKX = KKX - Law of Turkey
+KKY = KKY - Law of Ukraine
+KKZ = KKZ - Law of Yugoslavia
+KK = KK - Law of Germany
+KLA = KLA - Law of Russia, Soviet Union
+KLB = KLB - Law of Russia (Federation)
+KLD = KLD - Law of Armenia (Republic)
+KLE = KLE - Law of Azerbaijan
+KLF = KLF - Law of Belarus
+KLH = KLH - Law of Georgia
+KLM = KLM - Law of Moldova
+KLP = KLP - Law of Ukraine
+KLR = KLR - Law of Kazakhstan
+KLS = KLS - Law of Kyrgyzstan
+KLT = KLT - Law of Tajikistan
+KLV = KLV - Law of Turkmenistan
+KLW = KLW - Law of Uzbekistan
+KL = KL - History of Law, The Ancient Orient
+KMC = KMC - Law of the Middle East, Southwest Asia
+KMH = KMH - Law of Iran
+KMJ = KMJ - Law of Iraq
+KMK = KMK - Law of Israel
+KML = KML - Law of Jerusalem
+KMM = KMM - Law of Jordan
+KMN = KMN - Law of Kuwait
+KMP = KMP - Law of Lebanon
+KMT = KMT - Law of Saudi Arabia
+KMU = KMU - Law of Syria
+KMX = KMX - Law of Yemen
+KM = KM - Law of Asia
+KNC = KNC - Law of South Asia
+KNN = KNN - Law of China
+KNP = KNP - Law of Taiwan
+KNR = KNR - Law of Hong Kong
+KNS = KNS - Law of India
+KNW = KNW - Law of Indonesia
+KNX = KNX - Law of Japan
+KPA = KPA - Law of Korea, South Korea
+KPC = KPC - Law of Korea, North Korea
+KQ = KQ - Law of Africa
+KU = KU - Law of the Pacific Area, Australia, New Zealand
+KWX = KWX - Law of Antarctica
+KZ = KZ - Law of Nations
+K = K - Law
+LA = LA - History of Education
+LB = LB - Theory & Practice of Education
+LC = LC - Special Aspects of Education
+LD = LD - Individual Educational Institutions (U.S.)
+LE = LE - Individual Educational Institutions: America (except U.S.)
+LF = LF - Individual Educational Institutions: Europe
+LG = LG - Individual Educational Institutions: Asia, Africa, Oceania
+LH = LH - College & School Magazines & Papers
+LT = LT - Textbooks
+L = L - Education
+MLCME = Unknown
+MLCSN = Unknown
+ML = ML - Literature on Music
+MT = MT - Musical Instruction & Study
+M = M - Music
+NA = NA - Architecture
+NB = NB - Sculpture
+NC = NC - Drawing, Design, Illustration
+ND = ND - Painting
+NE = NE - Print Media
+NK = NK - Decorative Arts
+NX = NX - Arts in General
+N = N - Fine Arts
+PA = PA - Greek & Latin Language & Literature
+PB = PB - Modern Language, Celtic Languages
+PC = PC - Romanic Languages
+PD = PD - Germanic Languages
+PE = PE - English Languages
+PF = PF - West Germanic Languages
+PG = PG - Slavic, Baltic, Albanian Languages, Russian Language & Literature
+PH = PH - Uralic & Basque Languages
+PJ = PJ - Oriental Languages & Literature
+PK = PK - Indo-Iranian Languages & Literature
+PL = PL - Languages & Literatures of Eastern Asia, Africa, Oceania
+PM = PM - Hyperborean, Indian & Artificial Languages
+PN = PN - Literature (General)
+PQ = PQ - French, Italian, Spanish & Portuguese Literature
+PR = PR - English Literature
+PS = PS - American Literature
+PT = PT - Germanic & Scandinavian Literatures
+PZ = PZ - Children’s Literature
+P = P - Language & Literature
+QA = QA - Mathematics
+QB = QB - Astronomy
+QC = QC - Physics
+QD = QD - Chemistry
+QE = QE - Geology
+QH = QH - Natural History, Biology
+QK = QK - Botany
+QL = QL - Zoology
+QM = QM - Human Anatomy
+QP = QP - Physiology
+QR = QR - Microbiology
+Q = Q - Science
+RA = RA - Public Aspects of Medicine
+RB = RB - Pathology
+RC = RC - Internal Medicine
+RD = RD - Surgery
+RE = RE - Ophthalmology
+RF = RF - Otorhinolaryngology
+RG = RG - Gynecology & Obstetrics
+RJ = RJ - Pediatrics
+RK = RK - Dentistry
+RL = RL - Dermatology
+RM = RM - Therapeutics, Pharmacology
+RS = RS - Pharmacy & Materia Medica
+RT = RT - Nursing
+RV = RV - Botanic, Thomsonian, & Eclectic Medicine
+RX = RX - Homeopathy
+RZ = RZ - Other Systems of Medicine
+R = R - Medicine
+SB = SB - Plant Culture
+SD = SD - Forestry
+SF = SF - Animal Culture
+SH = SH - Aquaculture
+SK = SK - Hunting Sports
+S = S - Agriculture
+TA = TA - Engineering, Civil Engineering
+TC = TC - Hydraulic Engineering
+TD = TD - Environmental Technology
+TE = TE - Highway Engineering
+TF = TF - Railroad Engineering & Operation
+TG = TG - Bridge Engineering
+TH = TH - Building Construction
+TJ = TJ - Mechanical Engineering & Machinery
+TK = TK - Electrical Engineering, Nuclear Engineering
+TL = TL - Motor Vehicles, Aeronautics, Astronautics
+TN = TN - Mining Engineering
+TP = TP - Chemical Technology
+TR = TR - Photography
+TS = TS - Manufactures
+TT = TT - Handicrafts
+TX = TX - Home Economics
+T = T - Technology
+UA = UA - Armies
+UB = UB - Military Administration
+UC = UC - Maintenance & Transportation
+UD = UD - Infantry
+UE = UE - Cavalry, Armor
+UF = UF - Artillery
+UG = UG - Military Engineering, Air Forces, Military Astronautics
+UH = UH - Other Military Services
+U = U - Military Science
+VA = VA - Navies
+VB = VB - Naval Administration
+VC = VC - Naval Maintenance
+VD = VD - Naval Seamen
+VE = VE - Marines
+VF = VF - Naval Ordnance
+VG = VG - Minor Services of Navies
+VK = VK - Navigation, Merchant Marine
+VM = VM - Naval Architecture, Marine Engineering
+V = V - Naval Science
+ZA = ZA - Information Science
+Z = Z - Bibliography, Library Science, Information Resources
+
+000 = 000s - Computer Science, Information & General Works
+010 = 010s - Bibliography
+020 = 020s - Library & Information Sciences
+030 = 030s - General Encyclopedic Works
+050 = 050s - General Serials & their Indexes
+060 = 060s - General Organization & Museology
+070 = 070s - News Media, Journalism, Publishing
+080 = 080s - General Collections
+090 = 090s - Manuscripts & Rare Books
+100 = 100s - Philosophy & Psychology
+110 = 110s - Metaphysics
+120 = 120s - Epistemology, Causation, Humankind
+130 = 130s - Paranormal Phenomena
+140 = 140s - Specific Philosophical Schools
+150 = 150s - Psychology
+160 = 160s - Logic
+170 = 170s - Ethics (Moral Philosophy)
+180 = 180s - Ancient, Medieval, Oriental Philosophy
+190 = 190s - Modern Western Philosophy
+200 = 200s - Religion
+210 = 210s - Natural Theology
+220 = 220s - Bible
+230 = 230s - Christian Theology
+240 = 240s - Christian Moral & Devotional Theology
+250 = 250s - Christian Orders & Local Church
+260 = 260s - Christian Social Theology
+270 = 270s - Christian Church History
+280 = 280s - Christian Denominations & Sects
+290 = 290s - Other & Comparative Religions
+300 = 300s - Social Sciences
+310 = 310s - General Statistics
+320 = 320s - Political Science
+330 = 330s - Economics
+340 = 340s - Law
+350 = 350s - Public Administration
+360 = 360s - Social Services; Association
+370 = 370s - Education
+380 = 380s - Commerce, Communications, Transport
+390 = 390s - Customs, Etiquette, Folklore
+400 = 400s - Language
+410 = 410s - Linguistics
+420 = 420s - English & Old English
+430 = 430s - Germanic Languages German
+440 = 440s - Romance Languages French
+450 = 450s - Italian, Romanian, Rhaeto-Romantic
+460 = 460s - Spanish & Portugese Languages
+470 = 470s - Italic Latin
+480 = 480s - Hellenic Languages Classical Greek
+490 = 490s - Other Languages
+500 = 500s - Science
+510 = 510s - Mathematics
+520 = 520s - Astronomy & Allied Sciences
+530 = 530s - Physics
+540 = 540s - Chemistry & Allied Sciences
+550 = 550s - Earth Sciences
+560 = 560s - Paleontology Paleozoology
+570 = 570s - Life Sciences
+580 = 580s - Botanical Sciences
+590 = 590s - Zoological Sciences
+600 = 600s - Technology
+610 = 610s - Medical Sciences Medicine
+620 = 620s - Engineering & Allied Operations
+630 = 630s - Agriculture
+640 = 640s - Home economics & Family Living
+650 = 650s - Management & Auxiliary Services
+660 = 660s - Chemical Engineering
+670 = 670s - Manufacturing
+680 = 680s - Manufacture for Specific Uses
+690 = 690s - Buildings
+700 = 700s - Arts & Recreation
+710 = 710s - Civic & Landscape Art
+720 = 720s - Architecture
+730 = 730s - Plastic Arts Sculpture
+740 = 740s - Drawing & Decorative Arts
+750 = 750s - Painting & Paintings
+760 = 760s - Graphic Arts Printmaking & Prints
+770 = 770s - Photography & Photographs
+780 = 780s - Music
+790 = 790s - Recreational & Performing Arts
+800 = 800s - Literature
+810 = 810s - American Literature in English
+820 = 820s - English & Old English Literatures
+830 = 830s - Literatures of Germanic Languages
+840 = 840s - Literatures of Romance Languages
+850 = 850s - Italian, Romanian, Rhaeto-Romanic
+860 = 860s - Spanish & Portuguese Literatures
+870 = 870s - Italic Literatures Latin
+880 = 880s - Hellenic Literatures Classical Greek
+890 = 890s - Literatures of Other Languages
+900 = 900s - History & Geography
+910 = 910s - Geography & Travel
+920 = 920s - Biography, Genealogy, Insignia
+930 = 930s - History of Ancient World
+940 = 940s - General History of Europe
+950 = 950s - General History of Asia Far East
+960 = 960s - General History of Africa
+970 = 970s - General History of North America
+980 = 980s - General History of South America
+990 = 990s - General History of Other Areas
diff --git a/config/SolrMarc/translation_maps/composition_era_map.properties b/config/SolrMarc/translation_maps/composition_era_map.properties
new file mode 100644
index 0000000..fb1c8a4
--- /dev/null
+++ b/config/SolrMarc/translation_maps/composition_era_map.properties
@@ -0,0 +1,56 @@
+a = B.C.
+b = B.C.
+c = B.C.
+d = B.C.
+e = 1st Century
+f = 2nd Century
+g = 3rd Century
+h = 4th Century
+i = 5th Century
+j = 6th Century
+k = 7th Century
+l = 8th Century
+m = 9th Century
+n = 10th Century
+o = 11th Century
+p = 12th Century
+q = 13th Century
+r = 14th Century
+s = 15th Century
+t = 16th Century
+u = 17th Century
+v = 18th Century
+v0 = 1700's
+v1 = 1710's
+v2 = 1720's
+v3 = 1730's
+v4 = 1740's
+v5 = 1750's
+v6 = 1760's
+v7 = 1770's
+v8 = 1780's
+v9 = 1790's
+w = 19th Century
+w0 = 1800's
+w1 = 1810's
+w2 = 1820's
+w3 = 1830's
+w4 = 1840's
+w5 = 1850's
+w6 = 1860's
+w7 = 1870's
+w8 = 1880's
+w9 = 1890's
+x = 20th Century
+x0 = 1900's
+x1 = 1910's
+x2 = 1920's
+x3 = 1930's
+x4 = 1940's
+x5 = 1950's
+x6 = 1960's
+x7 = 1970's
+x8 = 1980's
+x9 = 1990's
+y = 21th Century
+y0 = 2000's
diff --git a/config/SolrMarc/translation_maps/country_map.properties b/config/SolrMarc/translation_maps/country_map.properties
new file mode 100644
index 0000000..fea6665
--- /dev/null
+++ b/config/SolrMarc/translation_maps/country_map.properties
@@ -0,0 +1,379 @@
+# Map 3 letter Country/Location Code (in 008, bytes 15-17) to User Friendly Name
+# includes discontinued codes, because they're probably in our data
+
+#Two-character codes are left justified and the unused position contains a blank
+
+aa = Albania
+abc = Alberta, Canada
+ac = Ashmore and Cartier Islands
+aca = Australian Capital Territory
+ae = Algeria
+af = Afghanistan
+ag = Argentina
+ai = Anguilla
+ai = Armenia (Republic)
+air = Armenia (Republic)
+aj = Azerbaijan
+ajr = Azerbaijan
+aku = Alaska, United States
+alu = Alabama, United States
+am = Anguilla
+an = Andorra
+ao = Angola
+aq = Antigua and Barbuda
+aru = Arkansas, United States
+as = American Samoa
+at = Australia
+au = Austria
+aw = Aruba
+ay = Antarctica
+azu = Arizona, United States
+ba = Bahrain
+bb = Barbados
+bcc = British Columbia, Canada
+bd = Burundi
+be = Belgium
+bf = Bahamas
+bg = Bangladesh
+bh = Belize
+bi = British Indian Ocean Territory
+bl = Brazil
+bm = Bermuda Islands
+bn = Bosnia and Hercegovina
+bo = Bolivia
+bp = Solomon Islands
+br = Burma
+bs = Botswana
+bt = Bhutan
+bu = Bulgaria
+bv = Bouvet Island
+bw = Belarus
+bwr = Belarus
+bx = Brunei
+cau = California, United States
+cb = Cambodia
+cc = China
+cd = Chad
+ce = Sri Lanka
+cf = Congo (Brazzaville)
+cg = Congo (Democratic Republic)
+ch = China (Republic : 1949- )
+ci = Croatia
+cj = Cayman Islands
+ck = Colombia
+cl = Chile
+cm = Cameroon
+cn = Canada
+cou = Colorado, United States
+cp = Canton and Enderbury Islands
+cq = Comoros
+cr = Costa Rica
+cs = Czechoslovakia
+ctu = Connecticut, United States
+cu = Cuba
+cv = Cape Verde
+cw = Cook Islands
+cx = Central African Republic
+cy = Cyprus
+cz = Canal Zone
+dcu = District of Columbia, United States
+deu = Delaware, United States
+dk = Denmark
+dm = Benin
+dq = Dominica
+dr = Dominican Republic
+ea = Eritrea
+ec = Ecuador
+eg = Equatorial Guinea
+em = East Timor
+enk = England, United Kingdom
+er = Estonia
+err = Estonia
+es = El Salvador
+et = Ethiopia
+fa = Faroe Islands
+fg = French Guiana
+fi = Finland
+fj = Fiji
+fk = Falkland Islands
+flu = Florida, United States
+fm = Micronesia (Federated States)
+fp = French Polynesia
+fr = France
+fs = Terres australes et antarctiques françaises
+ft = Djibouti
+gau = Georgia, United States
+gb = Kiribati
+gd = Grenada
+ge = Germany (East)
+gh = Ghana
+gi = Gibraltar
+gl = Greenland
+gm = Gambia
+gn = Gilbert and Ellice Islands
+go = Gabon
+gp = Guadeloupe
+gr = Greece
+gs = Georgia (Republic)
+gsr = Georgia (Republic)
+gt = Guatemala
+gu = Guam
+gv = Guinea
+gw = Germany
+gy = Guyana
+gz = Gaza Strip
+hiu = Hawaii, United States
+hk = Hong Kong
+hm = Heard and McDonald Islands
+ho = Honduras
+ht = Haiti
+hu = Hungary
+iau = Iowa, United States
+ic = Iceland
+idu = Idaho, United States
+ie = Ireland
+ii = India
+ilu = Illinois, United States
+inu = Indiana, United States
+io = Indonesia
+iq = Iraq
+ir = Iran
+is = Israel
+it = Italy
+iu = Israel-Syria Demilitarized Zones
+iv = Côte d'Ivoire
+iw = Israel-Jordan Demilitarized Zones
+iy = Iraq-Saudi Arabia Neutral Zone
+ja = Japan
+ji = Johnston Atoll
+jm = Jamaica
+jn = Jan Mayen
+jo = Jordan
+ke = Kenya
+kg = Kyrgyzstan
+kgr = Kyrgyzstan
+kn = Korea (North)
+ko = Korea (South)
+ksu = Kansas, United States
+ku = Kuwait
+kv = Kosovo
+kyu = Kentucky, United States
+kz = Kazakhstan
+kzr = Kazakhstan
+lau = Louisiana, United States
+lb = Liberia
+le = Lebanon
+lh = Liechtenstein
+li = Lithuania
+lir = Lithuania
+ln = Central and Southern Line Islands
+lo = Lesotho
+ls = Laos
+lu = Luxembourg
+lv = Latvia
+lvr = Latvia
+ly = Libya
+mau = Massachusetts, United States
+mbc = Manitoba, Canada
+mc = Monaco
+mdu = Maryland, United States
+meu = Maine, United States
+mf = Mauritius
+mg = Madagascar
+mh = Macao
+miu = Michigan, United States
+mj = Montserrat
+mk = Oman
+ml = Mali
+mm = Malta
+mnu = Minnesota, United States
+mo = Montenegro
+mou = Missouri, United States
+mp = Mongolia
+mq = Martinique
+mr = Morocco
+msu = Mississippi, United States
+mtu = Montana, United States
+mu = Mauritania
+mv = Moldova
+mvr = Moldova
+mw = Malawi
+mx = Mexico
+my = Malaysia
+mz = Mozambique
+na = Netherlands Antilles
+nbu = Nebraska, United States
+ncu = North Carolina, United States
+ndu = North Dakota, United States
+ne = Netherlands
+nfc = Newfoundland and Labrador, Canada
+ng = Niger
+nhu = New Hampshire, United States
+nik = Northern Ireland, United Kingdom
+nju = New Jersey, United States
+nkc = New Brunswick, Canada
+nl = New Caledonia
+nm = Northern Mariana Islands
+nmu = New Mexico, United States
+nn = Vanuatu
+no = Norway
+np = Nepal
+nq = Nicaragua
+nr = Nigeria
+nsc = Nova Scotia, Canada
+ntc = Northwest Territories, Canada
+nu = Nauru
+nuc = Nunavut, Canada
+nvu = Nevada, United States
+nw = Northern Mariana Islands
+nx = Norfolk Island
+nyu = New York (State), United States
+nz = New Zealand
+ohu = Ohio, United States
+oku = Oklahoma, United States
+onc = Ontario, Canada
+oru = Oregon, United States
+ot = Mayotte
+pau = Pennsylvania, United States
+pc = Pitcairn Island
+pe = Peru
+pf = Paracel Islands
+pg = Guinea-Bissau
+ph = Philippines
+pic = Prince Edward Island, Canada
+pk = Pakistan
+pl = Poland
+pn = Panama
+po = Portugal
+pp = Papua New Guinea
+pr = Puerto Rico
+pt = Portuguese Timor
+pw = Palau
+py = Paraguay
+qa = Qatar
+qea = Queensland, Australia
+quc = Québec (Province), Canada
+rb = Serbia
+re = Réunion
+rh = Zimbabwe
+riu = Rhode Island, United States
+rm = Romania
+ru = Russia (Federation)
+rur = Russia (Federation)
+rw = Rwanda
+ry = Ryukyu Islands, Southern
+sa = South Africa
+sb = Svalbard
+scu = South Carolina, United States
+sdu = South Dakota, United States
+se = Seychelles
+sf = Sao Tome and Principe
+sg = Senegal
+sh = Spanish North Africa
+si = Singapore
+sj = Sudan
+sk = Sikkim
+sl = Sierra Leone
+sm = San Marino
+snc = Saskatchewan, Canada
+so = Somalia
+sp = Spain
+sq = Swaziland
+sr = Surinam
+ss = Western Sahara
+stk = Scotland, United Kingdom
+su = Saudi Arabia
+sv = Swan Islands
+sw = Sweden
+sx = Namibia
+sy = Syria
+sz = Switzerland
+ta = Tajikistan
+tar = Tajikistan
+tc = Turks and Caicos Islands
+tg = Togo
+th = Thailand
+ti = Tunisia
+tk = Turkmenistan
+tkr = Turkmenistan
+tl = Tokelau
+tma = Tasmania, Australia
+tnu = Tennessee, United States
+to = Tonga
+tr = Trinidad and Tobago
+ts = United Arab Emirates
+tt = Trust Territory of the Pacific Islands
+tu = Turkey
+tv = Tuvalu
+txu = Texas, United States
+tz = Tanzania
+ua = Egypt
+uc = United States Misc. Caribbean Islands
+ug = Uganda
+ui = United Kingdom Misc. Islands
+uik = United Kingdom Misc. Islands
+uk = United Kingdom
+un = Ukraine
+unr = Ukraine
+up = United States Misc. Pacific Islands
+ur = Soviet Union
+us = United States
+utu = Utah, United States
+uv = Burkina Faso
+uy = Uruguay
+uz = Uzbekistan
+uzr = Uzbekistan
+vau = Virginia, United States
+vb = British Virgin Islands
+vc = Vatican City
+ve = Venezuela
+vi = Virgin Islands of the United States
+vm = Vietnam
+vn = Vietnam, North
+#vp = Various places
+vra = Victoria, Australia
+vs = Vietnam, South
+vtu = Vermont, United States
+wau = Washington (State), United States
+wb = West Berlin
+wea = Western Australia
+wf = Wallis and Futuna
+wiu = Wisconsin, United States
+wj = West Bank of the Jordan River
+wk = Wake Island
+wlk = Wales, United Kingdom
+ws = Samoa
+wvu = West Virginia, United States
+wyu = Wyoming, United States
+xa = Christmas Island (Indian Ocean)
+xb = Cocos (Keeling) Islands
+xc = Maldives
+xd = Saint Kitts-Nevis
+xe = Marshall Islands
+xf = Midway Islands
+xga = Coral Sea Islands Territory, Australia
+xh = Niue
+xi = Saint Kitts-Nevis-Anguilla
+xj = Saint Helena
+xk = Saint Lucia
+xl = Saint Pierre and Miquelon
+xm = Saint Vincent and the Grenadines
+xn = Macedonia
+xna = New South Wales, Australia
+xo = Slovakia
+xoa = Northern Territory, Australia
+xp = Spratly Island
+xr = Czech Republic
+xra = South Australia
+xs = South Georgia and the South Sandwich Islands
+xv = Slovenia
+#xx = No place, unknown, or undetermined
+xxc = Canada
+xxk = United Kingdom
+xxr = Soviet Union
+xxu = United States
+ye = Yemen
+ykc = Yukon Territory, Canada
+ys = Yemen (People's Democratic Republic)
+yu = Serbia and Montenegro
+za = Zambia
diff --git a/config/SolrMarc/translation_maps/format_map.properties b/config/SolrMarc/translation_maps/format_map.properties
new file mode 100644
index 0000000..231c089
--- /dev/null
+++ b/config/SolrMarc/translation_maps/format_map.properties
@@ -0,0 +1,50 @@
+#
+# DATA FROM INDEXER = Label
+#
+Atlas = Map
+Map = Map
+TapeCartridge = Software
+ChipCartridge = Software
+DiscCartridge = Software
+TapeCassette = Software
+TapeReel = Software
+FloppyDisk = Software
+CDROM = Software
+Software = Software
+Globe = Globe
+Braille = Braille
+Filmstrip = Video
+Transparency = Slide
+Slide = Slide
+Microfilm = Microfilm
+Collage = Photo
+Drawing = Photo
+Painting = Photo
+Print = Photo
+Photonegative = Photo
+FlashCard = Photo
+Chart = Photo
+Photo = Photo
+MotionPicture = Video
+Kit = Kit
+MusicalScore = Musical Score
+SensorImage = Sensor Image
+SoundDisc = CD
+SoundCassette = Cassette
+SoundRecording = Audio
+VideoCartridge = Video
+VideoDisc = DVD
+VideoCassette = VHS
+VideoReel = Video
+Video = Video
+MusicalScore = Musical Score
+MusicRecording = Audio
+Electronic = Electronic
+PhysicalObject = Physical Object
+Manuscript = Manuscript
+eBook = eBook
+Book = Book
+Newspaper = Newspaper
+Journal = Journal
+Serial = Serial
+Unknown = Unknown
\ No newline at end of file
diff --git a/config/SolrMarc/translation_maps/instrument_map.properties b/config/SolrMarc/translation_maps/instrument_map.properties
new file mode 100644
index 0000000..5e0f842
--- /dev/null
+++ b/config/SolrMarc/translation_maps/instrument_map.properties
@@ -0,0 +1,101 @@
+# Mapping of Instrument Codes from 048 to User Friendly Term
+
+ba = Horn
+bb = Trumpet
+bc = Cornet
+bd = Trombone
+be = Tuba
+bf = Baritone horn
+bn = Brass, Unspecified
+bu = Brass, Unknown
+by = Brass, Ethnic
+bz = Brass, Other
+ca = Choruses, Mixed
+cb = Chorus, Women's
+cc = Choruses, Men's
+cd = Choruses, Children's
+cn = Choruses, Unspecified
+cu = Chorus, Unknown
+cy = Choruses, Ethnic
+ea = Synthesizer
+eb = Electronic Tape
+ec = Computer
+ed = Ondes Martinot
+en = Electronic, Unspecified
+eu = Electronic, Unknown
+ez = Electronic, Other
+ka = Piano
+kb = Organ
+kc = Harpsichord
+kd = Clavichord
+ke = Continuo
+kf = Celeste
+kn = Keyboard, Unspecified
+ku = Keyboard, Unknown
+ky = Keyboard, Ethnic
+kz = Keyboard, Other
+oa = Full orchestra
+ob = Chamber orchestra
+oc = String orchestra
+od = Band
+oe = Dance orchestra
+of = Brass band
+on = Larger ensemble, Unspecified
+ou = Larger ensemble, Unknown
+oy = Larger ensemble, Ethnic
+oz = Larger ensemble, Other
+pa = Timpani
+pb = Xylophone
+pc = Marimba
+pd = Drum
+pn = Percussion, Unspecified
+pu = Percussion, Unknown
+py = Percussion, Ethnic
+pz = Percussion, Other
+sa = Violin
+sb = Viola
+sc = Violoncello
+sd = Double bass
+se = Viol
+sf = Viola d'amore
+sg = Viola da gamba
+sn = Bowed Strings, Unspecified
+su = Bowed Strings, Unknown
+sy = Bowed Strings, Ethnic
+sz = Bowed Strings, Other
+ta = Harp
+tb = Guitar
+tc = Lute
+td = Mandolin
+tn = Plucked Strings, Unspecified
+tu = Plucked Strings, Unknown
+ty = Plucked Strings, Ethnic
+tz = Plucked Strings, Other
+va = Soprano voice
+vb = Mezzo soprano voice
+vc = Alto voice
+vd = Tenor voice
+ve = Baritone voice
+vf = Bass voice
+vg = Counter tenor voice
+vh = High voice
+vi = Medium voice
+vj = Low voice
+vn = Voices, Unspecified
+vu = Voices, Unknown
+vy = Voices, Ethnic
+wa = Flute
+wb = Oboe
+wc = Clarinet
+wd = Bassoon
+we = Piccolo
+wf = English horn
+wg = Bass clarinet
+wh = Recorder
+wi = Saxophone
+wn = Woodwinds, Unspecified
+wu = Woodwinds, Unknown
+wy = Woodwinds, Ethnic
+wz = Woodwinds, Other
+zn = Unspecified instruments
+zu = Unknown
diff --git a/config/SolrMarc/translation_maps/language_map.properties b/config/SolrMarc/translation_maps/language_map.properties
new file mode 100644
index 0000000..13e28dd
--- /dev/null
+++ b/config/SolrMarc/translation_maps/language_map.properties
@@ -0,0 +1,490 @@
+# Map Language Codes (in 008[35-37], 041) to User Friendly Term
+
+??? = null
+aar = Afar
+abk = Abkhaz
+ace = Achinese
+ach = Acoli
+ada = Adangme
+ady = Adygei
+afa = Afroasiatic (Other)
+afh = Afrihili (Artificial language)
+afr = Afrikaans
+ajm = Aljamia
+aka = Akan
+akk = Akkadian
+alb = Albanian
+ale = Aleut
+alg = Algonquian (Other)
+amh = Amharic
+ang = English, Old (ca. 450-1100)
+apa = Apache languages
+ara = Arabic
+arc = Aramaic
+arg = Aragonese Spanish
+arm = Armenian
+arn = Mapuche
+arp = Arapaho
+art = Artificial (Other)
+arw = Arawak
+asm = Assamese
+ast = Bable
+ath = Athapascan (Other)
+aus = Australian languages
+ava = Avaric
+ave = Avestan
+awa = Awadhi
+aym = Aymara
+aze = Azerbaijani
+bad = Banda
+bai = Bamileke languages
+bak = Bashkir
+bal = Baluchi
+bam = Bambara
+ban = Balinese
+baq = Basque
+bas = Basa
+bat = Baltic (Other)
+bej = Beja
+bel = Belarusian
+bem = Bemba
+ben = Bengali
+ber = Berber (Other)
+bho = Bhojpuri
+bih = Bihari
+bik = Bikol
+bin = Edo
+bis = Bislama
+bla = Siksika
+bnt = Bantu (Other)
+bos = Bosnian
+bra = Braj
+bre = Breton
+btk = Batak
+bua = Buriat
+bug = Bugis
+bul = Bulgarian
+bur = Burmese
+cad = Caddo
+cai = Central American Indian (Other)
+cam = Khmer
+car = Carib
+cat = Catalan
+cau = Caucasian (Other)
+ceb = Cebuano
+cel = Celtic (Other)
+cha = Chamorro
+chb = Chibcha
+che = Chechen
+chg = Chagatai
+chi = Chinese
+chk = Truk
+chm = Mari
+chn = Chinook jargon
+cho = Choctaw
+chp = Chipewyan
+chr = Cherokee
+chu = Church Slavic
+chv = Chuvash
+chy = Cheyenne
+cmc = Chamic languages
+cop = Coptic
+cor = Cornish
+cos = Corsican
+cpe = Creoles and Pidgins, English-based (Other)
+cpf = Creoles and Pidgins, French-based (Other)
+cpp = Creoles and Pidgins, Portuguese-based (Other)
+cre = Cree
+crh = Crimean Tatar
+crp = Creoles and Pidgins (Other)
+cus = Cushitic (Other)
+cze = Czech
+dak = Dakota
+dan = Danish
+dar = Dargwa
+day = Dayak
+del = Delaware
+den = Slave
+dgr = Dogrib
+din = Dinka
+div = Divehi
+doi = Dogri
+dra = Dravidian (Other)
+dua = Duala
+dum = Dutch, Middle (ca. 1050-1350)
+dut = Dutch
+dyu = Dyula
+dzo = Dzongkha
+efi = Efik
+egy = Egyptian
+eka = Ekajuk
+elx = Elamite
+eng = English
+enm = English, Middle (1100-1500)
+epo = Esperanto
+esk = Eskimo languages
+esp = Esperanto
+est = Estonian
+eth = Ethiopic
+ewe = Ewe
+ewo = Ewondo
+fan = Fang
+fao = Faroese
+far = Faroese
+fat = Fanti
+fij = Fijian
+fin = Finnish
+fiu = Finno-Ugrian (Other)
+fon = Fon
+fre = French
+fri = Frisian
+frm = French, Middle (ca. 1400-1600)
+fro = French, Old (ca. 842-1400)
+fry = Frisian
+ful = Fula
+fur = Friulian
+gaa = Ga
+gae = Scottish Gaelic
+gag = Galician
+gal = Oromo
+gay = Gayo
+gba = Gbaya
+gem = Germanic (Other)
+geo = Georgian
+ger = German
+gez = Ethiopic
+gil = Gilbertese
+gla = Scottish Gaelic
+gle = Irish
+glg = Galician
+glv = Manx
+gmh = German, Middle High (ca. 1050-1500)
+goh = German, Old High (ca. 750-1050)
+gon = Gondi
+gor = Gorontalo
+got = Gothic
+grb = Grebo
+grc = Greek, Ancient (to 1453)
+gre = Greek, Modern (1453- )
+grn = Guarani
+gua = Guarani
+guj = Gujarati
+gwi = Gwich'in
+hai = Haida
+hat = Haitian French Creole
+hau = Hausa
+haw = Hawaiian
+heb = Hebrew
+her = Herero
+hil = Hiligaynon
+him = Himachali
+hin = Hindi
+hit = Hittite
+hmn = Hmong
+hmo = Hiri Motu
+hun = Hungarian
+hup = Hupa
+iba = Iban
+ibo = Igbo
+ice = Icelandic
+ido = Ido
+iii = Sichuan Yi
+ijo = Ijo
+iku = Inuktitut
+ile = Interlingue
+ilo = Iloko
+ina = Interlingua (International Auxiliary Language Association)
+inc = Indic (Other)
+ind = Indonesian
+ine = Indo-European (Other)
+inh = Ingush
+int = Interlingua (International Auxiliary Language Association)
+ipk = Inupiaq
+ira = Iranian (Other)
+iri = Irish
+iro = Iroquoian (Other)
+ita = Italian
+jav = Javanese
+jpn = Japanese
+jpr = Judeo-Persian
+jrb = Judeo-Arabic
+kaa = Kara-Kalpak
+kab = Kabyle
+kac = Kachin
+kal = Kalatdlisut
+kam = Kamba
+kan = Kannada
+kar = Karen
+kas = Kashmiri
+kau = Kanuri
+kaw = Kawi
+kaz = Kazakh
+kbd = Kabardian
+kha = Khasi
+khi = Khoisan (Other)
+khm = Khmer
+kho = Khotanese
+kik = Kikuyu
+kin = Kinyarwanda
+kir = Kyrgyz
+kmb = Kimbundu
+kok = Konkani
+kom = Komi
+kon = Kongo
+kor = Korean
+kos = Kusaie
+kpe = Kpelle
+kro = Kru
+kru = Kurukh
+kua = Kuanyama
+kum = Kumyk
+kur = Kurdish
+kus = Kusaie
+kut = Kutenai
+lad = Ladino
+lah = Lahnda
+lam = Lamba
+lan = Occitan (post-1500)
+lao = Lao
+lap = Sami
+lat = Latin
+lav = Latvian
+lez = Lezgian
+lim = Limburgish
+lin = Lingala
+lit = Lithuanian
+lol = Mongo-Nkundu
+loz = Lozi
+ltz = Letzeburgesch
+lua = Luba-Lulua
+lub = Luba-Katanga
+lug = Ganda
+lui = Luiseno
+lun = Lunda
+luo = Luo (Kenya and Tanzania)
+lus = Lushai
+mac = Macedonian
+mad = Madurese
+mag = Magahi
+mah = Marshallese
+mai = Maithili
+mak = Makasar
+mal = Malayalam
+man = Mandingo
+mao = Maori
+map = Austronesian (Other)
+mar = Marathi
+mas = Masai
+max = Manx
+may = Malay
+mdr = Mandar
+men = Mende
+mga = Irish, Middle (ca. 1100-1550)
+mic = Micmac
+min = Minangkabau
+mis = Miscellaneous languages
+mkh = Mon-Khmer (Other)
+mla = Malagasy
+mlg = Malagasy
+mlt = Maltese
+mnc = Manchu
+mni = Manipuri
+mno = Manobo languages
+moh = Mohawk
+mol = Moldavian
+mon = Mongolian
+mos = Moore
+mul = Multiple languages
+mun = Munda (Other)
+mus = Creek
+mwr = Marwari
+myn = Mayan languages
+nah = Nahuatl
+nai = North American Indian (Other)
+nap = Neapolitan Italian
+nau = Nauru
+nav = Navajo
+nbl = Ndebele (South Africa)
+nde = Ndebele (Zimbabwe)
+ndo = Ndonga
+nds = Low German
+nep = Nepali
+new = Newari
+nia = Nias
+nic = Niger-Kordofanian (Other)
+niu = Niuean
+nno = Norwegian (Nynorsk)
+nob = Norwegian (Bokmal)
+nog = Nogai
+non = Old Norse
+nor = Norwegian
+nso = Northern Sotho
+nub = Nubian languages
+nya = Nyanja
+nym = Nyamwezi
+nyn = Nyankole
+nyo = Nyoro
+nzi = Nzima
+oci = Occitan (post-1500)
+oji = Ojibwa
+ori = Oriya
+orm = Oromo
+osa = Osage
+oss = Ossetic
+ota = Turkish, Ottoman
+oto = Otomian languages
+paa = Papuan (Other)
+pag = Pangasinan
+pal = Pahlavi
+pam = Pampanga
+pan = Panjabi
+pap = Papiamento
+pau = Palauan
+peo = Old Persian (ca. 600-400 B.C.)
+per = Persian
+phi = Philippine (Other)
+phn = Phoenician
+pli = Pali
+pol = Polish
+pon = Ponape
+por = Portuguese
+pra = Prakrit languages
+pro = Provencal (to 1500)
+pus = Pushto
+que = Quechua
+raj = Rajasthani
+rap = Rapanui
+rar = Rarotongan
+roa = Romance (Other)
+roh = Raeto-Romance
+rom = Romani
+rum = Romanian
+run = Rundi
+rus = Russian
+sad = Sandawe
+sag = Sango (Ubangi Creole)
+sah = Yakut
+sai = South American Indian (Other)
+sal = Salishan languages
+sam = Samaritan Aramaic
+san = Sanskrit
+sao = Samoan
+sas = Sasak
+sat = Santali
+scc = Serbian
+sco = Scots
+scr = Croatian
+sel = Selkup
+sem = Semitic (Other)
+sga = Irish, Old (to 1100)
+sgn = Sign languages
+shn = Shan
+sho = Shona
+sid = Sidamo
+sin = Sinhalese
+sio = Siouan (Other)
+sit = Sino-Tibetan (Other)
+sla = Slavic (Other)
+slo = Slovak
+slv = Slovenian
+sma = Southern Sami
+sme = Northern Sami
+smi = Sami
+smj = Lule Sami
+smn = Inari Sami
+smo = Samoan
+sms = Skolt Sami
+sna = Shona
+snd = Sindhi
+snh = Sinhalese
+snk = Soninke
+sog = Sogdian
+som = Somali
+son = Songhai
+sot = Sotho
+spa = Spanish
+srd = Sardinian
+srr = Serer
+ssa = Nilo-Saharan (Other)
+sso = Sotho
+ssw = Swazi
+suk = Sukuma
+sun = Sundanese
+sus = Susu
+sux = Sumerian
+swa = Swahili
+swe = Swedish
+swz = Swazi
+syr = Syriac
+tag = Tagalog
+tah = Tahitian
+tai = Tai (Other)
+taj = Tajik
+tam = Tamil
+tar = Tatar
+tat = Tatar
+tel = Telugu
+tem = Temne
+ter = Terena
+tet = Tetum
+tgk = Tajik
+tgl = Tagalog
+tha = Thai
+tib = Tibetan
+tig = Tigre
+tir = Tigrinya
+tiv = Tiv
+tkl = Tokelauan
+tli = Tlingit
+tmh = Tamashek
+tog = Tonga (Nyasa)
+ton = Tongan
+tpi = Tok Pisin
+tru = Truk
+tsi = Tsimshian
+tsn = Tswana
+tso = Tsonga
+tsw = Tswana
+tuk = Turkmen
+tum = Tumbuka
+tup = Tupi languages
+tur = Turkish
+tut = Altaic (Other)
+tvl = Tuvaluan
+twi = Twi
+tyv = Tuvinian
+udm = Udmurt
+uga = Ugaritic
+uig = Uighur
+ukr = Ukrainian
+umb = Umbundu
+und = Undetermined
+urd = Urdu
+uzb = Uzbek
+vai = Vai
+ven = Venda
+vie = Vietnamese
+vol = Volapuk
+vot = Votic
+wak = Wakashan languages
+wal = Walamo
+war = Waray
+was = Washo
+wel = Welsh
+wen = Sorbian languages
+wln = Walloon
+wol = Wolof
+xal = Kalmyk
+xho = Xhosa
+yao = Yao (Africa)
+yap = Yapese
+yid = Yiddish
+yor = Yoruba
+ypk = Yupik languages
+zap = Zapotec
+zen = Zenaga
+zha = Zhuang
+znd = Zande
+zul = Zulu
+zun = Zuni
+zxx = null
diff --git a/config/application.rb b/config/application.rb
new file mode 100644
index 0000000..a330935
--- /dev/null
+++ b/config/application.rb
@@ -0,0 +1,26 @@
+require File.expand_path('../boot', __FILE__)
+
+require 'rails/all'
+
+# Require the gems listed in Gemfile, including any gems
+# you've limited to :test, :development, or :production.
+Bundler.require(*Rails.groups)
+
+module Colligo
+ class Application < Rails::Application
+ # Settings in config/environments/* take precedence over those specified here.
+ # Application configuration should go into files in config/initializers
+ # -- all .rb files in that directory are automatically loaded.
+
+ # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
+ # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
+ # config.time_zone = 'Central Time (US & Canada)'
+
+ # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
+ # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
+ # config.i18n.default_locale = :de
+
+ # Do not swallow errors in after_commit/after_rollback callbacks.
+ config.active_record.raise_in_transactional_callbacks = true
+ end
+end
diff --git a/config/blacklight.yml b/config/blacklight.yml
new file mode 100644
index 0000000..11cbcad
--- /dev/null
+++ b/config/blacklight.yml
@@ -0,0 +1,21 @@
+# = jetty_path key
+# each environment can have a jetty_path with absolute or relative
+# (to app root) path to a jetty/solr install. This is used
+# by the rake tasks that start up solr automatically for testing
+# and by rake solr:marc:index.
+#
+# jetty_path is not used by a running Blacklight application
+# at all. In general you do NOT need to deploy solr in Jetty, you can deploy it
+# however you want.
+# jetty_path is only required for rake tasks that need to know
+# how to start up solr, generally for automated testing.
+
+development:
+ adapter: solr
+ url: <%= ENV['SOLR_URL'] || "http://127.0.0.1:8984/solr/blacklight-core" %>
+test: &test
+ adapter: solr
+ url: <%= "http://127.0.0.1:#{ENV['TEST_JETTY_PORT'] || 8888}/solr/blacklight-core" %>
+production:
+ adapter: solr
+ url: <%= ENV['SOLR_URL'] || "http://127.0.0.1:8983/solr/blacklight-core" %>
diff --git a/config/boot.rb b/config/boot.rb
new file mode 100644
index 0000000..6b750f0
--- /dev/null
+++ b/config/boot.rb
@@ -0,0 +1,3 @@
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
+
+require 'bundler/setup' # Set up gems listed in the Gemfile.
diff --git a/config/database.yml b/config/database.yml
new file mode 100644
index 0000000..1c1a37c
--- /dev/null
+++ b/config/database.yml
@@ -0,0 +1,25 @@
+# SQLite version 3.x
+# gem install sqlite3
+#
+# Ensure the SQLite 3 gem is defined in your Gemfile
+# gem 'sqlite3'
+#
+default: &default
+ adapter: sqlite3
+ pool: 5
+ timeout: 5000
+
+development:
+ <<: *default
+ database: db/development.sqlite3
+
+# Warning: The database defined as "test" will be erased and
+# re-generated from your development database when you run "rake".
+# Do not set this db to the same as development or production.
+test:
+ <<: *default
+ database: db/test.sqlite3
+
+production:
+ <<: *default
+ database: db/production.sqlite3
diff --git a/config/environment.rb b/config/environment.rb
new file mode 100644
index 0000000..ee8d90d
--- /dev/null
+++ b/config/environment.rb
@@ -0,0 +1,5 @@
+# Load the Rails application.
+require File.expand_path('../application', __FILE__)
+
+# Initialize the Rails application.
+Rails.application.initialize!
diff --git a/config/environments/development.rb b/config/environments/development.rb
new file mode 100644
index 0000000..b55e214
--- /dev/null
+++ b/config/environments/development.rb
@@ -0,0 +1,41 @@
+Rails.application.configure do
+ # Settings specified here will take precedence over those in config/application.rb.
+
+ # In the development environment your application's code is reloaded on
+ # every request. This slows down response time but is perfect for development
+ # since you don't have to restart the web server when you make code changes.
+ config.cache_classes = false
+
+ # Do not eager load code on boot.
+ config.eager_load = false
+
+ # Show full error reports and disable caching.
+ config.consider_all_requests_local = true
+ config.action_controller.perform_caching = false
+
+ # Don't care if the mailer can't send.
+ config.action_mailer.raise_delivery_errors = false
+
+ # Print deprecation notices to the Rails logger.
+ config.active_support.deprecation = :log
+
+ # Raise an error on page load if there are pending migrations.
+ config.active_record.migration_error = :page_load
+
+ # Debug mode disables concatenation and preprocessing of assets.
+ # This option may cause significant delays in view rendering with a large
+ # number of complex assets.
+ config.assets.debug = true
+
+ # Asset digests allow you to set far-future HTTP expiration dates on all assets,
+ # yet still be able to expire them through the digest params.
+ config.assets.digest = true
+
+ # Adds additional error checking when serving assets at runtime.
+ # Checks for improperly declared sprockets dependencies.
+ # Raises helpful error messages.
+ config.assets.raise_runtime_errors = true
+
+ # Raises error for missing translations
+ # config.action_view.raise_on_missing_translations = true
+end
diff --git a/config/environments/production.rb b/config/environments/production.rb
new file mode 100644
index 0000000..5c1b32e
--- /dev/null
+++ b/config/environments/production.rb
@@ -0,0 +1,79 @@
+Rails.application.configure do
+ # Settings specified here will take precedence over those in config/application.rb.
+
+ # Code is not reloaded between requests.
+ config.cache_classes = true
+
+ # Eager load code on boot. This eager loads most of Rails and
+ # your application in memory, allowing both threaded web servers
+ # and those relying on copy on write to perform better.
+ # Rake tasks automatically ignore this option for performance.
+ config.eager_load = true
+
+ # Full error reports are disabled and caching is turned on.
+ config.consider_all_requests_local = false
+ config.action_controller.perform_caching = true
+
+ # Enable Rack::Cache to put a simple HTTP cache in front of your application
+ # Add `rack-cache` to your Gemfile before enabling this.
+ # For large-scale production use, consider using a caching reverse proxy like
+ # NGINX, varnish or squid.
+ # config.action_dispatch.rack_cache = true
+
+ # Disable serving static files from the `/public` folder by default since
+ # Apache or NGINX already handles this.
+ config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
+
+ # Compress JavaScripts and CSS.
+ config.assets.js_compressor = :uglifier
+ # config.assets.css_compressor = :sass
+
+ # Do not fallback to assets pipeline if a precompiled asset is missed.
+ config.assets.compile = false
+
+ # Asset digests allow you to set far-future HTTP expiration dates on all assets,
+ # yet still be able to expire them through the digest params.
+ config.assets.digest = true
+
+ # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
+
+ # Specifies the header that your server uses for sending files.
+ # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
+ # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
+
+ # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
+ # config.force_ssl = true
+
+ # Use the lowest log level to ensure availability of diagnostic information
+ # when problems arise.
+ config.log_level = :debug
+
+ # Prepend all log lines with the following tags.
+ # config.log_tags = [ :subdomain, :uuid ]
+
+ # Use a different logger for distributed setups.
+ # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
+
+ # Use a different cache store in production.
+ # config.cache_store = :mem_cache_store
+
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server.
+ # config.action_controller.asset_host = 'http://assets.example.com'
+
+ # Ignore bad email addresses and do not raise email delivery errors.
+ # Set this to true and configure the email server for immediate delivery to raise delivery errors.
+ # config.action_mailer.raise_delivery_errors = false
+
+ # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
+ # the I18n.default_locale when a translation cannot be found).
+ config.i18n.fallbacks = true
+
+ # Send deprecation notices to registered listeners.
+ config.active_support.deprecation = :notify
+
+ # Use default logging formatter so that PID and timestamp are not suppressed.
+ config.log_formatter = ::Logger::Formatter.new
+
+ # Do not dump schema after migrations.
+ config.active_record.dump_schema_after_migration = false
+end
diff --git a/config/environments/test.rb b/config/environments/test.rb
new file mode 100644
index 0000000..1c19f08
--- /dev/null
+++ b/config/environments/test.rb
@@ -0,0 +1,42 @@
+Rails.application.configure do
+ # Settings specified here will take precedence over those in config/application.rb.
+
+ # The test environment is used exclusively to run your application's
+ # test suite. You never need to work with it otherwise. Remember that
+ # your test database is "scratch space" for the test suite and is wiped
+ # and recreated between test runs. Don't rely on the data there!
+ config.cache_classes = true
+
+ # Do not eager load code on boot. This avoids loading your whole application
+ # just for the purpose of running a single test. If you are using a tool that
+ # preloads Rails for running tests, you may have to set it to true.
+ config.eager_load = false
+
+ # Configure static file server for tests with Cache-Control for performance.
+ config.serve_static_files = true
+ config.static_cache_control = 'public, max-age=3600'
+
+ # Show full error reports and disable caching.
+ config.consider_all_requests_local = true
+ config.action_controller.perform_caching = false
+
+ # Raise exceptions instead of rendering exception templates.
+ config.action_dispatch.show_exceptions = false
+
+ # Disable request forgery protection in test environment.
+ config.action_controller.allow_forgery_protection = false
+
+ # Tell Action Mailer not to deliver emails to the real world.
+ # The :test delivery method accumulates sent emails in the
+ # ActionMailer::Base.deliveries array.
+ config.action_mailer.delivery_method = :test
+
+ # Randomize the order test cases are executed.
+ config.active_support.test_order = :random
+
+ # Print deprecation notices to the stderr.
+ config.active_support.deprecation = :stderr
+
+ # Raises error for missing translations
+ # config.action_view.raise_on_missing_translations = true
+end
diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb
new file mode 100644
index 0000000..01ef3e6
--- /dev/null
+++ b/config/initializers/assets.rb
@@ -0,0 +1,11 @@
+# Be sure to restart your server when you modify this file.
+
+# Version of your assets, change this if you want to expire all your assets.
+Rails.application.config.assets.version = '1.0'
+
+# Add additional assets to the asset load path
+# Rails.application.config.assets.paths << Emoji.images_path
+
+# Precompile additional assets.
+# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
+# Rails.application.config.assets.precompile += %w( search.js )
diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb
new file mode 100644
index 0000000..59385cd
--- /dev/null
+++ b/config/initializers/backtrace_silencers.rb
@@ -0,0 +1,7 @@
+# Be sure to restart your server when you modify this file.
+
+# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
+# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
+
+# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
+# Rails.backtrace_cleaner.remove_silencers!
diff --git a/config/initializers/blacklight_initializer.rb b/config/initializers/blacklight_initializer.rb
new file mode 100644
index 0000000..e06007b
--- /dev/null
+++ b/config/initializers/blacklight_initializer.rb
@@ -0,0 +1,7 @@
+# A secret token used to encrypt user_id's in the Bookmarks#export callback URL
+# functionality, for example in Refworks export of Bookmarks. In Rails 4, Blacklight
+# will use the application's secret key base instead.
+#
+
+# Blacklight.secret_key = 'e8fce56ff4dc23229b2027718b363ab02ebf08da5bbe084721719f707c69fa4e12abda5392e7c86162374562503422984d7fe54fabd39a550cdf9a106d3af1a6'
+
diff --git a/config/initializers/config.rb b/config/initializers/config.rb
new file mode 100644
index 0000000..3a382d5
--- /dev/null
+++ b/config/initializers/config.rb
@@ -0,0 +1,3 @@
+Config.setup do |config|
+ config.const_name = "Settings"
+end
diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb
new file mode 100644
index 0000000..7f70458
--- /dev/null
+++ b/config/initializers/cookies_serializer.rb
@@ -0,0 +1,3 @@
+# Be sure to restart your server when you modify this file.
+
+Rails.application.config.action_dispatch.cookies_serializer = :json
diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
new file mode 100644
index 0000000..d6081c3
--- /dev/null
+++ b/config/initializers/devise.rb
@@ -0,0 +1,262 @@
+# Use this hook to configure devise mailer, warden hooks and so forth.
+# Many of these configuration options can be set straight in your model.
+Devise.setup do |config|
+ # The secret key used by Devise. Devise uses this key to generate
+ # random tokens. Changing this key will render invalid all existing
+ # confirmation, reset password and unlock tokens in the database.
+ # Devise will use the `secret_key_base` on Rails 4+ applications as its `secret_key`
+ # by default. You can change it below and use your own secret key.
+ # config.secret_key = 'd7d28cf8301a2952aa7559f4c8a65e57693def335202f76d7585773f06540eea6394da9f18ae5ab0653a87a594a11bb867f43cc419d1d2a1c4a1f00714c52f1f'
+
+ # ==> Mailer Configuration
+ # Configure the e-mail address which will be shown in Devise::Mailer,
+ # note that it will be overwritten if you use your own mailer class
+ # with default "from" parameter.
+ config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com'
+
+ # Configure the class responsible to send e-mails.
+ # config.mailer = 'Devise::Mailer'
+
+ # ==> ORM configuration
+ # Load and configure the ORM. Supports :active_record (default) and
+ # :mongoid (bson_ext recommended) by default. Other ORMs may be
+ # available as additional gems.
+ require 'devise/orm/active_record'
+
+ # ==> Configuration for any authentication mechanism
+ # Configure which keys are used when authenticating a user. The default is
+ # just :email. You can configure it to use [:username, :subdomain], so for
+ # authenticating a user, both parameters are required. Remember that those
+ # parameters are used only when authenticating and not when retrieving from
+ # session. If you need permissions, you should implement that in a before filter.
+ # You can also supply a hash where the value is a boolean determining whether
+ # or not authentication should be aborted when the value is not present.
+ # config.authentication_keys = [:email]
+
+ # Configure parameters from the request object used for authentication. Each entry
+ # given should be a request method and it will automatically be passed to the
+ # find_for_authentication method and considered in your model lookup. For instance,
+ # if you set :request_keys to [:subdomain], :subdomain will be used on authentication.
+ # The same considerations mentioned for authentication_keys also apply to request_keys.
+ # config.request_keys = []
+
+ # Configure which authentication keys should be case-insensitive.
+ # These keys will be downcased upon creating or modifying a user and when used
+ # to authenticate or find a user. Default is :email.
+ config.case_insensitive_keys = [:email]
+
+ # Configure which authentication keys should have whitespace stripped.
+ # These keys will have whitespace before and after removed upon creating or
+ # modifying a user and when used to authenticate or find a user. Default is :email.
+ config.strip_whitespace_keys = [:email]
+
+ # Tell if authentication through request.params is enabled. True by default.
+ # It can be set to an array that will enable params authentication only for the
+ # given strategies, for example, `config.params_authenticatable = [:database]` will
+ # enable it only for database (email + password) authentication.
+ # config.params_authenticatable = true
+
+ # Tell if authentication through HTTP Auth is enabled. False by default.
+ # It can be set to an array that will enable http authentication only for the
+ # given strategies, for example, `config.http_authenticatable = [:database]` will
+ # enable it only for database authentication. The supported strategies are:
+ # :database = Support basic authentication with authentication key + password
+ # config.http_authenticatable = false
+
+ # If 401 status code should be returned for AJAX requests. True by default.
+ # config.http_authenticatable_on_xhr = true
+
+ # The realm used in Http Basic Authentication. 'Application' by default.
+ # config.http_authentication_realm = 'Application'
+
+ # It will change confirmation, password recovery and other workflows
+ # to behave the same regardless if the e-mail provided was right or wrong.
+ # Does not affect registerable.
+ # config.paranoid = true
+
+ # By default Devise will store the user in session. You can skip storage for
+ # particular strategies by setting this option.
+ # Notice that if you are skipping storage for all authentication paths, you
+ # may want to disable generating routes to Devise's sessions controller by
+ # passing skip: :sessions to `devise_for` in your config/routes.rb
+ config.skip_session_storage = [:http_auth]
+
+ # By default, Devise cleans up the CSRF token on authentication to
+ # avoid CSRF token fixation attacks. This means that, when using AJAX
+ # requests for sign in and sign up, you need to get a new CSRF token
+ # from the server. You can disable this option at your own risk.
+ # config.clean_up_csrf_token_on_authentication = true
+
+ # ==> Configuration for :database_authenticatable
+ # For bcrypt, this is the cost for hashing the password and defaults to 10. If
+ # using other encryptors, it sets how many times you want the password re-encrypted.
+ #
+ # Limiting the stretches to just one in testing will increase the performance of
+ # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use
+ # a value less than 10 in other environments. Note that, for bcrypt (the default
+ # encryptor), the cost increases exponentially with the number of stretches (e.g.
+ # a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation).
+ config.stretches = Rails.env.test? ? 1 : 10
+
+ # Setup a pepper to generate the encrypted password.
+ # config.pepper = 'c1740e588d418b156a977de6e46096891c97ca9e165ced72cbaf6aec8389d75ca34416fa5364bf53b38c9c7ba15e5c3487a4fbde84bc6c4596632bec6859ddcf'
+
+ # ==> Configuration for :confirmable
+ # A period that the user is allowed to access the website even without
+ # confirming their account. For instance, if set to 2.days, the user will be
+ # able to access the website for two days without confirming their account,
+ # access will be blocked just in the third day. Default is 0.days, meaning
+ # the user cannot access the website without confirming their account.
+ # config.allow_unconfirmed_access_for = 2.days
+
+ # A period that the user is allowed to confirm their account before their
+ # token becomes invalid. For example, if set to 3.days, the user can confirm
+ # their account within 3 days after the mail was sent, but on the fourth day
+ # their account can't be confirmed with the token any more.
+ # Default is nil, meaning there is no restriction on how long a user can take
+ # before confirming their account.
+ # config.confirm_within = 3.days
+
+ # If true, requires any email changes to be confirmed (exactly the same way as
+ # initial account confirmation) to be applied. Requires additional unconfirmed_email
+ # db field (see migrations). Until confirmed, new email is stored in
+ # unconfirmed_email column, and copied to email column on successful confirmation.
+ config.reconfirmable = true
+
+ # Defines which key will be used when confirming an account
+ # config.confirmation_keys = [:email]
+
+ # ==> Configuration for :rememberable
+ # The time the user will be remembered without asking for credentials again.
+ # config.remember_for = 2.weeks
+
+ # Invalidates all the remember me tokens when the user signs out.
+ config.expire_all_remember_me_on_sign_out = true
+
+ # If true, extends the user's remember period when remembered via cookie.
+ # config.extend_remember_period = false
+
+ # Options to be passed to the created cookie. For instance, you can set
+ # secure: true in order to force SSL only cookies.
+ # config.rememberable_options = {}
+
+ # ==> Configuration for :validatable
+ # Range for password length.
+ config.password_length = 8..72
+
+ # Email regex used to validate email formats. It simply asserts that
+ # one (and only one) @ exists in the given string. This is mainly
+ # to give user feedback and not to assert the e-mail validity.
+ # config.email_regexp = /\A[^@]+@[^@]+\z/
+
+ # ==> Configuration for :timeoutable
+ # The time you want to timeout the user session without activity. After this
+ # time the user will be asked for credentials again. Default is 30 minutes.
+ # config.timeout_in = 30.minutes
+
+ # ==> Configuration for :lockable
+ # Defines which strategy will be used to lock an account.
+ # :failed_attempts = Locks an account after a number of failed attempts to sign in.
+ # :none = No lock strategy. You should handle locking by yourself.
+ # config.lock_strategy = :failed_attempts
+
+ # Defines which key will be used when locking and unlocking an account
+ # config.unlock_keys = [:email]
+
+ # Defines which strategy will be used to unlock an account.
+ # :email = Sends an unlock link to the user email
+ # :time = Re-enables login after a certain amount of time (see :unlock_in below)
+ # :both = Enables both strategies
+ # :none = No unlock strategy. You should handle unlocking by yourself.
+ # config.unlock_strategy = :both
+
+ # Number of authentication tries before locking an account if lock_strategy
+ # is failed attempts.
+ # config.maximum_attempts = 20
+
+ # Time interval to unlock the account if :time is enabled as unlock_strategy.
+ # config.unlock_in = 1.hour
+
+ # Warn on the last attempt before the account is locked.
+ # config.last_attempt_warning = true
+
+ # ==> Configuration for :recoverable
+ #
+ # Defines which key will be used when recovering the password for an account
+ # config.reset_password_keys = [:email]
+
+ # Time interval you can reset your password with a reset password key.
+ # Don't put a too small interval or your users won't have the time to
+ # change their passwords.
+ config.reset_password_within = 6.hours
+
+ # When set to false, does not sign a user in automatically after their password is
+ # reset. Defaults to true, so a user is signed in automatically after a reset.
+ # config.sign_in_after_reset_password = true
+
+ # ==> Configuration for :encryptable
+ # Allow you to use another encryption algorithm besides bcrypt (default). You can use
+ # :sha1, :sha512 or encryptors from others authentication tools as :clearance_sha1,
+ # :authlogic_sha512 (then you should set stretches above to 20 for default behavior)
+ # and :restful_authentication_sha1 (then you should set stretches to 10, and copy
+ # REST_AUTH_SITE_KEY to pepper).
+ #
+ # Require the `devise-encryptable` gem when using anything other than bcrypt
+ # config.encryptor = :sha512
+
+ # ==> Scopes configuration
+ # Turn scoped views on. Before rendering "sessions/new", it will first check for
+ # "users/sessions/new". It's turned off by default because it's slower if you
+ # are using only default views.
+ # config.scoped_views = false
+
+ # Configure the default scope given to Warden. By default it's the first
+ # devise role declared in your routes (usually :user).
+ # config.default_scope = :user
+
+ # Set this configuration to false if you want /users/sign_out to sign out
+ # only the current scope. By default, Devise signs out all scopes.
+ # config.sign_out_all_scopes = true
+
+ # ==> Navigation configuration
+ # Lists the formats that should be treated as navigational. Formats like
+ # :html, should redirect to the sign in page when the user does not have
+ # access, but formats like :xml or :json, should return 401.
+ #
+ # If you have any extra navigational formats, like :iphone or :mobile, you
+ # should add them to the navigational formats lists.
+ #
+ # The "*/*" below is required to match Internet Explorer requests.
+ # config.navigational_formats = ['*/*', :html]
+
+ # The default HTTP method used to sign out a resource. Default is :delete.
+ config.sign_out_via = :get
+
+ # ==> OmniAuth
+ # Add a new OmniAuth provider. Check the wiki for more information on setting
+ # up on your models and hooks.
+ # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo'
+
+ # ==> Warden configuration
+ # If you want to use other strategies, that are not supported by Devise, or
+ # change the failure app, you can configure them inside the config.warden block.
+ #
+ # config.warden do |manager|
+ # manager.intercept_401 = false
+ # manager.default_strategies(scope: :user).unshift :some_external_strategy
+ # end
+
+ # ==> Mountable engine configurations
+ # When using Devise inside an engine, let's call it `MyEngine`, and this engine
+ # is mountable, there are some extra configurations to be taken into account.
+ # The following options are available, assuming the engine is mounted as:
+ #
+ # mount MyEngine, at: '/my_engine'
+ #
+ # The router that invoked `devise_for`, in the example above, would be:
+ # config.router_name = :my_engine
+ #
+ # When using OmniAuth, Devise cannot automatically set OmniAuth path,
+ # so you need to do it manually. For the users scope, it would be:
+ # config.omniauth_path_prefix = '/my_engine/users/auth'
+end
diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb
new file mode 100644
index 0000000..4a994e1
--- /dev/null
+++ b/config/initializers/filter_parameter_logging.rb
@@ -0,0 +1,4 @@
+# Be sure to restart your server when you modify this file.
+
+# Configure sensitive parameters which will be filtered from the log file.
+Rails.application.config.filter_parameters += [:password]
diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb
new file mode 100644
index 0000000..ac033bf
--- /dev/null
+++ b/config/initializers/inflections.rb
@@ -0,0 +1,16 @@
+# Be sure to restart your server when you modify this file.
+
+# Add new inflection rules using the following format. Inflections
+# are locale specific, and you may define rules for as many different
+# locales as you wish. All of these examples are active by default:
+# ActiveSupport::Inflector.inflections(:en) do |inflect|
+# inflect.plural /^(ox)$/i, '\1en'
+# inflect.singular /^(ox)en/i, '\1'
+# inflect.irregular 'person', 'people'
+# inflect.uncountable %w( fish sheep )
+# end
+
+# These inflection rules are supported but not enabled by default:
+# ActiveSupport::Inflector.inflections(:en) do |inflect|
+# inflect.acronym 'RESTful'
+# end
diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb
new file mode 100644
index 0000000..dc18996
--- /dev/null
+++ b/config/initializers/mime_types.rb
@@ -0,0 +1,4 @@
+# Be sure to restart your server when you modify this file.
+
+# Add new mime types for use in respond_to blocks:
+# Mime::Type.register "text/richtext", :rtf
diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb
new file mode 100644
index 0000000..d03504a
--- /dev/null
+++ b/config/initializers/session_store.rb
@@ -0,0 +1,3 @@
+# Be sure to restart your server when you modify this file.
+
+Rails.application.config.session_store :cookie_store, key: '_colligro_session'
diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb
new file mode 100644
index 0000000..33725e9
--- /dev/null
+++ b/config/initializers/wrap_parameters.rb
@@ -0,0 +1,14 @@
+# Be sure to restart your server when you modify this file.
+
+# This file contains settings for ActionController::ParamsWrapper which
+# is enabled by default.
+
+# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
+ActiveSupport.on_load(:action_controller) do
+ wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
+end
+
+# To enable root element in JSON for ActiveRecord objects.
+# ActiveSupport.on_load(:active_record) do
+# self.include_root_in_json = true
+# end
diff --git a/config/jetty.yml b/config/jetty.yml
new file mode 100644
index 0000000..ef0285f
--- /dev/null
+++ b/config/jetty.yml
@@ -0,0 +1,13 @@
+development:
+ startup_wait: 15
+ jetty_port: 8984
+ java_version: ">= 1.7"
+test:
+ startup_wait: 60
+ jetty_port: <%= ENV['TEST_JETTY_PORT'] || 8888 %>
+ <%= ENV['TEST_JETTY_PATH'] ? "jetty_home: " + ENV['TEST_JETTY_PATH'] : '' %>
+ java_version: ">= 1.7"
+production:
+ startup_wait: 15
+ jetty_port: 8983
+ java_version: ">= 1.7"
diff --git a/config/locales/blacklight.en.yml b/config/locales/blacklight.en.yml
new file mode 100644
index 0000000..ff834b2
--- /dev/null
+++ b/config/locales/blacklight.en.yml
@@ -0,0 +1,3 @@
+en:
+ blacklight:
+ application_name: 'Blacklight'
\ No newline at end of file
diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml
new file mode 100644
index 0000000..26a10f2
--- /dev/null
+++ b/config/locales/devise.en.yml
@@ -0,0 +1,60 @@
+# Additional translations at https://github.com/plataformatec/devise/wiki/I18n
+
+en:
+ devise:
+ confirmations:
+ confirmed: "Your email address has been successfully confirmed."
+ send_instructions: "You will receive an email with instructions for how to confirm your email address in a few minutes."
+ send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes."
+ failure:
+ already_authenticated: "You are already signed in."
+ inactive: "Your account is not activated yet."
+ invalid: "Invalid %{authentication_keys} or password."
+ locked: "Your account is locked."
+ last_attempt: "You have one more attempt before your account is locked."
+ not_found_in_database: "Invalid %{authentication_keys} or password."
+ timeout: "Your session expired. Please sign in again to continue."
+ unauthenticated: "You need to sign in or sign up before continuing."
+ unconfirmed: "You have to confirm your email address before continuing."
+ mailer:
+ confirmation_instructions:
+ subject: "Confirmation instructions"
+ reset_password_instructions:
+ subject: "Reset password instructions"
+ unlock_instructions:
+ subject: "Unlock instructions"
+ omniauth_callbacks:
+ failure: "Could not authenticate you from %{kind} because \"%{reason}\"."
+ success: "Successfully authenticated from %{kind} account."
+ passwords:
+ no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided."
+ send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes."
+ send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes."
+ updated: "Your password has been changed successfully. You are now signed in."
+ updated_not_active: "Your password has been changed successfully."
+ registrations:
+ destroyed: "Bye! Your account has been successfully cancelled. We hope to see you again soon."
+ signed_up: "Welcome! You have signed up successfully."
+ signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated."
+ signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked."
+ signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account."
+ update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address."
+ updated: "Your account has been updated successfully."
+ sessions:
+ signed_in: "Signed in successfully."
+ signed_out: "Signed out successfully."
+ already_signed_out: "Signed out successfully."
+ unlocks:
+ send_instructions: "You will receive an email with instructions for how to unlock your account in a few minutes."
+ send_paranoid_instructions: "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes."
+ unlocked: "Your account has been unlocked successfully. Please sign in to continue."
+ errors:
+ messages:
+ already_confirmed: "was already confirmed, please try signing in"
+ confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
+ expired: "has expired, please request a new one"
+ not_found: "not found"
+ not_locked: "was not locked"
+ not_saved:
+ one: "1 error prohibited this %{resource} from being saved:"
+ other: "%{count} errors prohibited this %{resource} from being saved:"
diff --git a/config/locales/en.yml b/config/locales/en.yml
new file mode 100644
index 0000000..0653957
--- /dev/null
+++ b/config/locales/en.yml
@@ -0,0 +1,23 @@
+# Files in the config/locales directory are used for internationalization
+# and are automatically loaded by Rails. If you want to use locales other
+# than English, add the necessary files in this directory.
+#
+# To use the locales, use `I18n.t`:
+#
+# I18n.t 'hello'
+#
+# In views, this is aliased to just `t`:
+#
+# <%= t('hello') %>
+#
+# To use a different locale, set it with `I18n.locale`:
+#
+# I18n.locale = :es
+#
+# This would use the information in config/locales/es.yml.
+#
+# To learn more, please read the Rails Internationalization guide
+# available at http://guides.rubyonrails.org/i18n.html.
+
+en:
+ hello: "Hello world"
diff --git a/config/routes.rb b/config/routes.rb
new file mode 100644
index 0000000..d1816f1
--- /dev/null
+++ b/config/routes.rb
@@ -0,0 +1,60 @@
+Rails.application.routes.draw do
+ Blacklight::Marc.add_routes(self)
+ root to: "catalog#index"
+ blacklight_for :catalog
+ devise_for :users
+ # The priority is based upon order of creation: first created -> highest priority.
+ # See how all your routes lay out with "rake routes".
+
+ # You can have the root of your site routed with "root"
+ # root 'welcome#index'
+
+ # Example of regular route:
+ # get 'products/:id' => 'catalog#view'
+
+ # Example of named route that can be invoked with purchase_url(id: product.id)
+ # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase
+
+ # Example resource route (maps HTTP verbs to controller actions automatically):
+ # resources :products
+
+ # Example resource route with options:
+ # resources :products do
+ # member do
+ # get 'short'
+ # post 'toggle'
+ # end
+ #
+ # collection do
+ # get 'sold'
+ # end
+ # end
+
+ # Example resource route with sub-resources:
+ # resources :products do
+ # resources :comments, :sales
+ # resource :seller
+ # end
+
+ # Example resource route with more complex sub-resources:
+ # resources :products do
+ # resources :comments
+ # resources :sales do
+ # get 'recent', on: :collection
+ # end
+ # end
+
+ # Example resource route with concerns:
+ # concern :toggleable do
+ # post 'toggle'
+ # end
+ # resources :posts, concerns: :toggleable
+ # resources :photos, concerns: :toggleable
+
+ # Example resource route within a namespace:
+ # namespace :admin do
+ # # Directs /admin/products/* to Admin::ProductsController
+ # # (app/controllers/admin/products_controller.rb)
+ # resources :products
+ # end
+end
diff --git a/config/secrets.yml b/config/secrets.yml
new file mode 100644
index 0000000..5edc316
--- /dev/null
+++ b/config/secrets.yml
@@ -0,0 +1,22 @@
+# Be sure to restart your server when you modify this file.
+
+# Your secret key is used for verifying the integrity of signed cookies.
+# If you change this key, all old signed cookies will become invalid!
+
+# Make sure the secret is at least 30 characters and all random,
+# no regular words or you'll be exposed to dictionary attacks.
+# You can use `rake secret` to generate a secure secret key.
+
+# Make sure the secrets in this file are kept private
+# if you're sharing your code publicly.
+
+development:
+ secret_key_base: 5b22496887dadbaf5e5c3fed52a11526f1508ff8b4e5356fe57dcef86ffa1af88dbf124f6b974f0503915cd86c259c4f591db98369cef580745785ae5ad32982
+
+test:
+ secret_key_base: 5f35e4f59f6966369185fb9eb33ccbf6969c02b04b0fab939dae15ac119bcedfb10cb6d8e76b0ff9e6e956ddab77cf73ea8f211678ee51db8434af770f6965dd
+
+# Do not keep production secrets in the repository,
+# instead read values from the environment.
+production:
+ secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
diff --git a/config/settings.yml b/config/settings.yml
new file mode 100644
index 0000000..e69de29
diff --git a/config/settings/development.yml b/config/settings/development.yml
new file mode 100644
index 0000000..e69de29
diff --git a/config/settings/production.yml b/config/settings/production.yml
new file mode 100644
index 0000000..e69de29
diff --git a/config/settings/test.yml b/config/settings/test.yml
new file mode 100644
index 0000000..e69de29
diff --git a/db/migrate/20151117173554_create_searches.blacklight.rb b/db/migrate/20151117173554_create_searches.blacklight.rb
new file mode 100644
index 0000000..8bc708f
--- /dev/null
+++ b/db/migrate/20151117173554_create_searches.blacklight.rb
@@ -0,0 +1,19 @@
+# This migration comes from blacklight (originally 20140202020201)
+# -*- encoding : utf-8 -*-
+class CreateSearches < ActiveRecord::Migration
+ def self.up
+ create_table :searches do |t|
+ t.text :query_params
+ t.integer :user_id
+ t.string :user_type
+
+ t.timestamps
+ end
+
+ add_index :searches, :user_id
+ end
+
+ def self.down
+ drop_table :searches
+ end
+end
diff --git a/db/migrate/20151117173555_create_bookmarks.blacklight.rb b/db/migrate/20151117173555_create_bookmarks.blacklight.rb
new file mode 100644
index 0000000..069e691
--- /dev/null
+++ b/db/migrate/20151117173555_create_bookmarks.blacklight.rb
@@ -0,0 +1,18 @@
+# This migration comes from blacklight (originally 20140202020202)
+# -*- encoding : utf-8 -*-
+class CreateBookmarks < ActiveRecord::Migration
+ def self.up
+ create_table :bookmarks do |t|
+ t.integer :user_id, :null=>false
+ t.string :user_type
+ t.string :document_id
+ t.string :title
+ t.timestamps
+ end
+ end
+
+ def self.down
+ drop_table :bookmarks
+ end
+
+end
diff --git a/db/migrate/20151117173556_add_polymorphic_type_to_bookmarks.blacklight.rb b/db/migrate/20151117173556_add_polymorphic_type_to_bookmarks.blacklight.rb
new file mode 100644
index 0000000..16a02a8
--- /dev/null
+++ b/db/migrate/20151117173556_add_polymorphic_type_to_bookmarks.blacklight.rb
@@ -0,0 +1,9 @@
+# This migration comes from blacklight (originally 20140320000000)
+# -*- encoding : utf-8 -*-
+class AddPolymorphicTypeToBookmarks < ActiveRecord::Migration
+ def change
+ add_column(:bookmarks, :document_type, :string)
+
+ add_index :bookmarks, :user_id
+ end
+end
diff --git a/db/migrate/20151117173558_devise_create_users.rb b/db/migrate/20151117173558_devise_create_users.rb
new file mode 100644
index 0000000..74adf30
--- /dev/null
+++ b/db/migrate/20151117173558_devise_create_users.rb
@@ -0,0 +1,42 @@
+class DeviseCreateUsers < ActiveRecord::Migration
+ def change
+ create_table(:users) do |t|
+ ## Database authenticatable
+ t.string :email, null: false, default: ""
+ t.string :encrypted_password, null: false, default: ""
+
+ ## Recoverable
+ t.string :reset_password_token
+ t.datetime :reset_password_sent_at
+
+ ## Rememberable
+ t.datetime :remember_created_at
+
+ ## Trackable
+ t.integer :sign_in_count, default: 0, null: false
+ t.datetime :current_sign_in_at
+ t.datetime :last_sign_in_at
+ t.string :current_sign_in_ip
+ t.string :last_sign_in_ip
+
+ ## Confirmable
+ # t.string :confirmation_token
+ # t.datetime :confirmed_at
+ # t.datetime :confirmation_sent_at
+ # t.string :unconfirmed_email # Only if using reconfirmable
+
+ ## Lockable
+ # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
+ # t.string :unlock_token # Only if unlock strategy is :email or :both
+ # t.datetime :locked_at
+
+
+ t.timestamps null: false
+ end
+
+ add_index :users, :email, unique: true
+ add_index :users, :reset_password_token, unique: true
+ # add_index :users, :confirmation_token, unique: true
+ # add_index :users, :unlock_token, unique: true
+ end
+end
diff --git a/db/migrate/20151117173600_add_devise_guests_to_users.rb b/db/migrate/20151117173600_add_devise_guests_to_users.rb
new file mode 100644
index 0000000..445a7d1
--- /dev/null
+++ b/db/migrate/20151117173600_add_devise_guests_to_users.rb
@@ -0,0 +1,15 @@
+class AddDeviseGuestsToUsers < ActiveRecord::Migration
+ def self.up
+ change_table(:users) do |t|
+ ## Database authenticatable
+ t.boolean :guest, :default => false
+ end
+
+ end
+
+ def self.down
+ # By default, we don't want to make any assumption about how to roll back a migration when your
+ # model already existed. Please edit below which fields you would like to remove in this migration.
+ raise ActiveRecord::IrreversibleMigration
+ end
+end
\ No newline at end of file
diff --git a/db/schema.rb b/db/schema.rb
new file mode 100644
index 0000000..6d9522e
--- /dev/null
+++ b/db/schema.rb
@@ -0,0 +1,57 @@
+# encoding: UTF-8
+# This file is auto-generated from the current state of the database. Instead
+# of editing this file, please use the migrations feature of Active Record to
+# incrementally modify your database, and then regenerate this schema definition.
+#
+# Note that this schema.rb definition is the authoritative source for your
+# database schema. If you need to create the application database on another
+# system, you should be using db:schema:load, not running all the migrations
+# from scratch. The latter is a flawed and unsustainable approach (the more migrations
+# you'll amass, the slower it'll run and the greater likelihood for issues).
+#
+# It's strongly recommended that you check this file into your version control system.
+
+ActiveRecord::Schema.define(version: 20151117173600) do
+
+ create_table "bookmarks", force: :cascade do |t|
+ t.integer "user_id", null: false
+ t.string "user_type"
+ t.string "document_id"
+ t.string "title"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.string "document_type"
+ end
+
+ add_index "bookmarks", ["user_id"], name: "index_bookmarks_on_user_id"
+
+ create_table "searches", force: :cascade do |t|
+ t.text "query_params"
+ t.integer "user_id"
+ t.string "user_type"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "searches", ["user_id"], name: "index_searches_on_user_id"
+
+ create_table "users", force: :cascade do |t|
+ t.string "email", default: "", null: false
+ t.string "encrypted_password", default: "", null: false
+ t.string "reset_password_token"
+ t.datetime "reset_password_sent_at"
+ t.datetime "remember_created_at"
+ t.integer "sign_in_count", default: 0, null: false
+ t.datetime "current_sign_in_at"
+ t.datetime "last_sign_in_at"
+ t.string "current_sign_in_ip"
+ t.string "last_sign_in_ip"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.boolean "guest", default: false
+ end
+
+ add_index "users", ["email"], name: "index_users_on_email", unique: true
+ add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
+
+end
diff --git a/db/seeds.rb b/db/seeds.rb
new file mode 100644
index 0000000..4edb1e8
--- /dev/null
+++ b/db/seeds.rb
@@ -0,0 +1,7 @@
+# This file should contain all the record creation needed to seed the database with its default values.
+# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
+#
+# Examples:
+#
+# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
+# Mayor.create(name: 'Emanuel', city: cities.first)
diff --git a/lib/assets/.keep b/lib/assets/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/lib/tasks/.keep b/lib/tasks/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/log/.keep b/log/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/public/404.html b/public/404.html
new file mode 100644
index 0000000..b612547
--- /dev/null
+++ b/public/404.html
@@ -0,0 +1,67 @@
+
+
+
+ The page you were looking for doesn't exist (404)
+
+
+
+
+
+
+
+
+
The page you were looking for doesn't exist.
+
You may have mistyped the address or the page may have moved.
+
+
If you are the application owner check the logs for more information.
+
+
+
diff --git a/public/422.html b/public/422.html
new file mode 100644
index 0000000..a21f82b
--- /dev/null
+++ b/public/422.html
@@ -0,0 +1,67 @@
+
+
+
+ The change you wanted was rejected (422)
+
+
+
+
+
+
+
+
+
The change you wanted was rejected.
+
Maybe you tried to change something you didn't have access to.
+
+
If you are the application owner check the logs for more information.
+
+
+
diff --git a/public/500.html b/public/500.html
new file mode 100644
index 0000000..061abc5
--- /dev/null
+++ b/public/500.html
@@ -0,0 +1,66 @@
+
+
+
+ We're sorry, but something went wrong (500)
+
+
+
+
+
+
+
+
+
We're sorry, but something went wrong.
+
+
If you are the application owner check the logs for more information.
+
+
+
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..e69de29
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 0000000..3c9c7c0
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,5 @@
+# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
+#
+# To ban all spiders from the entire site uncomment the next two lines:
+# User-agent: *
+# Disallow: /
diff --git a/test/controllers/.keep b/test/controllers/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/fixtures/.keep b/test/fixtures/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml
new file mode 100644
index 0000000..937a0c0
--- /dev/null
+++ b/test/fixtures/users.yml
@@ -0,0 +1,11 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+# This model initially had no columns defined. If you add columns to the
+# model remove the '{}' from the fixture names and add the columns immediately
+# below each fixture, per the syntax in the comments below
+#
+one: {}
+# column: value
+#
+two: {}
+# column: value
diff --git a/test/helpers/.keep b/test/helpers/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/integration/.keep b/test/integration/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/mailers/.keep b/test/mailers/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/models/.keep b/test/models/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/test/models/user_test.rb b/test/models/user_test.rb
new file mode 100644
index 0000000..82f61e0
--- /dev/null
+++ b/test/models/user_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class UserTest < ActiveSupport::TestCase
+ # test "the truth" do
+ # assert true
+ # end
+end
diff --git a/test/test_helper.rb b/test/test_helper.rb
new file mode 100644
index 0000000..92e39b2
--- /dev/null
+++ b/test/test_helper.rb
@@ -0,0 +1,10 @@
+ENV['RAILS_ENV'] ||= 'test'
+require File.expand_path('../../config/environment', __FILE__)
+require 'rails/test_help'
+
+class ActiveSupport::TestCase
+ # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
+ fixtures :all
+
+ # Add more helper methods to be used by all tests here...
+end
diff --git a/vendor/assets/javascripts/.keep b/vendor/assets/javascripts/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/vendor/assets/stylesheets/.keep b/vendor/assets/stylesheets/.keep
new file mode 100644
index 0000000..e69de29