jekyll-sqlite 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 25c9ba502f7b75dd59633f9cd88c9412dfe49d0146cd5e4bc3510bd517158c4c
4
- data.tar.gz: 29656b5f23cffc2912c498562c5e1547a1e2ffa865cfec3fee35892deaa5d1b5
3
+ metadata.gz: f14ced1e5bddd23e8aca1460f7acc53449b2d19fbf3bb67eb97f55f194facc95
4
+ data.tar.gz: f2a21e3b7d89d2d8d476c71ee2876025037009eb311df7d64fb1b9e2dca5cac3
5
5
  SHA512:
6
- metadata.gz: c0a65da0d781e76cd8bb2605cc57eef3dea1a89e45d059eaf2eb8b9de3b2423b9252831e9d7ae4cc0011097fa9dfc4c533d8593ced72e97e85fe2e86d2151054
7
- data.tar.gz: 9c96bdb90d10f05a1d30c3d5e389f180d30e73f69534a047f8e8b755abb16850f4f76a4bdaf3fdf867a71f77a6d93e826a5caac363bca679b6887bdd0160650f
6
+ metadata.gz: 50c29d5008eb35fd2ed1fd6d9b6acf7cca7c1fcc0b5e3b4933506f0a29875118c02934ccbd2cec94f3676d7276f71527803bb4324467b36a29dcddfe8b8d2064
7
+ data.tar.gz: '09b4bd31b5fe04534892df1e5a229e3aca26cc447a147f2cf43d5e306a4c14c30156505b08481c78b89c1216b7e0aec6ba54ee3979ab002363d46dec3fc8f11a'
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.1.3] - 2024-07-02
4
+ - First functional version
5
+ - Adds tests
6
+
3
7
  ## [0.1.0] - 2023-05-08
4
8
 
5
9
  - Initial release
data/Gemfile CHANGED
@@ -5,6 +5,8 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in jekyll-sqlite.gemspec
6
6
  gemspec
7
7
 
8
+ # These are development dependencies
8
9
  gem "rake", "~> 13.0"
10
+ gem "jekyll", "~> 4.0"
9
11
  gem "rubocop", "~> 1.21"
10
12
  gem "rubocop-rake", "~> 0.6.0"
data/README.md CHANGED
@@ -25,41 +25,32 @@ plugins:
25
25
 
26
26
  ## Usage
27
27
 
28
- Update your `_config.yml` to define your data sources with your SQLite database.
28
+ Update your `_config.yml` to define your data sources with your SQLite database. Please see
29
+ the `test` directory for a functional example with the [Northwind database](https://github.com/jpwhite3/northwind-SQLite3).
29
30
 
30
31
  ```yml
31
32
  ...
32
- # These are run in sequence, so any nested data can work well.
33
33
  sqlite:
34
- - data: members
35
- file: _db/users.db
36
- query: SELECT * FROM members ORDER by created_at DESC
37
- # You can use `results_as_hash` to switch between array or hash results (default).
38
- - data: verified
39
- results_as_hash: false # default true
40
- file: _db/users.db
41
- query: SELECT username, email FROM members WHERE verified=1
42
- - data: members.posts
43
- file: _db/posts.db
44
- query: SELECT * FROM posts WHERE user_id = :id
34
+ - data: orders
35
+ file: &db "_db/northwind.db"
36
+ query: SELECT * from Orders
37
+ - data: customers
38
+ file: *db
39
+ 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
45
48
  ```
46
49
 
47
50
  Then, you can use the `site.data` attributes accordingly:
48
51
 
49
52
  ```liquid
50
- {% for member in site.data.members %}
51
- - {{member.username}}
52
-
53
- # Your Posts
54
- {% for post in member.posts %}
55
- {{post}}
56
- {% endfor %}
57
- {% endfor %}
58
-
59
- # Result here is an array instead of a hash.
60
- {% for user in site.data.verified %}
61
- - :check: {{user[0]}} (Email: {{user[1]}})
62
- {% endfor %}
53
+ {{ site.data.categories | jsonify }}
63
54
  ```
64
55
 
65
56
  ## Generating Pages
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'sqlite3'
2
+ require "sqlite3"
3
+
3
4
  module JekyllSQlite
4
5
  # Main generator class
5
6
  class Generator < Jekyll::Generator
@@ -14,22 +15,22 @@ module JekyllSQlite
14
15
  end
15
16
 
16
17
  # Get the root of where we are generating the data
17
- def get_root(root, name)
18
- name.split(".")[0..-2].each do |p|
18
+ def get_root(root, db_name)
19
+ db_name.split(".")[0..-2].each do |p|
19
20
  root = root[p]
20
21
  end
21
22
  root
22
23
  end
23
24
 
24
- def gen_hash_data(root, db, _query)
25
+ def gen_hash_data(root, db, db_name, query)
25
26
  root ||= {}
26
27
 
27
- root[name] = db.execute(config["query"])
28
- root[name].size
28
+ root[db_name] = db.execute(query)
29
+ root[db_name].size
29
30
  end
30
31
 
31
- def gen_nested_data(item, db, query, name)
32
- item[name] = []
32
+ def gen_nested_data(item, db, query, db_name)
33
+ item[db_name] = []
33
34
  db.prepare(query) do |stmt|
34
35
  # We bind params, ignoring any errors
35
36
  # Since there's no way to get required params
@@ -38,30 +39,30 @@ module JekyllSQlite
38
39
  stmt.bind_param key, value
39
40
  rescue StandardError # rubocop:disable Lint/SuppressedException
40
41
  end
41
- stmt.execute.each { |d| item[name] << d }
42
+ stmt.execute.each { |d| item[db_name] << d }
42
43
  end
43
- item[name].size
44
+ item[db_name].size
44
45
  end
45
46
 
46
- def array_gen(root, config, name, db)
47
+ def array_gen(root, config, db_name, db)
47
48
  count = 0
48
49
  root.each do |item|
49
50
  # TODO: Add support for binding Arrays as well.
50
51
  if item.is_a? Hash
51
- count += gen_nested_data(item, db, config["query"], name)
52
+ count += gen_nested_data(item, db, config["query"], db_name)
52
53
  else
53
- Jekyll.logger.info "Jekyll SQLite:", "Item is not a hash for #{name}. Unsupported configuration"
54
+ Jekyll.logger.info "Jekyll SQLite:", "Item is not a hash for #{db_name}. Unsupported configuration"
54
55
  end
55
56
  end
56
57
  count
57
58
  end
58
59
 
59
- def gen_data(root, config, name, db)
60
+ def gen_data(root, config, db_name, db)
60
61
  count = 0
61
62
  if root.nil? || (root.is_a? Hash)
62
- count = gen_hash_data(root, db, config["query"])
63
+ count = gen_hash_data(root, db, db_name, config["query"])
63
64
  elsif root.is_a? Array
64
- count = array_gen(root, config, name, db)
65
+ count = array_gen(root, config, db_name, db)
65
66
  end
66
67
  count
67
68
  end
@@ -70,15 +71,28 @@ module JekyllSQlite
70
71
  name.split(".")[-1]
71
72
  end
72
73
 
74
+ def validate_config(config)
75
+ return false unless config.is_a? Hash
76
+ return false unless config.key?("query")
77
+ return false unless File.exist?(config["file"])
78
+ return false unless config.key?("data")
79
+ true
80
+ end
81
+
73
82
  def generate(site)
74
- site.config["sqlite"].each do |config|
75
- name = config["data"]
83
+ gem_config = site.config['sqlite'] || []
84
+ gem_config.each do |config|
85
+ unless validate_config(config)
86
+ Jekyll.logger.error "Jekyll SQLite:", "Invalid Configuration. Skipping"
87
+ next
88
+ end
89
+ d_name = config["data"]
76
90
  SQLite3::Database.new config["file"], readonly: true do |db|
77
91
  fast_setup db
78
92
  db.results_as_hash = config.fetch("results_as_hash", true)
79
- root = get_root(site.data, name)
80
- count = gen_data(root, config, get_tip(name), db)
81
- Jekyll.logger.info "Jekyll SQLite:", "Loaded #{name}. Count=#{count}. as_hash=#{db.results_as_hash}"
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}"
82
96
  end
83
97
  end
84
98
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module Sqlite
5
- VERSION = "0.1.2"
5
+ VERSION = "0.1.3"
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.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nemo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-11 00:00:00.000000000 Z
11
+ date: 2024-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sqlite3
@@ -26,7 +26,7 @@ dependencies:
26
26
  version: '1.6'
27
27
  description:
28
28
  email:
29
- - jekyll@captnemo.in
29
+ - jekyll-sqlite@captnemo.in
30
30
  executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
@@ -35,7 +35,6 @@ files:
35
35
  - CHANGELOG.md
36
36
  - CODE_OF_CONDUCT.md
37
37
  - Gemfile
38
- - Gemfile.lock
39
38
  - README.md
40
39
  - Rakefile
41
40
  - lib/jekyll-sqlite/generator.rb
@@ -64,9 +63,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
63
  - !ruby/object:Gem::Version
65
64
  version: '0'
66
65
  requirements: []
67
- rubygems_version: 3.3.25
66
+ rubygems_version: 3.5.9
68
67
  signing_key:
69
68
  specification_version: 4
70
- summary: A Jekyll plugin that lets you use SQLite database instead of data files as
71
- a data source.
69
+ summary: A Jekyll plugin to use SQLite databases as a data source.
72
70
  test_files: []
data/Gemfile.lock DELETED
@@ -1,49 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- jekyll-sqlite (0.1.1)
5
- sqlite3 (~> 1.6)
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- ast (2.4.2)
11
- json (2.6.3)
12
- parallel (1.23.0)
13
- parser (3.2.2.1)
14
- ast (~> 2.4.1)
15
- rainbow (3.1.1)
16
- rake (13.0.6)
17
- regexp_parser (2.8.0)
18
- rexml (3.2.5)
19
- rubocop (1.50.2)
20
- json (~> 2.3)
21
- parallel (~> 1.10)
22
- parser (>= 3.2.0.0)
23
- rainbow (>= 2.2.2, < 4.0)
24
- regexp_parser (>= 1.8, < 3.0)
25
- rexml (>= 3.2.5, < 4.0)
26
- rubocop-ast (>= 1.28.0, < 2.0)
27
- ruby-progressbar (~> 1.7)
28
- unicode-display_width (>= 2.4.0, < 3.0)
29
- rubocop-ast (1.28.1)
30
- parser (>= 3.2.1.0)
31
- rubocop-rake (0.6.0)
32
- rubocop (~> 1.0)
33
- ruby-progressbar (1.13.0)
34
- sqlite3 (1.6.2-aarch64-linux)
35
- sqlite3 (1.6.2-x86_64-linux)
36
- unicode-display_width (2.4.2)
37
-
38
- PLATFORMS
39
- aarch64-linux
40
- x86_64-linux
41
-
42
- DEPENDENCIES
43
- jekyll-sqlite!
44
- rake (~> 13.0)
45
- rubocop (~> 1.21)
46
- rubocop-rake (~> 0.6.0)
47
-
48
- BUNDLED WITH
49
- 2.4.1