{"id":18007639,"url":"https://github.com/haacked/rothko","last_synced_at":"2025-03-26T12:31:46.857Z","repository":{"id":3604387,"uuid":"4669021","full_name":"haacked/Rothko","owner":"haacked","description":"An abstracted library for interacting with the file system, registry, etc.","archived":false,"fork":false,"pushed_at":"2020-06-11T00:12:42.000Z","size":23126,"stargazers_count":81,"open_issues_count":5,"forks_count":18,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-03-21T19:01:34.897Z","etag":null,"topics":["c-sharp","filesystem","testability"],"latest_commit_sha":null,"homepage":null,"language":"HTML","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/haacked.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-MIT.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-06-14T22:03:49.000Z","updated_at":"2023-08-29T10:53:53.000Z","dependencies_parsed_at":"2022-09-10T22:12:31.989Z","dependency_job_id":null,"html_url":"https://github.com/haacked/Rothko","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haacked%2FRothko","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haacked%2FRothko/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haacked%2FRothko/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haacked%2FRothko/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/haacked","download_url":"https://codeload.github.com/haacked/Rothko/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245654172,"owners_count":20650816,"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","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-sharp","filesystem","testability"],"created_at":"2024-10-30T01:14:01.266Z","updated_at":"2025-03-26T12:31:45.185Z","avatar_url":"https://github.com/haacked.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rothko\n\nWe all know the .NET Framework APIs for dealing with the file system are not \ndesigned with testability in mind. Also, I wasn't happy with the existing \nlibraries for providing an abstraction for such things. I wanted one that was:\n\n* Modern - Included the `Enumerate*` methods for example.\n* Interface based - Using Abstract base classes as the abstraction is blech.\n* Easy to port to - So it had to follow the existing APIs closely.\n\nRothko is this library. It provides abstractions for:\n\n* File system.\n* Registry\n* Environment.\n\nThe starting point for Rothko is the `OperatingSystemFacade` class. From there \nyou can get to the other abstractions.\n\n* `IFileSystem`\n* `IEnvironment`\n* `IRegistry`\n\n# Goals\n\nThe goal is to use this in GitHub for Windows as well as any other\napplications where testability is important.\n\nA secondary goal is to make it very easy to port code using the core .NET \nFramework APIs to port over to Rothko. The interfaces map closely to the \n.NET Framework's, except in a few places where I wouldn't be able to live with \nmyself if I didn't modernize the library. For example, I updated methods \nthat return arrays to return `IEnumerable` (or derived interface) instead.\n\nOnce these low level abstractions are implemented, I plan to add a set of\n_Facade_ classes that provide a more usable API that we all wished had been\nthere all along. These _Facade_ classes will simply delegate to the\nlower-level abstractions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaacked%2Frothko","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhaacked%2Frothko","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaacked%2Frothko/lists"}