jetesting 0.1.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/jemoji.rb +95 -0
  3. metadata +147 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5eb7d43ba938825fbc948a606b7cd2bab49785f11097c0cba8d170de92b85c88
4
+ data.tar.gz: 23afd25c1aeb431d0582ad316a3f4c5248587e6f69a5a6fb5cbb1ef7877e5125
5
+ SHA512:
6
+ metadata.gz: 83d5f4374e2e61e34e1c05d4a6663145a75815cb028f5468779d64f3caed8d208719cb070f86cfa0d0ab68a72bfb1c02123dc105d89516e39f70bcc144b484e2
7
+ data.tar.gz: 89bb639f0528f3621863fe8207b693d9ff61934f82cce803a1a3fadb812608bead092ac314ad0e5b30700213fec02daf790869508edd86b74a6435bc45254631
data/lib/jemoji.rb ADDED
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "jekyll"
4
+ require "html/pipeline"
5
+
6
+ module Jetesting
7
+ class Emoji
8
+ GITHUB_DOT_COM_ASSET_HOST_URL = "https://github.githubassets.com"
9
+ ASSET_PATH = "/images/icons/"
10
+ BODY_START_TAG = "<body"
11
+ OPENING_BODY_TAG_REGEX = %r!<body(.*?)>\s*!m.freeze
12
+
13
+ class << self
14
+ def emojify(doc)
15
+ return unless doc.output&.match?(HTML::Pipeline::EmojiFilter.emoji_pattern)
16
+
17
+ doc.output = if doc.output.include? BODY_START_TAG
18
+ replace_document_body(doc)
19
+ else
20
+ src = emoji_src(doc.site.config)
21
+ filter_with_emoji(src).call(doc.output)[:output].to_s
22
+ end
23
+ end
24
+
25
+ # Public: Create or fetch the filter for the given {{src}} asset root.
26
+ #
27
+ # src - the asset root URL (e.g. https://github.githubassets.com/images/icons/)
28
+ #
29
+ # Returns an HTML::Pipeline instance for the given asset root.
30
+ def filter_with_emoji(src)
31
+ filters[src] ||= HTML::Pipeline.new([
32
+ HTML::Pipeline::EmojiFilter,
33
+ ], :asset_root => src, :img_attrs => { :align => nil })
34
+ end
35
+
36
+ # Public: Filters hash where the key is the asset root source.
37
+ # Effectively a cache.
38
+ def filters
39
+ @filters ||= {}
40
+ end
41
+
42
+ # Public: Calculate the asset root source for the given config.
43
+ # The custom emoji asset root can be defined in the config as
44
+ # emoji.src, and must be a valid URL (i.e. it must include a
45
+ # protocol and valid domain)
46
+ #
47
+ # config - the hash-like configuration of the document's site
48
+ #
49
+ # Returns a full URL to use as the asset root URL. Defaults to the root
50
+ # URL for assets provided by an ASSET_HOST_URL environment variable,
51
+ # otherwise the root URL for emoji assets at assets-cdn.github.com.
52
+ def emoji_src(config = {})
53
+ if config.key?("emoji") && config["emoji"].key?("src")
54
+ config["emoji"]["src"]
55
+ else
56
+ default_asset_root
57
+ end
58
+ end
59
+
60
+ # Public: Defines the conditions for a document to be emojiable.
61
+ #
62
+ # doc - the Jekyll::Document or Jekyll::Page
63
+ #
64
+ # Returns true if the doc is written & is HTML.
65
+ def emojiable?(doc)
66
+ (doc.is_a?(Jekyll::Page) || doc.write?) &&
67
+ doc.output_ext == ".html" || doc.permalink&.end_with?("/")
68
+ end
69
+
70
+ private
71
+
72
+ def default_asset_root
73
+ if !ENV["ASSET_HOST_URL"].to_s.empty?
74
+ # Ensure that any trailing "/" is trimmed
75
+ asset_host_url = ENV["ASSET_HOST_URL"].chomp("/")
76
+ "#{asset_host_url}#{ASSET_PATH}"
77
+ else
78
+ "#{GITHUB_DOT_COM_ASSET_HOST_URL}#{ASSET_PATH}"
79
+ end
80
+ end
81
+
82
+ def replace_document_body(doc)
83
+ src = emoji_src(doc.site.config)
84
+ head, opener, tail = doc.output.partition(OPENING_BODY_TAG_REGEX)
85
+ body_content, *rest = tail.partition("</body>")
86
+ processed_markup = filter_with_emoji(src).call(body_content)[:output].to_s
87
+ String.new(head) << opener << processed_markup << rest.join
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ Jekyll::Hooks.register [:pages, :documents], :post_render do |doc|
94
+ Jekyll::Emoji.emojify(doc) if Jekyll::Emoji.emojiable?(doc)
95
+ end
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jetesting
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - GitHub, Inc.
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-06-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: gemoji
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: html-pipeline
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: jekyll
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '5.0'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '3.0'
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '5.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: bundler
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rake
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '12.0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '12.0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rspec
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '3.0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '3.0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rubocop-jekyll
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.4'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0.4'
117
+ description:
118
+ email: support@github.com
119
+ executables: []
120
+ extensions: []
121
+ extra_rdoc_files: []
122
+ files:
123
+ - lib/jemoji.rb
124
+ homepage: https://github.com/testing-stuff00022/jetesting
125
+ licenses:
126
+ - MIT
127
+ metadata: {}
128
+ post_install_message:
129
+ rdoc_options: []
130
+ require_paths:
131
+ - lib
132
+ required_ruby_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: 2.4.0
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ requirements: []
143
+ rubygems_version: 3.0.3.1
144
+ signing_key:
145
+ specification_version: 4
146
+ summary: GitHub-flavored emoji plugin for Jekyll
147
+ test_files: []