{"id":46618850,"url":"https://github.com/tulibraries/manifold","last_synced_at":"2026-03-07T21:01:57.395Z","repository":{"id":33266254,"uuid":"130710077","full_name":"tulibraries/manifold","owner":"tulibraries","description":"manifold - many and varied","archived":false,"fork":false,"pushed_at":"2026-02-27T14:20:00.000Z","size":143587,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-02-27T19:26:16.877Z","etag":null,"topics":["library-website"],"latest_commit_sha":null,"homepage":"https://library.temple.edu","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tulibraries.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-04-23T14:32:04.000Z","updated_at":"2026-02-27T14:20:03.000Z","dependencies_parsed_at":"2025-12-18T01:11:57.878Z","dependency_job_id":null,"html_url":"https://github.com/tulibraries/manifold","commit_stats":null,"previous_names":[],"tags_count":192,"template":false,"template_full_name":null,"purl":"pkg:github/tulibraries/manifold","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tulibraries%2Fmanifold","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tulibraries%2Fmanifold/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tulibraries%2Fmanifold/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tulibraries%2Fmanifold/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tulibraries","download_url":"https://codeload.github.com/tulibraries/manifold/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tulibraries%2Fmanifold/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30231489,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T19:01:10.287Z","status":"ssl_error","status_checked_at":"2026-03-07T18:59:58.103Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["library-website"],"created_at":"2026-03-07T21:01:56.475Z","updated_at":"2026-03-07T21:01:57.389Z","avatar_url":"https://github.com/tulibraries.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# manifold\n*adj.* - **many and varied**\n\nmanifold manages, orchestrates, and displays data about Temple University Libraries.\n\n## System Requirements\n\n- Ruby, see Gemfile for latest version\n- Postgres \u003e= 9.5\n- ImageMagick\n\n##  Getting Started\n\n* Set up environment variables:\n\n```\nexport GOOGLE_OAUTH_CLIENT_ID=\"Google client ID goes here\"\nexport GOOGLE_OAUTH_SECRET=\"Google OAuth secret goes here\"\n```\n\nAdd these same lines to your `.bash_profile` or `.bashrc` file, depending on\nhow you've setup your Bash shell.\n\n* Clone the repository and navigate to the souce code directory\n\n```\ngit clone git@github.com:tulibraries/manifold.git\ncd manifold\n```\n\n* Install dependencies\n\n```\nbundle install\n```\n\n* Create database tables\n\n```\nbundle exec rails db:migrate\n ```\n\n* Seed initial user from the command line. Note that the email address should be a TUAccess email address.\nAliased email addresses will not work.\n\n```\nrails runner 'Account.create(name: \"YOUR_NAME\", email: \"\u003cYOURTUACCESSID\u003e@temple.edu\", role: \"admin\", password: Devise.friendly_token[0,20]).save'\n```\n\nIf this application will be running in development mode and you wish to use standard authentication, seed the initial user\nwith an email address and password.\n\n```\nrails runner 'Account.create(name: \"Admin\", email: \"admin_user@example.com\", role: \"admin\", password: \"initial_password_goes_here\").save'\n```\n\nAdd additional users with this method, as the account admin page is configured for administering users in a production environment. Set the admin field to true to allow this user to administer users, otherwise it defaults to non-admin\n\n```\n# Regular user\nrails runner 'Account.create(email: \"regular_user@example.com\", role: \"regular\", password: \"initial_password_goes_here\").save'\n# Admin user\nrails runner 'Account.create(email: \"admin_user@example.com\", role: \"admin\", password: \"initial_password_goes_here\").save'\n```\n\n* *Or* create an account seed file with a list of the initial TUAccess ID's of the\nadmin users. Set the `admin` field to true if the user will have the role of a site user\nadministor, capable of adding and deleting admin users.\n\n```\nmv db/account_seeds.rb.example db/account_seeds.rb\n```\n\nEdit `db/account_seeds.rb`, Replace contents of email array with the desired email addresses\n\n* Seed the user admin accounts\n\n```\nbundle exec rake db:seed\n```\n\n* Test the code\n\n```\nbundle exec rspec spec\n```\n\n* Run the application\n\n```\nbin/dev\n```\n\n* On your browser, navigate to `http:localhost:3000`.\n\n* To administer site objects, navigate to: `http://localhost:3000/admin`\n\nYou will be redirected to the Temple University Google OAuth site. Log in with your TUAccess ID credentials and the\nbrowser will return to the site administration home page.\n\n## Setting up Postgres on your local machine\n\nYou'll need a running Postgres \u003e= 9.5 on your local dev machine.\n\n### Installing on OSX\n\nInstall with homebrew\n\n```bash\nbrew install postgres\n```\n\nNext, set up postgres to run as a service\n\n```bash\nbrew services start postgres\n```\n\n### Installing on Ubuntu\n\nInstall with postgres and development library via apt\n```bash\nsudo apt-get install postgresql-server libpq-dev\n```\n\n`apt-get` should set up postgres as a service.\n\n\n\n### Create a postgres user\nFinally, we need to create a postgres role with enough privileges to create and destroy databases. We'll use the built in `createuser` command with the `-d` flag that allows the user to create and destroy databases, and the `-W` flag that will cause the command to prompt your for a password, which is just `password`.\n\n#### OSX\n\n```bash\n$ createuser -dW manifold\nPassword: #now enter your password\n```\n\n#### Ubuntu\nOn ubunutu, we need to run commands as the postgres users\n```bash\n$ sudo su -c \"createuser -dW manifold\" postgres\nPassword: #now enter your password\n```\n\n## Running with production data locally\n\nWe will occassionally dump out data from the produciton postgres DB that you can import locally to have a reasonably up to date version of data for local development.\n\nOnce you have the postgres dump file (self-service location tbd) created with pg_dump, you can import it into your local postgres instance:\n\n```bash\n# First drop the existing db\nbundle exec rails db:drop\n\n# then recreate an empty db\nbundle exec rails db:setup\n\n# finally import the data\n\n# on OSX, it should just work as your user\npg_restore -c --dbname=manifold_development /path/to/postgres_dump_file\n\n# on Linux, you probably have to run as the postgres user\nsudo su postgres -c \"pg_restore -c --dbname=manifold_development /path/to/postgres_dump_file\"\n\n\n```\n\n## Test the code\n\nTo test the code, run the RSpec tests.\n\n```\nbundle exec rspec spec\n```\n\nTo run continuous testing which will run the appropirate specs as you save\nsource code, execute Guard\n\n```\nguard\n```\n\nTo perform mutation tests, which helps guage code coverage and test soundness on a class by class basis\nrun mutant as below.  Available class names are:\n\n* Building\n* Space\n* Person\n* Group\n* BuildingsController\n* SpacesController\n* PersonsController\n* GroupsController\n\nNote: Class names are case sensitive and in pluralized in controller.\n\n```\nRAILS_ENV=test bundle exec mutant -j 1 -r ./config/environment --use rspec \u003cclass name\u003e\n```\n\nFor more information on mutation testing, see https://github.com/mbj/mutant.\n\n## Clean Up\n\nClean up existing people database, which may contain blank specialties, by stepping through\neach record and updating the specialties record.\n\n```\n$ bundle exec rails console\n\n\u003e Person.all.each { |p| p.update(specialties: p[:specialties]) unless p.specialties.nil? }\n\u003e exit\n```\n\n## Swagger API definition and Api Docs\n\nA `swagger.json` file is served from the root of the application that describes API enpoints that are available.\n\nWe have also included autogenerated Swagger API Docs, that are available at `/api-docs/`, which provide an overview of the Endpoints available, the expected response schema, available parameters, etc.\n\n\n\n## Generating a Site Map\n\nSitemap generation is configured in `config/sitemap.rb` it contains logic to create links to the default set of show pages. Special page one-off pages would be added to this file similar to:\n\n```ruby\n  add '/about'\n  add '/visit-us'\n```\n\nTo generate a sitemap, execute the following command:\n\n```bash\nbundle exec rails sitemap:create\n```\n\n## Draftable Fields\n\nAdmin users may draft changes to description fields. This feature is not enabled by default. To enable, set the `MANIFOLD_DRAFTABLE` environment variable to `\"true\"`. This can\nbe done from the shell\n\n```bash\nexport MANIFOLD_DRAFTABLE=true\n```\n\nor command line for developement:\n\n```bash\nMANIFOLD_DRAFTABLE=true bin/dev\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftulibraries%2Fmanifold","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftulibraries%2Fmanifold","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftulibraries%2Fmanifold/lists"}