Skip to content

Commit 699630d

Browse files
kyreevesshishirmk
authored andcommitted
create link class
1 parent f86a892 commit 699630d

3 files changed

Lines changed: 41 additions & 10 deletions

File tree

lib/fast_jsonapi/link.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
module FastJsonapi
2+
class Link
3+
attr_reader :key, :method, :conditional_proc
4+
5+
def initialize(key:, method:, options: {})
6+
@key = key
7+
@method = method
8+
@conditional_proc = options[:if]
9+
end
10+
11+
def serialize(record, serialization_params, output_hash)
12+
if include_link?(record, serialization_params)
13+
output_hash[key] = if method.is_a?(Proc)
14+
method.arity == 1 ? method.call(record) : method.call(record, serialization_params)
15+
else
16+
record.public_send(method)
17+
end
18+
end
19+
end
20+
21+
def include_link?(record, serialization_params)
22+
if conditional_proc.present?
23+
conditional_proc.call(record, serialization_params)
24+
else
25+
true
26+
end
27+
end
28+
end
29+
end

lib/fast_jsonapi/object_serializer.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
require 'active_support/inflector'
66
require 'fast_jsonapi/attribute'
77
require 'fast_jsonapi/relationship'
8+
require 'fast_jsonapi/link'
89
require 'fast_jsonapi/serialization_core'
910

1011
module FastJsonapi
@@ -238,11 +239,16 @@ def fetch_polymorphic_option(options)
238239
{}
239240
end
240241

241-
def link(link_name, link_method_name = nil, &block)
242+
def link(link_name, link_method_name = nil, options = {}, &block)
242243
self.data_links = {} if self.data_links.nil?
243244
link_method_name = link_name if link_method_name.nil?
244245
key = run_key_transform(link_name)
245-
self.data_links[key] = block || link_method_name
246+
247+
self.data_links[key] = Link.new(
248+
key: key,
249+
method: block || link_method_name,
250+
options: options
251+
)
246252
end
247253

248254
def validate_includes!(includes)

lib/fast_jsonapi/serialization_core.rb

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,14 @@ def id_hash(id, record_type, default_return=false)
3535
end
3636

3737
def links_hash(record, params = {})
38-
data_links.each_with_object({}) do |(key, method), link_hash|
39-
link_hash[key] = if method.is_a?(Proc)
40-
method.arity == 1 ? method.call(record) : method.call(record, params)
41-
else
42-
record.public_send(method)
43-
end
38+
data_links.each_with_object({}) do |(_k, link), hash|
39+
link.serialize(record, params, hash)
4440
end
4541
end
4642

4743
def attributes_hash(record, params = {})
48-
attributes_to_serialize.each_with_object({}) do |(key, attribute), attr_hash|
49-
attribute.serialize(record, params, attr_hash)
44+
attributes_to_serialize.each_with_object({}) do |(_k, attribute), hash|
45+
attribute.serialize(record, params, hash)
5046
end
5147
end
5248

0 commit comments

Comments
 (0)