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 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@ڣ