{"id":20670,"name":"Safecast","description":"Building out a network of sensors to monitor particulate matter in sizes PM1.0, PM2.5, PM10.","url":"https://github.com/Safecast/safecastapi","last_synced_at":"2026-04-28T12:30:41.994Z","repository":{"id":1923273,"uuid":"2851358","full_name":"Safecast/safecastapi","owner":"Safecast","description":"The app that powers api.safecast.org","archived":false,"fork":false,"pushed_at":"2025-05-23T23:40:03.000Z","size":5433,"stargazers_count":45,"open_issues_count":150,"forks_count":25,"subscribers_count":40,"default_branch":"main","last_synced_at":"2025-10-23T12:34:35.462Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/Safecast.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"custom":["https://safecast.org/donate/"]}},"created_at":"2011-11-25T18:04:30.000Z","updated_at":"2025-09-01T20:51:02.000Z","dependencies_parsed_at":"2024-01-08T00:51:15.914Z","dependency_job_id":"81ed8c66-726b-4d1f-9aea-90cb91546a1a","html_url":"https://github.com/Safecast/safecastapi","commit_stats":{"total_commits":2126,"total_committers":39,"mean_commits":54.51282051282051,"dds":0.7845719661335842,"last_synced_commit":"6cf3612427b8d05c4855d491646f40da74a16987"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/Safecast/safecastapi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Safecast%2Fsafecastapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Safecast%2Fsafecastapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Safecast%2Fsafecastapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Safecast%2Fsafecastapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Safecast","download_url":"https://codeload.github.com/Safecast/safecastapi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Safecast%2Fsafecastapi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281584979,"owners_count":26526171,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-29T02:00:06.901Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":"Safecast","name":"Safecast","uuid":"959637","kind":"organization","description":"Safecast open software and hardware repository","email":"info@safecast.org","website":"http://safecast.org","location":"Japan","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/959637?v=4","repositories_count":68,"last_synced_at":"2024-04-14T15:24:24.001Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/Safecast","funding_links":[],"total_stars":314,"followers":40,"following":0,"created_at":"2022-11-03T02:51:40.231Z","updated_at":"2024-04-14T15:24:31.558Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Safecast","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Safecast/repositories"},"packages":[],"commits":{"id":1254497,"full_name":"Safecast/safecastapi","default_branch":"main","total_commits":2126,"total_committers":39,"total_bot_commits":118,"total_bot_committers":2,"mean_commits":54.51282051282051,"dds":0.7845719661335842,"past_year_total_commits":0,"past_year_total_committers":0,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":0.0,"past_year_dds":0.0,"last_synced_at":"2025-10-29T04:40:24.509Z","last_synced_commit":"6cf3612427b8d05c4855d491646f40da74a16987","created_at":"2023-03-27T11:48:15.650Z","updated_at":"2025-10-29T04:38:48.835Z","committers":[{"name":"Eito Katagiri","email":"eitoball@gmail.com","login":"eitoball","count":458},{"name":"Paul Campbell","email":"paul@rslw.com","login":"paulca","count":436},{"name":"Mat Schaffer","email":"mat@schaffer.me","login":"matschaffer","count":263},{"name":"Frangible","email":"ndolezal@gmail.com","login":"Frangible","count":181},{"name":"rknLA","email":"kevin@rkn.la","login":null,"count":154},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":116},{"name":"zxc8207","email":"zxc8207@g.rit.edu","login":"ZacharyCChang0828","count":79},{"name":"Nakushi64","email":"40150445+Nakushi64","login":"Nakushi64","count":61},{"name":"Andrew Todd","email":"at@auspicacious.org","login":"auspicacious","count":42},{"name":"Rob Oudendijk","email":"rob@yr-design.biz","login":"robouden","count":41},{"name":"philipp","email":"philipp@nowhere.co.jp","login":"Pheipp","count":39},{"name":"sasharevzin","email":"sasha.nike@gmail.com","login":"sasharevzin","count":39},{"name":"Eoin Hennessy","email":"eoin.hennessy@gmail.com","login":"eoin","count":32},{"name":"Robin","email":"rdeskins17@gmail.com","login":"rdeskins","count":27},{"name":"Eli Wang","email":"eli@ekohe.com","login":"Xenofex","count":22},{"name":"Steven Wright","email":"sbw312@nyu.edu","login":"Steven-Wright","count":20},{"name":"Benjamin Dubois","email":"bd@jsidd.com","login":"jsidd","count":19},{"name":"Brian Flanagan","email":"briantf@me.com","login":null,"count":18},{"name":"Haiyan Zhang","email":"haiyan@gmail.com","login":"haiyan","count":15},{"name":"Evadne Wu","email":"ev@radi.ws","login":"evadne","count":14},{"name":"Kalin KOZHUHAROV","email":"me.kalin@gmail.com","login":"thinrope","count":10},{"name":"Sean Bonner","email":"sean@seanbonner.com","login":"seanbonner","count":5},{"name":"Anthony DeVincenzi","email":"tonydev@gmail.com","login":"tonydevincenzi","count":4},{"name":"Dimitri Bosch","email":"dimitribosch@hotmail.com","login":"db0sch","count":4},{"name":"Anditto Heristyo","email":"anditto.heristyo@gmail.com","login":"anditto","count":3},{"name":"akuab","email":"adu.akuabiaa@ic.edu","login":"AkuaBiaa","count":3},{"name":"philipp","email":"heisephilipp@web.de","login":null,"count":3},{"name":"vagrant","email":"vagrant@precise64.(none)","login":null,"count":3},{"name":"kevin nelson","email":"kevin@soundcyst.com","login":null,"count":2},{"name":"fakufaku","email":"fakufaku@gmail.com","login":"fakufaku","count":2},{"name":"dependabot[bot]","email":"support@dependabot.com","login":"dependabot-support","count":2},{"name":"code-anth","email":"guilherme.heurich@protonmail.com","login":"GuiHeurich","count":2},{"name":"Chris Gebhardt","email":"ckg61386@gmail.com","login":"cgeb","count":1},{"name":"KETHER CORTEX","email":"kaneuainhd@gmail.com","login":"KETHERCORTEX","count":1},{"name":"Takayuki Matsubara","email":"takayuki.1229@gmail.com","login":"ma2gedev","count":1},{"name":"root","email":"root@dev.safecast.org","login":null,"count":1},{"name":"Awesome Code","email":"team@xinminlabs.com","login":null,"count":1},{"name":"Charles Green","email":"cg@simplycubed.com","login":"charlesgreen","count":1},{"name":"Yoko Harada","email":"yokolet@gmail.com","login":"yokolet","count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/Safecast%2Fsafecastapi/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-10-29T00:00:18.766Z","repositories_count":6089584,"commits_count":922516440,"contributors_count":35983866,"owners_count":1109633,"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":"Safecast/safecastapi","html_url":"https://github.com/Safecast/safecastapi","last_synced_at":"2025-10-18T20:00:09.594Z","status":"error","issues_count":443,"pull_requests_count":591,"avg_time_to_close_issue":29030787.74025974,"avg_time_to_close_pull_request":2506903.172173913,"issues_closed_count":308,"pull_requests_closed_count":575,"pull_request_authors_count":32,"issue_authors_count":39,"avg_comments_per_issue":3.0474040632054176,"avg_comments_per_pull_request":1.248730964467005,"merged_pull_requests_count":494,"bot_issues_count":0,"bot_pull_requests_count":158,"past_year_issues_count":3,"past_year_pull_requests_count":2,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":2,"past_year_avg_comments_per_issue":3.6666666666666665,"past_year_avg_comments_per_pull_request":1.5,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2023-05-09T10:38:30.201Z","updated_at":"2025-10-18T20:00:09.595Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/Safecast%2Fsafecastapi","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/Safecast%2Fsafecastapi/issues","issue_labels_count":{"project:api":102,"project:ingest":46,"bug":34,"Feature Request":32,"Help Wanted":24,"ops":21,"For Discussion":19,"req:pieter":14,"req:jam":12,"project:reporting":7,"device-stories":4,"req:sean":2,"ux":2,"project:realtime":1,"project:map":1,"req:azby":1},"pull_request_labels_count":{"dependencies":146,"project:api":75,"ruby":67,"bug":12,"ops":5,"github_actions":4,"device-stories":4,"For Discussion":2,"Feature Request":1,"ux":1},"issue_author_associations_count":{"CONTRIBUTOR":237,"MEMBER":164,"NONE":28,"COLLABORATOR":14},"pull_request_author_associations_count":{"CONTRIBUTOR":333,"MEMBER":210,"COLLABORATOR":23,"NONE":22},"issue_authors":{"matschaffer":174,"nokton":48,"seanbonner":33,"robouden":30,"thinrope":21,"sohlis":18,"auspicacious":14,"haiyan":13,"sasharevzin":13,"fakufaku":9,"Frangible":8,"rknLA":8,"Lugulbanda":6,"sarveswaran-m":6,"eitoball":5,"juhele":3,"fobrs":3,"paulca":3,"Steven-Wright":3,"tonydevincenzi":3,"elafargue":2,"jsidd":2,"evadne":2,"shmcminn":1,"Morred":1,"lbrichards":1,"yangjiel":1,"eyesjapan-admin":1,"anaavu":1,"charlesgreen":1,"mcrollin":1,"sakshamg94":1,"rdeskins":1,"denvazh":1,"Xenofex":1,"atx":1,"julovi":1,"KETHERCORTEX":1,"bidouilles":1},"pull_request_authors":{"eitoball":199,"dependabot[bot]":140,"matschaffer":78,"Frangible":27,"ZacharyCChang0828":17,"dependabot-preview[bot]":16,"sasharevzin":16,"auspicacious":15,"Nakushi64":14,"robouden":12,"Pheipp":9,"rdeskins":7,"jsidd":5,"thinrope":4,"db0sch":3,"AkuaBiaa":3,"GuiHeurich":3,"fakufaku":2,"Steven-Wright":2,"rknLA":2,"KristofKekesi":2,"paulca":2,"absalomshu":1,"borisu0815":1,"KETHERCORTEX":1,"evadne":1,"charlesgreen":1,"cgeb":1,"ma2gedev":1,"begriffs":1,"anditto":1,"waffle-iron":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-10-24T00:00:23.297Z","repositories_count":11149186,"issues_count":34720250,"pull_requests_count":112571654,"authors_count":11041066,"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":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"CONTRIBUTOR":2},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":2},"past_year_issue_authors":{"robouden":2},"past_year_pull_request_authors":{"matschaffer":2},"maintainers":[{"login":"eitoball","count":204,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/eitoball"},{"login":"nokton","count":48,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/nokton"},{"login":"seanbonner","count":33,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/seanbonner"},{"login":"sasharevzin","count":29,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/sasharevzin"},{"login":"thinrope","count":25,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/thinrope"},{"login":"sohlis","count":18,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/sohlis"},{"login":"haiyan","count":13,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/haiyan"},{"login":"fakufaku","count":11,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/fakufaku"},{"login":"rknLA","count":10,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/rknLA"},{"login":"paulca","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/paulca"},{"login":"evadne","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/evadne"},{"login":"tonydevincenzi","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tonydevincenzi"},{"login":"db0sch","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/db0sch"},{"login":"AkuaBiaa","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/AkuaBiaa"},{"login":"bidouilles","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/bidouilles"},{"login":"ma2gedev","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ma2gedev"},{"login":"Morred","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Morred"}],"active_maintainers":[]},"events":{"total":{"IssuesEvent":1,"IssueCommentEvent":5,"PushEvent":8,"PullRequestEvent":1,"GollumEvent":11,"CreateEvent":1},"last_year":{"IssuesEvent":1,"IssueCommentEvent":5,"PushEvent":8,"PullRequestEvent":1,"GollumEvent":11,"CreateEvent":1}},"keywords":[],"dependencies":[{"ecosystem":"pypi","filepath":"doc/upload_demo/requirements.txt","sha":null,"kind":"manifest","created_at":"2022-08-06T11:15:57.384Z","updated_at":"2022-08-06T11:15:57.384Z","repository_link":"https://github.com/Safecast/safecastapi/blob/main/doc/upload_demo/requirements.txt","dependencies":[{"id":584791083,"package_name":"requests","ecosystem":"pypi","requirements":"\u003e=2.20.0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"rubygems","filepath":"Gemfile","sha":null,"kind":"manifest","created_at":"2022-08-06T11:15:57.393Z","updated_at":"2022-08-06T11:15:57.393Z","repository_link":"https://github.com/Safecast/safecastapi/blob/main/Gemfile","dependencies":[{"id":584791086,"package_name":"rails","ecosystem":"rubygems","requirements":"~\u003e 6.0.3.7","direct":true,"kind":"runtime","optional":false},{"id":584791087,"package_name":"activerecord-postgis-adapter","ecosystem":"rubygems","requirements":"~\u003e 6.0","direct":true,"kind":"runtime","optional":false},{"id":584791088,"package_name":"aws-sdk-elasticbeanstalk","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791089,"package_name":"aws-sdk-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791090,"package_name":"aws-sdk-s3","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791091,"package_name":"bootsnap","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791092,"package_name":"bootstrap3-datetimepicker-rails","ecosystem":"rubygems","requirements":"~\u003e 4.17.47","direct":true,"kind":"runtime","optional":false},{"id":584791093,"package_name":"bootstrap-kaminari-views","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791094,"package_name":"bootstrap-sass","ecosystem":"rubygems","requirements":"~\u003e 3.4.1","direct":true,"kind":"runtime","optional":false},{"id":584791095,"package_name":"cancan","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791096,"package_name":"carrierwave","ecosystem":"rubygems","requirements":"~\u003e 1.3.2","direct":true,"kind":"runtime","optional":false},{"id":584791097,"package_name":"chartkick","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791098,"package_name":"coffee-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791099,"package_name":"listen","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791100,"package_name":"csv_builder","ecosystem":"rubygems","requirements":"~\u003e 2.1.1","direct":true,"kind":"runtime","optional":false},{"id":584791101,"package_name":"decent_exposure","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791102,"package_name":"delayed_job","ecosystem":"rubygems","requirements":"~\u003e 4.1.3","direct":true,"kind":"runtime","optional":false},{"id":584791103,"package_name":"delayed_job_active_record","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791104,"package_name":"devise","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791105,"package_name":"devise-i18n","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791106,"package_name":"devise-token_authenticatable","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791107,"package_name":"dotenv-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791108,"package_name":"draper","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791109,"package_name":"elasticsearch-model","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791110,"package_name":"fog-aws","ecosystem":"rubygems","requirements":"~\u003e 2.0.0","direct":true,"kind":"runtime","optional":false},{"id":584791111,"package_name":"formatted-dates","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791112,"package_name":"groupdate","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791113,"package_name":"has_scope","ecosystem":"rubygems","requirements":"~\u003e 0.7.1","direct":true,"kind":"runtime","optional":false},{"id":584791114,"package_name":"jbuilder","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791115,"package_name":"jquery-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791116,"package_name":"json","ecosystem":"rubygems","requirements":"= 2.3.0","direct":true,"kind":"runtime","optional":false},{"id":584791117,"package_name":"kaminari","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791118,"package_name":"mini_magick","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791119,"package_name":"momentjs-rails","ecosystem":"rubygems","requirements":"\u003e= 2.9.0","direct":true,"kind":"runtime","optional":false},{"id":584791120,"package_name":"newrelic_rpm","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791121,"package_name":"pg","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791122,"package_name":"puma","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791123,"package_name":"rails_admin","ecosystem":"rubygems","requirements":"~\u003e 2.0.0","direct":true,"kind":"runtime","optional":false},{"id":584791124,"package_name":"rakismet","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791125,"package_name":"responders","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791126,"package_name":"rubyzip","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791127,"package_name":"sass-rails","ecosystem":"rubygems","requirements":"~\u003e 5.0","direct":true,"kind":"runtime","optional":false},{"id":584791128,"package_name":"simple_form","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791129,"package_name":"swagger-blocks","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791130,"package_name":"uglifier","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791131,"package_name":"elastic-apm","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584791132,"package_name":"pry-byebug","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791133,"package_name":"pry-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791134,"package_name":"rubocop","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791135,"package_name":"rubocop-performance","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791136,"package_name":"rubocop-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791137,"package_name":"rubocop-rspec","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791138,"package_name":"spring","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791139,"package_name":"spring-watcher-listen","ecosystem":"rubygems","requirements":"~\u003e 2.0.0","direct":true,"kind":"development","optional":false},{"id":584791140,"package_name":"capybara","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791141,"package_name":"codeclimate-test-reporter","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791142,"package_name":"database_cleaner","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791143,"package_name":"email_spec","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791144,"package_name":"fabrication","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791145,"package_name":"rails-controller-testing","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791146,"package_name":"rspec-its","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791147,"package_name":"rspec_junit_formatter","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791148,"package_name":"rspec-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791149,"package_name":"spring-commands-rspec","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":584791150,"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":"2022-08-06T11:15:57.419Z","updated_at":"2022-08-06T11:15:57.419Z","repository_link":"https://github.com/Safecast/safecastapi/blob/main/Gemfile.lock","dependencies":[{"id":584791280,"package_name":"pg","ecosystem":"rubygems","requirements":"1.2.3","direct":false,"kind":"runtime","optional":false},{"id":584791281,"package_name":"pry","ecosystem":"rubygems","requirements":"0.13.1","direct":false,"kind":"runtime","optional":false},{"id":584791282,"package_name":"pry-byebug","ecosystem":"rubygems","requirements":"3.9.0","direct":false,"kind":"runtime","optional":false},{"id":584791283,"package_name":"pry-rails","ecosystem":"rubygems","requirements":"0.3.9","direct":false,"kind":"runtime","optional":false},{"id":584791284,"package_name":"public_suffix","ecosystem":"rubygems","requirements":"4.0.6","direct":false,"kind":"runtime","optional":false},{"id":584791285,"package_name":"puma","ecosystem":"rubygems","requirements":"4.3.12","direct":false,"kind":"runtime","optional":false},{"id":584791286,"package_name":"racc","ecosystem":"rubygems","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":584791287,"package_name":"rack","ecosystem":"rubygems","requirements":"2.2.3.1","direct":false,"kind":"runtime","optional":false},{"id":584791288,"package_name":"rack-pjax","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":584791289,"package_name":"rack-test","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":584791290,"package_name":"rails","ecosystem":"rubygems","requirements":"6.0.3.7","direct":false,"kind":"runtime","optional":false},{"id":584791291,"package_name":"rails-controller-testing","ecosystem":"rubygems","requirements":"1.0.4","direct":false,"kind":"runtime","optional":false},{"id":584791292,"package_name":"rails-dom-testing","ecosystem":"rubygems","requirements":"2.0.3","direct":false,"kind":"runtime","optional":false},{"id":584791293,"package_name":"rails-html-sanitizer","ecosystem":"rubygems","requirements":"1.4.3","direct":false,"kind":"runtime","optional":false},{"id":584791294,"package_name":"rails_admin","ecosystem":"rubygems","requirements":"2.0.2","direct":false,"kind":"runtime","optional":false},{"id":584791295,"package_name":"railties","ecosystem":"rubygems","requirements":"6.0.3.7","direct":false,"kind":"runtime","optional":false},{"id":584791296,"package_name":"rainbow","ecosystem":"rubygems","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":584791297,"package_name":"rake","ecosystem":"rubygems","requirements":"13.0.6","direct":false,"kind":"runtime","optional":false},{"id":584791298,"package_name":"rakismet","ecosystem":"rubygems","requirements":"1.5.4","direct":false,"kind":"runtime","optional":false},{"id":584791299,"package_name":"rb-fsevent","ecosystem":"rubygems","requirements":"0.10.4","direct":false,"kind":"runtime","optional":false},{"id":584791300,"package_name":"rb-inotify","ecosystem":"rubygems","requirements":"0.10.1","direct":false,"kind":"runtime","optional":false},{"id":584791301,"package_name":"regexp_parser","ecosystem":"rubygems","requirements":"2.1.1","direct":false,"kind":"runtime","optional":false},{"id":584791302,"package_name":"remotipart","ecosystem":"rubygems","requirements":"1.4.4","direct":false,"kind":"runtime","optional":false},{"id":584791303,"package_name":"request_store","ecosystem":"rubygems","requirements":"1.5.0","direct":false,"kind":"runtime","optional":false},{"id":584791304,"package_name":"responders","ecosystem":"rubygems","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":584791305,"package_name":"rexml","ecosystem":"rubygems","requirements":"3.2.5","direct":false,"kind":"runtime","optional":false},{"id":584791306,"package_name":"rgeo","ecosystem":"rubygems","requirements":"2.2.0","direct":false,"kind":"runtime","optional":false},{"id":584791307,"package_name":"rgeo-activerecord","ecosystem":"rubygems","requirements":"6.2.2","direct":false,"kind":"runtime","optional":false},{"id":584791308,"package_name":"rspec-core","ecosystem":"rubygems","requirements":"3.10.1","direct":false,"kind":"runtime","optional":false},{"id":584791309,"package_name":"rspec-expectations","ecosystem":"rubygems","requirements":"3.10.1","direct":false,"kind":"runtime","optional":false},{"id":584791310,"package_name":"rspec-its","ecosystem":"rubygems","requirements":"1.3.0","direct":false,"kind":"runtime","optional":false},{"id":584791311,"package_name":"rspec-mocks","ecosystem":"rubygems","requirements":"3.10.1","direct":false,"kind":"runtime","optional":false},{"id":584791312,"package_name":"rspec-rails","ecosystem":"rubygems","requirements":"4.0.2","direct":false,"kind":"runtime","optional":false},{"id":584791313,"package_name":"rspec-support","ecosystem":"rubygems","requirements":"3.10.1","direct":false,"kind":"runtime","optional":false},{"id":584791314,"package_name":"rspec_junit_formatter","ecosystem":"rubygems","requirements":"0.4.1","direct":false,"kind":"runtime","optional":false},{"id":584791315,"package_name":"rubocop","ecosystem":"rubygems","requirements":"1.12.1","direct":false,"kind":"runtime","optional":false},{"id":584791316,"package_name":"rubocop-ast","ecosystem":"rubygems","requirements":"1.4.1","direct":false,"kind":"runtime","optional":false},{"id":584791317,"package_name":"rubocop-performance","ecosystem":"rubygems","requirements":"1.10.2","direct":false,"kind":"runtime","optional":false},{"id":584791318,"package_name":"rubocop-rails","ecosystem":"rubygems","requirements":"2.9.1","direct":false,"kind":"runtime","optional":false},{"id":584791319,"package_name":"rubocop-rspec","ecosystem":"rubygems","requirements":"2.2.0","direct":false,"kind":"runtime","optional":false},{"id":584791320,"package_name":"ruby-progressbar","ecosystem":"rubygems","requirements":"1.11.0","direct":false,"kind":"runtime","optional":false},{"id":584791321,"package_name":"rubyzip","ecosystem":"rubygems","requirements":"2.3.2","direct":false,"kind":"runtime","optional":false},{"id":584791322,"package_name":"sass","ecosystem":"rubygems","requirements":"3.7.4","direct":false,"kind":"runtime","optional":false},{"id":584791323,"package_name":"sass-listen","ecosystem":"rubygems","requirements":"4.0.0","direct":false,"kind":"runtime","optional":false},{"id":584791324,"package_name":"sass-rails","ecosystem":"rubygems","requirements":"5.1.0","direct":false,"kind":"runtime","optional":false},{"id":584791325,"package_name":"sassc","ecosystem":"rubygems","requirements":"2.4.0","direct":false,"kind":"runtime","optional":false},{"id":584791326,"package_name":"sassc-rails","ecosystem":"rubygems","requirements":"2.1.2","direct":false,"kind":"runtime","optional":false},{"id":584791327,"package_name":"simple_form","ecosystem":"rubygems","requirements":"5.0.2","direct":false,"kind":"runtime","optional":false},{"id":584791328,"package_name":"simplecov","ecosystem":"rubygems","requirements":"0.13.0","direct":false,"kind":"runtime","optional":false},{"id":584791329,"package_name":"simplecov-html","ecosystem":"rubygems","requirements":"0.10.2","direct":false,"kind":"runtime","optional":false},{"id":584791330,"package_name":"spring","ecosystem":"rubygems","requirements":"2.1.1","direct":false,"kind":"runtime","optional":false},{"id":584791331,"package_name":"spring-commands-rspec","ecosystem":"rubygems","requirements":"1.0.4","direct":false,"kind":"runtime","optional":false},{"id":584791332,"package_name":"spring-watcher-listen","ecosystem":"rubygems","requirements":"2.0.1","direct":false,"kind":"runtime","optional":false},{"id":584791333,"package_name":"sprockets","ecosystem":"rubygems","requirements":"3.7.2","direct":false,"kind":"runtime","optional":false},{"id":584791334,"package_name":"sprockets-rails","ecosystem":"rubygems","requirements":"3.2.2","direct":false,"kind":"runtime","optional":false},{"id":584791335,"package_name":"ssrf_filter","ecosystem":"rubygems","requirements":"1.0.7","direct":false,"kind":"runtime","optional":false},{"id":584791336,"package_name":"swagger-blocks","ecosystem":"rubygems","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":584791337,"package_name":"temple","ecosystem":"rubygems","requirements":"0.8.2","direct":false,"kind":"runtime","optional":false},{"id":584791338,"package_name":"thor","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":584791339,"package_name":"thread_safe","ecosystem":"rubygems","requirements":"0.3.6","direct":false,"kind":"runtime","optional":false},{"id":584791340,"package_name":"tilt","ecosystem":"rubygems","requirements":"2.0.10","direct":false,"kind":"runtime","optional":false},{"id":584791341,"package_name":"tzinfo","ecosystem":"rubygems","requirements":"1.2.10","direct":false,"kind":"runtime","optional":false},{"id":584791342,"package_name":"tzinfo-data","ecosystem":"rubygems","requirements":"1.2020.1","direct":false,"kind":"runtime","optional":false},{"id":584791343,"package_name":"uglifier","ecosystem":"rubygems","requirements":"4.2.0","direct":false,"kind":"runtime","optional":false},{"id":584791344,"package_name":"unf","ecosystem":"rubygems","requirements":"0.1.4","direct":false,"kind":"runtime","optional":false},{"id":584791345,"package_name":"unf_ext","ecosystem":"rubygems","requirements":"0.0.8","direct":false,"kind":"runtime","optional":false},{"id":584791346,"package_name":"unicode-display_width","ecosystem":"rubygems","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":584791347,"package_name":"warden","ecosystem":"rubygems","requirements":"1.2.8","direct":false,"kind":"runtime","optional":false},{"id":584791348,"package_name":"wdm","ecosystem":"rubygems","requirements":"0.1.1","direct":false,"kind":"runtime","optional":false},{"id":584791349,"package_name":"webmock","ecosystem":"rubygems","requirements":"3.12.1","direct":false,"kind":"runtime","optional":false},{"id":584791350,"package_name":"websocket-driver","ecosystem":"rubygems","requirements":"0.7.3","direct":false,"kind":"runtime","optional":false},{"id":584791351,"package_name":"websocket-extensions","ecosystem":"rubygems","requirements":"0.1.5","direct":false,"kind":"runtime","optional":false},{"id":584791352,"package_name":"xpath","ecosystem":"rubygems","requirements":"3.2.0","direct":false,"kind":"runtime","optional":false},{"id":584791353,"package_name":"zeitwerk","ecosystem":"rubygems","requirements":"2.4.2","direct":false,"kind":"runtime","optional":false},{"id":584791158,"package_name":"actioncable","ecosystem":"rubygems","requirements":"6.0.3.7","direct":false,"kind":"runtime","optional":false},{"id":584791159,"package_name":"actionmailbox","ecosystem":"rubygems","requirements":"6.0.3.7","direct":false,"kind":"runtime","optional":false},{"id":584791160,"package_name":"actionmailer","ecosystem":"rubygems","requirements":"6.0.3.7","direct":false,"kind":"runtime","optional":false},{"id":584791161,"package_name":"actionpack","ecosystem":"rubygems","requirements":"6.0.3.7","direct":false,"kind":"runtime","optional":false},{"id":584791162,"package_name":"actiontext","ecosystem":"rubygems","requirements":"6.0.3.7","direct":false,"kind":"runtime","optional":false},{"id":584791163,"package_name":"actionview","ecosystem":"rubygems","requirements":"6.0.3.7","direct":false,"kind":"runtime","optional":false},{"id":584791164,"package_name":"activejob","ecosystem":"rubygems","requirements":"6.0.3.7","direct":false,"kind":"runtime","optional":false},{"id":584791165,"package_name":"activemodel","ecosystem":"rubygems","requirements":"6.0.3.7","direct":false,"kind":"runtime","optional":false},{"id":584791166,"package_name":"activemodel-serializers-xml","ecosystem":"rubygems","requirements":"1.0.2","direct":false,"kind":"runtime","optional":false},{"id":584791167,"package_name":"activerecord","ecosystem":"rubygems","requirements":"6.0.3.7","direct":false,"kind":"runtime","optional":false},{"id":584791168,"package_name":"activerecord-postgis-adapter","ecosystem":"rubygems","requirements":"6.0.2","direct":false,"kind":"runtime","optional":false},{"id":584791169,"package_name":"activestorage","ecosystem":"rubygems","requirements":"6.0.3.7","direct":false,"kind":"runtime","optional":false},{"id":584791170,"package_name":"activesupport","ecosystem":"rubygems","requirements":"6.0.3.7","direct":false,"kind":"runtime","optional":false},{"id":584791171,"package_name":"addressable","ecosystem":"rubygems","requirements":"2.8.0","direct":false,"kind":"runtime","optional":false},{"id":584791172,"package_name":"ast","ecosystem":"rubygems","requirements":"2.4.2","direct":false,"kind":"runtime","optional":false},{"id":584791173,"package_name":"autoprefixer-rails","ecosystem":"rubygems","requirements":"10.2.4.0","direct":false,"kind":"runtime","optional":false},{"id":584791174,"package_name":"aws-eventstream","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":584791175,"package_name":"aws-partitions","ecosystem":"rubygems","requirements":"1.308.0","direct":false,"kind":"runtime","optional":false},{"id":584791176,"package_name":"aws-sdk-core","ecosystem":"rubygems","requirements":"3.94.0","direct":false,"kind":"runtime","optional":false},{"id":584791177,"package_name":"aws-sdk-elasticbeanstalk","ecosystem":"rubygems","requirements":"1.28.0","direct":false,"kind":"runtime","optional":false},{"id":584791178,"package_name":"aws-sdk-kms","ecosystem":"rubygems","requirements":"1.33.0","direct":false,"kind":"runtime","optional":false},{"id":584791179,"package_name":"aws-sdk-rails","ecosystem":"rubygems","requirements":"3.1.0","direct":false,"kind":"runtime","optional":false},{"id":584791180,"package_name":"aws-sdk-s3","ecosystem":"rubygems","requirements":"1.64.0","direct":false,"kind":"runtime","optional":false},{"id":584791181,"package_name":"aws-sdk-ses","ecosystem":"rubygems","requirements":"1.28.0","direct":false,"kind":"runtime","optional":false},{"id":584791182,"package_name":"aws-sigv4","ecosystem":"rubygems","requirements":"1.1.3","direct":false,"kind":"runtime","optional":false},{"id":584791183,"package_name":"bcrypt","ecosystem":"rubygems","requirements":"3.1.13","direct":false,"kind":"runtime","optional":false},{"id":584791184,"package_name":"bootsnap","ecosystem":"rubygems","requirements":"1.4.6","direct":false,"kind":"runtime","optional":false},{"id":584791185,"package_name":"bootstrap-kaminari-views","ecosystem":"rubygems","requirements":"0.0.5","direct":false,"kind":"runtime","optional":false},{"id":584791186,"package_name":"bootstrap-sass","ecosystem":"rubygems","requirements":"3.4.1","direct":false,"kind":"runtime","optional":false},{"id":584791187,"package_name":"bootstrap3-datetimepicker-rails","ecosystem":"rubygems","requirements":"4.17.47","direct":false,"kind":"runtime","optional":false},{"id":584791188,"package_name":"builder","ecosystem":"rubygems","requirements":"3.2.4","direct":false,"kind":"runtime","optional":false},{"id":584791189,"package_name":"byebug","ecosystem":"rubygems","requirements":"11.1.3","direct":false,"kind":"runtime","optional":false},{"id":584791190,"package_name":"cancan","ecosystem":"rubygems","requirements":"1.6.10","direct":false,"kind":"runtime","optional":false},{"id":584791191,"package_name":"capybara","ecosystem":"rubygems","requirements":"3.35.3","direct":false,"kind":"runtime","optional":false},{"id":584791192,"package_name":"carrierwave","ecosystem":"rubygems","requirements":"1.3.2","direct":false,"kind":"runtime","optional":false},{"id":584791193,"package_name":"chartkick","ecosystem":"rubygems","requirements":"3.4.2","direct":false,"kind":"runtime","optional":false},{"id":584791194,"package_name":"codeclimate-test-reporter","ecosystem":"rubygems","requirements":"1.0.9","direct":false,"kind":"runtime","optional":false},{"id":584791195,"package_name":"coderay","ecosystem":"rubygems","requirements":"1.1.2","direct":false,"kind":"runtime","optional":false},{"id":584791196,"package_name":"coffee-rails","ecosystem":"rubygems","requirements":"5.0.0","direct":false,"kind":"runtime","optional":false},{"id":584791197,"package_name":"coffee-script","ecosystem":"rubygems","requirements":"2.4.1","direct":false,"kind":"runtime","optional":false},{"id":584791198,"package_name":"coffee-script-source","ecosystem":"rubygems","requirements":"1.12.2","direct":false,"kind":"runtime","optional":false},{"id":584791199,"package_name":"concurrent-ruby","ecosystem":"rubygems","requirements":"1.1.9","direct":false,"kind":"runtime","optional":false},{"id":584791200,"package_name":"crack","ecosystem":"rubygems","requirements":"0.4.5","direct":false,"kind":"runtime","optional":false},{"id":584791201,"package_name":"crass","ecosystem":"rubygems","requirements":"1.0.6","direct":false,"kind":"runtime","optional":false},{"id":584791202,"package_name":"csv_builder","ecosystem":"rubygems","requirements":"2.1.2","direct":false,"kind":"runtime","optional":false},{"id":584791203,"package_name":"database_cleaner","ecosystem":"rubygems","requirements":"1.8.4","direct":false,"kind":"runtime","optional":false},{"id":584791204,"package_name":"decent_exposure","ecosystem":"rubygems","requirements":"3.0.2","direct":false,"kind":"runtime","optional":false},{"id":584791205,"package_name":"delayed_job","ecosystem":"rubygems","requirements":"4.1.8","direct":false,"kind":"runtime","optional":false},{"id":584791206,"package_name":"delayed_job_active_record","ecosystem":"rubygems","requirements":"4.1.4","direct":false,"kind":"runtime","optional":false},{"id":584791207,"package_name":"devise","ecosystem":"rubygems","requirements":"4.7.1","direct":false,"kind":"runtime","optional":false},{"id":584791208,"package_name":"devise-i18n","ecosystem":"rubygems","requirements":"1.9.1","direct":false,"kind":"runtime","optional":false},{"id":584791209,"package_name":"devise-token_authenticatable","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":584791210,"package_name":"diff-lcs","ecosystem":"rubygems","requirements":"1.4.4","direct":false,"kind":"runtime","optional":false},{"id":584791211,"package_name":"docile","ecosystem":"rubygems","requirements":"1.1.5","direct":false,"kind":"runtime","optional":false},{"id":584791212,"package_name":"domain_name","ecosystem":"rubygems","requirements":"0.5.20190701","direct":false,"kind":"runtime","optional":false},{"id":584791213,"package_name":"dotenv","ecosystem":"rubygems","requirements":"2.7.5","direct":false,"kind":"runtime","optional":false},{"id":584791214,"package_name":"dotenv-rails","ecosystem":"rubygems","requirements":"2.7.5","direct":false,"kind":"runtime","optional":false},{"id":584791215,"package_name":"draper","ecosystem":"rubygems","requirements":"4.0.1","direct":false,"kind":"runtime","optional":false},{"id":584791216,"package_name":"elastic-apm","ecosystem":"rubygems","requirements":"4.4.0","direct":false,"kind":"runtime","optional":false},{"id":584791217,"package_name":"elasticsearch","ecosystem":"rubygems","requirements":"7.6.0","direct":false,"kind":"runtime","optional":false},{"id":584791218,"package_name":"elasticsearch-api","ecosystem":"rubygems","requirements":"7.6.0","direct":false,"kind":"runtime","optional":false},{"id":584791219,"package_name":"elasticsearch-model","ecosystem":"rubygems","requirements":"7.1.0","direct":false,"kind":"runtime","optional":false},{"id":584791220,"package_name":"elasticsearch-transport","ecosystem":"rubygems","requirements":"7.6.0","direct":false,"kind":"runtime","optional":false},{"id":584791221,"package_name":"email_spec","ecosystem":"rubygems","requirements":"2.2.0","direct":false,"kind":"runtime","optional":false},{"id":584791222,"package_name":"erubi","ecosystem":"rubygems","requirements":"1.10.0","direct":false,"kind":"runtime","optional":false},{"id":584791223,"package_name":"excon","ecosystem":"rubygems","requirements":"0.73.0","direct":false,"kind":"runtime","optional":false},{"id":584791224,"package_name":"execjs","ecosystem":"rubygems","requirements":"2.7.0","direct":false,"kind":"runtime","optional":false},{"id":584791225,"package_name":"fabrication","ecosystem":"rubygems","requirements":"2.21.1","direct":false,"kind":"runtime","optional":false},{"id":584791226,"package_name":"faraday","ecosystem":"rubygems","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":584791227,"package_name":"ffi","ecosystem":"rubygems","requirements":"1.15.4","direct":false,"kind":"runtime","optional":false},{"id":584791228,"package_name":"ffi-compiler","ecosystem":"rubygems","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":584791229,"package_name":"fog-aws","ecosystem":"rubygems","requirements":"2.0.1","direct":false,"kind":"runtime","optional":false},{"id":584791230,"package_name":"fog-core","ecosystem":"rubygems","requirements":"1.45.0","direct":false,"kind":"runtime","optional":false},{"id":584791231,"package_name":"fog-json","ecosystem":"rubygems","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":584791232,"package_name":"fog-xml","ecosystem":"rubygems","requirements":"0.1.3","direct":false,"kind":"runtime","optional":false},{"id":584791233,"package_name":"formatador","ecosystem":"rubygems","requirements":"0.2.5","direct":false,"kind":"runtime","optional":false},{"id":584791234,"package_name":"formatted-dates","ecosystem":"rubygems","requirements":"0.1.0","direct":false,"kind":"runtime","optional":false},{"id":584791235,"package_name":"globalid","ecosystem":"rubygems","requirements":"0.4.2","direct":false,"kind":"runtime","optional":false},{"id":584791236,"package_name":"groupdate","ecosystem":"rubygems","requirements":"5.2.2","direct":false,"kind":"runtime","optional":false},{"id":584791237,"package_name":"haml","ecosystem":"rubygems","requirements":"5.2.1","direct":false,"kind":"runtime","optional":false},{"id":584791238,"package_name":"has_scope","ecosystem":"rubygems","requirements":"0.7.2","direct":false,"kind":"runtime","optional":false},{"id":584791239,"package_name":"hashdiff","ecosystem":"rubygems","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":584791240,"package_name":"hashie","ecosystem":"rubygems","requirements":"4.1.0","direct":false,"kind":"runtime","optional":false},{"id":584791241,"package_name":"htmlentities","ecosystem":"rubygems","requirements":"4.3.4","direct":false,"kind":"runtime","optional":false},{"id":584791242,"package_name":"http","ecosystem":"rubygems","requirements":"5.0.4","direct":false,"kind":"runtime","optional":false},{"id":584791243,"package_name":"http-cookie","ecosystem":"rubygems","requirements":"1.0.4","direct":false,"kind":"runtime","optional":false},{"id":584791244,"package_name":"http-form_data","ecosystem":"rubygems","requirements":"2.3.0","direct":false,"kind":"runtime","optional":false},{"id":584791245,"package_name":"i18n","ecosystem":"rubygems","requirements":"1.8.10","direct":false,"kind":"runtime","optional":false},{"id":584791246,"package_name":"ipaddress","ecosystem":"rubygems","requirements":"0.8.3","direct":false,"kind":"runtime","optional":false},{"id":584791247,"package_name":"jbuilder","ecosystem":"rubygems","requirements":"2.10.0","direct":false,"kind":"runtime","optional":false},{"id":584791248,"package_name":"jmespath","ecosystem":"rubygems","requirements":"1.6.1","direct":false,"kind":"runtime","optional":false},{"id":584791249,"package_name":"jquery-rails","ecosystem":"rubygems","requirements":"4.4.0","direct":false,"kind":"runtime","optional":false},{"id":584791250,"package_name":"jquery-ui-rails","ecosystem":"rubygems","requirements":"6.0.1","direct":false,"kind":"runtime","optional":false},{"id":584791251,"package_name":"json","ecosystem":"rubygems","requirements":"2.3.0","direct":false,"kind":"runtime","optional":false},{"id":584791252,"package_name":"kaminari","ecosystem":"rubygems","requirements":"1.2.1","direct":false,"kind":"runtime","optional":false},{"id":584791253,"package_name":"kaminari-actionview","ecosystem":"rubygems","requirements":"1.2.1","direct":false,"kind":"runtime","optional":false},{"id":584791254,"package_name":"kaminari-activerecord","ecosystem":"rubygems","requirements":"1.2.1","direct":false,"kind":"runtime","optional":false},{"id":584791255,"package_name":"kaminari-core","ecosystem":"rubygems","requirements":"1.2.1","direct":false,"kind":"runtime","optional":false},{"id":584791256,"package_name":"launchy","ecosystem":"rubygems","requirements":"2.5.0","direct":false,"kind":"runtime","optional":false},{"id":584791257,"package_name":"listen","ecosystem":"rubygems","requirements":"3.2.1","direct":false,"kind":"runtime","optional":false},{"id":584791258,"package_name":"llhttp-ffi","ecosystem":"rubygems","requirements":"0.4.0","direct":false,"kind":"runtime","optional":false},{"id":584791259,"package_name":"loofah","ecosystem":"rubygems","requirements":"2.18.0","direct":false,"kind":"runtime","optional":false},{"id":584791260,"package_name":"mail","ecosystem":"rubygems","requirements":"2.7.1","direct":false,"kind":"runtime","optional":false},{"id":584791261,"package_name":"marcel","ecosystem":"rubygems","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":584791262,"package_name":"method_source","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":584791263,"package_name":"mime-types","ecosystem":"rubygems","requirements":"3.3.1","direct":false,"kind":"runtime","optional":false},{"id":584791264,"package_name":"mime-types-data","ecosystem":"rubygems","requirements":"3.2020.1104","direct":false,"kind":"runtime","optional":false},{"id":584791265,"package_name":"mini_magick","ecosystem":"rubygems","requirements":"4.11.0","direct":false,"kind":"runtime","optional":false},{"id":584791266,"package_name":"mini_mime","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":584791267,"package_name":"mini_portile2","ecosystem":"rubygems","requirements":"2.8.0","direct":false,"kind":"runtime","optional":false},{"id":584791268,"package_name":"minitest","ecosystem":"rubygems","requirements":"5.14.4","direct":false,"kind":"runtime","optional":false},{"id":584791269,"package_name":"momentjs-rails","ecosystem":"rubygems","requirements":"2.20.1","direct":false,"kind":"runtime","optional":false},{"id":584791270,"package_name":"msgpack","ecosystem":"rubygems","requirements":"1.3.3","direct":false,"kind":"runtime","optional":false},{"id":584791271,"package_name":"multi_json","ecosystem":"rubygems","requirements":"1.14.1","direct":false,"kind":"runtime","optional":false},{"id":584791272,"package_name":"multipart-post","ecosystem":"rubygems","requirements":"2.1.1","direct":false,"kind":"runtime","optional":false},{"id":584791273,"package_name":"nested_form","ecosystem":"rubygems","requirements":"0.3.2","direct":false,"kind":"runtime","optional":false},{"id":584791274,"package_name":"newrelic_rpm","ecosystem":"rubygems","requirements":"6.10.0.364","direct":false,"kind":"runtime","optional":false},{"id":584791275,"package_name":"nio4r","ecosystem":"rubygems","requirements":"2.5.8","direct":false,"kind":"runtime","optional":false},{"id":584791276,"package_name":"nokogiri","ecosystem":"rubygems","requirements":"1.13.6","direct":false,"kind":"runtime","optional":false},{"id":584791277,"package_name":"orm_adapter","ecosystem":"rubygems","requirements":"0.5.0","direct":false,"kind":"runtime","optional":false},{"id":584791278,"package_name":"parallel","ecosystem":"rubygems","requirements":"1.20.1","direct":false,"kind":"runtime","optional":false},{"id":584791279,"package_name":"parser","ecosystem":"rubygems","requirements":"3.0.1.0","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/codeql-analysis.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T11:30:18.165Z","updated_at":"2023-01-13T11:30:18.165Z","repository_link":"https://github.com/Safecast/safecastapi/blob/main/.github/workflows/codeql-analysis.yml","dependencies":[{"id":6875620041,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6875620042,"package_name":"github/codeql-action/init","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6875620043,"package_name":"github/codeql-action/autobuild","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6875620044,"package_name":"github/codeql-action/analyze","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"docker","filepath":".circleci/Dockerfile","sha":null,"kind":"manifest","created_at":"2023-01-13T11:30:18.352Z","updated_at":"2023-01-13T11:30:18.352Z","repository_link":"https://github.com/Safecast/safecastapi/blob/main/.circleci/Dockerfile","dependencies":[{"id":6875620059,"package_name":"public.ecr.aws/amazonlinux/amazonlinux","ecosystem":"docker","requirements":"2","direct":true,"kind":"build","optional":false}]},{"ecosystem":"docker","filepath":".gp/Dockerfile","sha":null,"kind":"manifest","created_at":"2023-01-13T11:30:18.463Z","updated_at":"2023-01-13T11:30:18.463Z","repository_link":"https://github.com/Safecast/safecastapi/blob/main/.gp/Dockerfile","dependencies":[{"id":6875620091,"package_name":"gitpod/workspace-full","ecosystem":"docker","requirements":"latest","direct":true,"kind":"build","optional":false}]},{"ecosystem":"docker","filepath":"Dockerfile","sha":null,"kind":"manifest","created_at":"2023-01-13T11:30:18.602Z","updated_at":"2023-01-13T11:30:18.602Z","repository_link":"https://github.com/Safecast/safecastapi/blob/main/Dockerfile","dependencies":[{"id":6875620112,"package_name":"public.ecr.aws/docker/library/ruby","ecosystem":"docker","requirements":"2.7.6","direct":true,"kind":"build","optional":false}]},{"ecosystem":"docker","filepath":"docker-compose.yml","sha":null,"kind":"manifest","created_at":"2023-09-21T19:27:52.976Z","updated_at":"2023-09-21T19:27:52.976Z","repository_link":"https://github.com/Safecast/safecastapi/blob/main/docker-compose.yml","dependencies":[]}],"score":8.936561204693394,"created_at":"2023-09-11T14:52:14.568Z","updated_at":"2026-04-28T12:30:42.002Z","avatar_url":"https://github.com/Safecast.png","language":"Ruby","category":"Natural Resources","sub_category":"Air Quality","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# Safecast/safecastapi\n[![CircleCI](https://circleci.com/gh/Safecast/safecastapi.svg?style=svg)](https://circleci.com/gh/Safecast/safecastapi) [![Code Climate](https://codeclimate.com/github/Safecast/safecastapi/badges/gpa.svg)](https://codeclimate.com/github/Safecast/safecastapi) [![Test Coverage](https://codeclimate.com/github/Safecast/safecastapi/badges/coverage.svg)](https://codeclimate.com/github/Safecast/safecastapi/coverage) [![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/safecast/safecastapi)\n\nThe app that powers [api.safecast.org](https://api.safecast.org/)\n\n## Overview\n\nThis is a rails app deployed in front of Postgres with Postgis. Data files generatated from various devices such as the [bGeigie Nano](http://nano.safecast.org) and are uploaded to the production app at api.safecast.org.\n\nFrom there applications query the app's endpoints to pull the stored data for other purposes.\n\nSee the [Tilemap](https://github.com/Safecast/Tilemap/) Project's README for more diagrams on the complete data flow.\n\nThere is also a development host located at [dev.safecast.org](https://dev.safecast.org) which is used for testing features before rolling them to the main endpoint.\n\n## Contributing\n\n### Onboarding\n\nStart here: [Onboarding](https://github.com/Safecast/safecastapi/wiki/Onboarding)\n\nAvailable [Data Sets](https://github.com/Safecast/safecastapi/wiki/Data-Sets#air-and-radiation-data-via-ingestsafecastorg)\n\n### Translation\n\nTranslation is managed by [Locale](http://www.localeapp.com/) and open to all.\n\nYou can edit translations on the [Safecast/safecastapi](http://www.localeapp.com/projects/public?search=Safecast/safecastapi) project on Locale.\n\nThe maintainers will then pull translations from the Locale project and push to Github.\n\nHappy translating!\n\n### Development\n\nThere are a few apps for Safecast data processing. See https://github.com/safecast/safecastapi/wiki for a high level view (and link to a deeper doc).\n\nAll issues for server-side work live in https://github.com/safecast/safecastapi/issues\n\nSee the [help-wanted label](https://github.com/Safecast/safecastapi/issues?q=is%3Aopen+is%3Aissue+label%3Ahelp-wanted+sort%3Aupdated-desc) for some issues that should be approachable for folks just getting started with the app.\n\nSee one of the wiki pages for instructions on setting up for local development:\n\n* [Dev: Setup on Linux and OS X using Docker](https://github.com/Safecast/safecastapi/wiki/Dev:-Setup-on-Linux-and-OS-X-using-Docker)\n* [Dev: Setup on Windows](https://github.com/Safecast/safecastapi/wiki/Dev:-Setup-on-Windows)\n\nAnd finally we have a Slack channel for real time coordination. Contact [Mat Schaffer](http://github.com/matschaffer) to get an invite. \n\n### Deployment\n\nSee [Ops Readme](README.ops.md).\n\n## Licensing\nLicensing can be confusing. We’ll try to make it a little less so.\n\n\nWhen you contribute to Safecast by [participating in an event][event] OR [submitting content or information to a webpage][blog] OR [submitting a pull request, testing or bug reporting][github] OR [sending data from your Safecast device][api] then you license all of your contribution to Safecast and to all the world under these same licenses. Safecast will be attributed as the source.\n\nDesign, hardware, software, design and website content is shared by Safecast under the licenses specified below:\n- All Data is [Creative Commons Zero][CCZ], anyone is free to make any use of the data, attribution is not legally required but is encouraged.\n- All Design is [Creative Commons Attribution Share-Alike][CCASA], anyone is free to copy, edit and republish the design but must make it clear Safecast is the source and the design must be published under the same or a compatible license.\n- All functional aspects of design are under the [Berkeley Software Distribution License][BSD] in respect of copyright and the [XL1.0 Cross License][CL] in respect of patent.\n- Web Content is under [Creative Commons Attribution Non Commercial][CCANC], anyone can copy and remix the what is on the website but must attribute Safecast and anyone else specified by Safecast.\n- “Safecast” and the safecast logo are Registered Trademarks of the Momoko Ito Foundation, a 501(c)3 Non-profit, you can't use them without permission.\n- Software is licensed under [the MIT license][MIT] unless otherwise specified.\n\n[event]: http://blog.safecast.org/2013/02/tokyo-hackathon-roundup/\n[blog]: https://blog.safecast.org\n[github]: https://github.com/Safecast/safecastapi\n[api]: https://api.safecast.org\n\n[CCZ]: http://creativecommons.org/publicdomain/zero/1.0/\n[CCASA]: http://creativecommons.org/licenses/by-sa/4.0/\n[BSD]: https://blog.safecast.org/bsd/\n[CL]: http://blog.safecast.org/wp-content/uploads/2012/05/xl_crosslicense.pdf\n[CCANC]: http://creativecommons.org/licenses/by-nc/3.0/\n[MIT]: http://blog.safecast.org/mit/\n","funding_links":["https://safecast.org/donate/"],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["activerecord","ruby-gem","activejob","mvc"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/20670","html_url":"https://ost.ecosyste.ms/projects/20670"}