imageomatic 0.1.3 → 0.1.4
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/app/controllers/concerns/imageomatic/opengraph.rb +5 -1
- data/app/models/imageomatic/opengraph/base.rb +51 -0
- data/app/models/imageomatic/opengraph/image.rb +12 -0
- data/app/models/imageomatic/opengraph/metatag.rb +1 -1
- data/app/models/imageomatic/opengraph/metatag_mapper.rb +35 -0
- data/app/models/imageomatic/opengraph/model.rb +26 -10
- data/app/models/imageomatic/opengraph/twitter.rb +11 -0
- data/lib/imageomatic/version.rb +1 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 533fb806d3a3ce5ac58f2f79fedb695504ce8e5a2ec2a81772004a27f12c733f
|
4
|
+
data.tar.gz: c5bda15752799f09a89b87ae1dd48a4b2ceb0cb87f8a3c315451a0328d80dacb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63106766ef8c74a8705f62204a246f0d47e446ee4fedcd35d4314ef04b5bb6cce1a6bb564ef2ed919f1d955aba22e58e6d291e61328f7c26adc42913ab1f8abd
|
7
|
+
data.tar.gz: 29591c03426214e136d0f58eb9d9e0e869714cdf2452e55b2cbf115e6cf0cbeef348dd1d1637750ce74287285091d52b6c3937f42cbb93a09998c2293ea21c73
|
@@ -24,7 +24,11 @@ module Imageomatic
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def url_for_opengraph_image
|
27
|
-
|
27
|
+
imageomatic_opengraph_url url: url_for(format: :opengraph)
|
28
|
+
end
|
29
|
+
|
30
|
+
def imageomatic_opengraph_url(*args, **kwargs)
|
31
|
+
Imageomatic.client.url_signature.url_for "opengraph", *args, **kwargs
|
28
32
|
end
|
29
33
|
|
30
34
|
def opengraph
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Imageomatic
|
2
|
+
module Opengraph
|
3
|
+
# Provides a way to specify OpenGraph keys for an OpengraphModel, which can later
|
4
|
+
# be iterated upon to generate OpenGraph meta tags.
|
5
|
+
class Base
|
6
|
+
# Encapsulates OpenGraph properties and provides helpers that are
|
7
|
+
# useful for documentation purposes or for reflecting on Ruby objects.
|
8
|
+
class Property
|
9
|
+
attr_accessor :key, :name, :description, :default
|
10
|
+
|
11
|
+
def initialize(key, description = nil, default: nil)
|
12
|
+
@key = key
|
13
|
+
@description = description
|
14
|
+
# If we get a string like `og:image:url`, this would give us `url`
|
15
|
+
*_, @name = key.rpartition(":")
|
16
|
+
@default = default
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Allows for the object to be initialized with args like `Image.new(url: "https://example.com/logo.png", alt: "Logo image")`.
|
21
|
+
def initialize(**kwargs)
|
22
|
+
kwargs.each do |kwarg, value|
|
23
|
+
self.send("#{kwarg}=", value)
|
24
|
+
rescue NoMethodError
|
25
|
+
raise NoMethodError, "#{kwarg.inspect} is not a property of #{self.inspect}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# DSL for creating properties when defining a model.
|
30
|
+
def self.property(*args, **kwargs)
|
31
|
+
property = Property.new *args, **kwargs
|
32
|
+
attr_accessor property.name
|
33
|
+
self.properties.append property
|
34
|
+
end
|
35
|
+
|
36
|
+
# Array where properties are registered.
|
37
|
+
def self.properties
|
38
|
+
@properties ||= []
|
39
|
+
end
|
40
|
+
|
41
|
+
# Iterates through the properties and also gets their value.
|
42
|
+
def properties
|
43
|
+
Enumerator.new do |y|
|
44
|
+
self.class.properties.each do |property|
|
45
|
+
y << [ property, (self.send(property.name) || property.default) ]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Imageomatic
|
2
|
+
module Opengraph
|
3
|
+
class Image < Base
|
4
|
+
property "og:image:url", "Identical to og:image."
|
5
|
+
property "og:image:secure_url", "An alternate url to use if the webpage requires HTTPS."
|
6
|
+
property "og:image:type", "A MIME type for this image."
|
7
|
+
property "og:image:width", "The number of pixels wide."
|
8
|
+
property "og:image:height", "The number of pixels high."
|
9
|
+
property "og:image:alt", "A description of what is in the image (not a caption). If the page specifies an og:image it should specify og:image:alt."
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Imageomatic
|
2
|
+
module Opengraph
|
3
|
+
# Iterates recursively through an OpenGraph object and gets a bunch of
|
4
|
+
# metatags and keys.
|
5
|
+
class MetatagMapper
|
6
|
+
include ActionView::Helpers::OutputSafetyHelper
|
7
|
+
|
8
|
+
attr_reader :model
|
9
|
+
delegate :context,
|
10
|
+
to: :model
|
11
|
+
|
12
|
+
def initialize(model)
|
13
|
+
@model = model
|
14
|
+
end
|
15
|
+
|
16
|
+
def metatags
|
17
|
+
Enumerator.new do |y|
|
18
|
+
model.properties.each do |property, content|
|
19
|
+
if content.respond_to? :properties
|
20
|
+
MetatagMapper.new(content).metatags.each do |tag|
|
21
|
+
y << tag
|
22
|
+
end
|
23
|
+
else
|
24
|
+
y << Metatag.new(property.key, content) if content.present?
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_html
|
31
|
+
safe_join metatags.map(&:to_html), "\n"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,19 +1,35 @@
|
|
1
1
|
module Imageomatic
|
2
2
|
module Opengraph
|
3
|
-
class Model <
|
4
|
-
|
3
|
+
class Model < Base
|
4
|
+
property "og:title", %[The title of your object as it should appear within the graph, e.g., "The Rock".]
|
5
|
+
property "og:type", %[The type of your object, e.g., "video.movie". Depending on the type you specify, other properties may also be required.]
|
6
|
+
property "og:image", %[An image URL which should represent your object within the graph.]
|
7
|
+
property "og:url", %[The canonical URL of your object that will be used as its permanent ID in the graph, e.g., "https://www.imdb.com/title/tt0117500/".]
|
8
|
+
property "og:description", %[A one to two sentence description of your object.]
|
9
|
+
property "twitter", %[A one to two sentence description of your object.]
|
5
10
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
11
|
-
end
|
11
|
+
delegate :to_html, to: :metatag_mapper
|
12
|
+
|
13
|
+
def image
|
14
|
+
@image ||= Image.new
|
12
15
|
end
|
13
16
|
|
14
|
-
def
|
15
|
-
|
17
|
+
def image=(url)
|
18
|
+
image.url = url
|
16
19
|
end
|
20
|
+
|
21
|
+
def twitter
|
22
|
+
@twitter ||= Twitter.new.tap do |twitter|
|
23
|
+
twitter.title = title
|
24
|
+
twitter.description = description
|
25
|
+
twitter.image = image.url
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
def metatag_mapper
|
31
|
+
MetatagMapper.new(self)
|
32
|
+
end
|
17
33
|
end
|
18
34
|
end
|
19
35
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Imageomatic
|
2
|
+
module Opengraph
|
3
|
+
class Twitter < Base
|
4
|
+
property "twitter:card", "Type of card, which is 'summary_large_image'", default: "summary_large_image"
|
5
|
+
property "twitter:site", "Twitter @handle of the account"
|
6
|
+
property "twitter:title", "Title of the card, similar to og:title"
|
7
|
+
property "twitter:description", "Description of the card, similar to og:description"
|
8
|
+
property "twitter:image", "Image URL of the card, similar to og:image"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/lib/imageomatic/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imageomatic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brad Gessler
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -58,8 +58,12 @@ files:
|
|
58
58
|
- app/jobs/imageomatic/application_job.rb
|
59
59
|
- app/mailers/imageomatic/application_mailer.rb
|
60
60
|
- app/models/imageomatic/application_record.rb
|
61
|
+
- app/models/imageomatic/opengraph/base.rb
|
62
|
+
- app/models/imageomatic/opengraph/image.rb
|
61
63
|
- app/models/imageomatic/opengraph/metatag.rb
|
64
|
+
- app/models/imageomatic/opengraph/metatag_mapper.rb
|
62
65
|
- app/models/imageomatic/opengraph/model.rb
|
66
|
+
- app/models/imageomatic/opengraph/twitter.rb
|
63
67
|
- app/views/layouts/imageomatic/application.html.erb
|
64
68
|
- config/initializers/mime_types.rb
|
65
69
|
- config/routes.rb
|
@@ -100,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
104
|
- !ruby/object:Gem::Version
|
101
105
|
version: '0'
|
102
106
|
requirements: []
|
103
|
-
rubygems_version: 3.3.
|
107
|
+
rubygems_version: 3.3.20
|
104
108
|
signing_key:
|
105
109
|
specification_version: 4
|
106
110
|
summary: Easiest way to generate fresh images for Rails applications.
|