README.md in curate-0.6.1 vs README.md in curate-0.6.3

- old
+ new

@@ -1,15 +1,36 @@ # Curate [![Version](https://badge.fury.io/rb/curate.png)](http://badge.fury.io/rb/curate) [![Build Status](https://travis-ci.org/projecthydra/curate.png?branch=master)](https://travis-ci.org/projecthydra/curate) [![Coverage Status](https://coveralls.io/repos/projecthydra/curate/badge.png)](https://coveralls.io/r/projecthydra/curate) -## Starting a New Curate Base Application +Curate is a [Rails engine](http://edgeguides.rubyonrails.org/engines.html) leveraging [ProjectHydra](http://projecthydra.org) and [ProjectBlacklight](http://projectblacklight.org/) components to deliver a foundation for an Institutional Repositories. +It is released under the [Apache 2 License](./LICENSE) +* [Starting a new Curate-based Rails application](#starting-a-new-curate-based-application) + * [or install by hand](#or-install-by-hand) +* [Developing and contributing for the Curate gem](#developing-and-contributing-for-the-curate-gem) + * [Prerequisites](#prerequisites) + * [Clone the Curate repository](#clone-the-repo) + * [Jetty](#jetty) + * [Running the specs](#running-the-specs) + * [All of them](#all-of-them) + * [Some of them](#some-of-them) + * [With Zeus](#with-zeus) + * [Contributing back](#contributing-back) + * [Coding Guidelines](#coding-guidelines) + * [Writing Your Code](#writing-your-code) + * [Ruby File Structure](#ruby-file-structure) + * [Source Control Guidelines](#source-control-guidelines) +* [Working on Curate while working on my Application](#working-on-curate-while-working-on-my-application) +* [Standing up your Curate-based Rails application in Production](#standing-up-your-curate-based-rails-application-in-production) + +# Starting a New Curate Based Application + When you generate your new Rails application, you can use Curate's application template: ```bash $ rails new my_curate_application -m https://raw.github.com/ndlib/curate/master/lib/generators/curate/application_template.rb ``` -### Or Install By Hand +## Or Install By Hand Add the following line to your application's Gemfile: gem 'curate' @@ -17,86 +38,149 @@ ```bash $ bundle $ rails generate curate ``` -## Curate Developer Notes +# Developing and Contributing for the Curate gem -### Initial Setup +## Prerequisites -Add this line to `config/environments/production.rb` +You may need to have the following installed ‡ -```ruby - config.assets.precompile += %w( modernizr.js ) -``` +* imagemagick (http://www.imagemagick.org/script/index.php) +* fits.sh (https://code.google.com/p/fits/wiki/installing) +* ffmpeg (optional, http://www.ffmpeg.org/) +* Redis (http://redis.io/) +* rubygems (http://rubygems.org/pages/download) +* ClamAV (http://www.clamav.net/) -### Jetty Commands +‡ - Why "you may need"? Some of these are only optionally used in development and tests; But production will need it. -Install jetty: +## Clone the Curate repository +From the command line: ```bash -$ rake jetty:unzip +git clone https://github.com/projecthydra/curate.git ./path/to/local ``` -Start/stop jetty: +## Jetty -```bash -$ rake jetty:start -$ rake jetty:stop -``` +Curate uses Jetty for development and testing. +You could configure it to use an alternate Fedora and SOLR location, but that is an exercise for the reader. +**The hydra-jetty package should not be use for secure production installations** -Jetty logs: +### Install Jetty +Install jetty, you should only need to do this once (unless you remove the ./jetty directory) ```bash -$ tail -f jetty/jettywrapper.log +$ rake jetty:unzip ``` -### Running the Specs +## Running the Specs -To clean & generate a dummy app that the specs will use for testing: -```bash -$ rake clean -$ rake generate -``` +Inside the Curate directory (i.e. `./path/to/local`): -Make sure jetty is running before you run the specs. +### All of Them -To run the test suite: -```bash -$ rake spec -``` +1. Make sure jetty is running (`rake jetty:start`); It will take a bit to spin up jetty. +1. Make sure you have a dummy app ‡ + 1. Run `rake regenerate` build the to get a clean app ./spec/dummy +1. Then run `rake spec`; The tests will take quite a while ‡‡ -To run a localized spec: -```bash -$ BUNDLE_GEMFILE=spec/internal/Gemfile bundle exec rspec path/to/spec.rb:LINE +‡ - A Rails engine requires a Rails application to run. +The dummy app is an generated application inside Curate in the `./spec/internal` directory +‡‡ - Slow tests are a big problem and we are working on speeding them up, but its complicated. + +### Some of Them + +In some cases you want to know the results of a single test. Here's how you do it. + +1. Make sure jetty is running (`rake jetty:start`); It will take a bit to spin up jetty. +1. Make sure you have a dummy app ‡ + 1. Run `rake regenerate` build the to get a clean app ./spec/dummy +1. Then run `BUNDLE_GEMFILE=spec/internal/Gemfile bundle exec rspec path/to/spec.rb:LINE` ‡ + +‡ - With Curate being an Engine we need to point to the Dummy Application's Gemfile. +In full Rails applications you can normally run the following `rspec path/to/spec.rb:LINE` + +### With Zeus + +> [Zeus](https://github.com/burke/zeus) preloads your Rails app so that your normal development tasks such as console, server, generate, and specs/tests take less than one second. ‡ + +1. In terminal window #1 run `zeus start` +1. In terminal window #2, once Zeus is started: run `zeus rake spec` for all tests; or `zeus test path/to/spec.rb:LINE` for one + +‡ - Loading the environment to run your tests takes less than a second. So running an individual test will take less time. + +## Contributing Back + +There is an existing [CONTRIBUTING.md](./CONTRIBUTING.md) document which is currently under review. + +### Coding Guidelines + +The [Ruby Style Guide][1] is an excellent resource for how to craft your Ruby code, in particular the [Naming section][2]. + +**Can I break these guidelines?** Yes. But you may need to convince the person merging your changes. + +#### Writing Your Code + +We are going to do our best to follow [Sandi Metz' Rules for Developers][3] + +> Here are the rules: +> +> * Classes can be no longer than one hundred lines of code. +> * Methods can be no longer than five lines of code. +> * Pass no more than four parameters into a method. Hash options are parameters. +> * Controllers can instantiate only one object. Therefore, views can only know about one instance variable and views should only send messages to that object (@object.collaborator.value is not allowed). + +#### Ruby File Structure + +* Use soft-tabs with a two space indent. +* Never leave trailing whitespace (unless it is meaningful in the language) +* End each file with a blank newline. +* Please do your best to keep lines to 80 characters or fewer. + +### Source Control Guidelines + +*This is a placeholder for things to come* + +[Processing JIRA issues with commit messages](https://confluence.atlassian.com/display/BITBUCKET/Processing+JIRA+issues+with+commit+messages) + ``` +First line is 50 characters or less -#### Or run via Zeus: +Description of work done; wrap at 72 characters. -In terminal window #1 -```bash -$ zeus start +HYDRASIR-123 #close Any comment to post to JIRA ``` -In terminal window #2, once Zeus is loaded: +Make sure your JIRA email matches your Git config email (`~/.gitconfig`) -```bash -$ zeus rake spec +[1]:https://github.com/bbatsov/ruby-style-guide "Ruby Style Guide" +[2]:https://github.com/bbatsov/ruby-style-guide#naming "Ruby Style Guide - Naming" +[3]:http://robots.thoughtbot.com/post/50655960596/sandi-metz-rules-for-developers "Sandi Metz' Rules for Developers" + +# Working on Curate while working on my Application + +Assuming you are wanting to work on your Curate-based application and make modifications to the Curate gem, follow these instructions. + +Replace the folliwing line in the Gemfile of your Curate-based application (see [Starting a New Curate Based Application](#starting-a-new-curate-based-application)): + +```ruby +gem 'curate' ... ``` -Or a localized spec: +with -```bash -$ zeus test path/to/spec.rb:LINE +```ruby +gem 'curate', path: './path/to/my/clone/of/curate' ``` -### Running a copy of Curate in the curate gem +[More information about Gemfile management at Bundler.io](http://bundler.io/v1.5/gemfile.html) -Given that Curate regenerates (via the `rake clean generate` tasks) you can run a functioning instance of curate in that directory. +You can then do concurrent development on both your clone of the Curate gem and your Curate-based application. -From the curate directory: -```bash -$ rake clean generate -$ rake jetty:start -$ cd ./spec/internal -$ rails server -``` +**NOTE: Any changes you make in the Curate gem will likely require you to restart your web-server.** + +# Standing up your Curate-based Rails application in Production + +We are working on this and have more to come.