Syndicate code posts to Github Gists
This commit is contained in:
@@ -36,6 +36,7 @@ module Adamantium
|
|||||||
"syndication.dayone",
|
"syndication.dayone",
|
||||||
"syndication.mastodon",
|
"syndication.mastodon",
|
||||||
"syndication.blue_sky",
|
"syndication.blue_sky",
|
||||||
|
"syndication.gist",
|
||||||
"syndication.raindrop",
|
"syndication.raindrop",
|
||||||
"view_cache.cacher",
|
"view_cache.cacher",
|
||||||
"renderers.markdown"
|
"renderers.markdown"
|
||||||
|
@@ -3,5 +3,6 @@ Hanami.app.register_provider :clients, namespace: true do
|
|||||||
register "mastodon", Adamantium::Client::Mastodon.new
|
register "mastodon", Adamantium::Client::Mastodon.new
|
||||||
register "blue_sky", Adamantium::Client::BlueSky.new
|
register "blue_sky", Adamantium::Client::BlueSky.new
|
||||||
register "omdb", Adamantium::Client::Omdb.new(api_key: target["settings"].omdb_api_key)
|
register "omdb", Adamantium::Client::Omdb.new(api_key: target["settings"].omdb_api_key)
|
||||||
|
register "gist", Adamantium::Client::Gist.new(token: target["settings"].gist_client_token)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
Hanami.app.register_provider :syndication, namespace: true do
|
Hanami.app.register_provider :syndication, namespace: true do
|
||||||
start do
|
start do
|
||||||
register "mastodon", Adamantium::Syndication::Mastodon.new
|
register "mastodon", Adamantium::Syndication::Mastodon.new
|
||||||
|
register "gist", Adamantium::Syndication::Gist.new
|
||||||
register "blue_sky", Adamantium::Syndication::BlueSky.new
|
register "blue_sky", Adamantium::Syndication::BlueSky.new
|
||||||
register "raindrop", Adamantium::Syndication::Raindrop.new(api_key: "Bearer #{target["settings"].raindrop_api_key}")
|
register "raindrop", Adamantium::Syndication::Raindrop.new(api_key: "Bearer #{target["settings"].raindrop_api_key}")
|
||||||
register "dayone", Adamantium::Syndication::Dayone.new(
|
register "dayone", Adamantium::Syndication::Dayone.new(
|
||||||
|
@@ -72,5 +72,7 @@ module Adamantium
|
|||||||
|
|
||||||
setting :sentry_dsn, default: nil
|
setting :sentry_dsn, default: nil
|
||||||
setting :raise_exceptions, default: true
|
setting :raise_exceptions, default: true
|
||||||
|
|
||||||
|
setting :gist_client_token, default: nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
4
config/taglines.yaml
Normal file
4
config/taglines.yaml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
taglines:
|
||||||
|
- lord of the dance
|
||||||
|
- would that it were so simple
|
||||||
|
- "*furious hand gestures*"
|
31
lib/adamantium/client/gist.rb
Normal file
31
lib/adamantium/client/gist.rb
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
require "httparty"
|
||||||
|
|
||||||
|
module Adamantium
|
||||||
|
module Client
|
||||||
|
class Gist
|
||||||
|
include Dry::Monads[:result]
|
||||||
|
|
||||||
|
def initialize(token:)
|
||||||
|
@token = token
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_gist(description:, public:, files: {})
|
||||||
|
request_body = {
|
||||||
|
description: description,
|
||||||
|
public: public,
|
||||||
|
files: files
|
||||||
|
}
|
||||||
|
|
||||||
|
res = HTTParty.post("https://api.github.com/gists",
|
||||||
|
body: JSON.generate(request_body),
|
||||||
|
headers: {Authorization: "Bearer #{@token}"})
|
||||||
|
|
||||||
|
if res.code >= 200 && res.code < 400
|
||||||
|
Success(res["html_url"])
|
||||||
|
else
|
||||||
|
Failure(:could_not_save_gist)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
23
lib/adamantium/syndication/gist.rb
Normal file
23
lib/adamantium/syndication/gist.rb
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
require "dry/monads"
|
||||||
|
require "sanitize"
|
||||||
|
|
||||||
|
module Adamantium
|
||||||
|
module Syndication
|
||||||
|
class Gist
|
||||||
|
include Dry::Monads[:result]
|
||||||
|
include Deps[gist_client: "clients.gist"]
|
||||||
|
|
||||||
|
def call(post:)
|
||||||
|
description = ""
|
||||||
|
public = true
|
||||||
|
files = {
|
||||||
|
post[:name] => {content: Sanitize.fragment(post[:content])}
|
||||||
|
}
|
||||||
|
|
||||||
|
gist_client.create_gist(description: description,
|
||||||
|
public: public,
|
||||||
|
files: files)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
3
slices/main/templates/shared/_gist.html.slim
Normal file
3
slices/main/templates/shared/_gist.html.slim
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
- w_class = defined?(width) ? width : "w-6"
|
||||||
|
<svg class="fill-grey-900 hover:fill-grey-600 #{w_class}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/></svg>
|
||||||
|
|
@@ -29,6 +29,10 @@ module Micropub
|
|||||||
{
|
{
|
||||||
uid: "https://bsky.social",
|
uid: "https://bsky.social",
|
||||||
name: "Blue Sky"
|
name: "Blue Sky"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
uid: "https://gist.github.com",
|
||||||
|
name: "Gist"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}.to_json
|
}.to_json
|
||||||
@@ -44,6 +48,10 @@ module Micropub
|
|||||||
{
|
{
|
||||||
uid: "https://bsky.social",
|
uid: "https://bsky.social",
|
||||||
name: "Blue Sky"
|
name: "Blue Sky"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
uid: "https://gist.github.com",
|
||||||
|
name: "Gist"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}.to_json
|
}.to_json
|
||||||
|
@@ -15,7 +15,7 @@ module Micropub
|
|||||||
post_params = prepare_params(params: post)
|
post_params = prepare_params(params: post)
|
||||||
created_post = post_repo.create(post_params)
|
created_post = post_repo.create(post_params)
|
||||||
|
|
||||||
# syndicate.call(created_post.id, post)
|
syndicate.call(created_post.id, post)
|
||||||
|
|
||||||
# decorated_post = Decorators::Posts::Decorator.new(created_post)
|
# decorated_post = Decorators::Posts::Decorator.new(created_post)
|
||||||
|
|
||||||
|
@@ -11,6 +11,7 @@ module Micropub
|
|||||||
include Deps["settings",
|
include Deps["settings",
|
||||||
"syndication.mastodon",
|
"syndication.mastodon",
|
||||||
"syndication.blue_sky",
|
"syndication.blue_sky",
|
||||||
|
"syndication.gist",
|
||||||
add_post_syndication_source: "commands.posts.add_syndication_source",
|
add_post_syndication_source: "commands.posts.add_syndication_source",
|
||||||
send_to_dayone: "syndication.dayone",
|
send_to_dayone: "syndication.dayone",
|
||||||
]
|
]
|
||||||
@@ -30,7 +31,13 @@ module Micropub
|
|||||||
add_post_syndication_source.call(post_id, :blue_sky, res.value!) if res.success?
|
add_post_syndication_source.call(post_id, :blue_sky, res.value!) if res.success?
|
||||||
end
|
end
|
||||||
|
|
||||||
if post[:category].include? "weekly"
|
if syndicate_to.include? :gist
|
||||||
|
res = gist.call(post: post)
|
||||||
|
|
||||||
|
add_post_syndication_source.call(post_id, :gist, res.value!) if res.success?
|
||||||
|
end
|
||||||
|
|
||||||
|
if post[:category]&.include? "weekly"
|
||||||
send_to_dayone.call(name: post[:name], content: post[:content])
|
send_to_dayone.call(name: post[:name], content: post[:content])
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -43,6 +50,7 @@ module Micropub
|
|||||||
targets = []
|
targets = []
|
||||||
targets << :mastodon if syndicate_to.any? { |url| settings.mastodon_server.match(/#{url}/) }
|
targets << :mastodon if syndicate_to.any? { |url| settings.mastodon_server.match(/#{url}/) }
|
||||||
targets << :blue_sky if syndicate_to.any? { |url| settings.blue_sky_url.match(/#{url}/) }
|
targets << :blue_sky if syndicate_to.any? { |url| settings.blue_sky_url.match(/#{url}/) }
|
||||||
|
targets << :gist if syndicate_to.any? { |url| "https://gist.github.com".match(/#{url}/) }
|
||||||
targets
|
targets
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user