linked_rails 0.0.4.pre.g792a1b887 → 0.0.4.pre.g92825d924

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: '08ba6004f613d790e9e72373ab195c75e48cfbdc0b077ef2002a4407c1e6a4fb'
4
- data.tar.gz: 40b65c9ae53172a0104b23f011f5852f105977b2f1061838cc3f70c0176b0992
3
+ metadata.gz: 2dfbd0d96709d5036bcfcb422c88bf39e1c8c006ae4a4e5d6c8dfabc7d45cbb7
4
+ data.tar.gz: b5629f658ccf27bcd7ca9605d001668f55df2d5b311ce170a20c68a7cc895057
5
5
  SHA512:
6
- metadata.gz: c2cabf624d87d9cce473d3c7ccceb278c7b00caf46532e2a71a2ab814d0d0a9b69bbeceff6a23bb9d2532f8aba654133bb2f94f420bfe8be1e201ee19bf3dcae
7
- data.tar.gz: 8d6863da3650c6261802d1045e908a4d58adda4bce0f6d5db2833677aea6a69052e2025d461ee92d6d64361c34c18dfa13dd70efcbbff03b51e965b3d60be8a4
6
+ metadata.gz: bd523b32c77f3836257b1821b0a70fe4fcd9e6ab75bf39366501e75104aed3fe92ab9a690468051aacdace53ae5b79182642d3a55147da0d409f107fa47e1e7f
7
+ data.tar.gz: 220bac95f7fc0f3ca454e4dc7e6ca9953afc60e0e8230c497c22a8751cdc78a1c654760fa57908f2b4c716b382e308a371f104b8b48db027d081f4e1db3e8f3b
@@ -98,8 +98,6 @@ module LinkedRails
98
98
  params = param.permit(:include, :iri)
99
99
  params[:iri] = URI(params[:iri])
100
100
  params
101
- rescue URI::InvalidURIError
102
- params.except(:iri)
103
101
  end
104
102
 
105
103
  def resource_response_body(iri, rack_body, status)
@@ -163,17 +161,13 @@ module LinkedRails
163
161
 
164
162
  resource_response(
165
163
  iri,
166
- body: response_from_resource_body(include, iri, resource, status),
164
+ body: include && status == 200 ? resource_body(resource) : nil,
167
165
  cache: resource_cache_control(resource.try(:cacheable?), status, resource_policy),
168
166
  language: I18n.locale,
169
167
  status: status
170
168
  )
171
169
  end
172
170
 
173
- def response_from_resource_body(include, _iri, resource, status)
174
- include && status == 200 ? resource_body(resource) : nil
175
- end
176
-
177
171
  def term_from_vocab(iri)
178
172
  vocab = Vocab.for(iri)
179
173
  tag = iri.to_s.split(vocab.to_s).last
@@ -251,7 +245,7 @@ module LinkedRails
251
245
 
252
246
  def sanitized_relative_path(iri) # rubocop:disable Metrics/AbcSize
253
247
  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)
248
+ uri = URI(LinkedRails.iri.path.present? ? iri.to_s.split("#{LinkedRails.iri.path}/").last : iri)
255
249
 
256
250
  [uri.path, uri.query].compact.join('?')
257
251
  end
@@ -61,17 +61,15 @@ module LinkedRails
61
61
  end
62
62
 
63
63
  def object
64
- object_from_var || resource
64
+ @object = list.instance_exec(&@object) if @object.respond_to?(:call)
65
+
66
+ @object || resource
65
67
  end
66
68
 
67
69
  def object_iri
68
70
  object&.iri&.anonymous? ? anonymous_object_iri : object&.iri
69
71
  end
70
72
 
71
- def object_root_relative_iri
72
- RDF::URI(object_iri.to_s.split(LinkedRails.iri.to_s).second)
73
- end
74
-
75
73
  def parent
76
74
  return @parent if instance_variable_defined?(:@parent)
77
75
 
@@ -154,12 +152,6 @@ module LinkedRails
154
152
  LinkedRails.translate(:action, :label, self)
155
153
  end
156
154
 
157
- def object_from_var
158
- return @object unless @object.respond_to?(:call)
159
-
160
- @object = list.instance_exec(&@object)
161
- end
162
-
163
155
  def policy_expired?
164
156
  @policy_expired ||= policy && resource_policy.try(:expired?)
165
157
  end
@@ -195,7 +187,7 @@ module LinkedRails
195
187
 
196
188
  def target_url_fallback # rubocop:disable Metrics/AbcSize
197
189
  base = (resource.try(:singular_resource?) ? resource.singular_iri : resource.iri).dup
198
- base.path = "#{base.path.chomp('/')}/#{target_path}" if target_path.present?
190
+ base.path = "#{base.path}/#{target_path}" if target_path.present?
199
191
  base.query = Rack::Utils.parse_nested_query(base.query).merge(target_query).to_param if target_query.present?
200
192
  base
201
193
  end
@@ -12,8 +12,8 @@ module LinkedRails
12
12
  alias parent action
13
13
  delegate :object, to: :action
14
14
 
15
- def root_relative_iri
16
- action.object_root_relative_iri
15
+ def iri
16
+ action.object_iri
17
17
  end
18
18
 
19
19
  class << self
@@ -30,10 +30,7 @@ module LinkedRails
30
30
 
31
31
  parent = parent_from_params!(params, user_context)
32
32
 
33
- object = parent&.object
34
- object.instance_variable_set(:@iri, parent.object_iri)
35
- object.instance_variable_set(:@root_relative_iri, parent.object_root_relative_iri)
36
- object
33
+ new(action: parent) if parent.object.anonymous_iri?
37
34
  end
38
35
  end
39
36
  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
@@ -76,19 +75,19 @@ module LinkedRails
76
75
  end
77
76
 
78
77
  def iris_from_scope?
79
- members_query.is_a?(ActiveRecord::Relation) && !polymorphic_collection?(members_query.klass)
78
+ members_query.is_a?(ActiveRecord::Relation) && !polymorphic_collection?
80
79
  end
81
80
 
82
81
  def members_array
83
82
  members_query.to_a
84
83
  end
85
84
 
86
- def polymorphic_collection?(klass)
87
- column = klass.inheritance_column
88
- polymorphic = klass.columns_hash.include?(column)
85
+ def polymorphic_collection?
86
+ column = association_class.inheritance_column
87
+ polymorphic = association_class.columns_hash.include?(column)
89
88
  return false unless polymorphic
90
89
 
91
- return true if klass.descends_from_active_record?
90
+ return true if association_class.descends_from_active_record?
92
91
 
93
92
  members_query.where_values_hash.include?(column) &&
94
93
  members_query.where_values_hash[column] != association_class.to_s
@@ -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
@@ -120,7 +120,7 @@ module LinkedRails
120
120
 
121
121
  def has_many(key, **opts)
122
122
  opts[:input_field] = Form::Field::AssociationInput
123
- opts[:max_count] ||= 99
123
+ opts[:max_count] = 99
124
124
  field(key, **opts)
125
125
  end
126
126
 
@@ -9,7 +9,9 @@ module LinkedRails
9
9
  Storage.hset(
10
10
  :persistent,
11
11
  :manifest,
12
- URL.as_href(LinkedRails.iri) => web_manifest.to_json
12
+ {
13
+ LinkedRails.iri.to_s => web_manifest.to_json
14
+ }
13
15
  )
14
16
  end
15
17
 
@@ -41,7 +43,7 @@ module LinkedRails
41
43
  def blob_preview_iri
42
44
  return unless ActiveStorage::Blob.service.present?
43
45
 
44
- "#{LinkedRails.iri(path: 'rails/active_storage/blobs/redirect')}/{signed_id}/preview"
46
+ LinkedRails.iri(path: 'rails/active_storage/blobs/redirect/{signed_id}/preview')
45
47
  end
46
48
 
47
49
  def blob_upload_iri
@@ -138,7 +140,7 @@ module LinkedRails
138
140
 
139
141
  def web_manifest_sw_section
140
142
  {
141
- src: "#{scope.chomp('/')}/sw.js",
143
+ src: "#{scope}/sw.js",
142
144
  scope: scope
143
145
  }
144
146
  end
@@ -161,19 +163,13 @@ module LinkedRails
161
163
 
162
164
  class << self
163
165
  def destroy(iri)
164
- Storage.hdel(:persistent, :manifest, URL.as_href(iri))
166
+ Storage.hdel(:persistent, :manifest, iri)
165
167
  end
166
168
 
167
169
  def move(from, to)
168
- Storage.hset(
169
- :persistent,
170
- :redirect_prefix,
171
- URL.as_href(from) => URL.as_href(to)
172
- )
170
+ data = Storage.hget(:persistent, :manifest, from)
173
171
 
174
- data = Storage.hget(:persistent, :manifest, URL.as_href(from))
175
-
176
- Storage.hset(:persistent, :manifest, URL.as_href(to), data) if data
172
+ Storage.hset(:persistent, :manifest, to, data) if data
177
173
 
178
174
  destroy(from)
179
175
  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
@@ -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
 
@@ -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
 
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ module Actions
5
+ class ObjectSerializer < LinkedRails.serializer_parent_class
6
+ has_one :object, predicate: Vocab.owl.sameAs
7
+ end
8
+ end
9
+ end
@@ -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
@@ -8,7 +8,7 @@ module LinkedRails
8
8
  resource: iri,
9
9
  resourceType: resource_type
10
10
  }
11
- id = Storage.xadd(:stream, LinkedRails.cache_stream, entry)
11
+ id = Storage.xadd(:stream, entry)
12
12
 
13
13
  raise('No message id returned, implies failure') if id.blank?
14
14
  end
@@ -8,9 +8,7 @@ module LinkedRails
8
8
  end
9
9
 
10
10
  def invalidate_collection_delta(collection)
11
- iri = collection.is_a?(RDF::Resource) ? collection : collection.iri
12
-
13
- [Vocab.sp[:Variable], Vocab.ontola[:baseCollection], iri, delta_iri(:invalidate)]
11
+ [Vocab.sp[:Variable], Vocab.ontola[:baseCollection], collection.iri, delta_iri(:invalidate)]
14
12
  end
15
13
 
16
14
  def invalidate_parent_collections_delta(resource)
@@ -58,10 +58,7 @@ module LinkedRails
58
58
  end
59
59
 
60
60
  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
61
+ return requested_resource.child_resource if requested_resource.is_a?(Collection)
65
62
 
66
63
  parent_resource.build_child(
67
64
  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
 
@@ -17,6 +17,8 @@ module LinkedRails
17
17
  true
18
18
  end
19
19
 
20
+ private
21
+
20
22
  def publish_create
21
23
  publish_message('io.ontola.transactions.Created')
22
24
  end
@@ -29,14 +31,14 @@ module LinkedRails
29
31
  publish_message('io.ontola.transactions.Deleted')
30
32
  end
31
33
 
32
- private
33
-
34
34
  def publish_message(type)
35
35
  LinkedRails::InvalidationStreamWorker.perform_now(type, iri.to_s, self.class.iri.to_s)
36
36
  rescue StandardError
37
37
  LinkedRails::InvalidationStreamWorker.perform_later(type, iri.to_s, self.class.iri.to_s)
38
38
  end
39
39
 
40
+ private
41
+
40
42
  def should_publish_changes
41
43
  cacheable? && !Rails.env.test?
42
44
  end
@@ -70,9 +70,7 @@ module LinkedRails
70
70
 
71
71
  module ClassMethods
72
72
  def collection_iri(**opts)
73
- fragment = opts.delete(:fragment)
74
-
75
- LinkedRails.iri(path: collection_root_relative_iri(**opts), fragment: fragment)
73
+ LinkedRails.iri(path: collection_root_relative_iri(**opts))
76
74
  end
77
75
 
78
76
  # Sets the defaults for all collections for this class.
@@ -10,7 +10,7 @@ module LinkedRails
10
10
  end
11
11
 
12
12
  def anonymous_iri?
13
- self.class < ActiveRecord::Base && new_record? && @iri.blank?
13
+ self.class < ActiveRecord::Base && new_record?
14
14
  end
15
15
 
16
16
  # @return [RDF::URI].
@@ -44,12 +44,7 @@ module LinkedRails
44
44
 
45
45
  # @return [RDF::URI]
46
46
  def root_relative_iri(**opts)
47
- return @root_relative_iri if opts.blank? && @root_relative_iri.present?
48
-
49
- root_relative_iri = RDF::URI(expand_iri_template(**iri_opts.merge(opts)))
50
- @root_relative_iri = root_relative_iri if opts.blank?
51
-
52
- root_relative_iri
47
+ RDF::URI(expand_iri_template(**iri_opts.merge(opts)))
53
48
  end
54
49
 
55
50
  # @return [String, Symbol]
@@ -67,7 +62,6 @@ module LinkedRails
67
62
  iri = root_relative_iri.dup
68
63
  iri.scheme = LinkedRails.scheme
69
64
  iri.host = LinkedRails.host
70
- iri.path = iri.path.presence || '/'
71
65
  iri
72
66
  end
73
67
 
@@ -118,13 +118,9 @@ module LinkedRails
118
118
  end
119
119
 
120
120
  def parse_attribute(klass, field_options, value)
121
- [field_options.key, parse_attribute_value(klass, field_options, value)]
122
- end
123
-
124
- def parse_attribute_value(klass, field_options, value)
125
- return nil if value == Vocab.libro[:null]
121
+ parsed_value = parse_enum_attribute(klass, field_options.key, value) || value
126
122
 
127
- (parse_enum_attribute(klass, field_options.key, value) || value).to_s
123
+ [field_options.key, parsed_value.to_s]
128
124
  end
129
125
 
130
126
  def parse_enum_attribute(klass, key, value)
@@ -137,15 +133,9 @@ module LinkedRails
137
133
 
138
134
  def parse_iri_param(iri, reflection)
139
135
  key = foreign_key_for_reflection(reflection)
140
- return unless key
136
+ value = parse_iri_param_value(iri, reflection) if key
141
137
 
142
- if iri == Vocab.libro[:null]
143
- [key, nil]
144
- else
145
- value = parse_iri_param_value(iri, reflection)
146
-
147
- [key, value.to_s] if value
148
- end
138
+ [key, value.to_s] if value
149
139
  end
150
140
 
151
141
  def parse_iri_param_value(iri, reflection)
@@ -15,10 +15,10 @@ module LinkedRails
15
15
 
16
16
  module ClassMethods
17
17
  def action_triples(object, _params)
18
- if named_object?(object) || object.try(:singular_resource?)
19
- object.try(:action_triples) || []
20
- else
18
+ if object.iri.anonymous? && !object.try(:singular_resource?)
21
19
  []
20
+ else
21
+ object.try(:action_triples) || []
22
22
  end
23
23
  end
24
24
  end
@@ -115,13 +115,7 @@ module LinkedRails
115
115
  collection_name = "#{name.to_s.singularize}_collection"
116
116
  opts[:association] ||= name
117
117
  opts[:polymorphic] ||= true
118
-
119
- action_object = opts.delete(:action_object)
120
- opts[:if] ||= -> (object) {
121
- return action_object if object.iri.try(:path)&.end_with?('/action_object')
122
-
123
- named_object?(object)
124
- }
118
+ opts[:if] ||= method(:named_object?)
125
119
 
126
120
  collection_opts = {}
127
121
  collection_opts[:page_size] = opts.delete(:page_size) if opts.key?(:page_size)
@@ -4,27 +4,26 @@ require 'redis'
4
4
 
5
5
  module LinkedRails
6
6
  class Storage
7
- REDIS_DB = {
8
- cache: LinkedRails.cache_redis_database,
9
- persistent: LinkedRails.persistent_redis_database,
10
- stream: LinkedRails.stream_redis_database
7
+ CLIENT = {
8
+ cache: Redis.new(db: LinkedRails.cache_redis_database),
9
+ persistent: Redis.new(db: LinkedRails.persistent_redis_database),
10
+ stream: Redis.new(db: LinkedRails.stream_redis_database)
11
11
  }.freeze
12
12
  KEYS = {
13
13
  manifest: 'cache:Manifest',
14
- redirect_exact: 'cache:Redirect:Exact',
15
- redirect_prefix: 'cache:Redirect:Prefix'
14
+ redirect: 'cache:Redirect'
16
15
  }.freeze
17
16
 
18
17
  class << self
19
18
  %i[xadd].each do |method|
20
19
  define_method(method) do |db, *args|
21
- Redis.new(db: REDIS_DB.fetch(db)).send(method, *args)
20
+ CLIENT.fetch(db).send(method, *args)
22
21
  end
23
22
  end
24
23
 
25
24
  %i[hset hdel hget].each do |method|
26
25
  define_method(method) do |db, key, *args|
27
- Redis.new(db: REDIS_DB.fetch(db)).send(method, KEYS.fetch(key), *args)
26
+ CLIENT.fetch(db).send(method, KEYS.fetch(key), *args)
28
27
  end
29
28
  end
30
29
  end
data/lib/linked_rails.rb CHANGED
@@ -54,10 +54,8 @@ module LinkedRails
54
54
  @@scheme ||= Rails.application.routes.default_url_options[:protocol] || :http # rubocop:disable Style/ClassVars
55
55
  end
56
56
 
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)
57
+ def iri(**opts)
58
+ RDF::URI.new(**{scheme: LinkedRails.scheme, host: LinkedRails.host}.merge(opts))
61
59
  end
62
60
  end
63
61
 
@@ -108,5 +106,4 @@ require 'linked_rails/routes'
108
106
  require 'linked_rails/serializer'
109
107
  require 'linked_rails/translate'
110
108
  require 'linked_rails/railtie'
111
- require 'linked_rails/url'
112
109
  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.g792a1b887
4
+ version: 0.0.4.pre.g92825d924
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-09-09 00:00:00.000000000 Z
11
+ date: 2022-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_response
@@ -305,6 +305,7 @@ files:
305
305
  - app/policies/linked_rails/ontology_policy.rb
306
306
  - app/policies/linked_rails/sequence_policy.rb
307
307
  - app/serializers/linked_rails/actions/item_serializer.rb
308
+ - app/serializers/linked_rails/actions/object_serializer.rb
308
309
  - app/serializers/linked_rails/collection/filter_field_serializer.rb
309
310
  - app/serializers/linked_rails/collection/filter_option_serializer.rb
310
311
  - app/serializers/linked_rails/collection/filter_serializer.rb
@@ -428,7 +429,6 @@ files:
428
429
  - lib/linked_rails/translate.rb
429
430
  - lib/linked_rails/types/iri_type.rb
430
431
  - lib/linked_rails/uri_template.rb
431
- - lib/linked_rails/url.rb
432
432
  - lib/linked_rails/version.rb
433
433
  - lib/linked_rails/vocab.rb
434
434
  - lib/nill_class_renderer.rb
@@ -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