hal_presenter 1.4.0 → 1.7.0

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: e0dc504f92084015f773cf97fb82e35f1e969cce9d994190ea193b9966d7fade
4
- data.tar.gz: e7dc11b0623948a02dd51e5f9fccfd912c49d26c5616ce4d61da2a656e6cc330
3
+ metadata.gz: 0d44a7bd34475ea7e7187811e8e3d4447430835e6327440a714315477b8307f2
4
+ data.tar.gz: fa9bede97a583685589e2cea815be591bbb90c45034baf4697717fb06adc5f2d
5
5
  SHA512:
6
- metadata.gz: 13dc22af8b63f4bb7c369ebcbecfcbe81df0cd88e534cd4b95bf57f337a19a359dc8a41f8df80377e8cd24e01e02b66803f209959ed304e4cdfdfd4e8cd2cbab
7
- data.tar.gz: fe8e9d146fd80980fadd22856b38467e2f2f428cd6ad00837a4bc945fe12de00e22920959a2e353ede236bd8681fb3d8ad304b4bf49e0a7cd45b0163ad10a6b7
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(*args, **kwargs, &block)
8
+ def attribute(name, value = Property::NO_VALUE, **kwargs, &block)
9
9
  kwargs[:context] ||= self
10
- attributes.delete_if { |attr| attr.name == args.first }
11
- Property.new(*args, **kwargs, &block).tap do |attr|
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 = nil, **kwargs, &block)
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(*args, **kwargs, &block)
17
+ def embed(name, value = Property::NO_VALUE, **kwargs, &block)
18
18
  kwargs[:context] ||= self
19
- embedded.delete_if { |embed| embed.name == args.first }
20
- Embed.new(*args, **kwargs, &block).tap do |embed|
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
@@ -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
- module ClassMethods
7
- def base_href=(base)
8
- @base_href = base&.sub(%r(/*$), '')
9
- end
8
+ module ClassMethods
9
+ def base_href=(base)
10
+ @base_href = base&.sub(%r(/*$), '')
11
+ end
10
12
 
11
- def href(href)
12
- return href if (@base_href ||= '').empty?
13
- return href if href =~ %r(\A(\w+://)?[^/])
14
- @base_href + href
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 = nil, **kwargs, &block)
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
- hash = {href: HALPresenter.href(href)}.tap do |h|
50
- h[:type] = type if type
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
- {rel => hash}
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
- links.delete_if { |link| link.rel == rel }
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
@@ -1,36 +1,36 @@
1
1
  module HALPresenter
2
2
  @presenters = {}
3
3
 
4
- module ClassMethods
5
- def register(model:, presenter:)
6
- return unless presenter && model
7
- @presenters[presenter] = model
8
- end
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
- def unregister(presenter)
11
- @presenters.delete_if { |d,_| d == presenter }
12
- end
11
+ def unregister(presenter)
12
+ @presenters.delete_if { |d,_| d == presenter }
13
+ end
13
14
 
14
- def lookup_model(presenter)
15
- @presenters[presenter]
16
- end
15
+ def lookup_model(presenter)
16
+ @presenters[presenter]
17
+ end
17
18
 
18
- def lookup_presenter(model)
19
- presenters = lookup_presenters(model)
20
- return presenters.last unless presenters.empty?
21
- lookup_presenters(model.first).last if model.respond_to? :first
22
- end
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
- def lookup_presenters(model)
25
- clazz = model.is_a?(Class) ? model : model.class
26
- presenters = @presenters.select { |_d, m| m == clazz }.keys
27
- return presenters unless presenters.empty?
28
- return [] unless clazz < BasicObject
29
- lookup_presenters(clazz.superclass)
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,12 +1,9 @@
1
1
  module HALPresenter
2
- module ClassMethods
2
+ class << self
3
3
  attr_accessor :paginate
4
4
  end
5
5
 
6
6
  class Pagination
7
- def self.included(base)
8
- base.extend ClassMethods
9
- end
10
7
 
11
8
  class Uri
12
9
  def self.parse(str)
@@ -1,61 +1,13 @@
1
+ require 'hal_presenter/policy/rules'
2
+
1
3
  module HALPresenter
2
4
  module Policy
3
5
  module DSL
4
- class Rules
5
- DEFAULT_PROC = Proc.new { false }
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 = nil, **kwargs, &block)
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 = nil, **kwargs, &block)
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
- module ClassMethods
8
- def to_hal(resource, options = {})
9
- raise Serializer::Error, "Resource is nil" if resource.nil?
10
- options = options.dup
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
- def to_collection(resources, options = {})
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
- module Serializer
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?(link.rel)
138
- hash.merge! link.to_h(resource, options)
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.0
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
- MIIDXjCCAkagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFzYW1t
14
- eS5oZW5uaW5nc3Nvbi9EQz1nbWFpbC9EQz1jb20wHhcNMTgwNzE2MTYzNTMzWhcN
15
- MjAwNzE2MTYzNTMzWjAsMSowKAYDVQQDDCFzYW1teS5oZW5uaW5nc3Nvbi9EQz1n
16
- bWFpbC9EQz1jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvkgwt
17
- Zn8obnCelWttayB1BrHBLUK3b8gasRRtbNk4DzAL+EW6sHSVT2u5I7Wws7JQA5VB
18
- NaK7tgvq3CbDLVRl9NrpDCDx09To08stPxDKi6kst1nkSPAD8g0sQlW3voeQTH98
19
- 2Z2H3XUegHhu5Z9PU9T/7V/vZUzHPiPg1tX1JUIGOPAjVGsr7SUetbL171zK4S4Y
20
- tvUkIoNaph+maHttvyYB/ptiZLD53WORKd4Knw3OiJsLtrxr5hhKyQ+txQdF0P8G
21
- +FlR+Je7B0Ek3yg6fEiJgrdcajYCMo8Oe/GRtoHhi6J3LsYA620P1BSCddZQ2XeL
22
- y3rzIZyMU0iaT69nAgMBAAGjgYowgYcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
23
- HQYDVR0OBBYEFLpI49QndnmuiDhwy2XtMps7No1pMCYGA1UdEQQfMB2BG3NhbW15
24
- Lmhlbm5pbmdzc29uQGdtYWlsLmNvbTAmBgNVHRIEHzAdgRtzYW1teS5oZW5uaW5n
25
- c3NvbkBnbWFpbC5jb20wDQYJKoZIhvcNAQELBQADggEBAFJZqH6sgeiTLvMLpxaK
26
- K1GaYSCyZbMutf5C3tIAgkmU5UD6B8R0bw6gTM1deM5NJ60LjzqY7rlK3YKDIbTn
27
- iXMCe9vd4yE/jb5Zi8Wk//9n8CMG68dQpBvmcQ58/M4gTtgsx+lIgXuI5dPQMmRi
28
- bhWQqqWqxT9X6njjfXFk4xn3z6mfFQNPAYqRVeTHUpXBQZPt+bYXRwHPFZGWkx4l
29
- BnuuhYKt3CR7YIgvnsQWlTAcU1Ipdayj6UfYqUtlc6cF3CL96NOx7mgZXV8URFiX
30
- ZMhjYR7sRczGJx+GxGU2EaR0bjRsPVlC4ywtFxoOfRG3WaJcpWGEoAoMJX6Z0bRv
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: 2019-12-18 00:00:00.000000000 Z
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@gmail.com
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.0.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
- Ks����� ����Iv]����?/\��j
2
- ĬEig����F�Z��}(uVUڠ�zuz�6p(-Jz��n��5d�͚���<�T�������- /�E�)#�Xy���x8�4*+)&W�&Q��T(.H��B�#�V�g�� ��M�`$�2m�;�~
1
+ Q��OvOyr7q���[a������Y�vV!���5Xq�̯i����9��Hw�F���-uLK����4Dt��F?i]�lG�����OT9� �,W�ȵ�
2
+ ����/��5��dԜ�„Ot���+���jc�\���I7ZL7���4m�� 0�����mb}R��A�-�����"nm4wt)N|Ѯ��8X-��+�ك��W�V�=K-���Jb��8/�H�Dj�@n����׬�&'�� �F@ڣ