imageomatic 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|