jekyll-get-api 0.0.1 → 0.0.2

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: a74714dd167060286271054b30c5e3314ba762ce48e74899933eb4653c33b627
4
- data.tar.gz: 9104051dd6c83bae4cc61a8e4edd935a75af11fc8f4182decd99b83d1df7f73e
3
+ metadata.gz: a0b1c05be64bb4bac0a92880e2a72a2544b084dce791ea3a26de356261104ccd
4
+ data.tar.gz: 4a5682ec97c1207544ce18e0950044f9afeb56108a99b32089bd6f0bed04411a
5
5
  SHA512:
6
- metadata.gz: 8145f1be2d9f087e4057915f29a7d3d8f12b9e90f12303450c388569b21a2e648a98394522a84712eedd6a4f7e72fd2f00d3adb836b234ee04be918a8e3f6623
7
- data.tar.gz: 8f6088866aec4be73577c3adb1cfff2865847b6ba85559e276ddd5fc624ef136becd42320ec0db36f527dc9c5cb0d0f824a5d452ab7cfd2061379b755b24c108
6
+ metadata.gz: f0468fb7ff213955917715fc5a35931172d77d88ef2be3015a3d09b1367094ce6fa6d0dd7771b2ebb508299b929756ddc546247067441661b037a4cf580735ad
7
+ data.tar.gz: 2c715b28931151a1f394ddc01393707a38b658fa8e9fce08f479fd73d703cffc912e1cafa251f15baff08d641efaf095a303ac237acc96673686310f4c181fae
@@ -0,0 +1,31 @@
1
+ module JekyllGetAPI
2
+ class Cache
3
+ def self.root_path=(path)
4
+ @@root_path = path
5
+ end
6
+
7
+ def self.get(resource)
8
+ type = resource['type']
9
+ name = resource['name']
10
+ cache_expiry = resource['cache_expiry'] || 3600
11
+ cache_file = File.join(@@root_path, '_cache', "jekyll-get-api-#{type}-#{name}.json")
12
+
13
+ return nil unless cache_valid?(cache_file, cache_expiry)
14
+
15
+ warn "Reading from cache for #{name}".green
16
+ File.read(cache_file)
17
+ end
18
+
19
+ def self.write(resource, content)
20
+ type = resource['type']
21
+ name = resource['name']
22
+ cache_file = File.join(@@root_path, '_cache', "jekyll-get-api-#{type}-#{name}.json")
23
+ FileUtils.mkdir_p(File.dirname(cache_file))
24
+ File.write(cache_file, content)
25
+ end
26
+
27
+ def self.cache_valid?(cache_file, cache_expiry)
28
+ File.exist?(cache_file) && (Time.now - File.mtime(cache_file)) < cache_expiry
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,18 @@
1
+ module JekyllGetAPI
2
+ class Collection
3
+ def self.generate(site, resource, json)
4
+ collection = site.collections[resource['name']]
5
+ data_key = resource['data_key'] || 'data'
6
+ id = resource['document_id'] || 'id'
7
+
8
+ json[data_key].each do |item|
9
+ document = Jekyll::Document.new(
10
+ "#{item[id]}.md",
11
+ { site: site, collection: collection }
12
+ )
13
+ document.data.merge!(item)
14
+ collection.docs << document
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,8 @@
1
+ module JekyllGetAPI
2
+ class Data
3
+ def self.generate(site, resource, json)
4
+ data_key = resource['data_key'] || 'data'
5
+ site.data[resource['name']] = json[data_key]
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,29 @@
1
+ require 'open-uri'
2
+
3
+ module JekyllGetAPI
4
+ class Resource
5
+ def self.generate(site, resource)
6
+ json_string = JekyllGetAPI::Cache.get(resource)
7
+
8
+ unless json_string
9
+ json_string = fetch(resource)
10
+ JekyllGetAPI::Cache.write(resource, json_string)
11
+ end
12
+
13
+ json = JSON.parse(json_string)
14
+
15
+ if resource['type'] == 'collection'
16
+ JekyllGetAPI::Collection.generate(site, resource, json)
17
+ else
18
+ JekyllGetAPI::Data.generate(site, resource, json)
19
+ end
20
+ end
21
+
22
+ def self.fetch(resource)
23
+ uri = URI(resource['url'])
24
+ URI.open(uri) { |f| f.read }
25
+ rescue OpenURI::HTTPError => e
26
+ warn "Error: #{e.message}".red
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ require 'jekyll'
2
+ require 'json'
3
+
4
+ require_relative './jekyll-get-api/cache'
5
+ require_relative './jekyll-get-api/collection'
6
+ require_relative './jekyll-get-api/data'
7
+ require_relative './jekyll-get-api/resource'
8
+
9
+ module JekyllGetAPI
10
+ class GetAPIGenerator < Jekyll::Generator
11
+ safe true
12
+ priority :highest
13
+
14
+ def generate(site)
15
+ JekyllGetAPI::Cache.root_path = site.source
16
+
17
+ resources = site.config['jekyll_get_api']
18
+
19
+ unless resources
20
+ warn "Did you forget to set 'jekyll_get_api' in config?".red
21
+ return
22
+ end
23
+
24
+ resources = [resources] unless resources.is_a?(Array)
25
+
26
+ resources.each do |resource|
27
+ JekyllGetAPI::Resource.generate(site, resource)
28
+ end
29
+ end
30
+ end
31
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-get-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Mejlak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-01-26 00:00:00.000000000 Z
11
+ date: 2025-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -30,7 +30,12 @@ email:
30
30
  executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
- files: []
33
+ files:
34
+ - lib/jekyll-get-api.rb
35
+ - lib/jekyll-get-api/cache.rb
36
+ - lib/jekyll-get-api/collection.rb
37
+ - lib/jekyll-get-api/data.rb
38
+ - lib/jekyll-get-api/resource.rb
34
39
  homepage: https://github.com/C-Mejlak/jekyll-get-api
35
40
  licenses:
36
41
  - MIT