hal_presenter 1.4.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/hal_presenter/attributes.rb +3 -3
- data/lib/hal_presenter/deserializer.rb +5 -6
- data/lib/hal_presenter/embedded.rb +4 -4
- data/lib/hal_presenter/links.rb +28 -22
- data/lib/hal_presenter/model.rb +24 -24
- data/lib/hal_presenter/pagination.rb +1 -4
- data/lib/hal_presenter/policy/dsl.rb +13 -54
- data/lib/hal_presenter/policy/rules.rb +87 -0
- data/lib/hal_presenter/profile.rb +1 -1
- data/lib/hal_presenter/property.rb +10 -2
- data/lib/hal_presenter/serializer.rb +39 -23
- data.tar.gz.sig +0 -0
- metadata +48 -48
- metadata.gz.sig +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d44a7bd34475ea7e7187811e8e3d4447430835e6327440a714315477b8307f2
|
4
|
+
data.tar.gz: fa9bede97a583685589e2cea815be591bbb90c45034baf4697717fb06adc5f2d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df06bf35cd4e145679e0cf40b48d6823e8caa6b72954e1cdf3383797d6925045010ac993aceca7ef29affac6a1b46468ef2c444be6da0a3a60ddae0df2b56b72
|
7
|
+
data.tar.gz: dfdf0f1603bffe9be19f803d18a6e31d83ba9ac0bcf5bdbf566760f29afec09945da2c86f33b4f676afa7ac5b0c6cf9ea63492f3a4146361c6dc32b7fa9de161
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
@@ -5,10 +5,10 @@ module HALPresenter
|
|
5
5
|
module Attributes
|
6
6
|
include SuperInit
|
7
7
|
|
8
|
-
def attribute(
|
8
|
+
def attribute(name, value = Property::NO_VALUE, **kwargs, &block)
|
9
9
|
kwargs[:context] ||= self
|
10
|
-
attributes.delete_if { |attr| attr.name ==
|
11
|
-
Property.new(
|
10
|
+
attributes.delete_if { |attr| attr.name == name }
|
11
|
+
Property.new(name, value, **kwargs, &block).tap do |attr|
|
12
12
|
attributes << attr
|
13
13
|
end
|
14
14
|
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
require 'json'
|
2
2
|
|
3
3
|
module HALPresenter
|
4
|
-
module ClassMethods
|
5
|
-
def from_hal(presenter, payload, resource = nil)
|
6
|
-
presenter.from_hal(payload, resource)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
4
|
module Deserializer
|
5
|
+
module ClassMethods
|
6
|
+
def from_hal(presenter, payload, resource = nil)
|
7
|
+
presenter.from_hal(payload, resource)
|
8
|
+
end
|
9
|
+
end
|
11
10
|
|
12
11
|
class Error < StandardError; end
|
13
12
|
|
@@ -8,16 +8,16 @@ module HALPresenter
|
|
8
8
|
class Embed < HALPresenter::Property
|
9
9
|
attr_reader :presenter_class
|
10
10
|
|
11
|
-
def initialize(name, value =
|
11
|
+
def initialize(name, value = NO_VALUE, **kwargs, &block)
|
12
12
|
@presenter_class = kwargs.delete(:presenter_class)
|
13
13
|
super(name, value, **kwargs, &block)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
def embed(
|
17
|
+
def embed(name, value = Property::NO_VALUE, **kwargs, &block)
|
18
18
|
kwargs[:context] ||= self
|
19
|
-
embedded.delete_if { |embed| embed.name ==
|
20
|
-
Embed.new(
|
19
|
+
embedded.delete_if { |embed| embed.name == name }
|
20
|
+
Embed.new(name, value, **kwargs, &block).tap do |embed|
|
21
21
|
embedded << embed
|
22
22
|
end
|
23
23
|
end
|
data/lib/hal_presenter/links.rb
CHANGED
@@ -2,21 +2,20 @@ require 'hal_presenter/property'
|
|
2
2
|
require 'hal_presenter/super_init'
|
3
3
|
|
4
4
|
module HALPresenter
|
5
|
+
module Links
|
6
|
+
include SuperInit
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
module ClassMethods
|
9
|
+
def base_href=(base)
|
10
|
+
@base_href = base&.sub(%r(/*$), '')
|
11
|
+
end
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
def href(href)
|
14
|
+
return href if (@base_href ||= '').empty?
|
15
|
+
return href if href =~ %r(\A(\w+://)?[^/])
|
16
|
+
@base_href + href
|
17
|
+
end
|
15
18
|
end
|
16
|
-
end
|
17
|
-
|
18
|
-
module Links
|
19
|
-
include SuperInit
|
20
19
|
|
21
20
|
class Link < HALPresenter::Property
|
22
21
|
attr_reader :type, :deprecation, :profile, :title
|
@@ -24,11 +23,12 @@ module HALPresenter
|
|
24
23
|
|
25
24
|
alias rel name
|
26
25
|
|
27
|
-
def initialize(rel, value =
|
26
|
+
def initialize(rel, value = NO_VALUE, **kwargs, &block)
|
28
27
|
@type = kwargs[:type].freeze
|
29
28
|
@deprecation = kwargs[:deprecation].freeze
|
30
29
|
@profile = kwargs[:profile].freeze
|
31
30
|
@title = kwargs[:title].freeze
|
31
|
+
@templated = kwargs[:templated].freeze
|
32
32
|
|
33
33
|
curie = kwargs[:curie].to_s
|
34
34
|
rel = [curie, rel.to_s].join(':') unless curie.empty?
|
@@ -46,15 +46,16 @@ module HALPresenter
|
|
46
46
|
href = value(resource, options)
|
47
47
|
return {} unless href
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
h[:deprecation] = deprecation if deprecation
|
52
|
-
h[:profile] = profile if profile
|
53
|
-
h[:title] = title if title
|
54
|
-
h[:templated] = templated if templated
|
55
|
-
end
|
49
|
+
values = href.respond_to?(:to_h) ? href.to_h : {}
|
50
|
+
values[:href] = HALPresenter.href(values[:href] || href)
|
56
51
|
|
57
|
-
{
|
52
|
+
{
|
53
|
+
type: type,
|
54
|
+
deprecation: deprecation,
|
55
|
+
profile: profile,
|
56
|
+
title: title,
|
57
|
+
templated: templated
|
58
|
+
}.compact.merge(values)
|
58
59
|
end
|
59
60
|
end
|
60
61
|
|
@@ -68,7 +69,12 @@ module HALPresenter
|
|
68
69
|
end
|
69
70
|
|
70
71
|
kwargs[:context] ||= self
|
71
|
-
|
72
|
+
rel = rel.to_sym
|
73
|
+
|
74
|
+
if rel == :self || kwargs[:replace_parent]
|
75
|
+
links.delete_if { |link| link.rel == rel }
|
76
|
+
end
|
77
|
+
|
72
78
|
Link.new(rel, value, **kwargs, &block).tap do |link|
|
73
79
|
links << link
|
74
80
|
end
|
data/lib/hal_presenter/model.rb
CHANGED
@@ -1,36 +1,36 @@
|
|
1
1
|
module HALPresenter
|
2
2
|
@presenters = {}
|
3
3
|
|
4
|
-
module
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
module Model
|
5
|
+
module ClassMethods
|
6
|
+
def register(model:, presenter:)
|
7
|
+
return unless presenter && model
|
8
|
+
@presenters[presenter] = model
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
def unregister(presenter)
|
12
|
+
@presenters.delete_if { |d,_| d == presenter }
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
def lookup_model(presenter)
|
16
|
+
@presenters[presenter]
|
17
|
+
end
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
def lookup_presenter(model)
|
20
|
+
presenters = lookup_presenters(model)
|
21
|
+
return presenters.last unless presenters.empty?
|
22
|
+
lookup_presenters(model.first).last if model.respond_to? :first
|
23
|
+
end
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
def lookup_presenters(model)
|
26
|
+
clazz = model.is_a?(Class) ? model : model.class
|
27
|
+
presenters = @presenters.select { |_d, m| m == clazz }.keys
|
28
|
+
return presenters unless presenters.empty?
|
29
|
+
return [] unless clazz < BasicObject
|
30
|
+
lookup_presenters(clazz.superclass)
|
31
|
+
end
|
30
32
|
end
|
31
|
-
end
|
32
33
|
|
33
|
-
module Model
|
34
34
|
def self.included(base)
|
35
35
|
base.extend ClassMethods
|
36
36
|
end
|
@@ -1,61 +1,13 @@
|
|
1
|
+
require 'hal_presenter/policy/rules'
|
2
|
+
|
1
3
|
module HALPresenter
|
2
4
|
module Policy
|
3
5
|
module DSL
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
def attributes
|
8
|
-
@attributes ||= Hash.new(DEFAULT_PROC)
|
9
|
-
end
|
10
|
-
|
11
|
-
def links
|
12
|
-
@links ||= Hash.new(DEFAULT_PROC)
|
13
|
-
end
|
14
|
-
|
15
|
-
def embedded
|
16
|
-
@embedded ||= Hash.new(DEFAULT_PROC)
|
17
|
-
end
|
18
|
-
|
19
|
-
private :attributes, :links, :embedded
|
20
|
-
|
21
|
-
def defaults(*types, value: false)
|
22
|
-
types.each do |t|
|
23
|
-
send(t).default= Proc.new { value }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def attribute_rule_for(name)
|
28
|
-
attributes[name]
|
29
|
-
end
|
30
|
-
|
31
|
-
def add_attribute(name, block)
|
32
|
-
attributes[name] = block
|
33
|
-
end
|
34
|
-
|
35
|
-
def link_rule_for(rel)
|
36
|
-
return links[rel] if links.key? rel
|
37
|
-
links[strip_curie(rel)]
|
38
|
-
end
|
39
|
-
|
40
|
-
def add_link(rel, block)
|
41
|
-
links[rel] = block
|
42
|
-
end
|
43
|
-
|
44
|
-
def embed_rule_for(name)
|
45
|
-
return embedded[name] if embedded.key? name
|
46
|
-
embedded[strip_curie(name)]
|
47
|
-
end
|
48
|
-
|
49
|
-
def add_embed(name, block)
|
50
|
-
embedded[name] = block
|
6
|
+
module ClassMethods
|
7
|
+
def inherited(child)
|
8
|
+
child.instance_variable_set(:@rules, rules.dup)
|
51
9
|
end
|
52
10
|
|
53
|
-
def strip_curie(rel)
|
54
|
-
rel.to_s.split(':', 2)[1]&.to_sym
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
module ClassMethods
|
59
11
|
def allow_by_default(*types)
|
60
12
|
rules.defaults(*types, value: true)
|
61
13
|
end
|
@@ -78,6 +30,14 @@ module HALPresenter
|
|
78
30
|
def rules
|
79
31
|
@rules ||= Rules.new
|
80
32
|
end
|
33
|
+
|
34
|
+
def no_transform_rels
|
35
|
+
rules.transform_rels = false
|
36
|
+
end
|
37
|
+
|
38
|
+
def transform_rels(value = true)
|
39
|
+
rules.transform_rels = !!value
|
40
|
+
end
|
81
41
|
end
|
82
42
|
|
83
43
|
def self.included(mod)
|
@@ -135,7 +95,6 @@ module HALPresenter
|
|
135
95
|
def __check(block)
|
136
96
|
!!instance_eval(&block)
|
137
97
|
end
|
138
|
-
|
139
98
|
end
|
140
99
|
end
|
141
100
|
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module HALPresenter
|
2
|
+
module Policy
|
3
|
+
class Rules
|
4
|
+
DEFAULT_PROC = Proc.new { false }
|
5
|
+
|
6
|
+
attr_accessor :transform_rels
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@transform_rels = true
|
10
|
+
end
|
11
|
+
|
12
|
+
def dup
|
13
|
+
super.tap do |copy|
|
14
|
+
copy.instance_variable_set(:@attributes, attributes.dup)
|
15
|
+
copy.instance_variable_set(:@links, links.dup)
|
16
|
+
copy.instance_variable_set(:@embedded, embedded.dup)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def defaults(*types, value: false)
|
21
|
+
types.each do |t|
|
22
|
+
send(t).default= Proc.new { value }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def attribute_rule_for(name)
|
27
|
+
attributes[name]
|
28
|
+
end
|
29
|
+
|
30
|
+
def add_attribute(name, block)
|
31
|
+
attributes[name] = block
|
32
|
+
end
|
33
|
+
|
34
|
+
def link_rule_for(rel)
|
35
|
+
rel = transform(rel)
|
36
|
+
return links[rel] if links.key? rel
|
37
|
+
|
38
|
+
links[strip_curie(rel)]
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_link(rel, block)
|
42
|
+
rel = transform(rel)
|
43
|
+
links[rel] = block
|
44
|
+
end
|
45
|
+
|
46
|
+
def embed_rule_for(name)
|
47
|
+
name = transform(name)
|
48
|
+
return embedded[name] if embedded.key? name
|
49
|
+
|
50
|
+
embedded[strip_curie(name)]
|
51
|
+
end
|
52
|
+
|
53
|
+
def add_embed(name, block)
|
54
|
+
name = transform(name)
|
55
|
+
embedded[name] = block
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def attributes
|
61
|
+
@attributes ||= Hash.new(DEFAULT_PROC)
|
62
|
+
end
|
63
|
+
|
64
|
+
def links
|
65
|
+
@links ||= Hash.new(DEFAULT_PROC)
|
66
|
+
end
|
67
|
+
|
68
|
+
def embedded
|
69
|
+
@embedded ||= Hash.new(DEFAULT_PROC)
|
70
|
+
end
|
71
|
+
|
72
|
+
def strip_curie(rel)
|
73
|
+
rel.to_s.split(':', 2)[1]&.to_sym
|
74
|
+
end
|
75
|
+
|
76
|
+
def transform_rels?
|
77
|
+
@transform_rels
|
78
|
+
end
|
79
|
+
|
80
|
+
def transform(rel)
|
81
|
+
return rel unless transform_rels?
|
82
|
+
|
83
|
+
rel.to_s.tr('-', '_').to_sym
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -4,7 +4,7 @@ module HALPresenter
|
|
4
4
|
module Profile
|
5
5
|
include SuperInit
|
6
6
|
|
7
|
-
def profile(value =
|
7
|
+
def profile(value = Property::NO_VALUE, **kwargs, &block)
|
8
8
|
if value.nil? && !block_given?
|
9
9
|
raise 'profile must be called with non nil value or be given a block'
|
10
10
|
end
|
@@ -2,9 +2,11 @@ require 'hal_presenter/lazy_evaluator'
|
|
2
2
|
|
3
3
|
module HALPresenter
|
4
4
|
class Property
|
5
|
+
NO_VALUE = Object.new.freeze
|
6
|
+
|
5
7
|
attr_reader :name, :embed_depth
|
6
8
|
|
7
|
-
def initialize(name, value =
|
9
|
+
def initialize(name, value = NO_VALUE, **kwargs, &block)
|
8
10
|
@name = name.to_sym
|
9
11
|
@value = value.freeze
|
10
12
|
@embed_depth = kwargs[:embed_depth].freeze
|
@@ -15,10 +17,16 @@ module HALPresenter
|
|
15
17
|
def value(resource = nil, options = {})
|
16
18
|
if @lazy
|
17
19
|
@lazy.evaluate(resource, options)
|
18
|
-
elsif @value
|
20
|
+
elsif @value != NO_VALUE
|
19
21
|
@value
|
20
22
|
elsif resource&.respond_to? name_without_curie
|
21
23
|
resource.public_send(name_without_curie)
|
24
|
+
else
|
25
|
+
raise ArgumentError, <<~ERR
|
26
|
+
Cannot serialize #{name.inspect}.
|
27
|
+
No value given and resource does not respond to #{name_without_curie}. Resource:
|
28
|
+
#{resource.inspect}"
|
29
|
+
ERR
|
22
30
|
end
|
23
31
|
end
|
24
32
|
|
@@ -3,28 +3,29 @@ require 'hal_presenter/pagination'
|
|
3
3
|
require 'hal_presenter/curie_collection'
|
4
4
|
|
5
5
|
module HALPresenter
|
6
|
+
module Serializer
|
7
|
+
module ClassMethods
|
8
|
+
def to_hal(resource, **options)
|
9
|
+
options = options.dup
|
10
|
+
presenter!(resource, **options).to_hal(resource, **options)
|
11
|
+
end
|
6
12
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
presenter = options.delete(:presenter)
|
12
|
-
presenter ||= HALPresenter.lookup_presenter(resource)
|
13
|
-
raise Serializer::Error, "No presenter for #{resource.class}" unless presenter
|
14
|
-
presenter.to_hal(resource, options)
|
15
|
-
end
|
13
|
+
def to_collection(resources, **options)
|
14
|
+
options = options.dup
|
15
|
+
presenter!(resources, **options).to_collection(resources, **options)
|
16
|
+
end
|
16
17
|
|
17
|
-
|
18
|
-
raise Serializer::Error, "resources is nil" if resources.nil?
|
19
|
-
options = options.dup
|
20
|
-
presenter = options.delete(:presenter)
|
21
|
-
presenter ||= HALPresenter.lookup_presenter(resources)
|
22
|
-
raise Serializer::Error, "No presenter for #{resources.first.class}" unless presenter
|
23
|
-
presenter.to_collection(resources, options)
|
24
|
-
end
|
25
|
-
end
|
18
|
+
private
|
26
19
|
|
27
|
-
|
20
|
+
def presenter!(resources, **options)
|
21
|
+
raise Serializer::Error, "resources is nil" if resources.nil?
|
22
|
+
presenter = options.delete(:presenter)
|
23
|
+
presenter ||= HALPresenter.lookup_presenter(resources)
|
24
|
+
raise Serializer::Error, "No presenter for #{resources.first.class}" unless presenter
|
25
|
+
|
26
|
+
presenter
|
27
|
+
end
|
28
|
+
end
|
28
29
|
|
29
30
|
class Error < StandardError; end
|
30
31
|
|
@@ -32,15 +33,17 @@ module HALPresenter
|
|
32
33
|
base.extend(ClassMethods)
|
33
34
|
end
|
34
35
|
|
35
|
-
def to_hal(resource = nil, options
|
36
|
+
def to_hal(resource = nil, **options)
|
36
37
|
options = options.dup
|
37
38
|
options[:_depth] ||= 0
|
38
39
|
hash = to_hash(resource, options)
|
39
40
|
move_curies_to_root! hash
|
41
|
+
return hash if options[:as_hash]
|
42
|
+
|
40
43
|
JSON.generate(hash)
|
41
44
|
end
|
42
45
|
|
43
|
-
def to_collection(resources = [], options
|
46
|
+
def to_collection(resources = [], **options)
|
44
47
|
unless can_serialize_collection?
|
45
48
|
raise Error,
|
46
49
|
"Trying to serialize a collection using #{self} which has no collection info. " \
|
@@ -51,6 +54,8 @@ module HALPresenter
|
|
51
54
|
options[:_depth] ||= 0
|
52
55
|
hash = to_collection_hash(resources, options)
|
53
56
|
move_curies_to_root! hash
|
57
|
+
return hash if options[:as_hash]
|
58
|
+
|
54
59
|
JSON.generate(hash)
|
55
60
|
end
|
56
61
|
|
@@ -68,6 +73,7 @@ module HALPresenter
|
|
68
73
|
end
|
69
74
|
|
70
75
|
def to_collection_hash(resources, options)
|
76
|
+
resources ||= []
|
71
77
|
policy = policy_for(nil, options)
|
72
78
|
properties = collection_properties
|
73
79
|
attributes = properties.attributes
|
@@ -133,9 +139,19 @@ module HALPresenter
|
|
133
139
|
|
134
140
|
def _serialize_links(links, curies, resource, policy, options)
|
135
141
|
serialized = links.each_with_object({}) do |link, hash|
|
142
|
+
rel = link.rel
|
136
143
|
next unless link.nested_depth_ok? options[:_depth]
|
137
|
-
next if policy && !policy.link?(
|
138
|
-
|
144
|
+
next if policy && !policy.link?(rel)
|
145
|
+
|
146
|
+
link_hash = link.to_h(resource, options)
|
147
|
+
next if link_hash.empty?
|
148
|
+
|
149
|
+
if hash.key? rel
|
150
|
+
hash[rel] = [hash[rel]] unless hash[rel].is_a? Array
|
151
|
+
hash[rel] << link_hash
|
152
|
+
else
|
153
|
+
hash.merge!(rel => link_hash)
|
154
|
+
end
|
139
155
|
end
|
140
156
|
curies = _serialize_curies(curies, resource, options)
|
141
157
|
serialized[:curies] = curies if curies.any?
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,115 +1,114 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hal_presenter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sammy Henningsson
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
M40=
|
13
|
+
MIIDVjCCAj6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAqMSgwJgYDVQQDDB9zYW1t
|
14
|
+
eS5oZW5uaW5nc3Nvbi9EQz1oZXkvREM9Y29tMB4XDTIyMDEzMTIwNTQxMloXDTI0
|
15
|
+
MDEzMTIwNTQxMlowKjEoMCYGA1UEAwwfc2FtbXkuaGVubmluZ3Nzb24vREM9aGV5
|
16
|
+
L0RDPWNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK+SDC1mfyhu
|
17
|
+
cJ6Va21rIHUGscEtQrdvyBqxFG1s2TgPMAv4RbqwdJVPa7kjtbCzslADlUE1oru2
|
18
|
+
C+rcJsMtVGX02ukMIPHT1OjTyy0/EMqLqSy3WeRI8APyDSxCVbe+h5BMf3zZnYfd
|
19
|
+
dR6AeG7ln09T1P/tX+9lTMc+I+DW1fUlQgY48CNUayvtJR61svXvXMrhLhi29SQi
|
20
|
+
g1qmH6Zoe22/JgH+m2JksPndY5Ep3gqfDc6Imwu2vGvmGErJD63FB0XQ/wb4WVH4
|
21
|
+
l7sHQSTfKDp8SImCt1xqNgIyjw578ZG2geGLoncuxgDrbQ/UFIJ11lDZd4vLevMh
|
22
|
+
nIxTSJpPr2cCAwEAAaOBhjCBgzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNV
|
23
|
+
HQ4EFgQUukjj1Cd2ea6IOHDLZe0ymzs2jWkwJAYDVR0RBB0wG4EZc2FtbXkuaGVu
|
24
|
+
bmluZ3Nzb25AaGV5LmNvbTAkBgNVHRIEHTAbgRlzYW1teS5oZW5uaW5nc3NvbkBo
|
25
|
+
ZXkuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQCNUrjx1+L5W9R5O5MF3fnnNIyxOXGa
|
26
|
+
qzqpmXpTd7pHUGvSzVxYM/NIkUHSSPyxLAG+RYMPJHjDOSzhLmOUbgpfOsQ8sqUP
|
27
|
+
plABBC03e/+oDwFwlHefonil+sp/AOT9TYZJQbShjKt3/X+VGzjtujJZwvKgiiP0
|
28
|
+
Ht5Q4dvW1ZqUZgvXdYM1LnCX7I3WjoRyhOwdSlaEz5gnD+KYewHiiByK1Jv2n0PG
|
29
|
+
DVzXaUnsmwP+jQ1PkDa5q8ibBzMd2c6Hmm87UDqPxZtML0bF9SjrpbyLMjwtXaMA
|
30
|
+
WDPp0ajpdUZ9GPHsrVNYXiOfQIqcmlmpYVsH1o7vuneUIcIDMrnMDChh
|
32
31
|
-----END CERTIFICATE-----
|
33
|
-
date:
|
32
|
+
date: 2022-01-31 00:00:00.000000000 Z
|
34
33
|
dependencies:
|
35
34
|
- !ruby/object:Gem::Dependency
|
36
35
|
name: rake
|
37
36
|
requirement: !ruby/object:Gem::Requirement
|
38
37
|
requirements:
|
39
|
-
- - ">="
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '10.0'
|
42
38
|
- - "~>"
|
43
39
|
- !ruby/object:Gem::Version
|
44
40
|
version: '12.0'
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '10.0'
|
45
44
|
type: :development
|
46
45
|
prerelease: false
|
47
46
|
version_requirements: !ruby/object:Gem::Requirement
|
48
47
|
requirements:
|
49
|
-
- - ">="
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
version: '10.0'
|
52
48
|
- - "~>"
|
53
49
|
- !ruby/object:Gem::Version
|
54
50
|
version: '12.0'
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '10.0'
|
55
54
|
- !ruby/object:Gem::Dependency
|
56
55
|
name: activesupport
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
58
57
|
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '4.0'
|
62
58
|
- - "~>"
|
63
59
|
- !ruby/object:Gem::Version
|
64
60
|
version: '5.0'
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '4.0'
|
65
64
|
type: :development
|
66
65
|
prerelease: false
|
67
66
|
version_requirements: !ruby/object:Gem::Requirement
|
68
67
|
requirements:
|
69
|
-
- - ">="
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
version: '4.0'
|
72
68
|
- - "~>"
|
73
69
|
- !ruby/object:Gem::Version
|
74
70
|
version: '5.0'
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '4.0'
|
75
74
|
- !ruby/object:Gem::Dependency
|
76
75
|
name: minitest
|
77
76
|
requirement: !ruby/object:Gem::Requirement
|
78
77
|
requirements:
|
79
|
-
- - ">="
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: '5.0'
|
82
78
|
- - "~>"
|
83
79
|
- !ruby/object:Gem::Version
|
84
80
|
version: '5.10'
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '5.0'
|
85
84
|
type: :development
|
86
85
|
prerelease: false
|
87
86
|
version_requirements: !ruby/object:Gem::Requirement
|
88
87
|
requirements:
|
89
|
-
- - ">="
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
version: '5.0'
|
92
88
|
- - "~>"
|
93
89
|
- !ruby/object:Gem::Version
|
94
90
|
version: '5.10'
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '5.0'
|
95
94
|
- !ruby/object:Gem::Dependency
|
96
95
|
name: byebug
|
97
96
|
requirement: !ruby/object:Gem::Requirement
|
98
97
|
requirements:
|
99
|
-
- - "
|
98
|
+
- - "~>"
|
100
99
|
- !ruby/object:Gem::Version
|
101
100
|
version: '9.0'
|
102
|
-
- - "
|
101
|
+
- - ">="
|
103
102
|
- !ruby/object:Gem::Version
|
104
103
|
version: '9.0'
|
105
104
|
type: :development
|
106
105
|
prerelease: false
|
107
106
|
version_requirements: !ruby/object:Gem::Requirement
|
108
107
|
requirements:
|
109
|
-
- - "
|
108
|
+
- - "~>"
|
110
109
|
- !ruby/object:Gem::Version
|
111
110
|
version: '9.0'
|
112
|
-
- - "
|
111
|
+
- - ">="
|
113
112
|
- !ruby/object:Gem::Version
|
114
113
|
version: '9.0'
|
115
114
|
- !ruby/object:Gem::Dependency
|
@@ -155,7 +154,7 @@ dependencies:
|
|
155
154
|
description: |
|
156
155
|
A DSL for serializing resources according to
|
157
156
|
HypertextApplicationLanguage.
|
158
|
-
email: sammy.henningsson@
|
157
|
+
email: sammy.henningsson@hey.com
|
159
158
|
executables: []
|
160
159
|
extensions: []
|
161
160
|
extra_rdoc_files: []
|
@@ -174,6 +173,7 @@ files:
|
|
174
173
|
- lib/hal_presenter/pagination.rb
|
175
174
|
- lib/hal_presenter/policy.rb
|
176
175
|
- lib/hal_presenter/policy/dsl.rb
|
176
|
+
- lib/hal_presenter/policy/rules.rb
|
177
177
|
- lib/hal_presenter/profile.rb
|
178
178
|
- lib/hal_presenter/property.rb
|
179
179
|
- lib/hal_presenter/serialize_hooks.rb
|
@@ -183,7 +183,7 @@ homepage: https://github.com/sammyhenningsson/hal_presenter
|
|
183
183
|
licenses:
|
184
184
|
- MIT
|
185
185
|
metadata: {}
|
186
|
-
post_install_message:
|
186
|
+
post_install_message:
|
187
187
|
rdoc_options: []
|
188
188
|
require_paths:
|
189
189
|
- lib
|
@@ -198,8 +198,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
198
198
|
- !ruby/object:Gem::Version
|
199
199
|
version: '0'
|
200
200
|
requirements: []
|
201
|
-
rubygems_version: 3.
|
202
|
-
signing_key:
|
201
|
+
rubygems_version: 3.1.6
|
202
|
+
signing_key:
|
203
203
|
specification_version: 4
|
204
204
|
summary: JSON HAL serializer
|
205
205
|
test_files: []
|
metadata.gz.sig
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
Q��OvOyr7q���[a������Y�vV!���5Xq�̯i����9��H�w�F���-uLK����4Dt��F?i]�lG�����OT9��,W�ȵ�
|
2
|
+
����/��5��dԜ�Ot���+���j�c�\���I7Z�L7���4m�� 0�����mb}R��A�-�����"nm4wt)N|Ѯ��8X-��+�ك��W�V�=K-���J�b��8/�H�Dj�@n�����&'�� �F@ڣ
|