ydbi 0.5.8 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) 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 +8 -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/readme.md +3 -4
  43. data/setup.rb +1585 -0
  44. data/test/DBD_TESTS +50 -0
  45. data/test/TESTING +16 -0
  46. data/test/dbd/general/test_database.rb +206 -0
  47. data/test/dbd/general/test_statement.rb +325 -0
  48. data/test/dbd/general/test_types.rb +295 -0
  49. data/test/dbd/mysql/base.rb +26 -0
  50. data/test/dbd/mysql/down.sql +19 -0
  51. data/test/dbd/mysql/test_blob.rb +18 -0
  52. data/test/dbd/mysql/test_new_methods.rb +7 -0
  53. data/test/dbd/mysql/test_patches.rb +111 -0
  54. data/test/dbd/mysql/up.sql +28 -0
  55. data/test/dbd/odbc/base.rb +30 -0
  56. data/test/dbd/odbc/down.sql +19 -0
  57. data/test/dbd/odbc/test_new_methods.rb +12 -0
  58. data/test/dbd/odbc/test_ping.rb +10 -0
  59. data/test/dbd/odbc/test_statement.rb +44 -0
  60. data/test/dbd/odbc/test_transactions.rb +58 -0
  61. data/test/dbd/odbc/up.sql +33 -0
  62. data/test/dbd/postgresql/base.rb +31 -0
  63. data/test/dbd/postgresql/down.sql +31 -0
  64. data/test/dbd/postgresql/test_arrays.rb +179 -0
  65. data/test/dbd/postgresql/test_async.rb +121 -0
  66. data/test/dbd/postgresql/test_blob.rb +37 -0
  67. data/test/dbd/postgresql/test_bytea.rb +88 -0
  68. data/test/dbd/postgresql/test_ping.rb +10 -0
  69. data/test/dbd/postgresql/test_timestamp.rb +77 -0
  70. data/test/dbd/postgresql/test_transactions.rb +58 -0
  71. data/test/dbd/postgresql/testdbipg.rb +307 -0
  72. data/test/dbd/postgresql/up.sql +60 -0
  73. data/test/dbd/sqlite/base.rb +32 -0
  74. data/test/dbd/sqlite/test_database.rb +30 -0
  75. data/test/dbd/sqlite/test_driver.rb +68 -0
  76. data/test/dbd/sqlite/test_statement.rb +112 -0
  77. data/test/dbd/sqlite/up.sql +25 -0
  78. data/test/dbd/sqlite3/base.rb +32 -0
  79. data/test/dbd/sqlite3/test_database.rb +77 -0
  80. data/test/dbd/sqlite3/test_driver.rb +67 -0
  81. data/test/dbd/sqlite3/test_statement.rb +88 -0
  82. data/test/dbd/sqlite3/up.sql +33 -0
  83. data/test/dbi/tc_dbi.rb +1 -1
  84. data/test/ts_dbd.rb +136 -0
  85. data/ydbi.gemspec +25 -0
  86. metadata +148 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 62f01549856766688a97c7b0978a288de3036664ada7ada30004210f3d59204e
4
- data.tar.gz: 035ef8999addc9d27a10d2e51ccf7390c4aac40227d3273a93e5b4d0c0079cba
3
+ metadata.gz: 80455e3ec5f80b4e8539b22d58879b7012f70b83c29bc9784bb82427566aa91b
4
+ data.tar.gz: 18c776985c1edd563dc5783e6515f1b2653e80ab884272c084fdaad8b59e502e
5
5
  SHA512:
6
- metadata.gz: d863b375ab55be7eaa5556427fce403e0cfb7197daa9dd7b997af1bf1e1ef920d383ff5ccdd5bbcacf63373b4466ef2a3722398175d949ad80be8f2f12aab44a
7
- data.tar.gz: 11a57ae2353ff07445bf79e3a770023387284cf8883dafda2087b8e466fbbe6a2184d6aece6a4ee097cefb53aeff6849cfb12ae6e9062a85dedb9621f3e4bf85
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,3 +1,11 @@
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
+
6
+ ## 0.5.9 - 15/12/2022
7
+ * fix issue with tty, see https://github.com/zdavatz/oddb.org/issues/183
8
+
1
9
  ## 0.5.8 - 11/03/2021
2
10
 
3
11
  * removed fixed dependency to pg (is now optional like mysql)
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
+ }