linked_rails 0.0.4.pre.g2c6c26e86 → 0.0.4.pre.g2c53724b3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 625693a3e58e4d005b413c33c0d9a7a46718a2780d8e04cf700338064388e38c
4
- data.tar.gz: 3425709177e527cf2e7e66eb29d68c92862aad3fea333b36afeb93a3b51aeac8
3
+ metadata.gz: bd12e0d41b6952dd04ab95017853a047956c45bd0e37f5e39f7b54f389e27d7c
4
+ data.tar.gz: 9bd13ba226e886b1853331f7390574da70e6753dd0f1526a5e71a3ff0addd6d6
5
5
  SHA512:
6
- metadata.gz: e006633be69326549671449c41daba02fea267aede7f8a5488fd31e8e72287bf745cb8a515391898caca13642957bfb7602f9bd143f3e49744fad4fe533f5b09
7
- data.tar.gz: 3476439c758b232542a529a1502b7bc9f8469f7841ccb4c16404195742afce86cc5d71f5f59fa4f90cfc4326bde07533e79359d12f45bf8cf81bc6b51dcbcdfc
6
+ metadata.gz: 774df3da980d69c98c27557bff628b1cfa00b25d64c522a65fc63b748c16dbefc88038743907425c51e9f2fe3e117eb178372c5b022ca1d03a1f4c4223c808ba
7
+ data.tar.gz: 37f483fd315b0c590efe77164f7fd5edfc7c5c5a85d91f9582d25a9259ca4872d64e03b1c5f38aa32bef5ce76c3a69463bba675f03d36b30211add53a9600cb3
@@ -21,11 +21,8 @@ module LinkedRails
21
21
  return response_for_wrong_host(opts) if wrong_host?(opts[:iri])
22
22
 
23
23
  include = opts[:include].to_s == 'true'
24
- resource = LinkedRails.iri_mapper.resource_from_iri(request_path_to_url(opts[:iri]), user_context)
25
24
 
26
- return response_from_request(include, RDF::URI(opts[:iri])) if resource.blank?
27
-
28
- response_from_resource(include, opts[:iri], resource)
25
+ response_from_request(include, RDF::URI(opts[:iri]))
29
26
  rescue StandardError => e
30
27
  handle_resource_error(opts, e)
31
28
  end
@@ -87,19 +84,10 @@ module LinkedRails
87
84
  false
88
85
  end
89
86
 
90
- def resource_cache_control(cacheable, status, resource_policy)
91
- return :private unless status == 200 && cacheable
92
- return 'no-cache' unless resource_policy.try(:public_resource?)
93
-
94
- :public
95
- end
96
-
97
87
  def resource_params(param)
98
88
  params = param.permit(:include, :iri)
99
89
  params[:iri] = URI(params[:iri])
100
90
  params
101
- rescue URI::InvalidURIError
102
- params.except(:iri)
103
91
  end
104
92
 
105
93
  def resource_response_body(iri, rack_body, status)
@@ -143,12 +131,6 @@ module LinkedRails
143
131
  }.merge(opts)
144
132
  end
145
133
 
146
- def resource_status(resource_policy)
147
- raise(LinkedRails::Errors::Forbidden.new(query: :show?)) unless resource_policy.show?
148
-
149
- 200
150
- end
151
-
152
134
  def response_for_wrong_host(opts)
153
135
  iri = opts[:iri]
154
136
  term = term_from_vocab(iri)
@@ -157,23 +139,6 @@ module LinkedRails
157
139
  ontology_term_response(iri, term, opts[:include])
158
140
  end
159
141
 
160
- def response_from_resource(include, iri, resource)
161
- resource_policy = policy(resource)
162
- status = resource_status(resource_policy)
163
-
164
- resource_response(
165
- iri,
166
- body: response_from_resource_body(include, iri, resource, status),
167
- cache: resource_cache_control(resource.try(:cacheable?), status, resource_policy),
168
- language: I18n.locale,
169
- status: status
170
- )
171
- end
172
-
173
- def response_from_resource_body(include, _iri, resource, status)
174
- include && status == 200 ? resource_body(resource) : nil
175
- end
176
-
177
142
  def term_from_vocab(iri)
178
143
  vocab = Vocab.for(iri)
179
144
  tag = iri.to_s.split(vocab.to_s).last
@@ -251,7 +216,7 @@ module LinkedRails
251
216
 
252
217
  def sanitized_relative_path(iri) # rubocop:disable Metrics/AbcSize
253
218
  iri.path = "#{iri.path}/" unless iri.path&.ends_with?('/')
254
- uri = URI(LinkedRails.iri.path.chomp('/').present? ? iri.to_s.split("#{LinkedRails.iri.path}/").last : iri)
219
+ uri = URI(LinkedRails.iri.path.present? ? iri.to_s.split("#{LinkedRails.iri.path}/").last : iri)
255
220
 
256
221
  [uri.path, uri.query].compact.join('?')
257
222
  end
@@ -187,7 +187,7 @@ module LinkedRails
187
187
 
188
188
  def target_url_fallback # rubocop:disable Metrics/AbcSize
189
189
  base = (resource.try(:singular_resource?) ? resource.singular_iri : resource.iri).dup
190
- base.path = "#{base.path.chomp('/')}/#{target_path}" if target_path.present?
190
+ base.path = "#{base.path}/#{target_path}" if target_path.present?
191
191
  base.query = Rack::Utils.parse_nested_query(base.query).merge(target_query).to_param if target_query.present?
192
192
  base
193
193
  end
@@ -8,9 +8,8 @@ module LinkedRails
8
8
  include LinkedRails::Model
9
9
 
10
10
  attr_accessor :collection, :filter
11
- delegate :apply_scope, :association_base, :association_class, :child_resource, :default_page_size, :display,
12
- :include_members,:parent, :policy, :total_page_count, :unfiltered_collection, :user_context,
13
- to: :collection
11
+ delegate :apply_scope, :association_base, :association_class, :default_page_size, :display, :include_members,
12
+ :parent, :policy, :total_page_count, :unfiltered_collection, :user_context, to: :collection
14
13
  delegate :count, to: :members
15
14
 
16
15
  alias id iri
@@ -43,7 +42,7 @@ module LinkedRails
43
42
  end
44
43
 
45
44
  def preview_includes
46
- include_members ? {members: {}, member_sequence: :members} : %i[member_sequence]
45
+ include_members ? {member_sequence: :members} : %i[member_sequence]
47
46
  end
48
47
 
49
48
  def title
@@ -4,11 +4,7 @@ module LinkedRails
4
4
  class Form
5
5
  class Field
6
6
  class FileInput < Field
7
- attr_writer :max_size
8
-
9
- def max_size
10
- @max_size.respond_to?(:call) ? @max_size.call : @max_size
11
- end
7
+ attr_accessor :max_size
12
8
  end
13
9
  end
14
10
  end
@@ -52,7 +52,13 @@ module LinkedRails
52
52
  private
53
53
 
54
54
  def attr_column(name)
55
- model_class.column_for_attribute(name)
55
+ column_model =
56
+ if model_class.is_delegated_attribute?(name)
57
+ model_class.class_for_delegated_attribute(name)
58
+ else
59
+ model_class
60
+ end
61
+ column_model.column_for_attribute(name)
56
62
  end
57
63
 
58
64
  def attr_to_datatype # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
@@ -5,7 +5,6 @@ require 'pundit'
5
5
  module LinkedRails
6
6
  class Form # rubocop:disable Metrics/ClassLength
7
7
  include LinkedRails::Model
8
- include LinkedRails::Model::Cacheable
9
8
 
10
9
  class_attribute :abstract_form, :pages, :model_class
11
10
 
@@ -5,11 +5,15 @@ module LinkedRails
5
5
  include ActiveModel::Model
6
6
  include LinkedRails::Model
7
7
 
8
+ MANIFEST_KEY = 'cache:Manifest'
9
+ CACHE_DB = ENV.fetch('PERSISTENT_REDIS_DATABASE', '6')
10
+
8
11
  def save
9
- Storage.hset(
10
- :persistent,
11
- :manifest,
12
- URL.as_href(LinkedRails.iri) => web_manifest.to_json
12
+ Redis.new(db: CACHE_DB).hset(
13
+ MANIFEST_KEY,
14
+ {
15
+ [LinkedRails.iri] => web_manifest.to_json
16
+ }
13
17
  )
14
18
  end
15
19
 
@@ -41,7 +45,7 @@ module LinkedRails
41
45
  def blob_preview_iri
42
46
  return unless ActiveStorage::Blob.service.present?
43
47
 
44
- "#{LinkedRails.iri(path: 'rails/active_storage/blobs/redirect')}/{signed_id}/preview"
48
+ LinkedRails.iri(path: 'rails/active_storage/blobs/redirect/{signed_id}/preview')
45
49
  end
46
50
 
47
51
  def blob_upload_iri
@@ -138,7 +142,7 @@ module LinkedRails
138
142
 
139
143
  def web_manifest_sw_section
140
144
  {
141
- src: "#{scope.chomp('/')}/sw.js",
145
+ src: "#{scope}/sw.js",
142
146
  scope: scope
143
147
  }
144
148
  end
@@ -158,25 +162,5 @@ module LinkedRails
158
162
  def tracking
159
163
  []
160
164
  end
161
-
162
- class << self
163
- def destroy(iri)
164
- Storage.hdel(:persistent, :manifest, URL.as_href(iri))
165
- end
166
-
167
- def move(from, to)
168
- Storage.hset(
169
- :persistent,
170
- :redirect_prefix,
171
- URL.as_href(from) => URL.as_href(to)
172
- )
173
-
174
- data = Storage.hget(:persistent, :manifest, URL.as_href(from))
175
-
176
- Storage.hset(:persistent, :manifest, URL.as_href(to), data) if data
177
-
178
- destroy(from)
179
- end
180
- end
181
165
  end
182
166
  end
@@ -81,7 +81,7 @@ module LinkedRails
81
81
  parent = parent_from_params(params, user_context)
82
82
  return if parent.blank?
83
83
 
84
- parent.try(:menu_sequence)
84
+ parent.menu_sequence
85
85
  end
86
86
  end
87
87
  end
@@ -26,7 +26,7 @@ module LinkedRails
26
26
  end
27
27
 
28
28
  def menus
29
- @menus ||= available_menus.map(&method(:memoized_menu_item))
29
+ @menus ||= available_menus.map(&method(:memoised_menu_item))
30
30
  end
31
31
 
32
32
  def menu(tag)
@@ -49,8 +49,9 @@ module LinkedRails
49
49
  end
50
50
 
51
51
  def menu_item(tag, options) # rubocop:disable Metrics/AbcSize
52
- return unless show_menu_item?(tag, options)
53
-
52
+ if options[:policy].present?
53
+ return unless resource_policy(options[:policy_resource]).send(options[:policy], *options[:policy_arguments])
54
+ end
54
55
  options[:label_params] ||= {}
55
56
  options[:label_params][:default] ||= ["menus.default.#{tag}".to_sym, tag.to_s.capitalize]
56
57
  options[:label] ||= default_label(tag, options)
@@ -59,10 +60,6 @@ module LinkedRails
59
60
  LinkedRails.menus_item_class.new(resource: resource, tag: tag, parent: self, **options)
60
61
  end
61
62
 
62
- def policy_verdict(policy, options)
63
- policy.send(options[:policy], *options[:policy_arguments])
64
- end
65
-
66
63
  def resource_policy(policy_resource)
67
64
  policy_resource ||= resource
68
65
  policy_resource = instance_exec(&policy_resource) if policy_resource.respond_to?(:call)
@@ -72,14 +69,6 @@ module LinkedRails
72
69
  @resource_policy[policy_resource] ||= Pundit.policy(user_context, policy_resource)
73
70
  end
74
71
 
75
- def show_menu_item?(_tag, options)
76
- return true if options[:policy].blank?
77
-
78
- policy = resource_policy(options[:policy_resource])
79
-
80
- policy_verdict(policy, options)
81
- end
82
-
83
72
  def iri_template
84
73
  base_template = resource.send(resource.try(:singular_resource?) ? :singular_iri_template : :iri_template)
85
74
 
@@ -4,7 +4,6 @@ module LinkedRails
4
4
  class Ontology
5
5
  include ActiveModel::Model
6
6
  include LinkedRails::Model
7
- include LinkedRails::Model::Cacheable
8
7
 
9
8
  def classes
10
9
  @classes ||= LinkedRails.linked_models.map do |klass|
@@ -8,7 +8,6 @@ module LinkedRails
8
8
  policy = Pundit.policy!(user_context, child_resource)
9
9
  verdict = policy.create?
10
10
  @message = policy.message
11
- @action_status = policy.action_status
12
11
  verdict
13
12
  end
14
13
 
@@ -17,7 +17,6 @@ module LinkedRails
17
17
  has_one :collection, predicate: Vocab.as.partOf
18
18
  has_one :unfiltered_collection, predicate: Vocab.ontola[:baseCollection]
19
19
  has_one :member_sequence, predicate: Vocab.as.items
20
- has_many :members
21
20
  end
22
21
  end
23
22
  end
@@ -11,8 +11,6 @@ en:
11
11
  update:
12
12
  label: "Edit"
13
13
  success: 'Updated successfully'
14
- errors:
15
- access_denied: "You're not authorized for this action. (%{action})"
16
14
  linked_rails:
17
15
  status:
18
16
  400: "Error in request"
@@ -6,10 +6,6 @@ module LinkedRails
6
6
  extend ActiveSupport::Concern
7
7
  include ActiveSupport::Rescuable
8
8
 
9
- included do
10
- rescue_from LinkedRails::Errors::Forbidden, with: :handle_error
11
- end
12
-
13
9
  private
14
10
 
15
11
  def add_error_snackbar(error)
@@ -73,7 +69,6 @@ module LinkedRails
73
69
  'Doorkeeper::Errors::InvalidGrantReuse' => 422,
74
70
  'LinkedRails::Auth::Errors::Expired' => 410,
75
71
  'LinkedRails::Auth::Errors::Unauthorized' => 401,
76
- 'LinkedRails::Errors::Forbidden' => 403,
77
72
  'Pundit::NotAuthorizedError' => 403
78
73
  }
79
74
  end
@@ -46,22 +46,12 @@ module LinkedRails
46
46
 
47
47
  private
48
48
 
49
- def request_path_to_url(path)
50
- return path unless path.present? && URI(path).relative?
51
-
52
- port = [80, 443].include?(request.port) ? nil : request.port
53
- URI::Generic.new(request.scheme, nil, request.host, port, nil, path, nil, nil, nil).to_s
54
- end
55
-
56
49
  def build_new_resource
57
50
  controller_class.build_new(user_context: user_context)
58
51
  end
59
52
 
60
53
  def new_resource_from_parent
61
- if requested_resource.is_a?(LinkedRails.collection_class) ||
62
- requested_resource.is_a?(LinkedRails.collection_view_class)
63
- return requested_resource.child_resource
64
- end
54
+ return requested_resource.child_resource if requested_resource.is_a?(Collection)
65
55
 
66
56
  parent_resource.build_child(
67
57
  controller_class,
@@ -38,7 +38,7 @@ module LinkedRails
38
38
  params = Rails.application.routes.recognize_path(iri.to_s, method: method)
39
39
 
40
40
  route_params_to_opts(params.merge(query), iri.to_s)
41
- rescue ActionController::RoutingError, SystemStackError
41
+ rescue ActionController::RoutingError
42
42
  EMPTY_IRI_OPTS.dup
43
43
  end
44
44
 
@@ -62,7 +62,6 @@ module LinkedRails
62
62
  iri = root_relative_iri.dup
63
63
  iri.scheme = LinkedRails.scheme
64
64
  iri.host = LinkedRails.host
65
- iri.path = iri.path.presence || '/'
66
65
  iri
67
66
  end
68
67
 
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'model/actionable'
4
- require_relative 'model/cacheable'
5
4
  require_relative 'model/collections'
6
5
  require_relative 'model/dirty'
7
6
  require_relative 'model/enhancements'
@@ -46,10 +46,6 @@ module LinkedRails
46
46
  self.class.policy_class
47
47
  end
48
48
 
49
- def public_resource?
50
- false
51
- end
52
-
53
49
  def show?
54
50
  false
55
51
  end
data/lib/linked_rails.rb CHANGED
@@ -22,10 +22,6 @@ module LinkedRails
22
22
 
23
23
  mattr_accessor :whitelisted_spi_ips
24
24
  mattr_writer :host, :scheme
25
- mattr_accessor :persistent_redis_database, default: ENV['PERSISTENT_REDIS_DATABASE'].presence || 6
26
- mattr_accessor :stream_redis_database, default: ENV['STREAM_REDIS_DATABASE'].presence || 7
27
- mattr_accessor :cache_redis_database, default: ENV['CACHE_REDIS_DATABASE'].presence || 8
28
- mattr_accessor :cache_stream, default: ENV['CACHE_STREAM'].presence || 'transactions'
29
25
 
30
26
  def self.configurable_class(parent, klass, default: nil, reader: nil) # rubocop:disable Metrics/AbcSize
31
27
  method = :"#{[parent, klass.to_s.downcase].compact.join('_')}_class"
@@ -54,10 +50,8 @@ module LinkedRails
54
50
  @@scheme ||= Rails.application.routes.default_url_options[:protocol] || :http # rubocop:disable Style/ClassVars
55
51
  end
56
52
 
57
- def iri(**args)
58
- opts = {scheme: LinkedRails.scheme, host: LinkedRails.host}.merge(args)
59
- opts[:path] = opts[:path].presence || '/'
60
- RDF::URI.new(**opts)
53
+ def iri(**opts)
54
+ RDF::URI.new(**{scheme: LinkedRails.scheme, host: LinkedRails.host}.merge(opts))
61
55
  end
62
56
  end
63
57
 
@@ -90,7 +84,6 @@ ActiveSupport::Inflector.inflections do |inflect|
90
84
  inflect.acronym 'SHACL'
91
85
  end
92
86
 
93
- require 'linked_rails/errors'
94
87
  require 'linked_rails/uri_template'
95
88
  require 'linked_rails/vocab'
96
89
  require 'linked_rails/cache'
@@ -108,5 +101,3 @@ require 'linked_rails/routes'
108
101
  require 'linked_rails/serializer'
109
102
  require 'linked_rails/translate'
110
103
  require 'linked_rails/railtie'
111
- require 'linked_rails/url'
112
- require 'linked_rails/storage'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linked_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4.pre.g2c6c26e86
4
+ version: 0.0.4.pre.g2c53724b3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arthur Dingemans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-26 00:00:00.000000000 Z
11
+ date: 2022-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_response
@@ -299,10 +299,8 @@ files:
299
299
  - app/policies/linked_rails/collection/view_policy.rb
300
300
  - app/policies/linked_rails/collection_policy.rb
301
301
  - app/policies/linked_rails/enum_value_policy.rb
302
- - app/policies/linked_rails/form_policy.rb
303
302
  - app/policies/linked_rails/menus/item_policy.rb
304
303
  - app/policies/linked_rails/menus/list_policy.rb
305
- - app/policies/linked_rails/ontology_policy.rb
306
304
  - app/policies/linked_rails/sequence_policy.rb
307
305
  - app/serializers/linked_rails/actions/item_serializer.rb
308
306
  - app/serializers/linked_rails/actions/object_serializer.rb
@@ -340,7 +338,6 @@ files:
340
338
  - app/serializers/linked_rails/web_page_serializer.rb
341
339
  - app/serializers/linked_rails/web_site_serializer.rb
342
340
  - app/serializers/linked_rails/widget_serializer.rb
343
- - app/workers/linked_rails/invalidation_stream_worker.rb
344
341
  - config/initializers/inflections.rb
345
342
  - lib/generators/linked_rails/install/install_generator.rb
346
343
  - lib/generators/linked_rails/install/templates/README
@@ -390,8 +387,6 @@ files:
390
387
  - lib/linked_rails/enhancements/destroyable/controller.rb
391
388
  - lib/linked_rails/enhancements/updatable/controller.rb
392
389
  - lib/linked_rails/enhancements/updatable/serializer.rb
393
- - lib/linked_rails/errors.rb
394
- - lib/linked_rails/errors/forbidden.rb
395
390
  - lib/linked_rails/helpers/delta_helper.rb
396
391
  - lib/linked_rails/helpers/ontola_actions_helper.rb
397
392
  - lib/linked_rails/helpers/resource_helper.rb
@@ -400,7 +395,6 @@ files:
400
395
  - lib/linked_rails/middleware/linked_data_params.rb
401
396
  - lib/linked_rails/model.rb
402
397
  - lib/linked_rails/model/actionable.rb
403
- - lib/linked_rails/model/cacheable.rb
404
398
  - lib/linked_rails/model/collections.rb
405
399
  - lib/linked_rails/model/dirty.rb
406
400
  - lib/linked_rails/model/enhancements.rb
@@ -424,12 +418,10 @@ files:
424
418
  - lib/linked_rails/serializer/actionable.rb
425
419
  - lib/linked_rails/serializer/menuable.rb
426
420
  - lib/linked_rails/serializer/singularable.rb
427
- - lib/linked_rails/storage.rb
428
421
  - lib/linked_rails/test_methods.rb
429
422
  - lib/linked_rails/translate.rb
430
423
  - lib/linked_rails/types/iri_type.rb
431
424
  - lib/linked_rails/uri_template.rb
432
- - lib/linked_rails/url.rb
433
425
  - lib/linked_rails/version.rb
434
426
  - lib/linked_rails/vocab.rb
435
427
  - lib/nill_class_renderer.rb
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- class FormPolicy < LinkedRails.policy_parent_class
5
- def show?
6
- true
7
- end
8
-
9
- def public_resource?
10
- true
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- class OntologyPolicy < LinkedRails.policy_parent_class
5
- def show?
6
- true
7
- end
8
-
9
- def public_resource?
10
- true
11
- end
12
- end
13
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- class InvalidationStreamWorker < ActiveJob::Base
5
- def perform(type, iri, resource_type)
6
- entry = {
7
- type: type,
8
- resource: iri,
9
- resourceType: resource_type
10
- }
11
- id = Storage.xadd(:stream, LinkedRails.cache_stream, entry)
12
-
13
- raise('No message id returned, implies failure') if id.blank?
14
- end
15
- end
16
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Errors
5
- class Forbidden < StandardError
6
- attr_reader :query, :record, :policy, :action
7
-
8
- # @param [Hash] options
9
- # @option options [String] query The action of the request
10
- # @option options [ActiveRecord::Base] record The record that was requested
11
- # @option options [Policy] policy The policy that raised the exception
12
- # @option options [String] message Override the default error message
13
- # @return [String] the message
14
- def initialize(**options)
15
- @query = options.fetch(:query).to_s
16
- @record = options[:record]
17
- @policy = options[:policy]
18
- @action = @query[-1] == '?' ? @query[0..-2] : @query
19
- @message = options[:message]
20
-
21
- raise StandardError if @query.blank? && @message.blank?
22
-
23
- super(@message || default_message)
24
- end
25
-
26
- private
27
-
28
- def default_message
29
- I18n.t(
30
- "pundit.#{@policy.class.to_s.underscore}.#{@query}",
31
- action: @action,
32
- default: I18n.t('errors.access_denied')
33
- )
34
- end
35
- end
36
- end
37
- end
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'errors/forbidden'
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Model
5
- module Cacheable
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- if respond_to?(:after_commit)
10
- after_commit :publish_create, on: :create, if: :should_publish_changes
11
- after_commit :publish_update, on: :update, if: :should_publish_changes
12
- after_commit :publish_delete, on: :destroy, if: :should_publish_changes
13
- end
14
- end
15
-
16
- def cacheable?
17
- true
18
- end
19
-
20
- def publish_create
21
- publish_message('io.ontola.transactions.Created')
22
- end
23
-
24
- def publish_update
25
- publish_message('io.ontola.transactions.Updated')
26
- end
27
-
28
- def publish_delete
29
- publish_message('io.ontola.transactions.Deleted')
30
- end
31
-
32
- private
33
-
34
- def publish_message(type)
35
- LinkedRails::InvalidationStreamWorker.perform_now(type, iri.to_s, self.class.iri.to_s)
36
- rescue StandardError
37
- LinkedRails::InvalidationStreamWorker.perform_later(type, iri.to_s, self.class.iri.to_s)
38
- end
39
-
40
- def should_publish_changes
41
- cacheable? && !Rails.env.test?
42
- end
43
- end
44
- end
45
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'redis'
4
-
5
- module LinkedRails
6
- class Storage
7
- REDIS_DB = {
8
- cache: LinkedRails.cache_redis_database,
9
- persistent: LinkedRails.persistent_redis_database,
10
- stream: LinkedRails.stream_redis_database
11
- }.freeze
12
- KEYS = {
13
- manifest: 'cache:Manifest',
14
- redirect_exact: 'cache:Redirect:Exact',
15
- redirect_prefix: 'cache:Redirect:Prefix'
16
- }.freeze
17
-
18
- class << self
19
- %i[xadd].each do |method|
20
- define_method(method) do |db, *args|
21
- Redis.new(db: REDIS_DB.fetch(db)).send(method, *args)
22
- end
23
- end
24
-
25
- %i[hset hdel hget].each do |method|
26
- define_method(method) do |db, key, *args|
27
- Redis.new(db: REDIS_DB.fetch(db)).send(method, KEYS.fetch(key), *args)
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,11 +0,0 @@
1
- module LinkedRails
2
- class URL
3
- class << self
4
- def as_href(url)
5
- uri = URI(url)
6
- uri.path = uri.path.presence || '/'
7
- uri.to_s
8
- end
9
- end
10
- end
11
- end