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