{"id":352844,"name":"Panoptes","description":"Zooniverse API to support user defined volunteer research projects.","url":"https://github.com/zooniverse/panoptes","last_synced_at":"2026-05-13T06:02:53.184Z","repository":{"id":16288032,"uuid":"19036577","full_name":"zooniverse/panoptes","owner":"zooniverse","description":"Zooniverse API to support user defined volunteer research projects","archived":false,"fork":false,"pushed_at":"2026-05-06T23:35:13.000Z","size":10878,"stargazers_count":111,"open_issues_count":107,"forks_count":42,"subscribers_count":29,"default_branch":"master","last_synced_at":"2026-05-07T01:26:08.082Z","etag":null,"topics":["docker","hacktoberfest","panoptes-platform","ruby","zooniverse"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zooniverse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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":"2014-04-22T16:16:02.000Z","updated_at":"2026-05-05T20:15:11.000Z","dependencies_parsed_at":"2023-02-19T12:01:11.958Z","dependency_job_id":"74c11332-6a06-4f17-a3eb-6cf8354bbe7f","html_url":"https://github.com/zooniverse/panoptes","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/zooniverse/panoptes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zooniverse%2Fpanoptes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zooniverse%2Fpanoptes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zooniverse%2Fpanoptes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zooniverse%2Fpanoptes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zooniverse","download_url":"https://codeload.github.com/zooniverse/panoptes/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zooniverse%2Fpanoptes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32970190,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T05:31:44.146Z","status":"ssl_error","status_checked_at":"2026-05-13T05:31:23.775Z","response_time":115,"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"}},"owner":{"login":"zooniverse","name":"Zooniverse","uuid":"106856","kind":"organization","description":"","email":"contact@zooniverse.org","website":"https://www.zooniverse.org","location":"Everywhere!","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/106856?v=4","repositories_count":364,"last_synced_at":"2024-04-10T13:02:32.598Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/zooniverse","funding_links":[],"total_stars":941,"followers":40,"following":0,"created_at":"2022-11-03T07:20:41.156Z","updated_at":"2024-04-10T13:03:24.861Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zooniverse","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zooniverse/repositories"},"packages":[],"commits":{"id":11727054,"full_name":"zooniverse/Panoptes","default_branch":"master","total_commits":4254,"total_committers":33,"total_bot_commits":467,"total_bot_committers":3,"mean_commits":128.9090909090909,"dds":0.579924776680771,"past_year_total_commits":91,"past_year_total_committers":5,"past_year_total_bot_commits":17,"past_year_total_bot_committers":1,"past_year_mean_commits":18.2,"past_year_dds":0.5494505494505495,"last_synced_at":"2026-05-11T05:10:21.232Z","last_synced_commit":"30b3c8a53ab55ddc6a33bea2a2c7bc7f69685270","created_at":"2026-04-25T14:16:37.378Z","updated_at":"2026-05-11T05:09:17.787Z","committers":[{"name":"Campbell Allen","email":"campbell.allen@gmail.com","login":"camallen","count":1787},{"name":"Edward Paget","email":"edward@cassetteta.pe","login":null,"count":939},{"name":"Marten Veldthuis","email":"marten@veldthuis.com","login":"marten","count":455},{"name":"dependabot[bot]","email":"dependabot[bot]","login":"dependabot[bot]","count":394},{"name":"Zach Wolfenbarger","email":"zach.wolfenbarger@gmail.com","login":"zwolf","count":191},{"name":"yuenmichelle1","email":"michelle@zooniverse.org","login":"yuenmichelle1","count":108},{"name":"Adam McMaster","email":"adam@zooniverse.org","login":"adammcmaster","count":84},{"name":"dependabot-preview[bot]","email":"27856297+dependabot-preview[bot]","login":"dependabot-preview[bot]","count":70},{"name":"Oluwatoyosi Oyegoke","email":"34948675+Tooyosi","login":"Tooyosi","count":53},{"name":"Michael Parrish","email":"michael@zooniverse.org","login":null,"count":50},{"name":"nciemniak","email":"nciemniak@gmail.com","login":"nciemniak","count":27},{"name":"Edward Paget","email":"ed.paget@gmail.com","login":"edpaget","count":23},{"name":"Cliff Johnson","email":"cliff@zooniverse.org","login":"lcjohnso","count":13},{"name":"Roger Hutchings","email":"roger@hutchin.gs","login":"rogerhutchings","count":10},{"name":"Sarah Allen","email":"sarah@zooniverse.org","login":null,"count":8},{"name":"Will Granger","email":"twgranger@gmail.com","login":"wgranger","count":6},{"name":"Rona Costello","email":"rona.costello@plants.ox.ac.uk","login":"RonaCostello","count":5},{"name":"Michael Parrish","email":"mtparrish@gmail.com","login":"parrish","count":4},{"name":"Amy Boyer","email":"amy@zooniverse.org","login":"amy-langley","count":3},{"name":"Chris Snyder","email":"bumishness@gmail.com","login":"chrissnyder","count":3},{"name":"dependabot[bot]","email":"support@dependabot.com","login":"dependabot-support","count":3},{"name":"Simone Duca","email":"simone@zooniverse.org","login":null,"count":2},{"name":"srallen","email":"srallen","login":"srallen","count":2},{"name":"Shaun A. Noordin","email":"shaunanoordin","login":"shaunanoordin","count":2},{"name":"Jim O'Donnell","email":"jim@zooniverse.org","login":"eatyourgreens","count":2},{"name":"Arfon Smith","email":"arfon.smith@gmail.com","login":"arfon","count":2},{"name":"Alex Bowyer","email":"alex.bowyer@gmail.com","login":"alexbfree","count":2},{"name":"Amy Boyer","email":"amyrebecca","login":"amyrebecca","count":1},{"name":"Brian Carstensen","email":"brian.carstensen@gmail.com","login":"brian-c","count":1},{"name":"Margaret Kosmala","email":"mkosmala@gmail.com","login":"mkosmala","count":1},{"name":"Perry Roper","email":"perryroper@gmail.com","login":"perry","count":1},{"name":"Tom Jenkins","email":"tom@itsravenous.com","login":"itsravenous","count":1},{"name":"alianos-","email":"alianos.home@gmail.com","login":"alianos-","count":1}],"past_year_committers":[{"name":"Oluwatoyosi Oyegoke","email":"34948675+Tooyosi","login":"Tooyosi","count":41},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":17},{"name":"Zach Wolfenbarger","email":"zach.wolfenbarger@gmail.com","login":"zwolf","count":17},{"name":"yuenmichelle1","email":"michelle@zooniverse.org","login":"yuenmichelle1","count":13},{"name":"Cliff Johnson","email":"cliff@zooniverse.org","login":"lcjohnso","count":3}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/zooniverse%2FPanoptes/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-13T00:00:10.629Z","repositories_count":6233336,"commits_count":894185763,"contributors_count":34891093,"owners_count":1152123,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"zooniverse/panoptes","html_url":"https://github.com/zooniverse/panoptes","last_synced_at":"2026-05-13T06:02:07.436Z","status":"active","issues_count":20,"pull_requests_count":246,"avg_time_to_close_issue":55375002.6875,"avg_time_to_close_pull_request":6206547.850574712,"issues_closed_count":16,"pull_requests_closed_count":174,"pull_request_authors_count":9,"issue_authors_count":11,"avg_comments_per_issue":2.5,"avg_comments_per_pull_request":0.5894308943089431,"merged_pull_requests_count":74,"bot_issues_count":2,"bot_pull_requests_count":178,"past_year_issues_count":1,"past_year_pull_requests_count":53,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":3923489.380952381,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":21,"past_year_pull_request_authors_count":6,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":0.16981132075471697,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":31,"past_year_merged_pull_requests_count":14,"created_at":"2025-08-29T12:29:53.090Z","updated_at":"2026-05-13T06:02:07.436Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/zooniverse%2Fpanoptes","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/zooniverse%2Fpanoptes/issues","issue_labels_count":{"enhancement":4,"good first issue":2,"dependencies":2,"bug":2,"question":1,"help wanted":1,"nice-to-have":1},"pull_request_labels_count":{"dependencies":178,"ruby":53,"bug":1},"issue_author_associations_count":{"MEMBER":11,"CONTRIBUTOR":5,"NONE":4},"pull_request_author_associations_count":{"CONTRIBUTOR":195,"MEMBER":30,"COLLABORATOR":18,"NONE":2,"OWNER":1},"issue_authors":{"lcjohnso":8,"dependabot[bot]":2,"zwolf":2,"marten":1,"shaunanoordin":1,"adammcmaster":1,"mwalmsley":1,"tingard":1,"mcbouslog":1,"eatyourgreens":1,"njsgastro":1},"pull_request_authors":{"dependabot[bot]":178,"zwolf":25,"yuenmichelle1":18,"Tooyosi":16,"lcjohnso":5,"BenASmith278":1,"nciemniak":1,"kieftrav":1,"eatyourgreens":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-13T00:00:11.310Z","repositories_count":14584757,"issues_count":34310526,"pull_requests_count":112283624,"authors_count":11260420,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"enhancement":1},"past_year_pull_request_labels_count":{"dependencies":31,"ruby":31},"past_year_issue_author_associations_count":{"MEMBER":1},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":35,"MEMBER":11,"COLLABORATOR":6,"NONE":1},"past_year_issue_authors":{"lcjohnso":1},"past_year_pull_request_authors":{"dependabot[bot]":31,"zwolf":10,"yuenmichelle1":6,"Tooyosi":4,"kieftrav":1,"lcjohnso":1},"maintainers":[{"login":"zwolf","count":27,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/zwolf"},{"login":"yuenmichelle1","count":18,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/yuenmichelle1"},{"login":"lcjohnso","count":13,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/lcjohnso"},{"login":"BenASmith278","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/BenASmith278"},{"login":"shaunanoordin","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/shaunanoordin"}],"active_maintainers":[{"login":"zwolf","count":10,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/zwolf"},{"login":"yuenmichelle1","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/yuenmichelle1"},{"login":"lcjohnso","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/lcjohnso"}]},"events":{"total":{"DeleteEvent":118,"PullRequestEvent":210,"IssuesEvent":6,"WatchEvent":2,"IssueCommentEvent":81,"PushEvent":237,"PullRequestReviewEvent":52,"PullRequestReviewCommentEvent":176,"CreateEvent":128},"last_year":{"DeleteEvent":56,"PullRequestEvent":88,"IssuesEvent":3,"WatchEvent":1,"IssueCommentEvent":26,"PushEvent":183,"PullRequestReviewEvent":40,"PullRequestReviewCommentEvent":158,"CreateEvent":64}},"keywords":["docker","hacktoberfest","panoptes-platform","ruby","zooniverse"],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/add_approve_label_to_pr.yml","sha":null,"kind":"manifest","created_at":"2023-01-14T01:00:11.836Z","updated_at":"2023-01-14T01:00:11.836Z","repository_link":"https://github.com/zooniverse/panoptes/blob/master/.github/workflows/add_approve_label_to_pr.yml","dependencies":[{"id":6892022246,"package_name":"zooniverse/label-when-approved-action","ecosystem":"actions","requirements":"v1.0.5","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/codeql-analysis.yml","sha":null,"kind":"manifest","created_at":"2023-01-14T01:00:12.203Z","updated_at":"2023-01-14T01:00:12.203Z","repository_link":"https://github.com/zooniverse/panoptes/blob/master/.github/workflows/codeql-analysis.yml","dependencies":[{"id":6892022867,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6892022868,"package_name":"github/codeql-action/init","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6892022869,"package_name":"github/codeql-action/autobuild","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6892022870,"package_name":"github/codeql-action/analyze","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/deploy_staging_canary.yml","sha":null,"kind":"manifest","created_at":"2023-01-14T01:00:12.550Z","updated_at":"2023-01-14T01:00:12.550Z","repository_link":"https://github.com/zooniverse/panoptes/blob/master/.github/workflows/deploy_staging_canary.yml","dependencies":[{"id":6892022991,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6892022992,"package_name":"docker/login-action","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":6892022993,"package_name":"docker/setup-buildx-action","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":6892022994,"package_name":"docker/build-push-action","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6892022995,"package_name":"Azure/aks-set-context","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/publish_docs.yml","sha":null,"kind":"manifest","created_at":"2023-01-14T01:00:13.058Z","updated_at":"2023-01-14T01:00:13.058Z","repository_link":"https://github.com/zooniverse/panoptes/blob/master/.github/workflows/publish_docs.yml","dependencies":[{"id":6892026583,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6892026584,"package_name":"zooniverse/middleman-gh-pages-action","ecosystem":"actions","requirements":"v1.2.0","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/run_tests_CI.yml","sha":null,"kind":"manifest","created_at":"2023-01-14T01:00:13.570Z","updated_at":"2023-01-14T01:00:13.570Z","repository_link":"https://github.com/zooniverse/panoptes/blob/master/.github/workflows/run_tests_CI.yml","dependencies":[{"id":6892027170,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6892027171,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":6892027172,"package_name":"postgres","ecosystem":"actions","requirements":"11-alpine","direct":true,"kind":"docker","optional":false}]},{"ecosystem":"docker","filepath":"Dockerfile","sha":null,"kind":"manifest","created_at":"2023-01-14T01:00:13.714Z","updated_at":"2023-01-14T01:00:13.714Z","repository_link":"https://github.com/zooniverse/panoptes/blob/master/Dockerfile","dependencies":[{"id":6892027418,"package_name":"ruby","ecosystem":"docker","requirements":"2.7-slim","direct":true,"kind":"build","optional":false}]},{"ecosystem":"docker","filepath":"docker-compose-rails-next.yml","sha":null,"kind":"manifest","created_at":"2023-01-14T01:00:13.933Z","updated_at":"2023-01-14T01:00:13.933Z","repository_link":"https://github.com/zooniverse/panoptes/blob/master/docker-compose-rails-next.yml","dependencies":[{"id":6892027514,"package_name":"postgres","ecosystem":"docker","requirements":"11","direct":true,"kind":"runtime","optional":false},{"id":6892027515,"package_name":"redis","ecosystem":"docker","requirements":"latest","direct":true,"kind":"runtime","optional":false},{"id":6892027516,"package_name":"panoptes","ecosystem":"docker","requirements":"rails-next-local","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"docker","filepath":"docker-compose.yml","sha":null,"kind":"manifest","created_at":"2023-01-14T01:00:14.232Z","updated_at":"2023-01-14T01:00:14.232Z","repository_link":"https://github.com/zooniverse/panoptes/blob/master/docker-compose.yml","dependencies":[{"id":6892028313,"package_name":"postgres","ecosystem":"docker","requirements":"11","direct":true,"kind":"runtime","optional":false},{"id":6892028314,"package_name":"redis","ecosystem":"docker","requirements":"latest","direct":true,"kind":"runtime","optional":false},{"id":6892028315,"package_name":"panoptes","ecosystem":"docker","requirements":"local","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"docker","filepath":"docs/Dockerfile","sha":null,"kind":"manifest","created_at":"2023-01-14T01:00:14.613Z","updated_at":"2023-01-14T01:00:14.613Z","repository_link":"https://github.com/zooniverse/panoptes/blob/master/docs/Dockerfile","dependencies":[{"id":6892029925,"package_name":"ruby","ecosystem":"docker","requirements":"2.7-slim","direct":true,"kind":"build","optional":false}]},{"ecosystem":"rubygems","filepath":"Gemfile","sha":null,"kind":"manifest","created_at":"2023-01-14T01:00:15.062Z","updated_at":"2023-01-14T01:00:15.062Z","repository_link":"https://github.com/zooniverse/panoptes/blob/master/Gemfile","dependencies":[{"id":6892029963,"package_name":"active_interaction","ecosystem":"rubygems","requirements":"~\u003e 3.8.3","direct":true,"kind":"runtime","optional":false},{"id":6892029964,"package_name":"active_model_serializers","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029965,"package_name":"active_record_extended","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029966,"package_name":"activerecord-import","ecosystem":"rubygems","requirements":"~\u003e 1.4","direct":true,"kind":"runtime","optional":false},{"id":6892029967,"package_name":"aws-sdk","ecosystem":"rubygems","requirements":"~\u003e 2.10","direct":true,"kind":"runtime","optional":false},{"id":6892029968,"package_name":"azure-storage-blob","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029969,"package_name":"dalli","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029970,"package_name":"deep_cloneable","ecosystem":"rubygems","requirements":"~\u003e 3.2.0","direct":true,"kind":"runtime","optional":false},{"id":6892029971,"package_name":"devise","ecosystem":"rubygems","requirements":"~\u003e 4.7","direct":true,"kind":"runtime","optional":false},{"id":6892029972,"package_name":"doorkeeper","ecosystem":"rubygems","requirements":"~\u003e 4.4","direct":true,"kind":"runtime","optional":false},{"id":6892029973,"package_name":"doorkeeper-jwt","ecosystem":"rubygems","requirements":"~\u003e 0.2.1","direct":true,"kind":"runtime","optional":false},{"id":6892029974,"package_name":"faraday","ecosystem":"rubygems","requirements":"~\u003e 1.10","direct":true,"kind":"runtime","optional":false},{"id":6892029975,"package_name":"faraday-http-cache","ecosystem":"rubygems","requirements":"~\u003e 2.4","direct":true,"kind":"runtime","optional":false},{"id":6892029976,"package_name":"faraday_middleware","ecosystem":"rubygems","requirements":"~\u003e 1.2","direct":true,"kind":"runtime","optional":false},{"id":6892029977,"package_name":"flipper","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029978,"package_name":"flipper-active_record","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029979,"package_name":"flipper-ui","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029980,"package_name":"graphiql-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029981,"package_name":"graphql","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029982,"package_name":"honeybadger","ecosystem":"rubygems","requirements":"~\u003e 5.0","direct":true,"kind":"runtime","optional":false},{"id":6892029983,"package_name":"httparty","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029984,"package_name":"jquery-rails","ecosystem":"rubygems","requirements":"~\u003e 4.5","direct":true,"kind":"runtime","optional":false},{"id":6892029985,"package_name":"json-schema","ecosystem":"rubygems","requirements":"~\u003e 2.8","direct":true,"kind":"runtime","optional":false},{"id":6892029986,"package_name":"librato-metrics","ecosystem":"rubygems","requirements":"~\u003e 2.1.2","direct":true,"kind":"runtime","optional":false},{"id":6892029987,"package_name":"lograge","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029988,"package_name":"mime-types","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029989,"package_name":"omniauth","ecosystem":"rubygems","requirements":"~\u003e 1.9","direct":true,"kind":"runtime","optional":false},{"id":6892029990,"package_name":"omniauth-facebook","ecosystem":"rubygems","requirements":"~\u003e 5.0","direct":true,"kind":"runtime","optional":false},{"id":6892029991,"package_name":"omniauth-google-oauth2","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029992,"package_name":"p3p","ecosystem":"rubygems","requirements":"~\u003e 2.0","direct":true,"kind":"runtime","optional":false},{"id":6892029993,"package_name":"panoptes-client","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029994,"package_name":"pg","ecosystem":"rubygems","requirements":"~\u003e 0.21","direct":true,"kind":"runtime","optional":false},{"id":6892029995,"package_name":"pg_search","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892029996,"package_name":"puma","ecosystem":"rubygems","requirements":"~\u003e 6.0.2","direct":true,"kind":"runtime","optional":false},{"id":6892029997,"package_name":"pundit","ecosystem":"rubygems","requirements":"~\u003e 2.2.0","direct":true,"kind":"runtime","optional":false},{"id":6892029998,"package_name":"rack-cors","ecosystem":"rubygems","requirements":"~\u003e 1.0","direct":true,"kind":"runtime","optional":false},{"id":6892029999,"package_name":"rails","ecosystem":"rubygems","requirements":"~\u003e 5.2","direct":true,"kind":"runtime","optional":false},{"id":6892030000,"package_name":"ranked-model","ecosystem":"rubygems","requirements":"~\u003e 0.4.8","direct":true,"kind":"runtime","optional":false},{"id":6892030001,"package_name":"restpack_serializer","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892030002,"package_name":"scientist","ecosystem":"rubygems","requirements":"~\u003e 1.6.3","direct":true,"kind":"runtime","optional":false},{"id":6892030003,"package_name":"sidekiq","ecosystem":"rubygems","requirements":"~\u003e 6.0","direct":true,"kind":"runtime","optional":false},{"id":6892030004,"package_name":"sidekiq-congestion","ecosystem":"rubygems","requirements":"~\u003e 0.1.0","direct":true,"kind":"runtime","optional":false},{"id":6892030005,"package_name":"sidekiq-cron","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892030006,"package_name":"sidekiq-unique-jobs","ecosystem":"rubygems","requirements":"~\u003e 6.0","direct":true,"kind":"runtime","optional":false},{"id":6892030007,"package_name":"standby","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892030008,"package_name":"stringex","ecosystem":"rubygems","requirements":"~\u003e 2.8","direct":true,"kind":"runtime","optional":false},{"id":6892030009,"package_name":"strong_migrations","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892030010,"package_name":"uglifier","ecosystem":"rubygems","requirements":"~\u003e 4.2","direct":true,"kind":"runtime","optional":false},{"id":6892030011,"package_name":"versionist","ecosystem":"rubygems","requirements":"~\u003e 2.0","direct":true,"kind":"runtime","optional":false},{"id":6892030012,"package_name":"zoo_stream","ecosystem":"rubygems","requirements":"~\u003e 1.0.1","direct":true,"kind":"runtime","optional":false},{"id":6892030013,"package_name":"newrelic_rpm","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6892030014,"package_name":"factory_bot_rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":6892030015,"package_name":"mini_racer","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":6892030016,"package_name":"pry","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":6892030017,"package_name":"rubocop","ecosystem":"rubygems","requirements":"~\u003e 0.91.0","direct":true,"kind":"development","optional":false},{"id":6892030018,"package_name":"rubocop-performance","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":6892030019,"package_name":"rubocop-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":6892030020,"package_name":"rubocop-rspec","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":6892030021,"package_name":"spring","ecosystem":"rubygems","requirements":"~\u003e 2.1.1","direct":true,"kind":"development","optional":false},{"id":6892030022,"package_name":"sprockets","ecosystem":"rubygems","requirements":"~\u003e 3.7","direct":true,"kind":"development","optional":false},{"id":6892030023,"package_name":"ten_years_rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":6892030024,"package_name":"database_cleaner","ecosystem":"rubygems","requirements":"~\u003e 1.99.0","direct":true,"kind":"development","optional":false},{"id":6892030025,"package_name":"guard-rspec","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":6892030026,"package_name":"listen","ecosystem":"rubygems","requirements":"~\u003e 3.7","direct":true,"kind":"development","optional":false},{"id":6892030027,"package_name":"mock_redis","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":6892030028,"package_name":"rspec","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":6892030029,"package_name":"rspec-its","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":6892030030,"package_name":"rspec-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":6892030031,"package_name":"spring-commands-rspec","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":6892030032,"package_name":"webmock","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false}]},{"ecosystem":"rubygems","filepath":"Gemfile.lock","sha":null,"kind":"lockfile","created_at":"2023-01-14T01:00:15.460Z","updated_at":"2023-01-14T01:00:15.460Z","repository_link":"https://github.com/zooniverse/panoptes/blob/master/Gemfile.lock","dependencies":[{"id":6892032552,"package_name":"restpack_serializer","ecosystem":"rubygems","requirements":"0.5.9","direct":false,"kind":"runtime","optional":false},{"id":6892032553,"package_name":"actioncable","ecosystem":"rubygems","requirements":"5.2.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892032554,"package_name":"actionmailer","ecosystem":"rubygems","requirements":"5.2.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892032555,"package_name":"actionpack","ecosystem":"rubygems","requirements":"5.2.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892032556,"package_name":"actionview","ecosystem":"rubygems","requirements":"5.2.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892032557,"package_name":"active_interaction","ecosystem":"rubygems","requirements":"3.8.3","direct":false,"kind":"runtime","optional":false},{"id":6892032558,"package_name":"active_model_serializers","ecosystem":"rubygems","requirements":"0.10.13","direct":false,"kind":"runtime","optional":false},{"id":6892032559,"package_name":"active_record_extended","ecosystem":"rubygems","requirements":"3.1.0","direct":false,"kind":"runtime","optional":false},{"id":6892032560,"package_name":"activejob","ecosystem":"rubygems","requirements":"5.2.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892032561,"package_name":"activemodel","ecosystem":"rubygems","requirements":"5.2.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892032562,"package_name":"activerecord","ecosystem":"rubygems","requirements":"5.2.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892032563,"package_name":"activerecord-import","ecosystem":"rubygems","requirements":"1.4.1","direct":false,"kind":"runtime","optional":false},{"id":6892032564,"package_name":"activestorage","ecosystem":"rubygems","requirements":"5.2.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892032565,"package_name":"activesupport","ecosystem":"rubygems","requirements":"5.2.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892032566,"package_name":"addressable","ecosystem":"rubygems","requirements":"2.8.0","direct":false,"kind":"runtime","optional":false},{"id":6892032567,"package_name":"aggregate","ecosystem":"rubygems","requirements":"0.2.3","direct":false,"kind":"runtime","optional":false},{"id":6892032568,"package_name":"arel","ecosystem":"rubygems","requirements":"9.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032569,"package_name":"ast","ecosystem":"rubygems","requirements":"2.4.2","direct":false,"kind":"runtime","optional":false},{"id":6892032570,"package_name":"aws-eventstream","ecosystem":"rubygems","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":6892032571,"package_name":"aws-sdk","ecosystem":"rubygems","requirements":"2.11.632","direct":false,"kind":"runtime","optional":false},{"id":6892032572,"package_name":"aws-sdk-core","ecosystem":"rubygems","requirements":"2.11.632","direct":false,"kind":"runtime","optional":false},{"id":6892032573,"package_name":"aws-sdk-resources","ecosystem":"rubygems","requirements":"2.11.632","direct":false,"kind":"runtime","optional":false},{"id":6892032574,"package_name":"aws-sigv4","ecosystem":"rubygems","requirements":"1.5.0","direct":false,"kind":"runtime","optional":false},{"id":6892032575,"package_name":"azure-storage-blob","ecosystem":"rubygems","requirements":"2.0.3","direct":false,"kind":"runtime","optional":false},{"id":6892032576,"package_name":"azure-storage-common","ecosystem":"rubygems","requirements":"2.0.4","direct":false,"kind":"runtime","optional":false},{"id":6892032577,"package_name":"bcrypt","ecosystem":"rubygems","requirements":"3.1.17","direct":false,"kind":"runtime","optional":false},{"id":6892032578,"package_name":"builder","ecosystem":"rubygems","requirements":"3.2.4","direct":false,"kind":"runtime","optional":false},{"id":6892032579,"package_name":"case_transform","ecosystem":"rubygems","requirements":"0.2","direct":false,"kind":"runtime","optional":false},{"id":6892032580,"package_name":"coderay","ecosystem":"rubygems","requirements":"1.1.3","direct":false,"kind":"runtime","optional":false},{"id":6892032581,"package_name":"concurrent-ruby","ecosystem":"rubygems","requirements":"1.1.10","direct":false,"kind":"runtime","optional":false},{"id":6892032582,"package_name":"congestion","ecosystem":"rubygems","requirements":"0.1.0","direct":false,"kind":"runtime","optional":false},{"id":6892032583,"package_name":"connection_pool","ecosystem":"rubygems","requirements":"2.3.0","direct":false,"kind":"runtime","optional":false},{"id":6892032584,"package_name":"crack","ecosystem":"rubygems","requirements":"0.4.5","direct":false,"kind":"runtime","optional":false},{"id":6892032585,"package_name":"crass","ecosystem":"rubygems","requirements":"1.0.6","direct":false,"kind":"runtime","optional":false},{"id":6892032586,"package_name":"dalli","ecosystem":"rubygems","requirements":"3.2.3","direct":false,"kind":"runtime","optional":false},{"id":6892032587,"package_name":"database_cleaner","ecosystem":"rubygems","requirements":"1.99.0","direct":false,"kind":"runtime","optional":false},{"id":6892032588,"package_name":"date","ecosystem":"rubygems","requirements":"3.3.1","direct":false,"kind":"runtime","optional":false},{"id":6892032589,"package_name":"deep_cloneable","ecosystem":"rubygems","requirements":"3.2.0","direct":false,"kind":"runtime","optional":false},{"id":6892032590,"package_name":"deprecate","ecosystem":"rubygems","requirements":"0.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032591,"package_name":"devise","ecosystem":"rubygems","requirements":"4.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892032592,"package_name":"diff-lcs","ecosystem":"rubygems","requirements":"1.5.0","direct":false,"kind":"runtime","optional":false},{"id":6892032593,"package_name":"doorkeeper","ecosystem":"rubygems","requirements":"4.4.3","direct":false,"kind":"runtime","optional":false},{"id":6892032594,"package_name":"doorkeeper-jwt","ecosystem":"rubygems","requirements":"0.2.1","direct":false,"kind":"runtime","optional":false},{"id":6892032595,"package_name":"erubi","ecosystem":"rubygems","requirements":"1.11.0","direct":false,"kind":"runtime","optional":false},{"id":6892032596,"package_name":"et-orbi","ecosystem":"rubygems","requirements":"1.2.7","direct":false,"kind":"runtime","optional":false},{"id":6892032597,"package_name":"execjs","ecosystem":"rubygems","requirements":"2.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892032598,"package_name":"factory_bot","ecosystem":"rubygems","requirements":"6.2.1","direct":false,"kind":"runtime","optional":false},{"id":6892032599,"package_name":"factory_bot_rails","ecosystem":"rubygems","requirements":"6.2.0","direct":false,"kind":"runtime","optional":false},{"id":6892032600,"package_name":"faraday","ecosystem":"rubygems","requirements":"1.10.2","direct":false,"kind":"runtime","optional":false},{"id":6892032601,"package_name":"faraday-em_http","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032602,"package_name":"faraday-em_synchrony","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032603,"package_name":"faraday-excon","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":6892032604,"package_name":"faraday-http-cache","ecosystem":"rubygems","requirements":"2.4.1","direct":false,"kind":"runtime","optional":false},{"id":6892032605,"package_name":"faraday-httpclient","ecosystem":"rubygems","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":6892032606,"package_name":"faraday-multipart","ecosystem":"rubygems","requirements":"1.0.4","direct":false,"kind":"runtime","optional":false},{"id":6892032607,"package_name":"faraday-net_http","ecosystem":"rubygems","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":6892032608,"package_name":"faraday-net_http_persistent","ecosystem":"rubygems","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":6892032609,"package_name":"faraday-panoptes","ecosystem":"rubygems","requirements":"0.4.0","direct":false,"kind":"runtime","optional":false},{"id":6892032610,"package_name":"faraday-patron","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032611,"package_name":"faraday-rack","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032612,"package_name":"faraday-retry","ecosystem":"rubygems","requirements":"1.0.3","direct":false,"kind":"runtime","optional":false},{"id":6892032613,"package_name":"faraday_middleware","ecosystem":"rubygems","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":6892032614,"package_name":"ffi","ecosystem":"rubygems","requirements":"1.15.5","direct":false,"kind":"runtime","optional":false},{"id":6892032615,"package_name":"flipper","ecosystem":"rubygems","requirements":"0.25.4","direct":false,"kind":"runtime","optional":false},{"id":6892032616,"package_name":"flipper-active_record","ecosystem":"rubygems","requirements":"0.25.2","direct":false,"kind":"runtime","optional":false},{"id":6892032617,"package_name":"flipper-ui","ecosystem":"rubygems","requirements":"0.25.2","direct":false,"kind":"runtime","optional":false},{"id":6892032618,"package_name":"formatador","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":6892032619,"package_name":"fugit","ecosystem":"rubygems","requirements":"1.7.2","direct":false,"kind":"runtime","optional":false},{"id":6892032620,"package_name":"globalid","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032621,"package_name":"graphiql-rails","ecosystem":"rubygems","requirements":"1.8.0","direct":false,"kind":"runtime","optional":false},{"id":6892032622,"package_name":"graphql","ecosystem":"rubygems","requirements":"2.0.15","direct":false,"kind":"runtime","optional":false},{"id":6892032623,"package_name":"guard","ecosystem":"rubygems","requirements":"2.18.0","direct":false,"kind":"runtime","optional":false},{"id":6892032624,"package_name":"guard-compat","ecosystem":"rubygems","requirements":"1.2.1","direct":false,"kind":"runtime","optional":false},{"id":6892032702,"package_name":"guard-rspec","ecosystem":"rubygems","requirements":"4.7.3","direct":false,"kind":"runtime","optional":false},{"id":6892032704,"package_name":"hashdiff","ecosystem":"rubygems","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":6892032706,"package_name":"hashie","ecosystem":"rubygems","requirements":"5.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032708,"package_name":"honeybadger","ecosystem":"rubygems","requirements":"5.0.2","direct":false,"kind":"runtime","optional":false},{"id":6892032709,"package_name":"httparty","ecosystem":"rubygems","requirements":"0.21.0","direct":false,"kind":"runtime","optional":false},{"id":6892032710,"package_name":"i18n","ecosystem":"rubygems","requirements":"1.12.0","direct":false,"kind":"runtime","optional":false},{"id":6892032711,"package_name":"jmespath","ecosystem":"rubygems","requirements":"1.6.1","direct":false,"kind":"runtime","optional":false},{"id":6892032712,"package_name":"jquery-rails","ecosystem":"rubygems","requirements":"4.5.1","direct":false,"kind":"runtime","optional":false},{"id":6892032713,"package_name":"json-schema","ecosystem":"rubygems","requirements":"2.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892032714,"package_name":"jsonapi-renderer","ecosystem":"rubygems","requirements":"0.2.2","direct":false,"kind":"runtime","optional":false},{"id":6892032715,"package_name":"jwt","ecosystem":"rubygems","requirements":"1.5.6","direct":false,"kind":"runtime","optional":false},{"id":6892032716,"package_name":"kaminari","ecosystem":"rubygems","requirements":"1.2.2","direct":false,"kind":"runtime","optional":false},{"id":6892032717,"package_name":"kaminari-actionview","ecosystem":"rubygems","requirements":"1.2.2","direct":false,"kind":"runtime","optional":false},{"id":6892032718,"package_name":"kaminari-activerecord","ecosystem":"rubygems","requirements":"1.2.2","direct":false,"kind":"runtime","optional":false},{"id":6892032719,"package_name":"kaminari-core","ecosystem":"rubygems","requirements":"1.2.2","direct":false,"kind":"runtime","optional":false},{"id":6892032720,"package_name":"librato-metrics","ecosystem":"rubygems","requirements":"2.1.2","direct":false,"kind":"runtime","optional":false},{"id":6892032721,"package_name":"libv8-node","ecosystem":"rubygems","requirements":"16.10.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032722,"package_name":"listen","ecosystem":"rubygems","requirements":"3.7.1","direct":false,"kind":"runtime","optional":false},{"id":6892032723,"package_name":"lograge","ecosystem":"rubygems","requirements":"0.12.0","direct":false,"kind":"runtime","optional":false},{"id":6892032724,"package_name":"loofah","ecosystem":"rubygems","requirements":"2.19.1","direct":false,"kind":"runtime","optional":false},{"id":6892032725,"package_name":"lumberjack","ecosystem":"rubygems","requirements":"1.2.8","direct":false,"kind":"runtime","optional":false},{"id":6892032726,"package_name":"mail","ecosystem":"rubygems","requirements":"2.8.0","direct":false,"kind":"runtime","optional":false},{"id":6892032727,"package_name":"marcel","ecosystem":"rubygems","requirements":"1.0.2","direct":false,"kind":"runtime","optional":false},{"id":6892032728,"package_name":"method_source","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032729,"package_name":"mime-types","ecosystem":"rubygems","requirements":"3.4.1","direct":false,"kind":"runtime","optional":false},{"id":6892032730,"package_name":"mime-types-data","ecosystem":"rubygems","requirements":"3.2022.0105","direct":false,"kind":"runtime","optional":false},{"id":6892032731,"package_name":"mini_mime","ecosystem":"rubygems","requirements":"1.1.2","direct":false,"kind":"runtime","optional":false},{"id":6892032732,"package_name":"mini_portile2","ecosystem":"rubygems","requirements":"2.8.0","direct":false,"kind":"runtime","optional":false},{"id":6892032733,"package_name":"mini_racer","ecosystem":"rubygems","requirements":"0.6.3","direct":false,"kind":"runtime","optional":false},{"id":6892032734,"package_name":"minitest","ecosystem":"rubygems","requirements":"5.16.3","direct":false,"kind":"runtime","optional":false},{"id":6892032735,"package_name":"mock_redis","ecosystem":"rubygems","requirements":"0.35.0","direct":false,"kind":"runtime","optional":false},{"id":6892032736,"package_name":"multi_json","ecosystem":"rubygems","requirements":"1.15.0","direct":false,"kind":"runtime","optional":false},{"id":6892032737,"package_name":"multi_xml","ecosystem":"rubygems","requirements":"0.6.0","direct":false,"kind":"runtime","optional":false},{"id":6892032738,"package_name":"multipart-post","ecosystem":"rubygems","requirements":"2.2.3","direct":false,"kind":"runtime","optional":false},{"id":6892032739,"package_name":"nenv","ecosystem":"rubygems","requirements":"0.3.0","direct":false,"kind":"runtime","optional":false},{"id":6892032745,"package_name":"net-http-persistent","ecosystem":"rubygems","requirements":"4.0.1","direct":false,"kind":"runtime","optional":false},{"id":6892032746,"package_name":"net-imap","ecosystem":"rubygems","requirements":"0.3.2","direct":false,"kind":"runtime","optional":false},{"id":6892032748,"package_name":"net-pop","ecosystem":"rubygems","requirements":"0.1.2","direct":false,"kind":"runtime","optional":false},{"id":6892032750,"package_name":"net-protocol","ecosystem":"rubygems","requirements":"0.2.1","direct":false,"kind":"runtime","optional":false},{"id":6892032751,"package_name":"net-smtp","ecosystem":"rubygems","requirements":"0.3.3","direct":false,"kind":"runtime","optional":false},{"id":6892032754,"package_name":"newrelic_rpm","ecosystem":"rubygems","requirements":"8.13.0","direct":false,"kind":"runtime","optional":false},{"id":6892032756,"package_name":"nio4r","ecosystem":"rubygems","requirements":"2.5.8","direct":false,"kind":"runtime","optional":false},{"id":6892032758,"package_name":"nokogiri","ecosystem":"rubygems","requirements":"1.13.10","direct":false,"kind":"runtime","optional":false},{"id":6892032759,"package_name":"notiffany","ecosystem":"rubygems","requirements":"0.1.3","direct":false,"kind":"runtime","optional":false},{"id":6892032772,"package_name":"oauth2","ecosystem":"rubygems","requirements":"1.4.9","direct":false,"kind":"runtime","optional":false},{"id":6892032775,"package_name":"omniauth","ecosystem":"rubygems","requirements":"1.9.1","direct":false,"kind":"runtime","optional":false},{"id":6892032777,"package_name":"omniauth-facebook","ecosystem":"rubygems","requirements":"5.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032778,"package_name":"omniauth-google-oauth2","ecosystem":"rubygems","requirements":"0.5.4","direct":false,"kind":"runtime","optional":false},{"id":6892032780,"package_name":"omniauth-oauth2","ecosystem":"rubygems","requirements":"1.7.2","direct":false,"kind":"runtime","optional":false},{"id":6892032783,"package_name":"orm_adapter","ecosystem":"rubygems","requirements":"0.5.0","direct":false,"kind":"runtime","optional":false},{"id":6892032786,"package_name":"p3p","ecosystem":"rubygems","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032788,"package_name":"panoptes-client","ecosystem":"rubygems","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":6892032790,"package_name":"parallel","ecosystem":"rubygems","requirements":"1.22.1","direct":false,"kind":"runtime","optional":false},{"id":6892032793,"package_name":"parser","ecosystem":"rubygems","requirements":"3.1.2.0","direct":false,"kind":"runtime","optional":false},{"id":6892032795,"package_name":"pg","ecosystem":"rubygems","requirements":"0.21.0","direct":false,"kind":"runtime","optional":false},{"id":6892032796,"package_name":"pg_search","ecosystem":"rubygems","requirements":"2.3.6","direct":false,"kind":"runtime","optional":false},{"id":6892032798,"package_name":"pry","ecosystem":"rubygems","requirements":"0.14.2","direct":false,"kind":"runtime","optional":false},{"id":6892032800,"package_name":"public_suffix","ecosystem":"rubygems","requirements":"4.0.7","direct":false,"kind":"runtime","optional":false},{"id":6892032802,"package_name":"puma","ecosystem":"rubygems","requirements":"6.0.2","direct":false,"kind":"runtime","optional":false},{"id":6892032804,"package_name":"pundit","ecosystem":"rubygems","requirements":"2.2.0","direct":false,"kind":"runtime","optional":false},{"id":6892032806,"package_name":"raabro","ecosystem":"rubygems","requirements":"1.4.0","direct":false,"kind":"runtime","optional":false},{"id":6892032809,"package_name":"racc","ecosystem":"rubygems","requirements":"1.6.1","direct":false,"kind":"runtime","optional":false},{"id":6892032811,"package_name":"rack","ecosystem":"rubygems","requirements":"2.2.4","direct":false,"kind":"runtime","optional":false},{"id":6892032813,"package_name":"rack-cors","ecosystem":"rubygems","requirements":"1.1.1","direct":false,"kind":"runtime","optional":false},{"id":6892032815,"package_name":"rack-protection","ecosystem":"rubygems","requirements":"2.2.2","direct":false,"kind":"runtime","optional":false},{"id":6892032819,"package_name":"rack-test","ecosystem":"rubygems","requirements":"2.0.2","direct":false,"kind":"runtime","optional":false},{"id":6892032821,"package_name":"rails","ecosystem":"rubygems","requirements":"5.2.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892032823,"package_name":"rails-dom-testing","ecosystem":"rubygems","requirements":"2.0.3","direct":false,"kind":"runtime","optional":false},{"id":6892032826,"package_name":"rails-html-sanitizer","ecosystem":"rubygems","requirements":"1.4.4","direct":false,"kind":"runtime","optional":false},{"id":6892032827,"package_name":"railties","ecosystem":"rubygems","requirements":"5.2.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892032828,"package_name":"rainbow","ecosystem":"rubygems","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032829,"package_name":"rake","ecosystem":"rubygems","requirements":"13.0.6","direct":false,"kind":"runtime","optional":false},{"id":6892032830,"package_name":"ranked-model","ecosystem":"rubygems","requirements":"0.4.8","direct":false,"kind":"runtime","optional":false},{"id":6892032831,"package_name":"rb-fsevent","ecosystem":"rubygems","requirements":"0.11.1","direct":false,"kind":"runtime","optional":false},{"id":6892032832,"package_name":"rb-inotify","ecosystem":"rubygems","requirements":"0.10.1","direct":false,"kind":"runtime","optional":false},{"id":6892032833,"package_name":"redis","ecosystem":"rubygems","requirements":"4.5.1","direct":false,"kind":"runtime","optional":false},{"id":6892032834,"package_name":"regexp_parser","ecosystem":"rubygems","requirements":"2.3.1","direct":false,"kind":"runtime","optional":false},{"id":6892032835,"package_name":"request_store","ecosystem":"rubygems","requirements":"1.5.1","direct":false,"kind":"runtime","optional":false},{"id":6892032837,"package_name":"responders","ecosystem":"rubygems","requirements":"3.0.1","direct":false,"kind":"runtime","optional":false},{"id":6892032839,"package_name":"rexml","ecosystem":"rubygems","requirements":"3.2.5","direct":false,"kind":"runtime","optional":false},{"id":6892032841,"package_name":"rspec","ecosystem":"rubygems","requirements":"3.12.0","direct":false,"kind":"runtime","optional":false},{"id":6892032843,"package_name":"rspec-core","ecosystem":"rubygems","requirements":"3.12.0","direct":false,"kind":"runtime","optional":false},{"id":6892032846,"package_name":"rspec-expectations","ecosystem":"rubygems","requirements":"3.12.0","direct":false,"kind":"runtime","optional":false},{"id":6892032848,"package_name":"rspec-its","ecosystem":"rubygems","requirements":"1.3.0","direct":false,"kind":"runtime","optional":false},{"id":6892032850,"package_name":"rspec-mocks","ecosystem":"rubygems","requirements":"3.12.0","direct":false,"kind":"runtime","optional":false},{"id":6892032853,"package_name":"rspec-rails","ecosystem":"rubygems","requirements":"5.1.2","direct":false,"kind":"runtime","optional":false},{"id":6892032855,"package_name":"rspec-support","ecosystem":"rubygems","requirements":"3.12.0","direct":false,"kind":"runtime","optional":false},{"id":6892032858,"package_name":"rubocop","ecosystem":"rubygems","requirements":"0.91.1","direct":false,"kind":"runtime","optional":false},{"id":6892032860,"package_name":"rubocop-ast","ecosystem":"rubygems","requirements":"0.8.0","direct":false,"kind":"runtime","optional":false},{"id":6892032861,"package_name":"rubocop-performance","ecosystem":"rubygems","requirements":"1.10.2","direct":false,"kind":"runtime","optional":false},{"id":6892032862,"package_name":"rubocop-rails","ecosystem":"rubygems","requirements":"2.9.1","direct":false,"kind":"runtime","optional":false},{"id":6892032864,"package_name":"rubocop-rspec","ecosystem":"rubygems","requirements":"1.44.1","direct":false,"kind":"runtime","optional":false},{"id":6892032866,"package_name":"ruby-progressbar","ecosystem":"rubygems","requirements":"1.11.0","direct":false,"kind":"runtime","optional":false},{"id":6892032867,"package_name":"ruby2_keywords","ecosystem":"rubygems","requirements":"0.0.5","direct":false,"kind":"runtime","optional":false},{"id":6892032869,"package_name":"sanitize","ecosystem":"rubygems","requirements":"6.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032873,"package_name":"scientist","ecosystem":"rubygems","requirements":"1.6.3","direct":false,"kind":"runtime","optional":false},{"id":6892032875,"package_name":"shellany","ecosystem":"rubygems","requirements":"0.0.1","direct":false,"kind":"runtime","optional":false},{"id":6892032883,"package_name":"sidekiq","ecosystem":"rubygems","requirements":"6.0.7","direct":false,"kind":"runtime","optional":false},{"id":6892032885,"package_name":"sidekiq-congestion","ecosystem":"rubygems","requirements":"0.1.1","direct":false,"kind":"runtime","optional":false},{"id":6892032887,"package_name":"sidekiq-cron","ecosystem":"rubygems","requirements":"1.8.0","direct":false,"kind":"runtime","optional":false},{"id":6892032889,"package_name":"sidekiq-unique-jobs","ecosystem":"rubygems","requirements":"6.0.25","direct":false,"kind":"runtime","optional":false},{"id":6892032891,"package_name":"spring","ecosystem":"rubygems","requirements":"2.1.1","direct":false,"kind":"runtime","optional":false},{"id":6892032892,"package_name":"spring-commands-rspec","ecosystem":"rubygems","requirements":"1.0.4","direct":false,"kind":"runtime","optional":false},{"id":6892032894,"package_name":"sprockets","ecosystem":"rubygems","requirements":"3.7.2","direct":false,"kind":"runtime","optional":false},{"id":6892032896,"package_name":"sprockets-rails","ecosystem":"rubygems","requirements":"3.4.2","direct":false,"kind":"runtime","optional":false},{"id":6892032897,"package_name":"standby","ecosystem":"rubygems","requirements":"4.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892032899,"package_name":"stringex","ecosystem":"rubygems","requirements":"2.8.5","direct":false,"kind":"runtime","optional":false},{"id":6892032901,"package_name":"strong_migrations","ecosystem":"rubygems","requirements":"0.7.9","direct":false,"kind":"runtime","optional":false},{"id":6892032902,"package_name":"ten_years_rails","ecosystem":"rubygems","requirements":"1.0.2","direct":false,"kind":"runtime","optional":false},{"id":6892032903,"package_name":"thor","ecosystem":"rubygems","requirements":"1.2.1","direct":false,"kind":"runtime","optional":false},{"id":6892032905,"package_name":"thread_safe","ecosystem":"rubygems","requirements":"0.3.6","direct":false,"kind":"runtime","optional":false},{"id":6892032906,"package_name":"timeout","ecosystem":"rubygems","requirements":"0.3.1","direct":false,"kind":"runtime","optional":false},{"id":6892032909,"package_name":"tzinfo","ecosystem":"rubygems","requirements":"1.2.10","direct":false,"kind":"runtime","optional":false},{"id":6892032910,"package_name":"uglifier","ecosystem":"rubygems","requirements":"4.2.0","direct":false,"kind":"runtime","optional":false},{"id":6892032911,"package_name":"unicode-display_width","ecosystem":"rubygems","requirements":"1.8.0","direct":false,"kind":"runtime","optional":false},{"id":6892032913,"package_name":"versionist","ecosystem":"rubygems","requirements":"2.0.1","direct":false,"kind":"runtime","optional":false},{"id":6892032915,"package_name":"warden","ecosystem":"rubygems","requirements":"1.2.9","direct":false,"kind":"runtime","optional":false},{"id":6892032917,"package_name":"webmock","ecosystem":"rubygems","requirements":"3.18.1","direct":false,"kind":"runtime","optional":false},{"id":6892032919,"package_name":"webrick","ecosystem":"rubygems","requirements":"1.7.0","direct":false,"kind":"runtime","optional":false},{"id":6892032920,"package_name":"websocket-driver","ecosystem":"rubygems","requirements":"0.7.5","direct":false,"kind":"runtime","optional":false},{"id":6892032921,"package_name":"websocket-extensions","ecosystem":"rubygems","requirements":"0.1.5","direct":false,"kind":"runtime","optional":false},{"id":6892032923,"package_name":"yard","ecosystem":"rubygems","requirements":"0.9.27","direct":false,"kind":"runtime","optional":false},{"id":6892032924,"package_name":"zoo_stream","ecosystem":"rubygems","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"rubygems","filepath":"docs/Gemfile","sha":null,"kind":"manifest","created_at":"2023-01-14T01:00:15.874Z","updated_at":"2023-01-14T01:00:15.874Z","repository_link":"https://github.com/zooniverse/panoptes/blob/master/docs/Gemfile","dependencies":[{"id":6892033284,"package_name":"middleman","ecosystem":"rubygems","requirements":"~\u003e 4.2","direct":true,"kind":"runtime","optional":false},{"id":6892033285,"package_name":"middleman-autoprefixer","ecosystem":"rubygems","requirements":"~\u003e 3.0","direct":true,"kind":"runtime","optional":false},{"id":6892033286,"package_name":"middleman-sprockets","ecosystem":"rubygems","requirements":"~\u003e 4.0","direct":true,"kind":"runtime","optional":false},{"id":6892033287,"package_name":"middleman-syntax","ecosystem":"rubygems","requirements":"~\u003e 3.0","direct":true,"kind":"runtime","optional":false},{"id":6892033288,"package_name":"nokogiri","ecosystem":"rubygems","requirements":"~\u003e 1.13","direct":true,"kind":"runtime","optional":false},{"id":6892033289,"package_name":"redcarpet","ecosystem":"rubygems","requirements":"~\u003e 3.5","direct":true,"kind":"runtime","optional":false},{"id":6892033290,"package_name":"rouge","ecosystem":"rubygems","requirements":"~\u003e 2.0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"rubygems","filepath":"docs/Gemfile.lock","sha":null,"kind":"lockfile","created_at":"2023-01-14T01:00:16.022Z","updated_at":"2023-01-14T01:00:16.022Z","repository_link":"https://github.com/zooniverse/panoptes/blob/master/docs/Gemfile.lock","dependencies":[{"id":6892033378,"package_name":"activesupport","ecosystem":"rubygems","requirements":"6.1.6","direct":false,"kind":"runtime","optional":false},{"id":6892033379,"package_name":"addressable","ecosystem":"rubygems","requirements":"2.8.0","direct":false,"kind":"runtime","optional":false},{"id":6892033380,"package_name":"autoprefixer-rails","ecosystem":"rubygems","requirements":"10.4.7.0","direct":false,"kind":"runtime","optional":false},{"id":6892033381,"package_name":"backports","ecosystem":"rubygems","requirements":"3.23.0","direct":false,"kind":"runtime","optional":false},{"id":6892033382,"package_name":"coffee-script","ecosystem":"rubygems","requirements":"2.4.1","direct":false,"kind":"runtime","optional":false},{"id":6892033383,"package_name":"coffee-script-source","ecosystem":"rubygems","requirements":"1.12.2","direct":false,"kind":"runtime","optional":false},{"id":6892033384,"package_name":"concurrent-ruby","ecosystem":"rubygems","requirements":"1.1.10","direct":false,"kind":"runtime","optional":false},{"id":6892033385,"package_name":"contracts","ecosystem":"rubygems","requirements":"0.13.0","direct":false,"kind":"runtime","optional":false},{"id":6892033386,"package_name":"dotenv","ecosystem":"rubygems","requirements":"2.7.6","direct":false,"kind":"runtime","optional":false},{"id":6892033387,"package_name":"erubis","ecosystem":"rubygems","requirements":"2.7.0","direct":false,"kind":"runtime","optional":false},{"id":6892033388,"package_name":"execjs","ecosystem":"rubygems","requirements":"2.8.1","direct":false,"kind":"runtime","optional":false},{"id":6892033389,"package_name":"fast_blank","ecosystem":"rubygems","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":6892033390,"package_name":"fastimage","ecosystem":"rubygems","requirements":"2.2.6","direct":false,"kind":"runtime","optional":false},{"id":6892033391,"package_name":"ffi","ecosystem":"rubygems","requirements":"1.15.5","direct":false,"kind":"runtime","optional":false},{"id":6892033392,"package_name":"haml","ecosystem":"rubygems","requirements":"5.2.2","direct":false,"kind":"runtime","optional":false},{"id":6892033393,"package_name":"hamster","ecosystem":"rubygems","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892033394,"package_name":"hashie","ecosystem":"rubygems","requirements":"3.6.0","direct":false,"kind":"runtime","optional":false},{"id":6892033395,"package_name":"i18n","ecosystem":"rubygems","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":6892033396,"package_name":"kramdown","ecosystem":"rubygems","requirements":"2.4.0","direct":false,"kind":"runtime","optional":false},{"id":6892033397,"package_name":"listen","ecosystem":"rubygems","requirements":"3.0.8","direct":false,"kind":"runtime","optional":false},{"id":6892033398,"package_name":"memoist","ecosystem":"rubygems","requirements":"0.16.2","direct":false,"kind":"runtime","optional":false},{"id":6892033399,"package_name":"middleman","ecosystem":"rubygems","requirements":"4.4.2","direct":false,"kind":"runtime","optional":false},{"id":6892033400,"package_name":"middleman-autoprefixer","ecosystem":"rubygems","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892033401,"package_name":"middleman-cli","ecosystem":"rubygems","requirements":"4.4.2","direct":false,"kind":"runtime","optional":false},{"id":6892033402,"package_name":"middleman-core","ecosystem":"rubygems","requirements":"4.4.2","direct":false,"kind":"runtime","optional":false},{"id":6892033403,"package_name":"middleman-sprockets","ecosystem":"rubygems","requirements":"4.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892033404,"package_name":"middleman-syntax","ecosystem":"rubygems","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892033405,"package_name":"mini_portile2","ecosystem":"rubygems","requirements":"2.8.0","direct":false,"kind":"runtime","optional":false},{"id":6892033406,"package_name":"minitest","ecosystem":"rubygems","requirements":"5.16.2","direct":false,"kind":"runtime","optional":false},{"id":6892033407,"package_name":"nokogiri","ecosystem":"rubygems","requirements":"1.13.10","direct":false,"kind":"runtime","optional":false},{"id":6892033409,"package_name":"padrino-helpers","ecosystem":"rubygems","requirements":"0.15.1","direct":false,"kind":"runtime","optional":false},{"id":6892033410,"package_name":"padrino-support","ecosystem":"rubygems","requirements":"0.15.1","direct":false,"kind":"runtime","optional":false},{"id":6892033412,"package_name":"parallel","ecosystem":"rubygems","requirements":"1.22.1","direct":false,"kind":"runtime","optional":false},{"id":6892033414,"package_name":"parslet","ecosystem":"rubygems","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":6892033415,"package_name":"public_suffix","ecosystem":"rubygems","requirements":"4.0.7","direct":false,"kind":"runtime","optional":false},{"id":6892033416,"package_name":"racc","ecosystem":"rubygems","requirements":"1.6.1","direct":false,"kind":"runtime","optional":false},{"id":6892033417,"package_name":"rack","ecosystem":"rubygems","requirements":"2.2.4","direct":false,"kind":"runtime","optional":false},{"id":6892033418,"package_name":"rb-fsevent","ecosystem":"rubygems","requirements":"0.11.1","direct":false,"kind":"runtime","optional":false},{"id":6892033419,"package_name":"rb-inotify","ecosystem":"rubygems","requirements":"0.10.1","direct":false,"kind":"runtime","optional":false},{"id":6892033420,"package_name":"redcarpet","ecosystem":"rubygems","requirements":"3.5.1","direct":false,"kind":"runtime","optional":false},{"id":6892033421,"package_name":"rexml","ecosystem":"rubygems","requirements":"3.2.5","direct":false,"kind":"runtime","optional":false},{"id":6892033422,"package_name":"rouge","ecosystem":"rubygems","requirements":"2.2.1","direct":false,"kind":"runtime","optional":false},{"id":6892033423,"package_name":"sassc","ecosystem":"rubygems","requirements":"2.4.0","direct":false,"kind":"runtime","optional":false},{"id":6892033424,"package_name":"servolux","ecosystem":"rubygems","requirements":"0.13.0","direct":false,"kind":"runtime","optional":false},{"id":6892033425,"package_name":"sprockets","ecosystem":"rubygems","requirements":"4.1.1","direct":false,"kind":"runtime","optional":false},{"id":6892033426,"package_name":"temple","ecosystem":"rubygems","requirements":"0.8.2","direct":false,"kind":"runtime","optional":false},{"id":6892033428,"package_name":"thor","ecosystem":"rubygems","requirements":"1.2.1","direct":false,"kind":"runtime","optional":false},{"id":6892033430,"package_name":"tilt","ecosystem":"rubygems","requirements":"2.0.10","direct":false,"kind":"runtime","optional":false},{"id":6892033431,"package_name":"toml","ecosystem":"rubygems","requirements":"0.3.0","direct":false,"kind":"runtime","optional":false},{"id":6892033434,"package_name":"tzinfo","ecosystem":"rubygems","requirements":"2.0.4","direct":false,"kind":"runtime","optional":false},{"id":6892033435,"package_name":"uglifier","ecosystem":"rubygems","requirements":"3.2.0","direct":false,"kind":"runtime","optional":false},{"id":6892033436,"package_name":"webrick","ecosystem":"rubygems","requirements":"1.7.0","direct":false,"kind":"runtime","optional":false},{"id":6892033437,"package_name":"zeitwerk","ecosystem":"rubygems","requirements":"2.6.0","direct":false,"kind":"runtime","optional":false}]}],"score":8.881002624255569,"created_at":"2026-04-25T14:17:02.631Z","updated_at":"2026-05-13T06:02:53.186Z","avatar_url":"https://github.com/zooniverse.png","language":"Ruby","category":"Biosphere","sub_category":"Biodiversity Citizen Science","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# Panoptes ![Build Status](https://github.com/zooniverse/panoptes/actions/workflows/run_tests_CI.yml/badge.svg?branch=master)\n\nThe new Zooniverse API for supporting user-created projects.\n\n## Documentation\n\nThe Panoptes public API is documented [here](https://zooniverse.github.io/panoptes/#introduction).\n\n## Requirements\n\nSince Panoptes uses Docker to manage its environment, the requirements listed below are also found in `docker-compose.yml`. The means by which a new Panoptes instance is created with Docker is located in the `Dockerfile`. If you plan on using Docker to manage Panoptes, skip ahead to Installation.\n\nPanoptes is primarily developed against stable MRI. If you're running MRI Ruby you'll need to have the Postgresql client libraries installed as well as have [Postgresql](http://postgresql.org) version 11 running.\n\n* Ubuntu/Debian: `apt-get install libpq-dev`\n* OS X (with [homebrew](http://homebrew.io)): `brew install postgresql`\n\n## Installation\n\nWe only support running Panoptes via Docker and Docker Compose. If you'd like to run it outside a container, see the above Requirements sections to get started.\n\n### Setup Docker and Docker Compose\n\n* [Docker](https://docs.docker.com/get-docker/)\n* [Docker Compose](https://docs.docker.com/compose/)\n\n#### Usage\n\n1. Clone the repository `git clone https://github.com/zooniverse/Panoptes`.\n\n0. Install Docker from the appropriate link above.\n\n0. `cd` into the cloned folder.\n\n0. Run `docker-compose build` to build the containers Panoptes API container. You will need to re-run this command on any changes to `Dockerfile.dev`\n\n0. Install the gem dependencies for the application\n    * Run: `docker-compose run --rm panoptes bundle install`\n\n0. Setup the configuration files via a rake task\n    * Run: `docker-compose run --rm panoptes bundle exec rake configure:local`\n\n0. Create and run the application containers with `docker-compose up`\n\n0. If the above step reports a missing database error, kill the docker-compose process or open a new terminal window in the current directory and then run `docker-compose run --rm panoptes bundle exec rake db:setup` to setup the database. This command will launch a new Docker container, run the rake DB setup task, and then clean up the container.\n\n0. To seed the development database with an Admin user and a Doorkeeper client application for API access run `docker-compose run --rm panoptes bundle exec rails runner db/dev_seed_data/dev_seed_data.rb`\n\n0. Open up the application in your browser at http://localhost:3000\n\nOnce all the above steps complete you will have a working copy of the checked out code base. Keep your code up to date and rebuild the image on any code or configuration changes.\n\n## Testing\n\nThere are multiple options for setting up a testing environment:\n\n1. Run it entirely from within docker-compose:\n    1. Run `docker-compose build` to build the panoptes container.\n    0. Install the gem dependencies for the application\n        * Run: `docker-compose run --rm panoptes bundle install`\n    0. Create config files if you don't already have them, run `docker-compose run --rm -e RAILS_ENV=test panoptes bundle exec rake configure:local`\n    0. To create the testing database, run `docker-compose run --rm -e RAILS_ENV=test panoptes bundle exec rake db:setup`\n    0. Run the full spec suite `docker-compose run -T --rm -e RAILS_ENV=test panoptes bundle exec rspec` noting that running all tests is slow.\n        * Use rspec focus keyword in your specs or specify the spec you want to run, e.g. `docker-compose run -T --rm -e RAILS_ENV=test panoptes rspec path/to/spec/file.rb`\n\n0. Use docker to run a testing environment bash shell and run test commands .\n    1. Run `docker-compose run --service-ports --rm -e RAILS_ENV=test panoptes bash` to start the containers\n    0. Run `bundle exec rspec` to run the full test suite\n\n0. Use parts of docker-compose manually and wire them up manually to create a testing environment.\n    1. Run `docker-compose run -d --name postgres --service-ports postgres` to start the postgres container\n    0. Run `docker-compose run -T --rm -e RAILS_ENV=test panoptes bundle exec rspec` to run the full test suite\n\n0. Assuming you have the correct Ruby environment already setup:\n    1. Run `bundle install`\n    0. Start the docker Postgres container by running `docker-compose run -d --name postgres --service-ports postgres` or run your own\n    0. Create config files if you don't already have them, run `bundle exec rake configure:local`\n    0. Create doorkeeper keys, run `bundle exec rake configure:doorkeeper_keys`\n    0. Modify your `config/database.yml` test env to point to the running Postgres server, e.g. `host: localhost`\n    0. Setup the testing database if you haven't already, by running `RAILS_ENV=test rake db:setup`\n    0. Finally, run rspec with `RAILS_ENV=test rspec`\n\n## Rails 5\n\nUsing the gem https://github.com/clio/ten_years_rails to help with the upgrade path\nhttps://www.youtube.com/watch?v=6aCfc0DkSFo\n\n#### Using docker-compose for env setup\n\n`docker-compose -f docker-compose-rails-next.yml build`\n\n`docker-compose -f docker-compose-rails-next.yml run --service-ports --rm panoptes bash`\n\n#### Install the gems via next\n\n`BUNDLE_GEMFILE=Gemfile.next bundle install`\n\nor\n\n`next bundle install`\n\n### check for incompatible gems for target rails verion\n\n`BUNDLE_GEMFILE=Gemfile.next bundle exec bundle_report compatibility --rails-version=5.0.7`\n\nor\n\n`next bundle exec bundle_report compatibility --rails-version=5.0.7`\n\n### check for outdated gems\n\n`BUNDLE_GEMFILE=Gemfile.next bundle exec bundle_report outdated`\n\nor\n\n`next bundle exec bundle_report outdated`\n\n#### Run the specs\n\nIt's recommeded to enable spring for testing env\n`unset DISABLE_SPRING`\nrun all specs for rails 5 gemfile\n`BUNDLE_GEMFILE=Gemfile.next bundle exec rspec`\n\nor\n\n`next bundle exec rspec`\n\nor fail fast\n`BUNDLE_GEMFILE=Gemfile.next bundle exec rspec --fail-fast`\n\nor\n\n`next bundle exec rspec --fail-fast`\n\nor with gaurd (recommended to enable spring)\n`BUNDLE_GEMFILE=Gemfile.next bundle exec guard --no-interactions`\n\nor\n\n`next bundle exec guard --no-interactions`\n\n#### Boot the rails app\n\n#### Via Rails server\n\n`BUNDLE_GEMFILE=Gemfile.next rails s`\n\nor\n\n`next rails s`\n\n#### Via Puma\n\n`BUNDLE_GEMFILE=Gemfile.next bundle exec puma -C config/puma.rb`\n\nor\n\n`next bundle exec puma -C config/puma.rb`\n\n## Contributing\n\nThanks a bunch for wanting to help Zooniverse. Here are few quick guidelines to start working on our project:\n\n0. Fork the Project on Github.\n0. Clone the code and follow one of the above guides to setup a dev environment.\n0. Create a new git branch and make your changes.\n0. Make sure the tests still pass by running `bundle exec rspec`.\n0. Add tests if you introduced new functionality.\n0. Commit your changes. Try to make your commit message [informative](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html), but we're not sticklers about it. Do try to to add `Closes #issue` or `Fixes #issue` somewhere in your message if it's addressing a specific open issue.\n0. Submit a Pull Request\n0. Wait for feedback or a merge!\n\nYour Pull Request will run via github actions.\n\n## License\n\nCopyright by the Zooniverse\n\nDistributed under the Apache Public License v2. See LICENSE\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["activerecord"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/352844","html_url":"https://ost.ecosyste.ms/projects/352844"}