{"id":239,"name":"Energy Transition Engine","description":"Calculation engine for the Energy Transition Model.","url":"https://github.com/quintel/etengine","last_synced_at":"2026-04-06T23:02:07.422Z","repository":{"id":1459907,"uuid":"1695406","full_name":"quintel/etengine","owner":"quintel","description":"Calculation engine of the Energy Transition Model","archived":false,"fork":false,"pushed_at":"2026-03-03T13:23:54.000Z","size":19306,"stargazers_count":32,"open_issues_count":58,"forks_count":10,"subscribers_count":17,"default_branch":"master","last_synced_at":"2026-03-03T14:19:08.735Z","etag":null,"topics":["backend-api","calculation-engine","energy-system","etm","rails"],"latest_commit_sha":null,"homepage":"https://energytransitionmodel.com/","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quintel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2011-05-03T08:55:40.000Z","updated_at":"2026-02-27T09:04:51.000Z","dependencies_parsed_at":"2023-09-21T19:07:53.761Z","dependency_job_id":"4c8aa53c-8227-416f-8086-da394d449b81","html_url":"https://github.com/quintel/etengine","commit_stats":{"total_commits":5214,"total_committers":49,"mean_commits":"106.40816326530613","dds":0.639240506329114,"last_synced_commit":"59b5d0ea51fe37f877a1bd368fd7bcbbf9d10c6e"},"previous_names":[],"tags_count":89,"template":false,"template_full_name":null,"purl":"pkg:github/quintel/etengine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetengine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetengine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetengine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetengine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quintel","download_url":"https://codeload.github.com/quintel/etengine/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetengine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30075425,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T05:31:57.858Z","status":"ssl_error","status_checked_at":"2026-03-04T05:31:38.462Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":"quintel","name":"Quintel","uuid":"2242291","kind":"organization","description":"","email":"info@quintel.com","website":"quintel.com","location":"Amsterdam","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/2242291?v=4","repositories_count":44,"last_synced_at":"2024-04-12T01:02:20.645Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/quintel","funding_links":[],"total_stars":121,"followers":7,"following":0,"created_at":"2022-11-02T21:24:44.845Z","updated_at":"2024-04-12T01:02:42.714Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quintel","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quintel/repositories"},"packages":[],"commits":{"id":1254033,"full_name":"quintel/etengine","default_branch":"master","total_commits":5450,"total_committers":48,"total_bot_commits":58,"total_bot_committers":1,"mean_commits":113.54166666666667,"dds":0.6548623853211009,"past_year_total_commits":159,"past_year_total_committers":7,"past_year_total_bot_commits":15,"past_year_total_bot_committers":1,"past_year_mean_commits":22.714285714285715,"past_year_dds":0.46540880503144655,"last_synced_at":"2026-03-03T14:53:43.698Z","last_synced_commit":"3aee0c3ef1c98be60b338411b171864d93190cb4","created_at":"2023-03-27T10:51:13.766Z","updated_at":"2026-03-03T14:50:57.639Z","committers":[{"name":"Anthony Williams","email":"hi@antw.dev","login":"antw","count":1881},{"name":"Sebi Burkhard","email":"sebi.burkhard@gmail.com","login":"hasclass","count":1213},{"name":"Paolo Zaccagnini","email":"paozac@gmail.com","login":"pzac","count":887},{"name":"noracato","email":"ncschinkel@gmail.com","login":"noracato","count":307},{"name":"Chael Kruip","email":"chael.kruip@quintel.com","login":"ChaelKruip","count":143},{"name":"Dennis Schoenmakers","email":"dennis.schoenmakers@quintel.com","login":"dennisquintel","count":137},{"name":"louispt1","email":"louisparkestalbot1@gmail.com","login":"louispt1","count":135},{"name":"Gerard Westerhof","email":"gerard@grdw.nl","login":null,"count":79},{"name":"Michiel den Haan","email":"michiel.denhaan@quintel.com","login":"michieldenhaan","count":64},{"name":"Mathijs Bijkerk","email":"mathijs.bijkerk@quintel.com","login":"mabijkerk","count":60},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":58},{"name":"wmeyers","email":"wouter.meyers@quintel.com","login":"wmeyers","count":57},{"name":"marliekeverweij","email":"marlieke.verweij@quintel.com","login":"marliekeverweij","count":56},{"name":"Robbert Dol","email":"robbert.dol@quintel.com","login":null,"count":49},{"name":"Peter Lohmann","email":"peter.lohmann@quintel.com","login":null,"count":46},{"name":"Wouter van Lelyveld","email":"wouter.vanlelyveld@quintel.com","login":null,"count":32},{"name":"Joris Berkhout","email":"joris.berkhout@quintel.com","login":"jorisberkhout","count":29},{"name":"Roos de Kok","email":"roos.dekok@quintel.com","login":"redekok","count":27},{"name":"Rob Terwel","email":"rob.terwel@quintel.com","login":null,"count":26},{"name":"Thomas","email":"thomas.hassing@quintel.com","login":"thomas-qah","count":26},{"name":"Kyra de Haan","email":"kyra.dehaan@quintel.com","login":"kndehaan","count":17},{"name":"Kas Kranenburg","email":"kas.kranenburg@quintel.com","login":"kaskranenburgQ","count":16},{"name":"Andre Medeiros","email":"me@andremedeiros.info","login":null,"count":14},{"name":"Jesse Kerkhoven","email":"jessekerkhoven@zonnet.nl","login":null,"count":13},{"name":"Dorine van der Vlies","email":"dorine.vandervlies@quintel.com","login":"DorinevanderVlies","count":11},{"name":"aaccensi","email":"30655366+aaccensi","login":"aaccensi","count":10},{"name":"Frans van Camp","email":"fvancamp@xs4all.nl","login":"fvancamp","count":9},{"name":"Wouter Terlouw","email":"wouter.terlouw@quintel.com","login":"wouterterlouw","count":7},{"name":"cjlaumans","email":"chris.laumans@quintel.com","login":"cjlaumans","count":5},{"name":"Peter Lohmann","email":"peter@lohmann-online.info","login":null,"count":4},{"name":"Lotte van Vlimmeren","email":"lotte.vanvlimmeren@quintel.com","login":"lottevanvlimmeren","count":4},{"name":"Jonas Voorzanger","email":"jonas.voorzanger@quintel.com","login":null,"count":3},{"name":"Joris Berkhout","email":"jorisberkhout@Joris-Berkhouts-MacBook-Pro-work.local","login":null,"count":3},{"name":"Koen van Bemmelen","email":"koen.vanbemmelen@quintel.com","login":"KoenvanB","count":3},{"name":"markquintel","email":"mark.denheijer@quintel.com","login":"markquintel","count":2},{"name":"Richard Deuchler","email":"richard.deuchler@quintel.com","login":"Richard-Deuchler","count":2},{"name":"Roos de Kok","email":"roosdekok@Rooss-MacBook-Air.local","login":null,"count":2},{"name":"Nikolay Petrachkov","email":"nikolay.petrachkov@quintel.com","login":null,"count":2},{"name":"Mart Lubben","email":"mart.lubben@quintel.com","login":"MartLubben","count":2},{"name":"WvanLelyveld","email":"fritzz44@hotmail.com","login":"WvanLelyveld","count":1},{"name":"Gerard Westerhof","email":"gerard.westerhof@quintel.com","login":null,"count":1},{"name":"Roos de Kok","email":"roosdekok@rooss-air.home","login":null,"count":1},{"name":"StijnDellaert","email":"stijn.dellaert@quintel.com","login":"StijnDellaert","count":1},{"name":"Nikolay Petrachkov","email":"nik@jastix.biz","login":"jastix","count":1},{"name":"Namratha Nair","email":"namratha.nair@quintel.com","login":"nairnamratha","count":1},{"name":"Jesse Kerkhoven","email":"jesse.kerkhoven@gmail.com","login":"jessekerkhoven","count":1},{"name":"Charlottevm","email":"74194356+Charlottevm","login":"Charlottevm","count":1},{"name":"Alexander Wirtz","email":"alexander.wirtz@quintel.com","login":"AlexanderWirtz","count":1}],"past_year_committers":[{"name":"louispt1","email":"louisparkestalbot1@gmail.com","login":"louispt1","count":85},{"name":"noracato","email":"ncschinkel@gmail.com","login":"noracato","count":34},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":15},{"name":"aaccensi","email":"30655366+aaccensi","login":"aaccensi","count":10},{"name":"Kyra de Haan","email":"kyra.dehaan@quintel.com","login":"kndehaan","count":7},{"name":"Mathijs Bijkerk","email":"mathijs.bijkerk@quintel.com","login":"mabijkerk","count":4},{"name":"kmkranenburg","email":"150331345+kaskranenburgQ","login":"kaskranenburgQ","count":4}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetengine/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-03-04T00:00:12.294Z","repositories_count":6184087,"commits_count":930471121,"contributors_count":36038632,"owners_count":1146218,"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":"quintel/etengine","html_url":"https://github.com/quintel/etengine","last_synced_at":"2026-03-06T08:00:57.628Z","status":"active","issues_count":1066,"pull_requests_count":680,"avg_time_to_close_issue":19717995.895643365,"avg_time_to_close_pull_request":1330782.1417197452,"issues_closed_count":988,"pull_requests_closed_count":628,"pull_request_authors_count":32,"issue_authors_count":45,"avg_comments_per_issue":2.819887429643527,"avg_comments_per_pull_request":0.7,"merged_pull_requests_count":538,"bot_issues_count":0,"bot_pull_requests_count":103,"past_year_issues_count":66,"past_year_pull_requests_count":134,"past_year_avg_time_to_close_issue":970396.5625,"past_year_avg_time_to_close_pull_request":963109.7096774194,"past_year_issues_closed_count":32,"past_year_pull_requests_closed_count":93,"past_year_pull_request_authors_count":7,"past_year_issue_authors_count":7,"past_year_avg_comments_per_issue":0.8787878787878788,"past_year_avg_comments_per_pull_request":1.037313432835821,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":20,"past_year_merged_pull_requests_count":77,"created_at":"2023-05-09T10:36:34.859Z","updated_at":"2026-03-06T08:00:57.629Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetengine","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetengine/issues","issue_labels_count":{"Bug":241,"Clean up":169,"New features":148,"Admin interface":96,"Priority":78,"Stale":68,"Pinned":48,"On hold":46,"airbrake":22,"Enhancement":20,"Tests":16,"API":16,"Question":15,"effort:3":9,"effort:1":8,"effort:7":7,"Minor issue":6,"effort:2":4,"Not ETEngine ಠ_ಠ":4,"coupled-markets":3,"effort:13":2,"compatibility":2,"discussion":1},"pull_request_labels_count":{"dependencies":103,"ruby":20,"Stale":15,"Pinned":11,"Enhancement":4,"Clean up":3,"On hold":3,"Minor issue":2},"issue_author_associations_count":{"CONTRIBUTOR":771,"MEMBER":229,"NONE":65,"COLLABORATOR":1},"pull_request_author_associations_count":{"CONTRIBUTOR":525,"MEMBER":149,"NONE":6},"issue_authors":{"dennisquintel":254,"ChaelKruip":138,"WvanLelyveld":66,"hasclass":64,"mabijkerk":58,"wmeyers":48,"antw":42,"noracato":42,"grdw":39,"markquintel":37,"louispt1":33,"AlexanderWirtz":31,"pzac":28,"michieldenhaan":24,"cjlaumans":21,"marliekeverweij":15,"jorisberkhout":14,"kaskranenburgQ":14,"robbertdol":14,"robcalon":13,"kndehaan":9,"ploh":7,"wouterterlouw":7,"RobTerwel":6,"MartLubben":4,"Richard-Deuchler":4,"georgiasavvidou":4,"aaccensi":3,"DorinevanderVlies":3,"thomas-qah":2,"KoenvanB":2,"thesethtruth":2,"JAlsem":2,"E-nergium":2,"nick-gorman":2,"fvancamp":2,"redekok":2,"Max-Kerpel":1,"jessekerkhoven":1,"Charlottevm":1,"jastix":1,"nairnamratha":1,"pietervanbreevoort":1,"twilkinson573":1,"lottevanvlimmeren":1},"pull_request_authors":{"louispt1":108,"dependabot[bot]":103,"noracato":72,"antw":71,"grdw":50,"marliekeverweij":38,"mabijkerk":37,"ChaelKruip":30,"michieldenhaan":28,"jorisberkhout":22,"RobTerwel":17,"kndehaan":12,"redekok":12,"kaskranenburgQ":12,"thomas-qah":10,"ploh":10,"dennisquintel":9,"DorinevanderVlies":8,"fvancamp":8,"aaccensi":4,"wouterterlouw":4,"lottevanvlimmeren":3,"andremedeiros":2,"Charlottevm":2,"sfp-kemp":1,"MartLubben":1,"wmeyers":1,"twilkinson573":1,"Richard-Deuchler":1,"JonasVoorzanger":1,"nairnamratha":1,"AlexanderWirtz":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-03-08T00:00:10.835Z","repositories_count":13625107,"issues_count":34738301,"pull_requests_count":113314909,"authors_count":11187694,"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":{"Pinned":4,"Bug":2,"Stale":1},"past_year_pull_request_labels_count":{"dependencies":20,"ruby":20,"Pinned":5,"Stale":2},"past_year_issue_author_associations_count":{"CONTRIBUTOR":44,"MEMBER":21,"NONE":1},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":103,"MEMBER":25},"past_year_issue_authors":{"louispt1":30,"noracato":17,"kaskranenburgQ":6,"kndehaan":5,"mabijkerk":4,"aaccensi":3,"Max-Kerpel":1},"past_year_pull_request_authors":{"louispt1":72,"dependabot[bot]":20,"noracato":19,"mabijkerk":6,"kaskranenburgQ":5,"aaccensi":4,"kndehaan":2},"maintainers":[{"login":"ChaelKruip","count":168,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ChaelKruip"},{"login":"noracato","count":114,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/noracato"},{"login":"mabijkerk","count":60,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mabijkerk"},{"login":"jorisberkhout","count":36,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jorisberkhout"},{"login":"pietervanbreevoort","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/pietervanbreevoort"}],"active_maintainers":[{"login":"noracato","count":36,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/noracato"},{"login":"mabijkerk","count":10,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mabijkerk"}]},"events":{"total":{"CreateEvent":95,"CommitCommentEvent":1,"ReleaseEvent":1,"IssuesEvent":105,"WatchEvent":8,"DeleteEvent":103,"IssueCommentEvent":206,"PushEvent":394,"PullRequestReviewCommentEvent":40,"PullRequestReviewEvent":109,"PullRequestEvent":155,"ForkEvent":1},"last_year":{"CreateEvent":80,"CommitCommentEvent":1,"ReleaseEvent":1,"IssuesEvent":98,"WatchEvent":8,"DeleteEvent":93,"IssueCommentEvent":190,"PushEvent":332,"PullRequestEvent":131,"PullRequestReviewEvent":103,"PullRequestReviewCommentEvent":39,"ForkEvent":1}},"keywords":["backend-api","calculation-engine","energy-system","etm","rails"],"dependencies":[{"ecosystem":"rubygems","filepath":"Gemfile","sha":null,"kind":"manifest","created_at":"2022-06-25T17:35:35.905Z","updated_at":"2022-06-25T17:35:35.905Z","repository_link":"https://github.com/quintel/etengine/blob/master/Gemfile","dependencies":[{"id":57538694,"package_name":"bootsnap","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538695,"package_name":"rails","ecosystem":"rubygems","requirements":"~\u003e 7.0.0","direct":true,"kind":"runtime","optional":false},{"id":57538696,"package_name":"jquery-rails","ecosystem":"rubygems","requirements":"~\u003e 4.0","direct":true,"kind":"runtime","optional":false},{"id":57538697,"package_name":"haml","ecosystem":"rubygems","requirements":"~\u003e 5.0","direct":true,"kind":"runtime","optional":false},{"id":57538698,"package_name":"json","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538699,"package_name":"rake","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538700,"package_name":"ruby_deep_clone","ecosystem":"rubygems","requirements":"~\u003e 0.8","direct":true,"kind":"runtime","optional":false},{"id":57538701,"package_name":"ice_nine","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538702,"package_name":"text-table","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538703,"package_name":"osmosis","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538704,"package_name":"numo-narray","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538705,"package_name":"simple_form","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538706,"package_name":"devise","ecosystem":"rubygems","requirements":"~\u003e 4.7","direct":true,"kind":"runtime","optional":false},{"id":57538707,"package_name":"cancancan","ecosystem":"rubygems","requirements":"~\u003e 3.0","direct":true,"kind":"runtime","optional":false},{"id":57538708,"package_name":"ruby-graphviz","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538709,"package_name":"rack-cors","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538710,"package_name":"kaminari","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538711,"package_name":"sass-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538712,"package_name":"mini_racer","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538713,"package_name":"coffee-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538714,"package_name":"dotenv-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538715,"package_name":"rest-client","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538716,"package_name":"git","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538717,"package_name":"fnv","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538718,"package_name":"msgpack","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538719,"package_name":"parallel","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538720,"package_name":"ruby-progressbar","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538721,"package_name":"quintel_merit","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538722,"package_name":"atlas","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538723,"package_name":"fever","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538724,"package_name":"refinery","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538725,"package_name":"rubel","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538726,"package_name":"turbine-graph","ecosystem":"rubygems","requirements":"\u003e= 0.1","direct":true,"kind":"runtime","optional":false},{"id":57538727,"package_name":"mysql2","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538728,"package_name":"dalli","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538729,"package_name":"term-ansicolor","ecosystem":"rubygems","requirements":"= 1.0.7","direct":true,"kind":"runtime","optional":false},{"id":57538730,"package_name":"highline","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538731,"package_name":"sentry-raven","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538732,"package_name":"better_errors","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":57538733,"package_name":"listen","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":57538734,"package_name":"pry-byebug","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":57538735,"package_name":"pry-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":57538736,"package_name":"rspec-rails","ecosystem":"rubygems","requirements":"~\u003e 5.0","direct":true,"kind":"development","optional":false},{"id":57538737,"package_name":"watchr","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":57538738,"package_name":"binding_of_caller","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":57538739,"package_name":"rubocop","ecosystem":"rubygems","requirements":"~\u003e 1.27","direct":true,"kind":"development","optional":false},{"id":57538740,"package_name":"rubocop-performance","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":57538741,"package_name":"rubocop-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":57538742,"package_name":"rubocop-rspec","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":57538743,"package_name":"factory_bot_rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":57538744,"package_name":"rails-controller-testing","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":57538745,"package_name":"shoulda-matchers","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":57538746,"package_name":"simplecov","ecosystem":"rubygems","requirements":"~\u003e 0.7.1","direct":true,"kind":"development","optional":false},{"id":57538747,"package_name":"puma","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538748,"package_name":"gctools","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":57538749,"package_name":"newrelic_rpm","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"rubygems","filepath":"Gemfile.lock","sha":null,"kind":"lockfile","created_at":"2022-06-25T17:35:36.659Z","updated_at":"2022-06-25T17:35:36.659Z","repository_link":"https://github.com/quintel/etengine/blob/master/Gemfile.lock","dependencies":[{"id":57538770,"package_name":"git","ecosystem":"rubygems","requirements":"1.2.5","direct":false,"kind":"runtime","optional":false},{"id":57538771,"package_name":"atlas","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":57538772,"package_name":"fever","ecosystem":"rubygems","requirements":"0.1.0","direct":false,"kind":"runtime","optional":false},{"id":57538773,"package_name":"quintel_merit","ecosystem":"rubygems","requirements":"0.1.0","direct":false,"kind":"runtime","optional":false},{"id":57538774,"package_name":"osmosis","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":57538775,"package_name":"refinery","ecosystem":"rubygems","requirements":"0.0.1","direct":false,"kind":"runtime","optional":false},{"id":57538776,"package_name":"rubel","ecosystem":"rubygems","requirements":"0.1.1","direct":false,"kind":"runtime","optional":false},{"id":57538777,"package_name":"actioncable","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538778,"package_name":"actionmailbox","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538779,"package_name":"actionmailer","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538780,"package_name":"actionpack","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538781,"package_name":"actiontext","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538782,"package_name":"actionview","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538783,"package_name":"activejob","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538784,"package_name":"activemodel","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538785,"package_name":"activerecord","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538786,"package_name":"activestorage","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538787,"package_name":"activesupport","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538788,"package_name":"ast","ecosystem":"rubygems","requirements":"2.4.2","direct":false,"kind":"runtime","optional":false},{"id":57538789,"package_name":"axiom-types","ecosystem":"rubygems","requirements":"0.1.1","direct":false,"kind":"runtime","optional":false},{"id":57538790,"package_name":"bcrypt","ecosystem":"rubygems","requirements":"3.1.16","direct":false,"kind":"runtime","optional":false},{"id":57538791,"package_name":"better_errors","ecosystem":"rubygems","requirements":"2.9.1","direct":false,"kind":"runtime","optional":false},{"id":57538792,"package_name":"binding_of_caller","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":57538793,"package_name":"bootsnap","ecosystem":"rubygems","requirements":"1.10.3","direct":false,"kind":"runtime","optional":false},{"id":57538794,"package_name":"builder","ecosystem":"rubygems","requirements":"3.2.4","direct":false,"kind":"runtime","optional":false},{"id":57538795,"package_name":"byebug","ecosystem":"rubygems","requirements":"11.1.3","direct":false,"kind":"runtime","optional":false},{"id":57538796,"package_name":"cancancan","ecosystem":"rubygems","requirements":"3.3.0","direct":false,"kind":"runtime","optional":false},{"id":57538797,"package_name":"coderay","ecosystem":"rubygems","requirements":"1.1.3","direct":false,"kind":"runtime","optional":false},{"id":57538798,"package_name":"coercible","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":57538799,"package_name":"coffee-rails","ecosystem":"rubygems","requirements":"5.0.0","direct":false,"kind":"runtime","optional":false},{"id":57538800,"package_name":"coffee-script","ecosystem":"rubygems","requirements":"2.4.1","direct":false,"kind":"runtime","optional":false},{"id":57538801,"package_name":"coffee-script-source","ecosystem":"rubygems","requirements":"1.12.2","direct":false,"kind":"runtime","optional":false},{"id":57538802,"package_name":"concurrent-ruby","ecosystem":"rubygems","requirements":"1.1.10","direct":false,"kind":"runtime","optional":false},{"id":57538803,"package_name":"crass","ecosystem":"rubygems","requirements":"1.0.6","direct":false,"kind":"runtime","optional":false},{"id":57538804,"package_name":"csv","ecosystem":"rubygems","requirements":"3.2.2","direct":false,"kind":"runtime","optional":false},{"id":57538805,"package_name":"dalli","ecosystem":"rubygems","requirements":"3.2.1","direct":false,"kind":"runtime","optional":false},{"id":57538806,"package_name":"debug_inspector","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":57538807,"package_name":"descendants_tracker","ecosystem":"rubygems","requirements":"0.0.4","direct":false,"kind":"runtime","optional":false},{"id":57538808,"package_name":"devise","ecosystem":"rubygems","requirements":"4.8.1","direct":false,"kind":"runtime","optional":false},{"id":57538809,"package_name":"diff-lcs","ecosystem":"rubygems","requirements":"1.5.0","direct":false,"kind":"runtime","optional":false},{"id":57538810,"package_name":"digest","ecosystem":"rubygems","requirements":"3.1.0","direct":false,"kind":"runtime","optional":false},{"id":57538811,"package_name":"domain_name","ecosystem":"rubygems","requirements":"0.5.20190701","direct":false,"kind":"runtime","optional":false},{"id":57538812,"package_name":"dotenv","ecosystem":"rubygems","requirements":"2.7.6","direct":false,"kind":"runtime","optional":false},{"id":57538813,"package_name":"dotenv-rails","ecosystem":"rubygems","requirements":"2.7.6","direct":false,"kind":"runtime","optional":false},{"id":57538814,"package_name":"equalizer","ecosystem":"rubygems","requirements":"0.0.11","direct":false,"kind":"runtime","optional":false},{"id":57538815,"package_name":"erubi","ecosystem":"rubygems","requirements":"1.10.0","direct":false,"kind":"runtime","optional":false},{"id":57538816,"package_name":"execjs","ecosystem":"rubygems","requirements":"2.8.1","direct":false,"kind":"runtime","optional":false},{"id":57538817,"package_name":"factory_bot","ecosystem":"rubygems","requirements":"6.2.0","direct":false,"kind":"runtime","optional":false},{"id":57538818,"package_name":"factory_bot_rails","ecosystem":"rubygems","requirements":"6.2.0","direct":false,"kind":"runtime","optional":false},{"id":57538819,"package_name":"faraday","ecosystem":"rubygems","requirements":"2.2.0","direct":false,"kind":"runtime","optional":false},{"id":57538820,"package_name":"faraday-net_http","ecosystem":"rubygems","requirements":"2.0.1","direct":false,"kind":"runtime","optional":false},{"id":57538821,"package_name":"ffi","ecosystem":"rubygems","requirements":"1.15.5","direct":false,"kind":"runtime","optional":false},{"id":57538822,"package_name":"fnv","ecosystem":"rubygems","requirements":"0.2.0","direct":false,"kind":"runtime","optional":false},{"id":57538823,"package_name":"gctools","ecosystem":"rubygems","requirements":"0.2.4","direct":false,"kind":"runtime","optional":false},{"id":57538824,"package_name":"globalid","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":57538825,"package_name":"gpgme","ecosystem":"rubygems","requirements":"2.0.20","direct":false,"kind":"runtime","optional":false},{"id":57538826,"package_name":"haml","ecosystem":"rubygems","requirements":"5.2.2","direct":false,"kind":"runtime","optional":false},{"id":57538827,"package_name":"highline","ecosystem":"rubygems","requirements":"2.0.3","direct":false,"kind":"runtime","optional":false},{"id":57538828,"package_name":"http-accept","ecosystem":"rubygems","requirements":"1.7.0","direct":false,"kind":"runtime","optional":false},{"id":57538829,"package_name":"http-cookie","ecosystem":"rubygems","requirements":"1.0.4","direct":false,"kind":"runtime","optional":false},{"id":57538830,"package_name":"i18n","ecosystem":"rubygems","requirements":"1.10.0","direct":false,"kind":"runtime","optional":false},{"id":57538831,"package_name":"ice_nine","ecosystem":"rubygems","requirements":"0.11.2","direct":false,"kind":"runtime","optional":false},{"id":57538832,"package_name":"io-wait","ecosystem":"rubygems","requirements":"0.2.1","direct":false,"kind":"runtime","optional":false},{"id":57538833,"package_name":"jquery-rails","ecosystem":"rubygems","requirements":"4.4.0","direct":false,"kind":"runtime","optional":false},{"id":57538834,"package_name":"json","ecosystem":"rubygems","requirements":"2.6.1","direct":false,"kind":"runtime","optional":false},{"id":57538835,"package_name":"kaminari","ecosystem":"rubygems","requirements":"1.2.2","direct":false,"kind":"runtime","optional":false},{"id":57538836,"package_name":"kaminari-actionview","ecosystem":"rubygems","requirements":"1.2.2","direct":false,"kind":"runtime","optional":false},{"id":57538837,"package_name":"kaminari-activerecord","ecosystem":"rubygems","requirements":"1.2.2","direct":false,"kind":"runtime","optional":false},{"id":57538838,"package_name":"kaminari-core","ecosystem":"rubygems","requirements":"1.2.2","direct":false,"kind":"runtime","optional":false},{"id":57538839,"package_name":"libv8-node","ecosystem":"rubygems","requirements":"16.10.0.0","direct":false,"kind":"runtime","optional":false},{"id":57538840,"package_name":"listen","ecosystem":"rubygems","requirements":"3.7.1","direct":false,"kind":"runtime","optional":false},{"id":57538841,"package_name":"loofah","ecosystem":"rubygems","requirements":"2.15.0","direct":false,"kind":"runtime","optional":false},{"id":57538842,"package_name":"mail","ecosystem":"rubygems","requirements":"2.7.1","direct":false,"kind":"runtime","optional":false},{"id":57538843,"package_name":"marcel","ecosystem":"rubygems","requirements":"1.0.2","direct":false,"kind":"runtime","optional":false},{"id":57538844,"package_name":"method_source","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":57538845,"package_name":"mime-types","ecosystem":"rubygems","requirements":"3.4.1","direct":false,"kind":"runtime","optional":false},{"id":57538846,"package_name":"mime-types-data","ecosystem":"rubygems","requirements":"3.2022.0105","direct":false,"kind":"runtime","optional":false},{"id":57538847,"package_name":"mini_mime","ecosystem":"rubygems","requirements":"1.1.2","direct":false,"kind":"runtime","optional":false},{"id":57538848,"package_name":"mini_portile2","ecosystem":"rubygems","requirements":"2.8.0","direct":false,"kind":"runtime","optional":false},{"id":57538849,"package_name":"mini_racer","ecosystem":"rubygems","requirements":"0.6.2","direct":false,"kind":"runtime","optional":false},{"id":57538850,"package_name":"minitest","ecosystem":"rubygems","requirements":"5.15.0","direct":false,"kind":"runtime","optional":false},{"id":57538851,"package_name":"msgpack","ecosystem":"rubygems","requirements":"1.4.5","direct":false,"kind":"runtime","optional":false},{"id":57538852,"package_name":"multi_json","ecosystem":"rubygems","requirements":"1.15.0","direct":false,"kind":"runtime","optional":false},{"id":57538853,"package_name":"mysql2","ecosystem":"rubygems","requirements":"0.5.3","direct":false,"kind":"runtime","optional":false},{"id":57538854,"package_name":"net-imap","ecosystem":"rubygems","requirements":"0.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538855,"package_name":"net-pop","ecosystem":"rubygems","requirements":"0.1.1","direct":false,"kind":"runtime","optional":false},{"id":57538856,"package_name":"net-protocol","ecosystem":"rubygems","requirements":"0.1.2","direct":false,"kind":"runtime","optional":false},{"id":57538857,"package_name":"net-smtp","ecosystem":"rubygems","requirements":"0.3.1","direct":false,"kind":"runtime","optional":false},{"id":57538858,"package_name":"netrc","ecosystem":"rubygems","requirements":"0.11.0","direct":false,"kind":"runtime","optional":false},{"id":57538859,"package_name":"newrelic_rpm","ecosystem":"rubygems","requirements":"8.5.0","direct":false,"kind":"runtime","optional":false},{"id":57538860,"package_name":"nio4r","ecosystem":"rubygems","requirements":"2.5.8","direct":false,"kind":"runtime","optional":false},{"id":57538861,"package_name":"nokogiri","ecosystem":"rubygems","requirements":"1.13.4","direct":false,"kind":"runtime","optional":false},{"id":57538862,"package_name":"numo-narray","ecosystem":"rubygems","requirements":"0.9.2.0","direct":false,"kind":"runtime","optional":false},{"id":57538863,"package_name":"orm_adapter","ecosystem":"rubygems","requirements":"0.5.0","direct":false,"kind":"runtime","optional":false},{"id":57538864,"package_name":"parallel","ecosystem":"rubygems","requirements":"1.22.1","direct":false,"kind":"runtime","optional":false},{"id":57538865,"package_name":"parser","ecosystem":"rubygems","requirements":"3.1.1.0","direct":false,"kind":"runtime","optional":false},{"id":57538866,"package_name":"pry","ecosystem":"rubygems","requirements":"0.13.1","direct":false,"kind":"runtime","optional":false},{"id":57538867,"package_name":"pry-byebug","ecosystem":"rubygems","requirements":"3.9.0","direct":false,"kind":"runtime","optional":false},{"id":57538868,"package_name":"pry-rails","ecosystem":"rubygems","requirements":"0.3.9","direct":false,"kind":"runtime","optional":false},{"id":57538869,"package_name":"puma","ecosystem":"rubygems","requirements":"5.6.4","direct":false,"kind":"runtime","optional":false},{"id":57538870,"package_name":"racc","ecosystem":"rubygems","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":57538871,"package_name":"rack","ecosystem":"rubygems","requirements":"2.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538872,"package_name":"rack-cors","ecosystem":"rubygems","requirements":"1.1.1","direct":false,"kind":"runtime","optional":false},{"id":57538873,"package_name":"rack-test","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":57538874,"package_name":"rails","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538875,"package_name":"rails-controller-testing","ecosystem":"rubygems","requirements":"1.0.5","direct":false,"kind":"runtime","optional":false},{"id":57538876,"package_name":"rails-dom-testing","ecosystem":"rubygems","requirements":"2.0.3","direct":false,"kind":"runtime","optional":false},{"id":57538877,"package_name":"rails-html-sanitizer","ecosystem":"rubygems","requirements":"1.4.2","direct":false,"kind":"runtime","optional":false},{"id":57538878,"package_name":"railties","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":57538879,"package_name":"rainbow","ecosystem":"rubygems","requirements":"3.1.1","direct":false,"kind":"runtime","optional":false},{"id":57538880,"package_name":"rake","ecosystem":"rubygems","requirements":"13.0.6","direct":false,"kind":"runtime","optional":false},{"id":57538881,"package_name":"rb-fsevent","ecosystem":"rubygems","requirements":"0.11.1","direct":false,"kind":"runtime","optional":false},{"id":57538882,"package_name":"rb-inotify","ecosystem":"rubygems","requirements":"0.10.1","direct":false,"kind":"runtime","optional":false},{"id":57538883,"package_name":"regexp_parser","ecosystem":"rubygems","requirements":"2.3.0","direct":false,"kind":"runtime","optional":false},{"id":57538884,"package_name":"responders","ecosystem":"rubygems","requirements":"3.0.1","direct":false,"kind":"runtime","optional":false},{"id":57538885,"package_name":"rest-client","ecosystem":"rubygems","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":57538886,"package_name":"rexml","ecosystem":"rubygems","requirements":"3.2.5","direct":false,"kind":"runtime","optional":false},{"id":57538887,"package_name":"rspec-core","ecosystem":"rubygems","requirements":"3.11.0","direct":false,"kind":"runtime","optional":false},{"id":57538888,"package_name":"rspec-expectations","ecosystem":"rubygems","requirements":"3.11.0","direct":false,"kind":"runtime","optional":false},{"id":57538889,"package_name":"rspec-mocks","ecosystem":"rubygems","requirements":"3.11.0","direct":false,"kind":"runtime","optional":false},{"id":57538890,"package_name":"rspec-rails","ecosystem":"rubygems","requirements":"5.1.0","direct":false,"kind":"runtime","optional":false},{"id":57538891,"package_name":"rspec-support","ecosystem":"rubygems","requirements":"3.11.0","direct":false,"kind":"runtime","optional":false},{"id":57538892,"package_name":"rubocop","ecosystem":"rubygems","requirements":"1.27.0","direct":false,"kind":"runtime","optional":false},{"id":57538893,"package_name":"rubocop-ast","ecosystem":"rubygems","requirements":"1.17.0","direct":false,"kind":"runtime","optional":false},{"id":57538894,"package_name":"rubocop-performance","ecosystem":"rubygems","requirements":"1.13.3","direct":false,"kind":"runtime","optional":false},{"id":57538895,"package_name":"rubocop-rails","ecosystem":"rubygems","requirements":"2.14.2","direct":false,"kind":"runtime","optional":false},{"id":57538896,"package_name":"rubocop-rspec","ecosystem":"rubygems","requirements":"2.9.0","direct":false,"kind":"runtime","optional":false},{"id":57538897,"package_name":"ruby-graphviz","ecosystem":"rubygems","requirements":"1.2.5","direct":false,"kind":"runtime","optional":false},{"id":57538898,"package_name":"ruby-progressbar","ecosystem":"rubygems","requirements":"1.11.0","direct":false,"kind":"runtime","optional":false},{"id":57538899,"package_name":"ruby2_keywords","ecosystem":"rubygems","requirements":"0.0.5","direct":false,"kind":"runtime","optional":false},{"id":57538900,"package_name":"ruby_deep_clone","ecosystem":"rubygems","requirements":"0.8.0","direct":false,"kind":"runtime","optional":false},{"id":57538901,"package_name":"sass-rails","ecosystem":"rubygems","requirements":"6.0.0","direct":false,"kind":"runtime","optional":false},{"id":57538902,"package_name":"sassc","ecosystem":"rubygems","requirements":"2.4.0","direct":false,"kind":"runtime","optional":false},{"id":57538903,"package_name":"sassc-rails","ecosystem":"rubygems","requirements":"2.1.2","direct":false,"kind":"runtime","optional":false},{"id":57538904,"package_name":"sentry-raven","ecosystem":"rubygems","requirements":"3.1.2","direct":false,"kind":"runtime","optional":false},{"id":57538905,"package_name":"shoulda-matchers","ecosystem":"rubygems","requirements":"5.1.0","direct":false,"kind":"runtime","optional":false},{"id":57538906,"package_name":"simple_form","ecosystem":"rubygems","requirements":"5.1.0","direct":false,"kind":"runtime","optional":false},{"id":57538907,"package_name":"simplecov","ecosystem":"rubygems","requirements":"0.7.1","direct":false,"kind":"runtime","optional":false},{"id":57538908,"package_name":"simplecov-html","ecosystem":"rubygems","requirements":"0.7.1","direct":false,"kind":"runtime","optional":false},{"id":57538909,"package_name":"sprockets","ecosystem":"rubygems","requirements":"4.0.2","direct":false,"kind":"runtime","optional":false},{"id":57538910,"package_name":"sprockets-rails","ecosystem":"rubygems","requirements":"3.4.2","direct":false,"kind":"runtime","optional":false},{"id":57538911,"package_name":"strscan","ecosystem":"rubygems","requirements":"3.0.1","direct":false,"kind":"runtime","optional":false},{"id":57538912,"package_name":"temple","ecosystem":"rubygems","requirements":"0.8.2","direct":false,"kind":"runtime","optional":false},{"id":57538913,"package_name":"term-ansicolor","ecosystem":"rubygems","requirements":"1.0.7","direct":false,"kind":"runtime","optional":false},{"id":57538914,"package_name":"terminal-table","ecosystem":"rubygems","requirements":"3.0.2","direct":false,"kind":"runtime","optional":false},{"id":57538915,"package_name":"text-table","ecosystem":"rubygems","requirements":"1.2.4","direct":false,"kind":"runtime","optional":false},{"id":57538916,"package_name":"thor","ecosystem":"rubygems","requirements":"1.2.1","direct":false,"kind":"runtime","optional":false},{"id":57538917,"package_name":"thread_safe","ecosystem":"rubygems","requirements":"0.3.6","direct":false,"kind":"runtime","optional":false},{"id":57538918,"package_name":"tilt","ecosystem":"rubygems","requirements":"2.0.10","direct":false,"kind":"runtime","optional":false},{"id":57538919,"package_name":"timeout","ecosystem":"rubygems","requirements":"0.2.0","direct":false,"kind":"runtime","optional":false},{"id":57538920,"package_name":"turbine-graph","ecosystem":"rubygems","requirements":"0.1.3","direct":false,"kind":"runtime","optional":false},{"id":57538921,"package_name":"tzinfo","ecosystem":"rubygems","requirements":"2.0.4","direct":false,"kind":"runtime","optional":false},{"id":57538922,"package_name":"unf","ecosystem":"rubygems","requirements":"0.1.4","direct":false,"kind":"runtime","optional":false},{"id":57538923,"package_name":"unf_ext","ecosystem":"rubygems","requirements":"0.0.8","direct":false,"kind":"runtime","optional":false},{"id":57538924,"package_name":"unicode-display_width","ecosystem":"rubygems","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":57538925,"package_name":"virtus","ecosystem":"rubygems","requirements":"1.0.5","direct":false,"kind":"runtime","optional":false},{"id":57538926,"package_name":"warden","ecosystem":"rubygems","requirements":"1.2.9","direct":false,"kind":"runtime","optional":false},{"id":57538927,"package_name":"watchr","ecosystem":"rubygems","requirements":"0.7","direct":false,"kind":"runtime","optional":false},{"id":57538928,"package_name":"websocket-driver","ecosystem":"rubygems","requirements":"0.7.5","direct":false,"kind":"runtime","optional":false},{"id":57538929,"package_name":"websocket-extensions","ecosystem":"rubygems","requirements":"0.1.5","direct":false,"kind":"runtime","optional":false},{"id":57538930,"package_name":"zeitwerk","ecosystem":"rubygems","requirements":"2.5.4","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/stale.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T11:30:31.270Z","updated_at":"2023-01-13T11:30:31.270Z","repository_link":"https://github.com/quintel/etengine/blob/master/.github/workflows/stale.yml","dependencies":[{"id":6875623009,"package_name":"actions/stale","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"docker","filepath":"Dockerfile","sha":null,"kind":"manifest","created_at":"2023-01-13T11:30:31.316Z","updated_at":"2023-01-13T11:30:31.316Z","repository_link":"https://github.com/quintel/etengine/blob/master/Dockerfile","dependencies":[{"id":6875623032,"package_name":"ruby","ecosystem":"docker","requirements":"3.1-slim","direct":true,"kind":"build","optional":false}]},{"ecosystem":"docker","filepath":"docker-compose.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T11:30:31.365Z","updated_at":"2023-01-13T11:30:31.365Z","repository_link":"https://github.com/quintel/etengine/blob/master/docker-compose.yml","dependencies":[{"id":6875623078,"package_name":"mariadb","ecosystem":"docker","requirements":"10","direct":true,"kind":"runtime","optional":false}]}],"score":8.371010681238156,"created_at":"2023-09-11T11:54:34.132Z","updated_at":"2026-04-06T23:02:07.425Z","avatar_url":"https://github.com/quintel.png","language":"Ruby","category":"Energy Systems","sub_category":"Energy System Modeling Frameworks","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# Energy Transition Engine\n\nThis is the source code for the Calculation Engine that is used by the\n[Energy Transition Model](http://energytransitionmodel.com) and its various\ninterfaces (clients).\n\nIt is an online web app that lets you create a future energy scenario for\nvarious countries.  This software is [open source](LICENSE.txt), so you can\nfork it and alter at your will.\n\nETEngine does not contain an easy-to-use frontend for creating and editing\nthese energy scenarios; that role is instead fulfilled by separate applications\nsuch as [ETModel][etmodel], [ETFlex][etflex], and the [EnergyMixer][energymixer],\nwhich each use ETEngine's REST API for manipulating and calculating scenarios.\n\n[![Build Status](https://quintel.semaphoreci.com/badges/etengine/branches/master.svg)](https://quintel.semaphoreci.com/projects/etengine)\n\n## License\n\nThe ETE is released under the [MIT License](LICENSE.txt).\n\n## Installation with Docker\n\nNew users are recommended to use Docker to run ETEngine. Doing so will avoid the need to install additional dependencies.\n\n1. Get a copy of [ETEngine](https://github.com/quintel/etengine) and [ETSource](https://github.com/quintel/etsource); placing them in the same parent directory:\n\n    ```\n    ├─ parent_dir\n    │  ├─ etengine\n    │  └─ etsource\n    ```\n\n    Place the ETSource decryption password in a file called `.password` in the ETSource directory. This is required to decrypt a small number of datasets for which we're not authorised to publicly release the source data.\n\n    ```\n    ├─ parent_dir\n    │  ├─ etengine\n    │  └─ etsource\n    │     ├─ .password   # \u003c- password goes here\n    │     ├─ carriers\n    │     ├─ config\n    │     ├─ datasets\n    │     ├─ ...\n    ```\n\n2. Build the ETEngine image:\n\n    ```sh\n    docker-compose build\n    ```\n\n3. Install dependencies and seed the database:\n\n   ```sh\n   docker-compose run --rm web bash -c 'bin/rails db:drop \u0026\u0026 bin/setup'\n   ```\n\n   The command drops any existing ETEngine database; be sure only to run this during the initial setup! This step will also provide you with an e-mail address and password for an administrator account.\n\n4. Launch the containers:\n\n   ```sh\n   docker-compose up\n   ```\n\n   After starting application will become available at http://localhost:3000 after a few seconds. This is indicated by the message \"Listening on http://0.0.0.0:3000\".\n\nBefore the application can start serving scenarios, it must calculate the default dataset (Netherlands). This process will begin the first time a scenario is requested and will take several seconds. Signing in to the administrator account will also begin the calculation. Please be patient! Further requests to ETEngine will happen much faster.\n\n## Installation without Docker\n\nInstalling ETEngine on a local machine can be a bit involved, owing to the\nnumber of dependencies. Assuming you can run a 'normal' rails application on your local machine,\nyou have to follow these steps to run ETEngine.\n\n1. Install the \"Graphviz\" library\n   * Mac users with [Homebrew][homebrew]: `brew install graphviz`\n   * Ubuntu: `sudo apt-get install graphviz libgraphviz-dev`\n\n1. Install \"MySQL\" server\n   * Mac: Install latest version using the [Native Package][mysql] (choose the 64-bit DMG version), or install via brew: `brew install mysql`\n   * Ubuntu: `sudo apt-get install mysql-server-5.5 libmysqlclient-dev`\n\n1. Clone this repository with `git clone git@github.com:quintel/etengine.git`\n\n1. Run `bundle install` to install the dependencies required by ETEngine.\n\n1. Clone a copy of [ETSource][etsource] –– which contains the data for each\n   region:\n   1. `cd ..; git clone git@github.com:quintel/etsource.git`\n   1. `cd etsource; bundle install`\n\n1. Create the database you specified in your \"database.yml\" file, and\n   1. run `bundle exec rake db:setup` to create the tables and add an\n      administrator account –– whose name and password will be output at the end –– OR\n   1. run `bundle exec rake db:create` to create your database and\n      contact the private Quintel slack channel to fill your database with records from staging server\n\n1. You're now ready-to-go! Fire up the Rails process with `rails s` or better `bin/dev`.\n\n1. If you run into an dataset error, check out this\n   [explanation](https://github.com/quintel/etsource#csv-documents \"Explanation on etsource CSV files\") on CSV files\n\n## Technical Design\n\n### Caching\n\nThe ETEngine uses heavily caching of calculated values by using the\n[fetch](https://github.com/quintel/etengine/blob/51b321f6d43a2d2a626aa268845b775fca051ae0/app/models/qernel/dataset_attributes.rb#L205-L237)\nfunction that stores and retrieves calculated values. This has some drawbacks,\nbut is necessary to keep performance up.\n\n### Scenario\n\nWhen the user starts a new scenario, the user has to choose the `end_year`\nand the `area` for which this scenario applies. This can/should *not* be\naltered later.\n\n### Present and future\n\nThe ETEngine uses *two* graphs that store all the data: one for the present\nyear and one for the future year. In this sense, the ETengine is a 'two\nstate' model: everything is calculated twice: once for the start year, and\nonce for the end year. It is important to note that ETengine therefor does\n*not* calculate intermediate years. An exception to this is\n[Merit](http://github.com/quintel/merit), a module for ETengine (that can\nalso be used independently which contains time series at a one hour resolution\nfor one year.\n\n### Inputs\n\nA user can alter the start scenario with the use of **inputs**. Every input has\na key and a value can be sent to ETEngine. For example a user can tell ETengine:\n\n    number_of_energy_power_nuclear_gen3_uranium_oxide = 2\n\nThis means that the user wants to 'set' the number of nuclear power plants to `2`\nin his/her current scenario.\n\nThe current set of inputs can be found on\n[ETSource][etsource].\n\n\nEvery times the user requests some output, **all** the inputs that have been\ntouched by that user for that scenario are applied again. The order in which\nthey are applied can be controlled if necessary.\n\nThe priority of every input defaults to 0, and can be set a manual value\n(e.g. 100) on inputs which need to be executed first. For example, an input\nwith `priority=100` gets executed before an input with `priority=99`, etc...\n\nThis is someting to keep in mind when designing your input statements.\n\n#### Competing inputs\n\nFor example, when you have two inputs:\n\n* input `A`: update attribute `X` to have value `1`\n* input `B`: update attribute `X` to have value `2`\n\nThe outcome of this `X` will be `1` **or** `2` depending on the priority of\nthese inputs (if they both have no priority or the same priority), this will\nbe randomly determined.\n\n#### Complementary inputs\n\nFor example, when you have two inputs:\n\n* input `A`: update attribute `X` to **increase** with `1%`\n* input `B`: update attribute `X` to **increase** with `2%`\n\nThen the outcome of the `X` will be 1.01 * 1.02.\n\n### Output\n\nThe user can request output from his/her scenario with the use of\n*gqueries*. A gquery always returns the *present* and the *future*\noutput value, although there are exceptions to this.\n\nE.g. when the user sends the `dashboard_co2_emissions` query to\nETEngine, it will receive the following feedback:\n\n* present: 123\n* future: 456\n* unit: MJ\n\nA **gquery** is nothing more then a stored statement. These statements are\nwritten in our own language called the *Graph Query Language* (GQL) and\na recent list can be found on [ETSource][etsource].\n\n### Auto-reloading your changes to etsource\n\nSometimes you want to play around or tweak some gqueries. Then, you don't\nwant to create commits every time and import them. Because when you are\nsatisfied, you'll probably have 10 commits, that needs to be cleaned up,\nsquashed.\n\nYou can add the option `etsource_live_reload: true` in your `config.yml`\nfile.\n\nChange queries, inputs, datasets, gqueries, inputs or topology directory\nin your **et_source_export** folder, and Etengine reloads your changes\nautomatically!\n\nB.t.w. By default your *etsource_export* directory is not under version control.\nIn order to gain the advantages of Git, just point *etsource_export* to the\n*etsource* directory, either by using a symbolic link or using the same directory\nin your config.yml file. But **be carefull** NOT to use the interface's\n'import' action on /etsource: that will delete/overwrite your etsource_export\ndirectory!\n\n## GQL\n\n[GQL Functions](http://beta.et-engine.com/doc/Gql/Grammar/Sandbox.html)\n\n[Node methods](http://beta.et-engine.com/doc/Qernel/NodeApi.html)\n\n## Screencasts\n\nPassword for all the screencasts below is `quintel`.\n\n#### [GQL Console](http://vimeo.com/40660438)\n\n#### [GQL Docs](http://vimeo.com/40663213)\n\nHow to use this documentation.\n\n#### [GQL Console and ETSource](http://vimeo.com/40707436)\n\nHow to work with different etsource directories, make changes and load them in\nthe gql console.\n\n#### [ETSource: Create a new basic etmodel](http://vimeo.com/40709640)\n\nWe build a new etmodel with 3 nodes from scratch. This helps you\nunderstand how the etsource works.\n\nThe result you can find in: etsource/models/sample\n\n[etsource]:    http://github.com/quintel/etsource  \"ETSource: database for the ETM.\"\n[etmodel]:     http://github.com/quintel/etmodel\n[etflex]:      http://github.com/quintel/etflex\n[energymixer]: http://github.com/quintel/energymixer\n[homebrew]:    http://brew.sh\n[pow]:         http://pow.cx\n[mysql]:       http://dev.mysql.com/downloads/mysql/5.5.html#macosx-dmg\n\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["user-interface"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/239","html_url":"https://ost.ecosyste.ms/projects/239"}