jekyll-sqlite 0.1.3 → 0.1.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f14ced1e5bddd23e8aca1460f7acc53449b2d19fbf3bb67eb97f55f194facc95
4
- data.tar.gz: f2a21e3b7d89d2d8d476c71ee2876025037009eb311df7d64fb1b9e2dca5cac3
3
+ metadata.gz: fbf075a895e90cae8f3b5d69299089ad2f2381b9ba255348b7f517c6ef03f8a0
4
+ data.tar.gz: 920c6c9292ead41d747e88a8cb6ab5e5a1a85d54d19781d3b675a316a90c3e98
5
5
  SHA512:
6
- metadata.gz: 50c29d5008eb35fd2ed1fd6d9b6acf7cca7c1fcc0b5e3b4933506f0a29875118c02934ccbd2cec94f3676d7276f71527803bb4324467b36a29dcddfe8b8d2064
7
- data.tar.gz: '09b4bd31b5fe04534892df1e5a229e3aca26cc447a147f2cf43d5e306a4c14c30156505b08481c78b89c1216b7e0aec6ba54ee3979ab002363d46dec3fc8f11a'
6
+ metadata.gz: 769762e5786644f055002eae18dd443e12989242f24f5ce79cbd03dcea235bf73cc7e6b4c6a70b30dac024d03ca03e84fbe5f16ef5cdf9289cd930b8ccbeedf4
7
+ data.tar.gz: 0c950eca035285304de7900e780b41e769340083b9966c2a01df02a4b10330bc8917cbd63be53f84852ceb1e8dfb7f7d4845c73c89afa0fa8f4719c8dfad82fb
data/.rubocop.yml CHANGED
@@ -2,7 +2,12 @@ require: rubocop-rake
2
2
  AllCops:
3
3
  TargetRubyVersion: 3.0
4
4
  NewCops: enable
5
-
5
+ Exclude:
6
+ - "node_modules/**/*"
7
+ - "tmp/**/*"
8
+ - "vendor/**/*"
9
+ - ".git/**/*"
10
+ - "test/_plugins/jekyll_sqlite_generator.rb"
6
11
  Style/StringLiterals:
7
12
  Enabled: true
8
13
  EnforcedStyle: double_quotes
@@ -15,4 +20,4 @@ Layout/LineLength:
15
20
  Max: 120
16
21
 
17
22
  Metrics/AbcSize:
18
- Max: 20
23
+ Max: 15
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.1.4] - 2024-07-17
4
+ - Per-page queries are now supported via a `sqlite` config block in the front matter.
5
+ - Documents support for existing site data being used within queries.
6
+ - Code cleanup and refactoring.
7
+ - Don't disable journaling on the database.
8
+
3
9
  ## [0.1.3] - 2024-07-02
4
10
  - First functional version
5
11
  - Adds tests
data/Gemfile CHANGED
@@ -6,7 +6,12 @@ source "https://rubygems.org"
6
6
  gemspec
7
7
 
8
8
  # These are development dependencies
9
- gem "rake", "~> 13.0"
10
9
  gem "jekyll", "~> 4.0"
10
+ gem "rake", "~> 13.0"
11
11
  gem "rubocop", "~> 1.21"
12
12
  gem "rubocop-rake", "~> 0.6.0"
13
+
14
+ # Ruby 3.4 preparedness
15
+ gem "base64", "~> 0.2.0"
16
+ gem "bigdecimal", "~> 3.1"
17
+ gem "csv", "~> 3.3"
data/README.md CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  A Jekyll generator plugin to lets you use SQLite database instead of data files as a data source. It lets you easily create APIs and websites from a SQLite database, by linking together a database file, your template, and the relevant queries.
4
4
 
5
- It additionally supports nested queries, so that you can use the rows of `site.data.items` as bind_params for your nested query.
5
+ It supports site-level queries, per-page queries, and prepared queries that can
6
+ use existing data (possibly generated via more queries) as parameters.
6
7
 
7
8
  [![Continuous Integration](https://github.com/captn3m0/jekyll-sqlite/actions/workflows/main.yml/badge.svg)](https://github.com/captn3m0/jekyll-sqlite/actions/workflows/main.yml) [![Gem Version](https://badge.fury.io/rb/jekyll-sqlite.svg)](https://badge.fury.io/rb/jekyll-sqlite)
8
9
 
@@ -31,73 +32,38 @@ the `test` directory for a functional example with the [Northwind database](http
31
32
  ```yml
32
33
  ...
33
34
  sqlite:
34
- - data: orders
35
- file: &db "_db/northwind.db"
36
- query: SELECT * from Orders
37
35
  - data: customers
38
36
  file: *db
39
37
  query: SELECT * from Customers
40
- - data: categories
41
- file: *db
42
- query: SELECT CategoryID, CategoryName, Description FROM Categories
43
- # Note that the CategoryID parameter in the query is coming from site.data.categories[].CategoryID
44
- # which was picked up in the previous query
45
- - data: categories.products
46
- file: *db
47
- query: SELECT ProductID, ProductName FROM Products WHERE Products.CategoryID=:CategoryID
48
38
  ```
49
39
 
50
40
  Then, you can use the `site.data` attributes accordingly:
51
41
 
52
42
  ```liquid
53
- {{ site.data.categories | jsonify }}
54
- ```
55
-
56
- ## Generating Pages
57
-
58
- It works well with the `datapage_gen` plugin:
59
-
60
- See the [datapage_gen](https://github.com/avillafiorita/jekyll-datapage_gen) docs for more details.
61
-
62
- Here's a sample configuration:
63
-
64
- ```yaml
65
- # This will automatically generate a file for each restaurant
66
- # restaurants/#{id}.html file
67
- # with the layout `_layouts/restaurant.html`
68
- # and page.id, page.name, page.active set
69
- # and page.title set to restaurant name
70
- sqlite:
71
- restaurants:
72
- file: _db/reviews.db
73
- sql: SELECT id, name, last_review_date > 1672531200 as active, address FROM restaurants;
74
- page_gen:
75
- - data: restaurants
76
- template: restaurant
77
- name: id
78
- title: name
79
- filter: active
43
+ {{ site.data.customers | jsonify }}
80
44
  ```
81
45
 
82
- ## Nested Queries
46
+ ## Prepared Queries
83
47
 
84
- You can use the rows of `site.data.items` as bind_params for your nested query. For this to work against
85
- data generated by the plugin, the configuration order must be correct, so you need `site.data.items` above `site.data.items.nested` in your configuration.
48
+ This plugin supports prepared queries with parameter binding. This lets you
49
+ use existing data from a previous query, or some other source (such as
50
+ `site.data.*` or `page.*`) as a parameter in your query.
86
51
 
87
- Say you have a YAML file defining your items (`data/items.yaml`):
52
+ Say you have a YAML file defining your items (`data/books.yaml`):
88
53
 
89
54
  ```yaml
90
55
  - id: 31323952-2708-42dc-a995-6006a23cbf00
91
- name: Item 1
56
+ name: Time Travel with a Rubber Band
92
57
  - id: 5c8e67a0-d490-4743-b5b8-8e67bd1f95a2
93
- name: Item 2
58
+ name: The Art of Cache Invalidation
94
59
  ```
95
60
  and the prices for the items in your SQLite database, the following configuration will enrich the `items` array with the price:
96
61
 
97
62
  ```yaml
98
63
  sql:
99
- - data: site.data.items.meta
100
- query: SELECT price,author FROM pricing WHERE id =:id
64
+ - data: items.books
65
+ query: SELECT price, author FROM pricing WHERE id =:id
66
+ db: books.db
101
67
  ```
102
68
  This would allow the following Liquid loop to be written:
103
69
 
@@ -107,23 +73,62 @@ This would allow the following Liquid loop to be written:
107
73
  {% endfor %}
108
74
  ```
109
75
 
110
- This works well with `results_as_configuration` as well.
76
+ ## Per Page Queries
77
+
78
+ The exact same syntax can be used on a per-page basis to generate data within
79
+ each page. This is helpful for keeping page-specific queries within the page
80
+ itself. Here's an example:
111
81
 
112
82
  ```yaml
113
- sql:
114
- - data: site.data.items.meta
115
- query: SELECT price,author FROM pricing WHERE id =:id
116
- results_as_hash: false
83
+ ---
84
+ FeaturedSupplierID: 2
85
+ sqlite:
86
+ - data: suppliers
87
+ file: "_db/northwind.db"
88
+ query: "SELECT CompanyName, SupplierID FROM suppliers ORDER BY SupplierID"
89
+ - data: suppliers.products
90
+ # This is a prepared query, where SupplierID is coming from the previous query.
91
+ file: "_db/northwind.db"
92
+ query: "SELECT ProductName, CategoryID,UnitPrice FROM products WHERE SupplierID = :SupplierID"
93
+ # :FeaturedSupplierID is picked up automatically from the page frontmatter.
94
+ - data: FeaturedSupplier
95
+ file: "_db/northwind.db"
96
+ query: "SELECT * SupplierID = :FeaturedSupplierID"
97
+ ---
98
+ {{page.suppliers|jsonify}}
117
99
  ```
118
100
 
119
- The following also renders the price and author:
101
+ This will generate a `page.suppliers` array with all the suppliers, and a `page.FeaturedSupplier` object with the details of the featured supplier.
120
102
 
121
- ```liquid
122
- {% for item in site.data.items %}
123
- {{item.meta[0]}}, {{item.meta[1]}}
124
- {% endfor %}
103
+ Each supplier will have a `products` array with all the products for that supplier.
104
+
105
+ ## Generating Pages
106
+
107
+ It works well with the `datapage_gen` plugin:
108
+
109
+ See the [datapage_gen](https://github.com/avillafiorita/jekyll-datapage_gen) docs for more details.
110
+
111
+ Here's a sample configuration:
112
+
113
+ ```yaml
114
+ sqlite:
115
+ restaurants:
116
+ file: _db/reviews.db
117
+ sql: SELECT id, name, last_review_date > 1672531200 as active, address FROM restaurants;
118
+ page_gen:
119
+ - data: restaurants
120
+ template: restaurant
121
+ name: id
122
+ title: name
123
+ filter: active
125
124
  ```
126
125
 
126
+ This will automatically generate a file for each restaurant
127
+ restaurants/#{id}.html file with the layout `_layouts/restaurant.html` and page.id, page.name, page.active set and page.title set to restaurant name
128
+
129
+ Note that the `datapage_gen` plugin will run _after_ the `jekyll-sqlite` plugin,
130
+ if you generate any pages with per-page queries, these queries will not execute.
131
+
127
132
  ## Development
128
133
 
129
134
  After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/Rakefile CHANGED
@@ -2,7 +2,67 @@
2
2
 
3
3
  require "bundler/gem_tasks"
4
4
  require "rubocop/rake_task"
5
+ require "jekyll"
6
+ require "sqlite3"
5
7
 
6
8
  RuboCop::RakeTask.new
7
9
 
10
+ def assert(cond, msg = "Assertion Failed")
11
+ raise msg unless cond
12
+ end
13
+
14
+ def query_db(query)
15
+ db = SQLite3::Database.new "_db/northwind.db"
16
+ db.results_as_hash = true
17
+ results = db.execute query
18
+ results[0]
19
+ end
20
+
21
+ # rubocop:disable Metrics/AbcSize
22
+ # rubocop:disable Metrics/MethodLength
23
+ def validate_json
24
+ file = "_site/data.json"
25
+ data = JSON.parse(File.read(file))
26
+ assert data["orders"].size == 53, "Expected 53 orders, got #{data["orders"].size}"
27
+ assert data["customers"].size == 93, "Expected 93 customers, got #{data["customers"].size}"
28
+ assert data["categories"].size == 8, "Expected 93 categories, got #{data["categories"].size}"
29
+ assert data["orders"][0] == query_db("SELECT * FROM Orders LIMIT 1"), "Order Fetch Failed"
30
+ assert data["customers"][0] == query_db("SELECT * FROM Customers LIMIT 1"), "Customer Fetch Failed"
31
+ assert data["customers"][0] == query_db("SELECT * FROM Customers LIMIT 1"), "Customer Fetch Failed"
32
+ assert data["categories"][0]["products"].size == 12, "Products don't match"
33
+ data["categories"][0]["products"].each do |p|
34
+ assert p["CategoryID"] == 1, "CategoryID doesn't match"
35
+ end
36
+ assert data["delayedOrders"].size == 17
37
+ assert data["delayedOrders"][0]["OrderID"] == 10_249
38
+ end
39
+
40
+ def validate_page_json
41
+ file = "_site/suppliers.json"
42
+ read_data = JSON.parse(File.read(file))
43
+ data = read_data["allSuppliers"]
44
+ assert data.size == 29, "Expected 29 suppliers, got #{data.size}"
45
+ r = query_db("SELECT CompanyName, SupplierID FROM Suppliers ORDER BY SupplierID LIMIT 1")
46
+ assert r["CompanyName"] == data[0]["CompanyName"], "Company Name doesn't match"
47
+ assert r["SupplierID"] == data[0]["SupplierID"], "Supplier ID doesn't match"
48
+ assert data[0]["products"].size == 3, "Products don't match"
49
+ assert data[0]["products"][0]["ProductName"] == "Chai"
50
+ assert data[0]["products"][1]["ProductName"] == "Chang"
51
+ assert data[0]["products"][2]["ProductName"] == "Aniseed Syrup"
52
+
53
+ # Focus Supplier - this uses the data from the page front-matter to prepare a query
54
+ fs = query_db("SELECT * FROM Suppliers WHERE SupplierID = 6")
55
+ assert read_data["focusSupplier"][0] == fs, "Focus Supplier doesn't match"
56
+ end
57
+ # rubocop:enable Metrics/AbcSize
58
+ # rubocop:enable Metrics/MethodLength
59
+
8
60
  task default: :rubocop
61
+
62
+ desc "Build Test Site"
63
+ task :test do
64
+ Dir.chdir("test")
65
+ Jekyll::Site.new(Jekyll.configuration).process
66
+ validate_json
67
+ validate_page_json
68
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/jekyll-sqlite/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "jekyll-sqlite"
7
+ spec.license = "MIT"
8
+ spec.version = Jekyll::Sqlite::VERSION
9
+ spec.authors = ["Nemo"]
10
+ spec.email = ["jekyll-sqlite@captnemo.in"]
11
+
12
+ spec.summary = "A Jekyll plugin to use SQLite databases as a data source."
13
+ spec.homepage = "https://github.com/captn3m0/jekyll-sqlite"
14
+ spec.required_ruby_version = ">= 3.0.0"
15
+
16
+ spec.metadata["homepage_uri"] = spec.homepage
17
+ spec.metadata["source_code_uri"] = spec.homepage
18
+ spec.metadata["changelog_uri"] = "https://github.com/captn3m0/jekyll-sqlite/blob/master/CHANGELOG.md"
19
+
20
+ # Specify which files should be added to the gem when it is released.
21
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
+ spec.files = Dir.chdir(__dir__) do
23
+ `git ls-files -z`.split("\x0").reject do |f|
24
+ (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|circleci)|appveyor)})
25
+ end
26
+ end
27
+ spec.bindir = "exe"
28
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
29
+ spec.require_paths = ["lib"]
30
+
31
+ spec.add_dependency "sqlite3", "~> 2.0"
32
+ spec.metadata["rubygems_mfa_required"] = "true"
33
+ end
@@ -1,100 +1,140 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "sqlite3"
3
4
 
4
5
  module JekyllSQlite
5
6
  # Main generator class
6
7
  class Generator < Jekyll::Generator
7
- safe true
8
8
  # Set to high to be higher than the Jekyll Datapages Plugin
9
9
  priority :high
10
- # Default pragma
11
- def fast_setup(db)
12
- db.execute("PRAGMA synchronous = OFF")
13
- db.execute("PRAGMA journal_mode = OFF")
14
- db.execute("PRAGMA query_only = ON")
10
+
11
+ ##
12
+ # Split the given key using dots and return the last part
13
+ # customers.order -> order
14
+ def get_tip(name)
15
+ name.split(".")[-1]
15
16
  end
16
17
 
18
+ ##
17
19
  # Get the root of where we are generating the data
18
20
  def get_root(root, db_name)
19
21
  db_name.split(".")[0..-2].each do |p|
20
22
  root = root[p]
23
+ rescue KeyError
24
+ raise "Jekyll SQLite: Invalid root. #{p} not found while iterating to #{db_name}"
21
25
  end
22
26
  root
23
27
  end
24
28
 
25
- def gen_hash_data(root, db, db_name, query)
26
- root ||= {}
27
-
28
- root[db_name] = db.execute(query)
29
- root[db_name].size
30
- end
31
-
32
- def gen_nested_data(item, db, query, db_name)
33
- item[db_name] = []
34
- db.prepare(query) do |stmt|
35
- # We bind params, ignoring any errors
36
- # Since there's no way to get required params
37
- # From a statement
38
- item.each do |key, value|
39
- stmt.bind_param key, value
40
- rescue StandardError # rubocop:disable Lint/SuppressedException
41
- end
42
- stmt.execute.each { |d| item[db_name] << d }
29
+ ##
30
+ # Prepare the query by binding the parameters
31
+ # Since we don't know if the query needs them
32
+ # we ignore all errors about "no such bind parameter"
33
+ def _prepare_query(stmt, params)
34
+ params.each do |key, value|
35
+ stmt.bind_param key, value
36
+ rescue StandardError => e
37
+ raise e unless e.message.include? "no such bind parameter"
43
38
  end
44
- item[db_name].size
45
39
  end
46
40
 
47
- def array_gen(root, config, db_name, db)
48
- count = 0
49
- root.each do |item|
50
- # TODO: Add support for binding Arrays as well.
51
- if item.is_a? Hash
52
- count += gen_nested_data(item, db, config["query"], db_name)
53
- else
54
- Jekyll.logger.info "Jekyll SQLite:", "Item is not a hash for #{db_name}. Unsupported configuration"
55
- end
41
+ ##
42
+ # Internal function to generate data given
43
+ # root: a Hash-Like root object (site.data, site.data.*, page.data)
44
+ # key: string as the key to use to attach the data to the root
45
+ # db: SQLite3 Database object to execute the query on
46
+ # query: string containing the query to execute
47
+ # Sets root[db_name] = ResultSet of the query, as an array
48
+ # Returns the count of the result set
49
+ def _gen_data(root, key, db, query)
50
+ db.prepare(query) do |stmt|
51
+ _prepare_query stmt, get_bind_params(root)
52
+ root[key] = stmt.execute.to_a
56
53
  end
57
- count
54
+ root[key].count
58
55
  end
59
56
 
60
- def gen_data(root, config, db_name, db)
61
- count = 0
62
- if root.nil? || (root.is_a? Hash)
63
- count = gen_hash_data(root, db, db_name, config["query"])
64
- elsif root.is_a? Array
65
- count = array_gen(root, config, db_name, db)
57
+ ##
58
+ # Calls _gen_data for the given root
59
+ # iterates through the array if root is an array
60
+ def gen_data(root, ...)
61
+ if root.is_a? Array
62
+ # call gen_data for each item in the array
63
+ # and return the sum of all the counts
64
+ root.map { |item| gen_data(item, ...) }.sum
65
+ else
66
+ _gen_data(root, ...)
66
67
  end
67
- count
68
- end
69
-
70
- def get_tip(name)
71
- name.split(".")[-1]
72
68
  end
73
69
 
70
+ ##
71
+ # Validate given configuration object
74
72
  def validate_config(config)
75
73
  return false unless config.is_a? Hash
76
74
  return false unless config.key?("query")
77
75
  return false unless File.exist?(config["file"])
78
76
  return false unless config.key?("data")
77
+
79
78
  true
80
79
  end
81
80
 
82
- def generate(site)
83
- gem_config = site.config['sqlite'] || []
84
- gem_config.each do |config|
81
+ ## pick bindable parameters
82
+ # from the root
83
+ # All primitive values are bound to the query
84
+ # Arrays and Hashes are ignored
85
+ def get_bind_params(dict)
86
+ dict.select { |_key, value| !value.is_a?(Array) && !value.is_a?(Hash) }
87
+ end
88
+
89
+ ##
90
+ # Given a configuration, generate the data
91
+ # and attach it to the given data_root
92
+ def generate_data_from_config(root, config)
93
+ key = config["data"]
94
+ query = config["query"]
95
+ file = config["file"]
96
+ SQLite3::Database.new file, readonly: true do |db|
97
+ db.results_as_hash = config.fetch("results_as_hash", true)
98
+
99
+ branch = get_root(root, key)
100
+ tip = get_tip(config["data"])
101
+
102
+ count = gen_data(branch, tip, db, query)
103
+ Jekyll.logger.info "Jekyll SQLite:", "Loaded #{key}. Count=#{count}"
104
+ end
105
+ end
106
+
107
+ ##
108
+ # Iterate through all the pages in the site
109
+ # and generate the data from the configuration
110
+ def gen_pages(site)
111
+ site.pages.each do |page|
112
+ gen(page.data, page)
113
+ end
114
+ end
115
+
116
+ ##
117
+ # Generate the data from the configuration
118
+ # Takes as input the root where the data will be attached
119
+ # and a configuration holder, where the sqlite key can be found
120
+ # Root is either site.data or page.data
121
+ # and config_holder is either site.config or page itself.
122
+ def gen(root, config_holder)
123
+ sqlite_configs = config_holder["sqlite"] || []
124
+ sqlite_configs.each do |config|
85
125
  unless validate_config(config)
86
126
  Jekyll.logger.error "Jekyll SQLite:", "Invalid Configuration. Skipping"
87
127
  next
88
128
  end
89
- d_name = config["data"]
90
- SQLite3::Database.new config["file"], readonly: true do |db|
91
- fast_setup db
92
- db.results_as_hash = config.fetch("results_as_hash", true)
93
- root = get_root(site.data, d_name)
94
- count = gen_data(root, config, get_tip(d_name), db)
95
- Jekyll.logger.info "Jekyll SQLite:", "Loaded #{d_name}. Count=#{count}"
96
- end
129
+ generate_data_from_config(root, config)
97
130
  end
98
131
  end
132
+
133
+ ##
134
+ # Entrpoint to the generator, called by Jekyll
135
+ def generate(site)
136
+ gen(site.data, site.config)
137
+ gen_pages(site)
138
+ end
99
139
  end
100
140
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module Sqlite
5
- VERSION = "0.1.3"
5
+ VERSION = "0.1.5"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-sqlite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nemo
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-02 00:00:00.000000000 Z
11
+ date: 2024-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sqlite3
@@ -16,15 +16,15 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.6'
19
+ version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.6'
27
- description:
26
+ version: '2.0'
27
+ description:
28
28
  email:
29
29
  - jekyll-sqlite@captnemo.in
30
30
  executables: []
@@ -37,6 +37,7 @@ files:
37
37
  - Gemfile
38
38
  - README.md
39
39
  - Rakefile
40
+ - jekyll-sqlite.gemspec
40
41
  - lib/jekyll-sqlite/generator.rb
41
42
  - lib/jekyll-sqlite/version.rb
42
43
  - lib/jekyll_sqlite.rb
@@ -48,7 +49,7 @@ metadata:
48
49
  source_code_uri: https://github.com/captn3m0/jekyll-sqlite
49
50
  changelog_uri: https://github.com/captn3m0/jekyll-sqlite/blob/master/CHANGELOG.md
50
51
  rubygems_mfa_required: 'true'
51
- post_install_message:
52
+ post_install_message:
52
53
  rdoc_options: []
53
54
  require_paths:
54
55
  - lib
@@ -63,8 +64,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
64
  - !ruby/object:Gem::Version
64
65
  version: '0'
65
66
  requirements: []
66
- rubygems_version: 3.5.9
67
- signing_key:
67
+ rubygems_version: 3.5.11
68
+ signing_key:
68
69
  specification_version: 4
69
70
  summary: A Jekyll plugin to use SQLite databases as a data source.
70
71
  test_files: []