jekyll-og-image 1.2.1 → 1.3.0

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: a631d761ff53dd4360cc75a85dea82931684ec5feba0280c605cef0823b8a887
4
- data.tar.gz: bad0176739efbab1e7e9b1bc042e63c5b9be4673b1d47bb28ebcd305c015d100
3
+ metadata.gz: 3d4faf0a2f12cf99798b8fb4fc56586ea659c37feceb3b34a7aac677fac0d43e
4
+ data.tar.gz: 6e7acd8ca461e1dc366255b3f01144fc3dca605eac70256ad1cc7fab135b3011
5
5
  SHA512:
6
- metadata.gz: fb9ded5069c346291dbff870cb4925939e191c066e035d9c786886eee3cffc544f944e7bfd5f179125e7a02267c0ef7f45af061229ea817baba50fb8983a8251
7
- data.tar.gz: 9cc5b84d0b130db137d68cf6b513ff285648b90818a4e83d8b84c53b2832b0aaeeb53d750903c249619506c2dc2346276282733b18c53635195854d8a8ad25f4
6
+ metadata.gz: aeea9d6fba76f7502a090f7d35dc2f062be6b1f7c5656f8d76719eeca715776fd818bd2f88faecd07b2d709bfbb3e0efbefeaac5c5c8f81f2b50af41bbc064a9
7
+ data.tar.gz: c602ea3d92aca6b20ef950c1300c4b28aecdc180a1076e12b1bcc9d7a5f7eb848511085c868b3af18385b432e6f1c7f44c1921ea85823400eb734ab1356d7d79
data/.rspec_status CHANGED
@@ -1,7 +1,27 @@
1
- example_id | status | run_time |
2
- ---------------------------------------------- | ------ | --------------- |
3
- ./spec/jekyll_og_image/config_spec.rb[1:1:1:1] | passed | 0.00046 seconds |
4
- ./spec/jekyll_og_image/config_spec.rb[1:1:2:1] | passed | 0.00012 seconds |
5
- ./spec/jekyll_og_image/version_spec.rb[1:1] | passed | 0.00037 seconds |
6
- ./spec/jekyll_og_image_spec.rb[1:1] | passed | 0.2806 seconds |
7
- ./spec/jekyll_og_image_spec.rb[1:2] | passed | 0.04456 seconds |
1
+ example_id | status | run_time |
2
+ ------------------------------------------------------- | ------ | --------------- |
3
+ ./spec/jekyll_og_image/configuration_spec.rb[1:1:1] | passed | 0.00097 seconds |
4
+ ./spec/jekyll_og_image/configuration_spec.rb[1:1:2:1] | passed | 0.00005 seconds |
5
+ ./spec/jekyll_og_image/configuration_spec.rb[1:2:1:1] | passed | 0.00005 seconds |
6
+ ./spec/jekyll_og_image/configuration_spec.rb[1:2:2:1] | passed | 0.00003 seconds |
7
+ ./spec/jekyll_og_image/configuration_spec.rb[1:3:1:1] | passed | 0.00026 seconds |
8
+ ./spec/jekyll_og_image/configuration_spec.rb[1:3:2:1] | passed | 0.00003 seconds |
9
+ ./spec/jekyll_og_image/configuration_spec.rb[1:4:1:1] | passed | 0.00003 seconds |
10
+ ./spec/jekyll_og_image/configuration_spec.rb[1:4:2:1] | passed | 0.00003 seconds |
11
+ ./spec/jekyll_og_image/configuration_spec.rb[1:5:1:1] | passed | 0.00039 seconds |
12
+ ./spec/jekyll_og_image/configuration_spec.rb[1:5:2:1] | passed | 0.00004 seconds |
13
+ ./spec/jekyll_og_image/configuration_spec.rb[1:6:1:1] | passed | 0.00004 seconds |
14
+ ./spec/jekyll_og_image/configuration_spec.rb[1:6:2:1] | passed | 0.00003 seconds |
15
+ ./spec/jekyll_og_image/configuration_spec.rb[1:7:1:1] | passed | 0.00004 seconds |
16
+ ./spec/jekyll_og_image/configuration_spec.rb[1:7:1:2:1] | passed | 0.00005 seconds |
17
+ ./spec/jekyll_og_image/configuration_spec.rb[1:8:1:1] | passed | 0.00004 seconds |
18
+ ./spec/jekyll_og_image/configuration_spec.rb[1:8:2:1] | passed | 0.00006 seconds |
19
+ ./spec/jekyll_og_image/configuration_spec.rb[1:9:1:1] | passed | 0.00004 seconds |
20
+ ./spec/jekyll_og_image/configuration_spec.rb[1:9:2:1] | passed | 0.00003 seconds |
21
+ ./spec/jekyll_og_image/configuration_spec.rb[1:10:1:1] | passed | 0.00003 seconds |
22
+ ./spec/jekyll_og_image/configuration_spec.rb[1:10:2:1] | passed | 0.00003 seconds |
23
+ ./spec/jekyll_og_image/configuration_spec.rb[1:11:1:1] | passed | 0.00003 seconds |
24
+ ./spec/jekyll_og_image/configuration_spec.rb[1:11:2:1] | passed | 0.00003 seconds |
25
+ ./spec/jekyll_og_image/version_spec.rb[1:1] | passed | 0.00003 seconds |
26
+ ./spec/jekyll_og_image_spec.rb[1:1] | passed | 0.24499 seconds |
27
+ ./spec/jekyll_og_image_spec.rb[1:2] | passed | 0.04171 seconds |
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ # require "anyway_config"
4
+
5
+ class JekyllOgImage::Configuration
6
+ Canvas = Data.define(:background_color, :background_image) do
7
+ def initialize(background_color: "#FFFFFF", background_image: nil)
8
+ super
9
+ end
10
+ end
11
+
12
+ Header = Data.define(:font_family, :color) do
13
+ def initialize(font_family: "Helvetica, Bold", color: "#2f313d")
14
+ super
15
+ end
16
+ end
17
+
18
+ Content = Data.define(:font_family, :color) do
19
+ def initialize(font_family: "Helvetica, Regular", color: "#535358")
20
+ super
21
+ end
22
+ end
23
+
24
+ Border = Data.define(:width, :fill) do
25
+ def initialize(width: 0, fill: nil)
26
+ fill.is_a?(Array) ? fill : [ fill ]
27
+ super(width: width, fill: fill)
28
+ end
29
+ end
30
+
31
+ def initialize(raw_config)
32
+ @raw_config = raw_config
33
+ end
34
+
35
+ def merge!(other)
36
+ config = Jekyll::Utils.deep_merge_hashes(
37
+ @raw_config,
38
+ other.to_h
39
+ )
40
+
41
+ self.class.new(config)
42
+ end
43
+
44
+ def to_h
45
+ @raw_config
46
+ end
47
+
48
+ def ==(other)
49
+ to_h == other.to_h
50
+ end
51
+
52
+ def output_dir
53
+ @raw_config["output_dir"] || "assets/images/og"
54
+ end
55
+
56
+ def force?
57
+ @raw_config["force"] || false
58
+ end
59
+
60
+ def verbose?
61
+ @raw_config["verbose"] || false
62
+ end
63
+
64
+ def canvas
65
+ @raw_config["canvas"] ? Canvas.new(**Jekyll::Utils.symbolize_hash_keys(@raw_config["canvas"])) : Canvas.new
66
+ end
67
+
68
+ def header
69
+ @raw_config["header"] ? Header.new(**Jekyll::Utils.symbolize_hash_keys(@raw_config["header"])) : Header.new
70
+ end
71
+
72
+ def content
73
+ @raw_config["content"] ? Content.new(**Jekyll::Utils.symbolize_hash_keys(@raw_config["content"])) : Content.new
74
+ end
75
+
76
+ def image
77
+ @raw_config["image"]
78
+ end
79
+
80
+ def domain
81
+ @raw_config["domain"]
82
+ end
83
+
84
+ def border_bottom
85
+ @raw_config["border_bottom"] ? Border.new(**Jekyll::Utils.symbolize_hash_keys(@raw_config["border_bottom"])) : nil
86
+ end
87
+
88
+ def margin_bottom
89
+ 80 + (border_bottom&.width || 0)
90
+ end
91
+ end
@@ -4,10 +4,7 @@ class JekyllOgImage::Generator < Jekyll::Generator
4
4
  safe true
5
5
 
6
6
  def generate(site)
7
- base_path = File.join(
8
- JekyllOgImage.config.output_dir,
9
- "posts"
10
- )
7
+ base_path = File.join(JekyllOgImage.config.output_dir, "posts")
11
8
 
12
9
  FileUtils.mkdir_p File.join(site.config["source"], base_path)
13
10
 
@@ -33,73 +30,88 @@ class JekyllOgImage::Generator < Jekyll::Generator
33
30
  private
34
31
 
35
32
  def generate_image_for_post(site, post, path)
36
- date = post.date.strftime("%B %d, %Y")
33
+ config = JekyllOgImage.config.merge!(post.data["og_image"])
37
34
 
38
- background_image = if JekyllOgImage.config.canvas["background_image"]
39
- File.read(File.join(site.config["source"], JekyllOgImage.config.canvas["background_image"]))
35
+ canvas = generate_canvas(site, config)
36
+ canvas = add_border_bottom(canvas, config) if config.border_bottom
37
+ canvas = add_image(canvas, File.read(File.join(site.config["source"], config.image))) if config.image
38
+ canvas = add_header(canvas, post, config)
39
+ canvas = add_publish_date(canvas, post, config)
40
+ canvas = add_tags(canvas, post, config) if post.data["tags"].any?
41
+ canvas = add_domain(canvas, post, config) if config.domain
42
+
43
+ canvas.save(path)
44
+ end
45
+
46
+ def generate_canvas(site, config)
47
+ background_image = if config.canvas.background_image
48
+ File.read(File.join(site.config["source"], config.canvas.background_image))
40
49
  end
41
50
 
42
- canvas = JekyllOgImage::Element::Canvas.new(1200, 600,
43
- background_color: JekyllOgImage.config.canvas["background_color"],
51
+ JekyllOgImage::Element::Canvas.new(1200, 600,
52
+ background_color: config.canvas.background_color,
44
53
  background_image: background_image
45
54
  )
55
+ end
46
56
 
47
- if JekyllOgImage.config.border_bottom
48
- canvas = canvas.border(JekyllOgImage.config.border_bottom["width"],
49
- position: :bottom,
50
- fill: JekyllOgImage.config.border_bottom["fill"]
51
- )
52
- end
57
+ def add_border_bottom(canvas, config)
58
+ canvas.border(config.border_bottom.width,
59
+ position: :bottom,
60
+ fill: config.border_bottom.fill
61
+ )
62
+ end
53
63
 
54
- if JekyllOgImage.config.image
55
- canvas = canvas.image(
56
- File.read(File.join(site.config["source"], JekyllOgImage.config.image)),
57
- gravity: :ne,
58
- width: 150,
59
- height: 150,
60
- radius: 50
61
- ) { |_canvas, _text| { x: 80, y: 100 } }
62
- end
64
+ def add_image(canvas, image)
65
+ canvas.image(image,
66
+ gravity: :ne,
67
+ width: 150,
68
+ height: 150,
69
+ radius: 50
70
+ ) { |_canvas, _text| { x: 80, y: 100 } }
71
+ end
63
72
 
64
- canvas = canvas.text(post.data["title"],
65
- width: JekyllOgImage.config.image ? 870 : 1040,
66
- color: JekyllOgImage.config.header["color"],
73
+ def add_header(canvas, post, config)
74
+ canvas.text(post.data["title"],
75
+ width: config.image ? 870 : 1040,
76
+ color: config.header.color,
67
77
  dpi: 400,
68
- font: JekyllOgImage.config.header["font_family"]
78
+ font: config.header.font_family
69
79
  ) { |_canvas, _text| { x: 80, y: 100 } }
80
+ end
70
81
 
71
- canvas = canvas.text(date,
82
+ def add_publish_date(canvas, post, config)
83
+ date = post.date.strftime("%B %d, %Y")
84
+
85
+ canvas.text(date,
72
86
  gravity: :sw,
73
- color: JekyllOgImage.config.content["color"],
87
+ color: config.content.color,
74
88
  dpi: 150,
75
- font: JekyllOgImage.config.content["font_family"]
76
- ) { |_canvas, _text| { x: 80, y: post.data["tags"].any? ? JekyllOgImage.config.margin_bottom + 50 : JekyllOgImage.config.margin_bottom } }
77
-
78
- if post.data["tags"].any?
79
- tags = post.data["tags"].map { |tag| "##{tag}" }.join(" ")
80
-
81
- canvas = canvas.text(tags,
82
- gravity: :sw,
83
- color: JekyllOgImage.config.content["color"],
84
- dpi: 150,
85
- font: JekyllOgImage.config.content["font_family"]
86
- ) { |_canvas, _text| { x: 80, y: JekyllOgImage.config.margin_bottom } }
87
- end
89
+ font: config.content.font_family
90
+ ) { |_canvas, _text| { x: 80, y: post.data["tags"].any? ? config.margin_bottom + 50 : config.margin_bottom } }
91
+ end
88
92
 
89
- if JekyllOgImage.config.domain
90
- canvas = canvas.text(JekyllOgImage.config.domain,
91
- gravity: :se,
92
- color: JekyllOgImage.config.content["color"],
93
- dpi: 150,
94
- font: JekyllOgImage.config.content["font_family"]
95
- ) do |_canvas, _text|
96
- {
97
- x: 80,
98
- y: post.data["tags"].any? ? JekyllOgImage.config.margin_bottom + 50 : JekyllOgImage.config.margin_bottom
99
- }
100
- end
101
- end
93
+ def add_tags(canvas, post, config)
94
+ tags = post.data["tags"].map { |tag| "##{tag}" }.join(" ")
102
95
 
103
- canvas.save(path)
96
+ canvas.text(tags,
97
+ gravity: :sw,
98
+ color: config.content.color,
99
+ dpi: 150,
100
+ font: config.content.font_family
101
+ ) { |_canvas, _text| { x: 80, y: config.margin_bottom } }
102
+ end
103
+
104
+ def add_domain(canvas, post, config)
105
+ canvas.text(config.domain,
106
+ gravity: :se,
107
+ color: config.content.color,
108
+ dpi: 150,
109
+ font: config.content.font_family
110
+ ) do |_canvas, _text|
111
+ {
112
+ x: 80,
113
+ y: post.data["tags"].any? ? config.margin_bottom + 50 : config.margin_bottom
114
+ }
115
+ end
104
116
  end
105
117
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JekyllOgImage
4
- VERSION = "1.2.1"
4
+ VERSION = "1.3.0"
5
5
  end
@@ -11,18 +11,14 @@ loader.eager_load
11
11
 
12
12
  module JekyllOgImage
13
13
  def self.config
14
- @config ||= JekyllOgImage::Config.new
14
+ @config ||= JekyllOgImage::Configuration.new({})
15
15
  end
16
16
 
17
17
  def self.config=(config)
18
18
  @config = config
19
19
  end
20
-
21
- def self.configure
22
- yield config
23
- end
24
20
  end
25
21
 
26
22
  Jekyll::Hooks.register(:site, :after_init) do |site|
27
- JekyllOgImage.config = JekyllOgImage::Config.new(site.config["og_image"])
23
+ JekyllOgImage.config = JekyllOgImage::Configuration.new(site.config["og_image"] || {})
28
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-og-image
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Alexandrov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-14 00:00:00.000000000 Z
11
+ date: 2024-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll-seo-tag
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.6'
41
- - !ruby/object:Gem::Dependency
42
- name: anyway_config
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '2.6'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '2.6'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: ruby-vips
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -106,7 +92,7 @@ files:
106
92
  - examples/4.png
107
93
  - lib/jekyll-og-image.rb
108
94
  - lib/jekyll_og_image.rb
109
- - lib/jekyll_og_image/config.rb
95
+ - lib/jekyll_og_image/configuration.rb
110
96
  - lib/jekyll_og_image/element/base.rb
111
97
  - lib/jekyll_og_image/element/border.rb
112
98
  - lib/jekyll_og_image/element/canvas.rb
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "anyway_config"
4
-
5
- class JekyllOgImage::Config < Anyway::Config
6
- attr_config output_dir: "assets/images/og"
7
- attr_config force: false
8
- attr_config verbose: false
9
- attr_config canvas: {
10
- background_color: "#FFFFFF",
11
- background_image: nil
12
- }
13
- attr_config header: {
14
- font_family: "Helvetica, Bold",
15
- color: "#2f313d"
16
- }
17
- attr_config content: {
18
- font_family: "Helvetica, Regular",
19
- color: "#535358"
20
- }
21
- attr_config :image
22
- attr_config :domain
23
- attr_config :border_bottom
24
-
25
- coerce_types canvas: {
26
- background_color: { type: :string },
27
- background_image: { type: :string }
28
- }
29
-
30
- coerce_types header: {
31
- font_family: { type: :string },
32
- color: { type: :string }
33
- }
34
-
35
- coerce_types content: {
36
- font_family: { type: :string },
37
- color: { type: :string }
38
- }
39
-
40
- coerce_types image: { type: :string }
41
-
42
- coerce_types border_bottom: {
43
- width: { type: :integer },
44
- fill: { type: :string, array: true }
45
- }
46
-
47
- def margin_bottom
48
- 80 + (border_bottom&.fetch("width", 0) || 0)
49
- end
50
- end