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 +4 -4
- data/lib/jekyll-get-api/cache.rb +31 -0
- data/lib/jekyll-get-api/collection.rb +18 -0
- data/lib/jekyll-get-api/data.rb +8 -0
- data/lib/jekyll-get-api/resource.rb +29 -0
- data/lib/jekyll-get-api.rb +31 -0
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0b1c05be64bb4bac0a92880e2a72a2544b084dce791ea3a26de356261104ccd
|
4
|
+
data.tar.gz: 4a5682ec97c1207544ce18e0950044f9afeb56108a99b32089bd6f0bed04411a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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,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.
|
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-
|
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
|