summaryrefslogtreecommitdiffstats
path: root/app/helpers/jsonld_helper.rb
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2018-05-02 18:58:48 +0200
committerGitHub <noreply@github.com>2018-05-02 18:58:48 +0200
commitcb5b5cb5f79bb2187d8124df91af4c8e1bfd7256 (patch)
tree76f728b51beda1992b14e3bc83f6a67fdd77dce3 /app/helpers/jsonld_helper.rb
parent71a7cea73fdfb45d06986e108b2ce1dbf7e32579 (diff)
Slightly reduce RAM usage (#7301)
* No need to re-require sidekiq plugins, they are required via Gemfile * Add derailed_benchmarks tool, no need to require TTY gems in Gemfile * Replace ruby-oembed with FetchOEmbedService Reduce startup by 45382 allocated objects * Remove preloaded JSON-LD in favour of caching HTTP responses Reduce boot RAM by about 6 MiB * Fix tests * Fix test suite by stubbing out JSON-LD contexts
Diffstat (limited to 'app/helpers/jsonld_helper.rb')
-rw-r--r--app/helpers/jsonld_helper.rb17
1 files changed, 16 insertions, 1 deletions
diff --git a/app/helpers/jsonld_helper.rb b/app/helpers/jsonld_helper.rb
index a3cfdadb8db..e9056166c10 100644
--- a/app/helpers/jsonld_helper.rb
+++ b/app/helpers/jsonld_helper.rb
@@ -48,7 +48,7 @@ module JsonLdHelper
end
def canonicalize(json)
- graph = RDF::Graph.new << JSON::LD::API.toRdf(json)
+ graph = RDF::Graph.new << JSON::LD::API.toRdf(json, documentLoader: method(:load_jsonld_context))
graph.dump(:normalize)
end
@@ -90,4 +90,19 @@ module JsonLdHelper
request.add_headers('Accept' => 'application/activity+json, application/ld+json')
request
end
+
+ def load_jsonld_context(url, _options = {}, &_block)
+ json = Rails.cache.fetch("jsonld:context:#{url}", expires_in: 30.days, raw: true) do
+ request = Request.new(:get, url)
+ request.add_headers('Accept' => 'application/ld+json')
+
+ request.perform do |res|
+ raise JSON::LD::JsonLdError::LoadingDocumentFailed unless res.code == 200 && res.mime_type == 'application/ld+json'
+ res.body_with_limit
+ end
+ end
+
+ doc = JSON::LD::API::RemoteDocument.new(url, json)
+ block_given? ? yield(doc) : doc
+ end
end