ydbi 0.5.9 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +3 -0
  3. data/.github/workflows/ruby.yml +65 -0
  4. data/.gitignore +19 -0
  5. data/ChangeLog +9 -0
  6. data/Gemfile +5 -0
  7. data/Rakefile +14 -0
  8. data/TODO +44 -0
  9. data/bench/bench.rb +79 -0
  10. data/build/rake_task_lib.rb +186 -0
  11. data/devenv.lock +228 -0
  12. data/devenv.nix +55 -0
  13. data/devenv.yaml +8 -0
  14. data/doc/DBD_SPEC.rdoc +88 -0
  15. data/doc/DBI_SPEC.rdoc +157 -0
  16. data/doc/homepage/contact.html +62 -0
  17. data/doc/homepage/development.html +124 -0
  18. data/doc/homepage/index.html +83 -0
  19. data/doc/homepage/ruby-dbi.css +91 -0
  20. data/lib/dbd/Mysql.rb +137 -0
  21. data/lib/dbd/ODBC.rb +89 -0
  22. data/lib/dbd/Pg.rb +189 -0
  23. data/lib/dbd/SQLite.rb +97 -0
  24. data/lib/dbd/SQLite3.rb +124 -0
  25. data/lib/dbd/mysql/database.rb +405 -0
  26. data/lib/dbd/mysql/driver.rb +125 -0
  27. data/lib/dbd/mysql/statement.rb +188 -0
  28. data/lib/dbd/odbc/database.rb +128 -0
  29. data/lib/dbd/odbc/driver.rb +38 -0
  30. data/lib/dbd/odbc/statement.rb +137 -0
  31. data/lib/dbd/pg/database.rb +508 -0
  32. data/lib/dbd/pg/exec.rb +47 -0
  33. data/lib/dbd/pg/statement.rb +160 -0
  34. data/lib/dbd/pg/tuples.rb +121 -0
  35. data/lib/dbd/pg/type.rb +209 -0
  36. data/lib/dbd/sqlite/database.rb +151 -0
  37. data/lib/dbd/sqlite/statement.rb +125 -0
  38. data/lib/dbd/sqlite3/database.rb +201 -0
  39. data/lib/dbd/sqlite3/statement.rb +78 -0
  40. data/lib/dbi/version.rb +1 -1
  41. data/prototypes/types2.rb +237 -0
  42. data/setup.rb +1585 -0
  43. data/test/DBD_TESTS +50 -0
  44. data/test/TESTING +16 -0
  45. data/test/dbd/general/test_database.rb +206 -0
  46. data/test/dbd/general/test_statement.rb +325 -0
  47. data/test/dbd/general/test_types.rb +295 -0
  48. data/test/dbd/mysql/base.rb +26 -0
  49. data/test/dbd/mysql/down.sql +19 -0
  50. data/test/dbd/mysql/test_blob.rb +18 -0
  51. data/test/dbd/mysql/test_new_methods.rb +7 -0
  52. data/test/dbd/mysql/test_patches.rb +111 -0
  53. data/test/dbd/mysql/up.sql +28 -0
  54. data/test/dbd/odbc/base.rb +30 -0
  55. data/test/dbd/odbc/down.sql +19 -0
  56. data/test/dbd/odbc/test_new_methods.rb +12 -0
  57. data/test/dbd/odbc/test_ping.rb +10 -0
  58. data/test/dbd/odbc/test_statement.rb +44 -0
  59. data/test/dbd/odbc/test_transactions.rb +58 -0
  60. data/test/dbd/odbc/up.sql +33 -0
  61. data/test/dbd/postgresql/base.rb +31 -0
  62. data/test/dbd/postgresql/down.sql +31 -0
  63. data/test/dbd/postgresql/test_arrays.rb +179 -0
  64. data/test/dbd/postgresql/test_async.rb +121 -0
  65. data/test/dbd/postgresql/test_blob.rb +37 -0
  66. data/test/dbd/postgresql/test_bytea.rb +88 -0
  67. data/test/dbd/postgresql/test_ping.rb +10 -0
  68. data/test/dbd/postgresql/test_timestamp.rb +77 -0
  69. data/test/dbd/postgresql/test_transactions.rb +58 -0
  70. data/test/dbd/postgresql/testdbipg.rb +307 -0
  71. data/test/dbd/postgresql/up.sql +60 -0
  72. data/test/dbd/sqlite/base.rb +32 -0
  73. data/test/dbd/sqlite/test_database.rb +30 -0
  74. data/test/dbd/sqlite/test_driver.rb +68 -0
  75. data/test/dbd/sqlite/test_statement.rb +112 -0
  76. data/test/dbd/sqlite/up.sql +25 -0
  77. data/test/dbd/sqlite3/base.rb +32 -0
  78. data/test/dbd/sqlite3/test_database.rb +77 -0
  79. data/test/dbd/sqlite3/test_driver.rb +67 -0
  80. data/test/dbd/sqlite3/test_statement.rb +88 -0
  81. data/test/dbd/sqlite3/up.sql +33 -0
  82. data/test/dbi/tc_dbi.rb +1 -1
  83. data/test/ts_dbd.rb +136 -0
  84. data/ydbi.gemspec +25 -0
  85. metadata +150 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eafafd7da9dd1ea4e5ac36826c833b489f242a82c8717005e1fbe54f85ebab4e
4
- data.tar.gz: 3c49d2a9f43a91069da5a6c6d47a270cce6a0eefd82bcbe843fe10b16afbbe9c
3
+ metadata.gz: 80455e3ec5f80b4e8539b22d58879b7012f70b83c29bc9784bb82427566aa91b
4
+ data.tar.gz: 18c776985c1edd563dc5783e6515f1b2653e80ab884272c084fdaad8b59e502e
5
5
  SHA512:
6
- metadata.gz: 8cc10904dd30231128a1c636527b308541b75ed00b75c2bb9786717590edcfed4fdeef80e1946d4c5891688eba743b39031cd3f6ed0647a8f413590f110c9427
7
- data.tar.gz: 87aa0ecae9141de587216de101c35ca53a74e2a128308d1502be0f6d64476cd74c298c0f3ca022e98419587b4419ee4f799e1a72f0ed864ab0db457e8624c6ea
6
+ metadata.gz: 7aa52a52781a15e92afb3707a326880aebbf42fe732133614bb8aebcb643b3403dd3075fe96589b2704f053048120e7672df3d6ba6687d1eb5c64624b1095fdf
7
+ data.tar.gz: ab575de5db9ed153350a8305e72757378380731b8bcb9e6adc1ffcc5b25aa4f1596ffd7bd4100579ed5d417dedf83fe70c27f8f97077999c2bc5c0d39aab676f
data/.envrc ADDED
@@ -0,0 +1,3 @@
1
+ source_url "https://raw.githubusercontent.com/cachix/devenv/d1f7b48e35e6dee421cfd0f51481d17f77586997/direnvrc" "sha256-YBzqskFZxmNb3kYVoKD9ZixoPXJh1C9ZvTLGFRkauZ0="
2
+
3
+ use devenv
@@ -0,0 +1,65 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ master ]
13
+ pull_request:
14
+ branches: [ master ]
15
+
16
+ jobs:
17
+ test:
18
+ runs-on: ubuntu-latest
19
+ # Service containers to run with `runner-job`
20
+ services:
21
+ # Label used to access the service container
22
+ postgres:
23
+ # Docker Hub image
24
+ image: postgres
25
+ # Provide the password for postgres
26
+ env:
27
+ # POSTGRES_PASSWORD: pg_password
28
+ POSTGRES_HOST_AUTH_METHOD: trust
29
+ POSTGRES_USER: ydbi_pg
30
+ # Set health checks to wait until postgres has started
31
+ options: >-
32
+ --health-cmd pg_isready
33
+ --health-interval 10s
34
+ --health-timeout 5s
35
+ --health-retries 5
36
+ ports:
37
+ # Maps tcp port 5432 on service container to the host
38
+ - 5432:5432
39
+
40
+ strategy:
41
+ fail-fast: false
42
+ matrix:
43
+ ruby-version: ['2.6', '2.7', '3.0', '3.1', 3.2, 3.3]
44
+
45
+ steps:
46
+ - uses: actions/checkout@v4
47
+ - name: Set up Ruby
48
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
49
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
50
+ # uses: ruby/setup-ruby@v1
51
+ uses: ruby/setup-ruby@v1
52
+ with:
53
+ ruby-version: ${{ matrix.ruby-version }}
54
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
55
+ - name: Run tests
56
+ env:
57
+ PGDATABASE: ydbi_pg
58
+ PGHOST: localhost
59
+ PGPORT: 5432
60
+ PGUSER: ydbi_pg
61
+ PGPASSWORD: postgres
62
+
63
+ run: |
64
+ psql --version
65
+ bundle exec rake test
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ vendor/
2
+ coverage/
3
+ pkg/
4
+ .bundle
5
+ .ruby-version
6
+ Gemfile.lock
7
+ rdoc/
8
+ *.patch
9
+
10
+ # Devenv
11
+ .devenv*
12
+ devenv.local.nix
13
+
14
+ # direnv
15
+ .direnv
16
+
17
+ # pre-commit
18
+ .pre-commit-config.yaml
19
+
data/ChangeLog CHANGED
@@ -1,6 +1,15 @@
1
+ ## 0.6.0 - 30/01/2024
2
+ * fix running under postgresql 12 and later
3
+ * run tests for ydbi-pg via test/dbd/postgresql and add them to the github workflow
4
+ * Added support for https://devenv.sh
5
+
1
6
  ## 0.5.9 - 15/12/2022
2
7
  * fix issue with tty, see https://github.com/zdavatz/oddb.org/issues/183
3
8
 
9
+ ## 0.5.8 - 11/03/2021
10
+
11
+ * removed fixed dependency to pg (is now optional like mysql)
12
+
4
13
  ## 0.5.7 - 18/01/2021
5
14
 
6
15
  * Fixed and cleaned Unit Tests
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # A sample Gemfile
2
+ source "https://rubygems.org"
3
+
4
+ gemspec
5
+ gem 'pg'
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ $:.unshift 'build'
2
+ found = false;
3
+ if File.exist? 'lib/dbi'
4
+ require 'Rakefile.dbi'
5
+ end
6
+ if File.exist? 'lib/dbd'
7
+ require 'rake_task_lib'
8
+ build_dbd_tasks(File.basename(Dir['lib/dbd/*.rb'][0], '.rb').downcase)
9
+ found = true;
10
+ end
11
+ unless found
12
+ abort "Well, this is odd; No DBI or DBD found."
13
+ end
14
+ require 'bundler/gem_tasks'
data/TODO ADDED
@@ -0,0 +1,44 @@
1
+ 0.4.0:
2
+ x Work
3
+ x Postgres quoting toggles
4
+ x Postgres binding toggles
5
+ x Test for #20489
6
+ * Release checklist:
7
+ x Update ChangeLog
8
+ x rake
9
+ x remove all related gems, install all DBI/DBD gems (check prereqs)
10
+ x write a few test scripts to make sure drivers are loading
11
+ x Update homepage (irc channel, git, other changes)
12
+ * tag as 0.4.0
13
+ * upload rdoc
14
+ * upload packages
15
+ * release announcement (rf, ruby-talk, dbi lists, other places?)
16
+ * rebase master from development
17
+ * BEER
18
+ 0.6.0:
19
+ * Cleanup:
20
+ * Arrays:
21
+ * Find some way to get the extents of an array type
22
+ * checked pg_type, pg_attribute and pg_class, can't find anything.
23
+ * I don't think this is possible, but let's slate it for 0.6.0 anyways.
24
+ * Tracing
25
+ * WTH do we want to do with this
26
+ * Wow, this module has *serious issues*. Crashes DBI without warning. Redo this completely.
27
+ * 0.6.0
28
+ * Re-institute drivers
29
+ * Proxy
30
+ * Slated for 0.6.0
31
+ * Finish type management system
32
+ * Unify ColumnInfo
33
+ * Should we enforce ColumnInfo requirements at the DBI level?
34
+ * At least test the result of statement colinfo uniformly
35
+ * 0.6.0
36
+ * Cleanup core
37
+ * Require code is a mess
38
+ * Just remove the case-sensitivity from the DBDs in general
39
+ * 0.6.0
40
+ * Find a good clean way to enumerate drivers in separate gems
41
+ * Some registration-on-require would be cleaner and safer
42
+ * 0.6.0
43
+ * Scripts
44
+ * bin/dbd_proxy seems to have never worked; slate it for 0.6.0
data/bench/bench.rb ADDED
@@ -0,0 +1,79 @@
1
+ require 'rubygems'
2
+ $:.unshift File.dirname(__FILE__) + '/../lib'
3
+ require 'dbi'
4
+
5
+ class DbiBenchmark
6
+ attr_reader :db
7
+
8
+ def initialize db, quiet=false
9
+ @db = db
10
+ @quiet = quiet
11
+ end
12
+
13
+ def puts(*args)
14
+ super unless @quiet
15
+ end
16
+
17
+ def run
18
+ times = {}
19
+ %w[create_test_table selecting_floats selecting_datetimes].each do |name|
20
+ t = Time.now
21
+ puts "* #{name.tr('_', ' ').capitalize}"
22
+ send name
23
+ took = Time.now - t
24
+ puts " (took #{took} seconds)"
25
+ puts
26
+ times[name] = took
27
+ end
28
+ times
29
+ ensure
30
+ db.do 'drop table data'
31
+ end
32
+
33
+ def create_test_table
34
+ db.do <<-end
35
+ create table data (
36
+ date timestamp,
37
+ value float
38
+ )
39
+ end
40
+ db.do 'begin'
41
+ today = Date.today
42
+ 5_000.times do
43
+ db.do "insert into data values ('#{today + rand(100) - 50}', #{10 + rand * 30})"
44
+ end
45
+ db.do 'commit'
46
+ end
47
+
48
+ def selecting_floats
49
+ strs = db.select_all('select value from data').map { |v| v.to_s }
50
+ puts *strs[0, 5]
51
+ puts '...'
52
+ end
53
+
54
+ def selecting_datetimes
55
+ strs = db.select_all('select date from data').map { |v| v.to_s }
56
+ puts *strs[0, 5]
57
+ puts '...'
58
+ end
59
+ end
60
+
61
+ def bench
62
+ dbiurls = [
63
+ 'DBI:Mysql:dbitest:localhost',
64
+ 'DBI:ODBC:MYDBITEST',
65
+ 'DBI:Pg:dbitest:localhost',
66
+ 'DBI:ODBC:PGDBITEST',
67
+ ]
68
+ order = %w[create_test_table selecting_floats selecting_datetimes]
69
+ dbiurls.map do |url|
70
+ # assume all dbs have the same credentials
71
+ DBI.connect(url, *ARGV) do |db|
72
+ [url.first.sub('DBI:', ''), *DbiBenchmark.new(db, true).run.values_at(*order)]
73
+ end
74
+ end
75
+ end
76
+
77
+ puts 'Running benchmark:'
78
+ DBI::Utils::TableFormatter.ascii(%w[db insert float datetime], bench, nil, nil, nil, nil, 30)
79
+
@@ -0,0 +1,186 @@
1
+ $:.unshift 'lib'
2
+ require 'rake'
3
+ require 'rubygems'
4
+ require 'rubygems/package_task'
5
+ require 'rake/packagetask'
6
+ require 'rdoc/task'
7
+
8
+
9
+ DEFAULT_TASKS = [:clobber_package, :package, :gem]
10
+
11
+ DBD_GEM_DEP_MAP = {
12
+ 'pg' => 'pg',
13
+ # 'mysql' => 'mysql',
14
+ # 'sqlite' => 'sqlite-ruby',
15
+ # 'sqlite3' => 'sqlite3-ruby'
16
+ }
17
+
18
+ #
19
+ # Packaging
20
+ #
21
+
22
+ PACKAGE_FILES = %w(Rakefile build/rake_task_lib.rb setup.rb)
23
+ DOC_FILES = %w(readme.md LICENSE ChangeLog)
24
+ EXCLUSIONS = %w(test/sql.log)
25
+ DBD_FILES = %w(test/DBD_TESTS)
26
+
27
+ #
28
+ # some inlines
29
+ #
30
+
31
+ def gem_files(code_files)
32
+ (code_files + DOC_FILES).collect { |x| Dir[x] }.reject { |x| EXCLUSIONS.include? x }.flatten
33
+ end
34
+
35
+ def package_files(code_files)
36
+ code_files + DOC_FILES + PACKAGE_FILES
37
+ end
38
+
39
+ def build_package_tasks(spec, code_files)
40
+ Gem::PackageTask.new(spec) do |s|
41
+ end
42
+
43
+ Rake::PackageTask.new('y'+spec.name, spec.version) do |p|
44
+ p.need_tar_gz = true
45
+ p.need_zip = true
46
+
47
+ package_files(code_files).each do |x|
48
+ p.package_files.include(x)
49
+ end
50
+
51
+ EXCLUSIONS.each do |x|
52
+ p.package_files.exclude(x)
53
+ end
54
+ end
55
+ end
56
+
57
+ def boilerplate_spec
58
+ gem = Gem::Specification.new
59
+ gem.authors = ['Erik Hollensbe', 'Christopher Maujean']
60
+ gem.email = 'zdavatz@ywesee.com'
61
+ gem.homepage = 'https://github.com/zdavatz/ydbi'
62
+ gem.platform = Gem::Platform::RUBY
63
+ gem.extra_rdoc_files = DOC_FILES
64
+ gem.required_ruby_version = '>= 1.8.0'
65
+ gem.rubyforge_project = 'ydbi'
66
+ return gem
67
+ end
68
+
69
+ # builds a dbd namespace from the DBD_PACKAGES hash
70
+ def dbd_namespace(dbd)
71
+ "ydbd-" + dbd.to_s.downcase
72
+ end
73
+
74
+ def dbd_code_files(dbd)
75
+ code_files = [
76
+ "test/dbd/general/**",
77
+ File.join("test", "dbd", dbd.downcase == "pg" ? "postgresql" : dbd.downcase, "*"),
78
+ File.join("lib", "dbd", dbd + ".rb"),
79
+ "lib/dbd/#{dbd.downcase}/*.rb",
80
+ ] + DBD_FILES
81
+ end
82
+
83
+ def dbd_gem_files(code_files)
84
+ DBD_FILES + gem_files(code_files)
85
+ end
86
+
87
+ def dbd_package_files(code_files)
88
+ DBD_FILES + package_files(code_files)
89
+ end
90
+
91
+ def dbd_gem_spec(dbd, dbd_const, code_files)
92
+ spec = boilerplate_spec
93
+ spec.name = dbd_namespace(dbd)
94
+ spec.version = dbd_version(dbd_const)
95
+ spec.test_file = 'test/ts_dbd.rb'
96
+ spec.files = gem_files(code_files)
97
+ spec.summary = dbd_description(dbd_const)
98
+ spec.description = dbd_description(dbd_const)
99
+ spec.add_dependency 'ydbi', DBI::VERSION
100
+
101
+ dcdbd = dbd.downcase
102
+
103
+ if DBD_GEM_DEP_MAP[dcdbd]
104
+ spec.add_dependency DBD_GEM_DEP_MAP[dcdbd]
105
+ end
106
+
107
+ return spec
108
+ end
109
+
110
+ def dbd_version(const)
111
+ DBI::DBD.const_get(const).const_get("VERSION")
112
+ end
113
+
114
+ def dbd_description(const)
115
+ DBI::DBD.const_get(const).const_get("DESCRIPTION")
116
+ end
117
+
118
+
119
+ def build_dbd_tasks(dbd)
120
+ task :default => DEFAULT_TASKS
121
+
122
+ begin
123
+ done = false
124
+ dbd_const = nil
125
+ Dir["lib/dbd/*.rb"].each do |dbd_file|
126
+ if File.basename(dbd_file.downcase, '.rb') == dbd.to_s.downcase
127
+ dbd_const = File.basename(dbd_file, '.rb')
128
+ require "dbd/#{dbd_const}"
129
+ done = true
130
+ end
131
+ end
132
+
133
+ abort "No DBD found even though we asked to make tasks for it" unless done
134
+
135
+ code_files = dbd_code_files(dbd_const)
136
+
137
+ spec = dbd_gem_spec(dbd, dbd_const, code_files)
138
+
139
+ build_package_tasks(spec, code_files)
140
+
141
+ # FIXME: convert to a rake_test_loader sooner or later
142
+ task :test do
143
+ ENV["DBTYPES"] = dbd
144
+ ruby "test/ts_dbd.rb"
145
+ end
146
+ rescue LoadError => e
147
+ DEFAULT_TASKS.each do |x|
148
+ task x do
149
+ end
150
+ end
151
+ warn "Skipping #{dbd_namespace(dbd)} because we can't require DBD"
152
+ end
153
+ end
154
+
155
+ def build_dbi_tasks
156
+ end
157
+
158
+ #
159
+ # basic tasks
160
+ #
161
+
162
+ task :dist => [:distclean, :package, :rdoc]
163
+ task :distclean => [:clobber_package, :clobber_rdoc]
164
+ task :clean => [:distclean]
165
+ task :default => [:test, :dist]
166
+
167
+ task :to_blog => [:clobber_rdoc, :rdoc] do
168
+ sh "rm -r $git/blog/content/docs/ruby-dbi && mv rdoc $git/blog/content/docs/ruby-dbi"
169
+ end
170
+
171
+ #
172
+ # Documentation
173
+ #
174
+
175
+ RDoc::Task.new do |rd|
176
+ rd.rdoc_dir = "rdoc"
177
+ rd.main = "readme.md"
178
+ rd.rdoc_files.include("./readme.md")
179
+ rd.rdoc_files.include("./ChangeLog")
180
+ rd.rdoc_files.include("./LICENSE")
181
+ rd.rdoc_files.include("./doc/**/*.rdoc")
182
+ rd.rdoc_files.include("./lib/**/*.rb")
183
+ rd.rdoc_files.include("./ext/**/*.c")
184
+ rd.options = %w(-a)
185
+ end
186
+
data/devenv.lock ADDED
@@ -0,0 +1,228 @@
1
+ {
2
+ "nodes": {
3
+ "devenv": {
4
+ "locked": {
5
+ "dir": "src/modules",
6
+ "lastModified": 1705399223,
7
+ "narHash": "sha256-2nhAJ/9LMlwaEZDnoDIhnhQ0pEC/YIIt09WD7FmTp6g=",
8
+ "owner": "cachix",
9
+ "repo": "devenv",
10
+ "rev": "ff37923d4ba9e220b9826594e83fc29e1a4f4338",
11
+ "type": "github"
12
+ },
13
+ "original": {
14
+ "dir": "src/modules",
15
+ "owner": "cachix",
16
+ "repo": "devenv",
17
+ "type": "github"
18
+ }
19
+ },
20
+ "flake-compat": {
21
+ "flake": false,
22
+ "locked": {
23
+ "lastModified": 1696426674,
24
+ "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
25
+ "owner": "edolstra",
26
+ "repo": "flake-compat",
27
+ "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
28
+ "type": "github"
29
+ },
30
+ "original": {
31
+ "owner": "edolstra",
32
+ "repo": "flake-compat",
33
+ "type": "github"
34
+ }
35
+ },
36
+ "flake-compat_2": {
37
+ "flake": false,
38
+ "locked": {
39
+ "lastModified": 1696426674,
40
+ "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
41
+ "owner": "edolstra",
42
+ "repo": "flake-compat",
43
+ "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
44
+ "type": "github"
45
+ },
46
+ "original": {
47
+ "owner": "edolstra",
48
+ "repo": "flake-compat",
49
+ "type": "github"
50
+ }
51
+ },
52
+ "flake-utils": {
53
+ "inputs": {
54
+ "systems": "systems"
55
+ },
56
+ "locked": {
57
+ "lastModified": 1694529238,
58
+ "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
59
+ "owner": "numtide",
60
+ "repo": "flake-utils",
61
+ "rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
62
+ "type": "github"
63
+ },
64
+ "original": {
65
+ "owner": "numtide",
66
+ "repo": "flake-utils",
67
+ "type": "github"
68
+ }
69
+ },
70
+ "flake-utils_2": {
71
+ "inputs": {
72
+ "systems": "systems_2"
73
+ },
74
+ "locked": {
75
+ "lastModified": 1701680307,
76
+ "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
77
+ "owner": "numtide",
78
+ "repo": "flake-utils",
79
+ "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
80
+ "type": "github"
81
+ },
82
+ "original": {
83
+ "owner": "numtide",
84
+ "repo": "flake-utils",
85
+ "type": "github"
86
+ }
87
+ },
88
+ "gitignore": {
89
+ "inputs": {
90
+ "nixpkgs": [
91
+ "pre-commit-hooks",
92
+ "nixpkgs"
93
+ ]
94
+ },
95
+ "locked": {
96
+ "lastModified": 1703887061,
97
+ "narHash": "sha256-gGPa9qWNc6eCXT/+Z5/zMkyYOuRZqeFZBDbopNZQkuY=",
98
+ "owner": "hercules-ci",
99
+ "repo": "gitignore.nix",
100
+ "rev": "43e1aa1308018f37118e34d3a9cb4f5e75dc11d5",
101
+ "type": "github"
102
+ },
103
+ "original": {
104
+ "owner": "hercules-ci",
105
+ "repo": "gitignore.nix",
106
+ "type": "github"
107
+ }
108
+ },
109
+ "nixpkgs": {
110
+ "locked": {
111
+ "lastModified": 1705331948,
112
+ "narHash": "sha256-qjQXfvrAT1/RKDFAMdl8Hw3m4tLVvMCc8fMqzJv0pP4=",
113
+ "owner": "NixOS",
114
+ "repo": "nixpkgs",
115
+ "rev": "b8dd8be3c790215716e7c12b247f45ca525867e2",
116
+ "type": "github"
117
+ },
118
+ "original": {
119
+ "owner": "NixOS",
120
+ "ref": "nixos-23.11",
121
+ "repo": "nixpkgs",
122
+ "type": "github"
123
+ }
124
+ },
125
+ "nixpkgs-ruby": {
126
+ "inputs": {
127
+ "flake-compat": "flake-compat",
128
+ "flake-utils": "flake-utils",
129
+ "nixpkgs": [
130
+ "nixpkgs"
131
+ ]
132
+ },
133
+ "locked": {
134
+ "lastModified": 1705118282,
135
+ "narHash": "sha256-9FUnVSPjF+xV2a7tfai8fxi9Ek538mdkEjaFJnWRk9Y=",
136
+ "owner": "bobvanderlinden",
137
+ "repo": "nixpkgs-ruby",
138
+ "rev": "1a4b0055af39b2d0756d5a117589b8ccddbce4f8",
139
+ "type": "github"
140
+ },
141
+ "original": {
142
+ "owner": "bobvanderlinden",
143
+ "repo": "nixpkgs-ruby",
144
+ "type": "github"
145
+ }
146
+ },
147
+ "nixpkgs-stable": {
148
+ "locked": {
149
+ "lastModified": 1704874635,
150
+ "narHash": "sha256-YWuCrtsty5vVZvu+7BchAxmcYzTMfolSPP5io8+WYCg=",
151
+ "owner": "NixOS",
152
+ "repo": "nixpkgs",
153
+ "rev": "3dc440faeee9e889fe2d1b4d25ad0f430d449356",
154
+ "type": "github"
155
+ },
156
+ "original": {
157
+ "owner": "NixOS",
158
+ "ref": "nixos-23.11",
159
+ "repo": "nixpkgs",
160
+ "type": "github"
161
+ }
162
+ },
163
+ "pre-commit-hooks": {
164
+ "inputs": {
165
+ "flake-compat": "flake-compat_2",
166
+ "flake-utils": "flake-utils_2",
167
+ "gitignore": "gitignore",
168
+ "nixpkgs": [
169
+ "nixpkgs"
170
+ ],
171
+ "nixpkgs-stable": "nixpkgs-stable"
172
+ },
173
+ "locked": {
174
+ "lastModified": 1705229514,
175
+ "narHash": "sha256-itILy0zimR/iyUGq5Dgg0fiW8plRDyxF153LWGsg3Cw=",
176
+ "owner": "cachix",
177
+ "repo": "pre-commit-hooks.nix",
178
+ "rev": "ffa9a5b90b0acfaa03b1533b83eaf5dead819a05",
179
+ "type": "github"
180
+ },
181
+ "original": {
182
+ "owner": "cachix",
183
+ "repo": "pre-commit-hooks.nix",
184
+ "type": "github"
185
+ }
186
+ },
187
+ "root": {
188
+ "inputs": {
189
+ "devenv": "devenv",
190
+ "nixpkgs": "nixpkgs",
191
+ "nixpkgs-ruby": "nixpkgs-ruby",
192
+ "pre-commit-hooks": "pre-commit-hooks"
193
+ }
194
+ },
195
+ "systems": {
196
+ "locked": {
197
+ "lastModified": 1681028828,
198
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
199
+ "owner": "nix-systems",
200
+ "repo": "default",
201
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
202
+ "type": "github"
203
+ },
204
+ "original": {
205
+ "owner": "nix-systems",
206
+ "repo": "default",
207
+ "type": "github"
208
+ }
209
+ },
210
+ "systems_2": {
211
+ "locked": {
212
+ "lastModified": 1681028828,
213
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
214
+ "owner": "nix-systems",
215
+ "repo": "default",
216
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
217
+ "type": "github"
218
+ },
219
+ "original": {
220
+ "owner": "nix-systems",
221
+ "repo": "default",
222
+ "type": "github"
223
+ }
224
+ }
225
+ },
226
+ "root": "root",
227
+ "version": 7
228
+ }