jekyll-linkpreview 0.6.0 → 0.7.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd45369b38e2a2121de3c5a1b4af6c1096fe0649ad5d3e0c06fbc34ceb17634f
4
- data.tar.gz: 2bfd854068e9ded58f9eb4dfbc22ac714608d99db457d1af78f0c741858f4b27
3
+ metadata.gz: 3644c879680eba2cb17840f40258ec2adeb0493505ca28572cdcadcc72c87ced
4
+ data.tar.gz: 3925c9a5330bc589b239908cde01dc6be7493d05d35bf6bf2f8e52e3538b643a
5
5
  SHA512:
6
- metadata.gz: 444a4327a8c79d4a5847d74dba86dbda7dae27226e33c5831dda8f73ae4bb495964a8b8c2e0d1080904e0064c2c65483c95b14e746a38a061f7c8aa8df47371c
7
- data.tar.gz: 9cd54f69288be12b24e395a6fc71b5ba637cca3f937c014e72dbb3f76defef256bc6c7ca167ba7b782a7f795b74f8469bd0373bfd47da5f73d4446fddef458e2
6
+ metadata.gz: 4246f72fc2c59ad23149b2c187864533f0fe85e09d1ca7f84feef875ad2404e6861aa6a37255f3ec3e76d2edff367fb5a6061d3f8c497c117edbdafba9801a5f
7
+ data.tar.gz: 689f9e31a23fb6846db6cb4854adabc464a890816418a988a1732d5cc9b4e34bc7df143774ec274e693d66f51d9af5d41b52ec731b8d3dab980afcd816378e0c
@@ -17,7 +17,7 @@ jobs:
17
17
  fetch-depth: 2
18
18
  # See https://github.com/actions/runner-images/issues/6775.
19
19
  - name: Suppress 'detected dubious ownership' error.
20
- run: git config --global --add safe.directory /__w/jekyll-linkpreview/jekyll-linkpreview
20
+ run: git config --global --add safe.directory ${GITHUB_WORKSPACE}
21
21
  - id: check-release
22
22
  name: Decide whether to release
23
23
  run: |
@@ -39,7 +39,7 @@ jobs:
39
39
  uses: actions/checkout@v3
40
40
  # See https://github.com/actions/runner-images/issues/6775.
41
41
  - name: Suppress 'detected dubious ownership' error.
42
- run: git config --global --add safe.directory /__w/jekyll-linkpreview/jekyll-linkpreview
42
+ run: git config --global --add safe.directory ${GITHUB_WORKSPACE}
43
43
  - env:
44
44
  RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
45
45
  name: Set credentials for RubyGems
@@ -49,7 +49,7 @@ jobs:
49
49
  chmod 0600 ~/.gem/credentials
50
50
  - name: Configure git
51
51
  run: |
52
- git config --global user.email "yusuke.nishioka.0713@gmail..com"
52
+ git config --global user.email "yusuke.nishioka.0713@gmail.com"
53
53
  git config --global user.name "Yusuke Nishioka"
54
54
  - name: Install dependencies
55
55
  run: bundle install
@@ -13,7 +13,7 @@ jobs:
13
13
  runs-on: ubuntu-latest
14
14
  strategy:
15
15
  matrix:
16
- ruby: ["2.7", "3.1"]
16
+ ruby: ["2.7", "3.1", "3.2"]
17
17
  appraisal:
18
18
  - jekyll-35
19
19
  - jekyll-36
@@ -34,9 +34,20 @@ jobs:
34
34
  appraisal: jekyll-37
35
35
  - ruby: "3.1"
36
36
  appraisal: jekyll-38
37
+ - ruby: "3.2"
38
+ appraisal: jekyll-35
39
+ - ruby: "3.2"
40
+ appraisal: jekyll-36
41
+ - ruby: "3.2"
42
+ appraisal: jekyll-37
43
+ - ruby: "3.2"
44
+ appraisal: jekyll-38
37
45
  steps:
38
46
  - name: Checkout
39
47
  uses: actions/checkout@v3
48
+ # See https://github.com/actions/runner-images/issues/6775.
49
+ - name: Suppress 'detected dubious ownership' error
50
+ run: git config --global --add safe.directory ${GITHUB_WORKSPACE}
40
51
  - if: matrix.ruby == '2.7'
41
52
  name: Update RubyGems version
42
53
  # sass-embedded 1.57.1, which is one of dependencies of jekyll-sass-converter 3.0,
data/Gemfile CHANGED
@@ -2,3 +2,12 @@ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in jekyll-linkpreview.gemspec
4
4
  gemspec
5
+
6
+ # The issue that appraisal 2.4.1 can't work with bundler >= 2.4 was solved
7
+ # (see https://github.com/thoughtbot/appraisal/issues/199 for details),
8
+ # but a new version has not been released yet as of Apr 2023.
9
+ # As it's not possible to install a gem from a git repository in the gemspec file,
10
+ # appraisal is being installed in Gemfile.
11
+ group :development do
12
+ gem 'appraisal', git: 'https://github.com/thoughtbot/appraisal'
13
+ end
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Jekyll::Linkpreview
2
2
 
3
- [![Build Status](https://travis-ci.com/ysk24ok/jekyll-linkpreview.svg?branch=master)](https://travis-ci.com/ysk24ok/jekyll-linkpreview)
3
+ [![Test](https://github.com/ysk24ok/jekyll-linkpreview/actions/workflows/test.yaml/badge.svg)](https://github.com/ysk24ok/jekyll-linkpreview/actions/workflows/test.yaml)
4
+ [![Release](https://github.com/ysk24ok/jekyll-linkpreview/actions/workflows/release.yaml/badge.svg)](https://github.com/ysk24ok/jekyll-linkpreview/actions/workflows/release.yaml)
4
5
 
5
6
  Jekyll plugin to generate link preview by `{% linkpreview %}` tag. The plugin fetches [Open Graph protocol](http://ogp.me/) metadata of the designated page to generate preview. The og properties are saved as JSON for caching and it is used when rebuilding the site.
6
7
 
@@ -49,29 +50,53 @@ You can override the default templates used for generating previews, both in cas
49
50
 
50
51
  ### Template for pages where Open Graph protocol metadata exists
51
52
 
52
- 1. Place `linkpreview.html` file inside `_includes/` folder of your Jekyll site (`_includes/linkpreview.html`)
53
+ 1. Place `linkpreview.html` file inside `_includes/` folder of your Jekyll site (`_includes/linkpreview.html`)
53
54
  * The folder is the same one you would store files for use with `{% include fragment.html %}` tag.
54
55
  Therefore, it *must* be under the [site's source](https://jekyllrb.com/docs/configuration/options/).
55
56
 
56
- 2. Use built-in variables to extract data which you would like to render. Available variables are:
57
- * **link_url** i.e. `{{ link_url }}`
58
- * **link_title** i.e. `{{ link_title }}`
59
- * **link_type** i.e. `{{ link_type }}`
60
- * **link_image** i.e. `{{ link_image }}`
61
- * **link_description** i.e. `{{ link_description }}`
62
- * **link_domain** i.e. `{{ link_domain }}`
57
+ 2. Use built-in variables to extract data which you would like to render. Available variables are:
58
+ * basic metadata
59
+ * `{{ title }}` for `og:title`
60
+ * `{{ type }}` for `og:type`
61
+ * `{{ image }}` for `og:image`
62
+ * `{{ url }}` for `og:url`
63
+ * optional metadata
64
+ * `{{ description }}` for `og:description`
65
+ * `{{ determiner }}` for `og:determiner`
66
+ * `{{ locale }}` for `og:locale`
67
+ * `{{ locale_alternate }}` for `og:locale:alternate`
68
+ * `{{ site_name }}` for `og:site_name`
69
+ * image
70
+ * `{{ image }}` for `og:image`
71
+ * `{{ image_secure_url }}` for `og:image:secure_url`
72
+ * `{{ image_type }}` for `og:image:type`
73
+ * `{{ image_width }}` for `og:image:width`
74
+ * `{{ image_height }}` for `og:image:height`
75
+ * `{{ image_alt }}` for `og:image:alt`
76
+ * video
77
+ * `{{ video }}` for `og:video`
78
+ * `{{ video_secure_url }}` for `og:video:secure_url`
79
+ * `{{ video_type }}` for `og:video:type`
80
+ * `{{ video_width }}` for `og:video:width`
81
+ * `{{ video_height }}` for `og:video:height`
82
+ * audio
83
+ * `{{ audio }}` for `og:audio`
84
+ * `{{ audio_secure_url }}` for `og:audio:secure_url`
85
+ * `{{ audio_type }}` for `og:audio:type`
86
+ * non og metadata
87
+ * `{{ domain }}`
63
88
 
64
89
  ### Template for pages where Open Graph protocol metadata does not exist
65
90
 
66
91
  1. Place `linkpreview_nog.html` file inside `_includes/` folder of your Jekyll site (`_includes/linkpreview_nog.html`)
67
- * The folder is the same one you would store files for use with `{% include fragment.html %}` tag.
68
- Therefore, it *must* be under the [site's source](https://jekyllrb.com/docs/configuration/options/).
69
-
70
- 2. Use built-in variables to extract data which you would like to render. Available variables are:
71
- * **link_url** i.e. `{{ link_url }}`
72
- * **link_title** i.e. `{{ link_title }}`
73
- * **link_description** i.e. `{{ link_description }}`
74
- * **link_domain** i.e. `{{ link_domain }}`
92
+ * The folder is the same one you would store files for use with `{% include fragment.html %}` tag.
93
+ Therefore, it *must* be under the [site's source](https://jekyllrb.com/docs/configuration/options/).
94
+
95
+ 2. Use built-in variables to extract data which you would like to render. Available variables are:
96
+ * `{{ title }}`
97
+ * `{{ url }}`
98
+ * `{{ description }}`
99
+ * `{{ domain }}`
75
100
 
76
101
  ## Development
77
102
 
@@ -20,12 +20,9 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency "jekyll", ">= 3.5", "< 5.0"
22
22
  spec.add_dependency "metainspector", "~> 5.9"
23
- # appraisal 2.4.1, which is the latest version as of Jan 2023, doesn't work with bundler >= 2.4.
24
- # See https://github.com/thoughtbot/appraisal/issues/199 for details.
25
- spec.add_development_dependency "bundler", ">= 2.0", "< 2.4"
23
+ spec.add_development_dependency "bundler", "~> 2.0"
26
24
  spec.add_development_dependency "rake", "~> 12.3.3"
27
25
  spec.add_development_dependency "rspec", "~> 3.0"
28
26
  spec.add_development_dependency "rspec-parameterized", "~> 0.5.2"
29
- spec.add_development_dependency "appraisal", "~> 2.0"
30
27
  spec.add_development_dependency "wwtd", "~> 1.4.1"
31
28
  end
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module Linkpreview
3
- VERSION = "0.6.0"
3
+ VERSION = "0.7.0"
4
4
  end
5
5
  end
@@ -7,65 +7,81 @@ require "jekyll-linkpreview/version"
7
7
 
8
8
  module Jekyll
9
9
  module Linkpreview
10
- class OpenGraphProperties
11
- @@template_file = 'linkpreview.html'
12
-
13
- def initialize(title, type, url, image, description, domain)
14
- @title = title
15
- @type = type
16
- @url = url
17
- @image = image
18
- @description = description
19
- @domain = domain
10
+ class Properties
11
+ def initialize(properties, template_file)
12
+ @properties = properties
13
+ @template_file = template_file
20
14
  end
21
15
 
22
16
  def to_hash()
23
- {
24
- 'title' => @title,
25
- 'type' => @type,
26
- 'url' => @url,
27
- 'image' => @image,
28
- 'description' => @description,
29
- 'domain' => @domain,
30
- }
17
+ @properties
31
18
  end
32
19
 
33
20
  def to_hash_for_custom_template()
34
- {
35
- 'link_title' => @title,
36
- 'link_type' => @type,
37
- 'link_url' => @url,
38
- 'link_image' => @image,
39
- 'link_description' => @description,
40
- 'link_domain' => @domain
21
+ hash_for_custom_template = {}
22
+ @properties.each{ |key, value|
23
+ hash_for_custom_template[key] = value
24
+ # NOTE: 'link_*' variables will be deleted in v1.0.0.
25
+ hash_for_custom_template['link_' + key] = value
41
26
  }
27
+ hash_for_custom_template
42
28
  end
43
29
 
44
30
  def template_file()
45
- @@template_file
31
+ @template_file
46
32
  end
47
33
  end
48
34
 
49
35
  class OpenGraphPropertiesFactory
36
+ @@template_file = 'linkpreview.html'
37
+
38
+ def self.template_file
39
+ @@template_file
40
+ end
41
+
50
42
  def from_page(page)
51
- og_properties = page.meta_tags['property']
52
- image_url = get_og_property(og_properties, 'og:image')
53
- title = get_og_property(og_properties, 'og:title')
54
- type = get_og_property(og_properties, 'og:type')
55
- url = get_og_property(og_properties, 'og:url')
56
- image = convert_to_absolute_url(image_url, page.root_url)
57
- description = get_og_property(og_properties, 'og:description')
58
- domain = page.host
59
- OpenGraphProperties.new(title, type, url, image, description, domain)
43
+ properties = page.meta_tags['property']
44
+ og_properties = {
45
+ # basic metadata (https://ogp.me/#metadata)
46
+ 'title' => get_property(properties, 'og:title'),
47
+ 'type' => get_property(properties, 'og:type'),
48
+ 'url' => get_property(properties, 'og:url'),
49
+ 'image' => convert_to_absolute_url(get_property(properties, 'og:image'), page.root_url),
50
+ # optional metadata (https://ogp.me/#optional)
51
+ ## image
52
+ 'image_secure_url' => convert_to_absolute_url(get_property(properties, 'og:image:secure_url'), page.root_url),
53
+ 'image_type' => get_property(properties, 'og:image:type'),
54
+ 'image_width' => get_property(properties, 'og:image:width'),
55
+ 'image_height' => get_property(properties, 'og:image:height'),
56
+ 'image_alt' => get_property(properties, 'og:image:alt'),
57
+ ## video
58
+ 'video' => convert_to_absolute_url(get_property(properties, 'og:video'), page.root_url),
59
+ 'video_secure_url' => convert_to_absolute_url(get_property(properties, 'og:video:secure_url'), page.root_url),
60
+ 'video_type' => get_property(properties, 'og:video:type'),
61
+ 'video_width' => get_property(properties, 'og:video:width'),
62
+ 'video_height' => get_property(properties, 'og:video:height'),
63
+ ## audio
64
+ 'audio' => convert_to_absolute_url(get_property(properties, 'og:audio'), page.root_url),
65
+ 'audio_secure_url' => convert_to_absolute_url(get_property(properties, 'og:audio:secure_url'), page.root_url),
66
+ 'audio_type' => get_property(properties, 'og:audio:type'),
67
+ ## other optional metadata
68
+ 'description' => get_property(properties, 'og:description'),
69
+ 'determiner' => get_property(properties, 'og:determiner'),
70
+ 'locale' => get_property(properties, 'og:locale'),
71
+ 'locale_alternate' => get_property(properties, 'og:locale:alternate'),
72
+ 'site_name' => get_property(properties, 'og:site_name'),
73
+ # not defined in OGP
74
+ 'domain' => page.host,
75
+ }
76
+ Properties.new(og_properties, @@template_file)
60
77
  end
61
78
 
62
79
  def from_hash(hash)
63
- OpenGraphProperties.new(
64
- hash['title'], hash['type'], hash['url'], hash['image'], hash['description'], hash['domain'])
80
+ Properties.new(hash, @@template_file)
65
81
  end
66
82
 
67
83
  private
68
- def get_og_property(properties, key)
84
+ def get_property(properties, key)
69
85
  if !properties.key? key then
70
86
  return nil
71
87
  end
@@ -85,56 +101,24 @@ module Jekyll
85
101
  end
86
102
  end
87
103
 
88
- class NonOpenGraphProperties
104
+ class NonOpenGraphPropertiesFactory
89
105
  @@template_file = 'linkpreview_nog.html'
90
106
 
91
- def initialize(title, url, description, domain)
92
- @title = title
93
- @url = url
94
- @description = description
95
- @domain = domain
96
- end
97
-
98
- def to_hash()
99
- {
100
- 'title' => @title,
101
- 'url' => @url,
102
- 'description' => @description,
103
- 'domain' => @domain,
104
- }
105
- end
106
-
107
- def to_hash_for_custom_template()
108
- {
109
- 'link_title' => @title,
110
- 'link_url' => @url,
111
- 'link_description' => @description,
112
- 'link_domain' => @domain
113
- }
114
- end
115
-
116
- def template_file()
107
+ def self.template_file
117
108
  @@template_file
118
109
  end
119
- end
120
110
 
121
- class NonOpenGraphPropertiesFactory
122
111
  def from_page(page)
123
- NonOpenGraphProperties.new(page.best_title, page.url, get_description(page), page.host)
112
+ Properties.new({
113
+ 'title' => page.best_title,
114
+ 'url' => page.url,
115
+ 'description' => page.best_description,
116
+ 'domain' => page.host,
117
+ }, @@template_file)
124
118
  end
125
119
 
126
120
  def from_hash(hash)
127
- NonOpenGraphProperties.new(
128
- hash['title'], hash['url'], hash['description'], hash['domain'])
129
- end
130
-
131
- private
132
- def get_description(page)
133
- if !page.parsed.xpath('//p[normalize-space()]').empty? then
134
- return page.parsed.xpath('//p[normalize-space()]').map(&:text).first[0..180] + "..."
135
- else
136
- return "..."
137
- end
121
+ Properties.new(hash, @@template_file)
138
122
  end
139
123
  end
140
124
 
@@ -161,7 +145,7 @@ module Jekyll
161
145
  end
162
146
  page = fetch(url)
163
147
  properties = create_properties_from_page(page)
164
- if Dir.exists?(@@cache_dir) then
148
+ if Dir.exist?(@@cache_dir) then
165
149
  save_cache_file(cache_filepath, properties)
166
150
  else
167
151
  # TODO: This message will be shown at all linkprevew tag
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-linkpreview
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yusuke Nishioka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-10 00:00:00.000000000 Z
11
+ date: 2023-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -48,22 +48,16 @@ dependencies:
48
48
  name: bundler
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ">="
51
+ - - "~>"
52
52
  - !ruby/object:Gem::Version
53
53
  version: '2.0'
54
- - - "<"
55
- - !ruby/object:Gem::Version
56
- version: '2.4'
57
54
  type: :development
58
55
  prerelease: false
59
56
  version_requirements: !ruby/object:Gem::Requirement
60
57
  requirements:
61
- - - ">="
58
+ - - "~>"
62
59
  - !ruby/object:Gem::Version
63
60
  version: '2.0'
64
- - - "<"
65
- - !ruby/object:Gem::Version
66
- version: '2.4'
67
61
  - !ruby/object:Gem::Dependency
68
62
  name: rake
69
63
  requirement: !ruby/object:Gem::Requirement
@@ -106,20 +100,6 @@ dependencies:
106
100
  - - "~>"
107
101
  - !ruby/object:Gem::Version
108
102
  version: 0.5.2
109
- - !ruby/object:Gem::Dependency
110
- name: appraisal
111
- requirement: !ruby/object:Gem::Requirement
112
- requirements:
113
- - - "~>"
114
- - !ruby/object:Gem::Version
115
- version: '2.0'
116
- type: :development
117
- prerelease: false
118
- version_requirements: !ruby/object:Gem::Requirement
119
- requirements:
120
- - - "~>"
121
- - !ruby/object:Gem::Version
122
- version: '2.0'
123
103
  - !ruby/object:Gem::Dependency
124
104
  name: wwtd
125
105
  requirement: !ruby/object:Gem::Requirement