hal_presenter 0.4.3 → 0.5.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: 87410b9fd22646e39f88be76f6643df56f195aaa1b5301a7e68a65b750bcf90f
4
- data.tar.gz: 06f256252ca7d7db3529b5d065717fe2d382345f91c83bd68fc650bf6ed2c179
3
+ metadata.gz: 3c2260ced3e580fbed871cd6926b0d4429b8e3db3f79584bdbc5740561ef402f
4
+ data.tar.gz: f65027a7452a434c21bc266ecd862a2fce7a147a2fd7b73938fc6a577c425946
5
5
  SHA512:
6
- metadata.gz: 4314d9b1e1428bfbbd5b969cc8501f28401eef04a3ab4857dccc4a03f7fb4835efe72530f15f1c529bf0b847b9aa6894cc84ded10712e7258c6a76d2731dc2ef
7
- data.tar.gz: 295a1112d0e103bf536357d2f221191311c592fdc614bfd26b2bfbb350fa0cd7e25ff9ac3804d89ff2e22cd1b0b788e2a60d63577e8ce324b107a51fe72d125e
6
+ metadata.gz: 7fec5bb05a99d8db7439c8d84adf6803c4253d288dd7777235912a8f08b0de88639bb17e8d7fe53e3d1d78568e102422b5813c2e70e99f4a891ac4a86a296f3e
7
+ data.tar.gz: e4ce6d2d6ce31a4059b22ac7329dfb38e3324ba7b68c9e84183b5f03d8f5f779bc62114117056b96586f9c8d67c77c30928753c09d219ced9af9125a3987d529
checksums.yaml.gz.sig CHANGED
@@ -1,4 +1,2 @@
1
- i'�{
2
- }֤.�Q�ovv��:M϶��h-b,;���Kg^T5<���>�!�����lrnWEU���XPqTAu��f>��%�>��d���e6��J=�B��gj�����X��|
3
- ����)A)�r�<]���kk1p#���0��H2(4���8��Z0%�� ;����C���F
4
- ��n�\���^�3���ք�:b�J~F7�D�p���w�Vŏ���N����+Q��FbJ
1
+ (r��8��Q?YT3H����v8JG��ޭ"�zU�íӖ=��k�t٪�cI�����XyS5�6m(��V�z&ZޭE#�2���� JS�(X����b��{F=w�x��lz_s���`
2
+ ]D�|�U=�xF)L�1�2��8�g�),Qܳ#!˼ W��<������m�є
@@ -2,10 +2,10 @@ require 'hal_presenter/property'
2
2
 
3
3
  module HALPresenter
4
4
  module Attributes
5
- def attribute(*args, &block)
5
+ def attribute(*args, **kw_args, &block)
6
6
  @_attributes ||= init_attributes
7
7
  @_attributes = @_attributes.reject { |attr| attr.name == args.first }
8
- @_attributes << Property.new(*args, &block)
8
+ @_attributes << Property.new(*args, **kw_args, &block)
9
9
  end
10
10
 
11
11
  protected
@@ -3,7 +3,7 @@ require 'hal_presenter/property'
3
3
  module HALPresenter
4
4
  module Collection
5
5
 
6
- class CollectionParameters
6
+ class Properties
7
7
  include Attributes
8
8
  include Links
9
9
  include Curies
@@ -31,25 +31,25 @@ module HALPresenter
31
31
  end
32
32
 
33
33
  def collection(of:, &block)
34
- @_parameters = CollectionParameters.new(of, self, &block)
34
+ @_collection_properties = Properties.new(of, self, &block)
35
35
  end
36
36
 
37
37
  protected
38
38
 
39
- def collection_parameters
40
- @_parameters ||= init_collection_params
39
+ def collection_properties
40
+ @_collection_properties ||= init_collection_params
41
41
  end
42
42
 
43
43
  def can_serialize_collection?
44
- !collection_parameters.nil?
44
+ !collection_properties.nil?
45
45
  end
46
46
 
47
47
  private
48
48
 
49
49
  def init_collection_params
50
50
  return unless Class === self
51
- if superclass.respond_to?(:collection_parameters, true)
52
- superclass.collection_parameters
51
+ if superclass.respond_to?(:collection_properties, true)
52
+ superclass.collection_properties
53
53
  end
54
54
  end
55
55
  end
@@ -2,13 +2,13 @@ require 'hal_presenter/property'
2
2
 
3
3
  module HALPresenter
4
4
  module Curies
5
- def curie(rel, value = nil, &block)
5
+ def curie(rel, value = nil, **kw_args, &block)
6
6
  if value.nil? && !block_given?
7
7
  raise 'curie must be called with non nil value or be given a block'
8
8
  end
9
9
  @_curies ||= init_curies
10
10
  @_curies = @_curies.reject { |curie| curie.name == rel }
11
- @_curies << Property.new(rel, value, &block)
11
+ @_curies << Property.new(rel, value, **kw_args, &block)
12
12
  end
13
13
 
14
14
  protected
@@ -67,7 +67,7 @@ module HALPresenter
67
67
  end
68
68
 
69
69
  def deserialize_collection(hash, resource)
70
- hash['_embedded'][collection_parameters.name].each do |resource_hash|
70
+ hash['_embedded'][collection_properties.name].each do |resource_hash|
71
71
  resource << from_hash(resource_hash, nil)
72
72
  end
73
73
  end
@@ -75,7 +75,7 @@ module HALPresenter
75
75
  private
76
76
 
77
77
  def deserialize_as_collection?(hash)
78
- name = collection_parameters&.name
78
+ name = collection_properties&.name
79
79
  # return true/false (Hash#key? returns nil if not found..)
80
80
  name && hash['_embedded']&.key?(name) || false
81
81
  end
@@ -5,16 +5,16 @@ module HALPresenter
5
5
  class Embed < HALPresenter::Property
6
6
  attr_reader :presenter_class
7
7
 
8
- def initialize(name, value = nil, presenter_class: nil, decorator_class: nil, &block)
9
- super(name, value, &block)
10
- @presenter_class = presenter_class || decorator_class
8
+ def initialize(name, value = nil, **kw_args, &block)
9
+ @presenter_class = kw_args.delete(:presenter_class)
10
+ super(name, value, **kw_args, &block)
11
11
  end
12
12
  end
13
13
 
14
- def embed(*args, &block)
14
+ def embed(*args, **kw_args, &block)
15
15
  @_embedded ||= init_embedded
16
16
  @_embedded = @_embedded.reject { |embed| embed.name == args.first }
17
- @_embedded << Embed.new(*args, &block)
17
+ @_embedded << Embed.new(*args, **kw_args, &block)
18
18
  end
19
19
 
20
20
  protected
@@ -16,12 +16,12 @@ module HALPresenter
16
16
 
17
17
  class Link < HALPresenter::Property
18
18
  attr_reader :http_method
19
- def initialize(rel, value = nil, http_method: nil, &block)
19
+ def initialize(rel, value = nil, **kw_args, &block)
20
20
  if value.nil? && !block_given?
21
21
  raise 'link must be called with non nil value or be given a block'
22
22
  end
23
- @http_method = http_method
24
- super(rel, value, &block)
23
+ @http_method = kw_args.delete(:method) || kw_args.delete(:methods)
24
+ super(rel, value, **kw_args, &block)
25
25
  end
26
26
 
27
27
  def rel
@@ -29,10 +29,10 @@ module HALPresenter
29
29
  end
30
30
  end
31
31
 
32
- def link(rel, value = nil, method: nil, methods: nil, &block)
32
+ def link(rel, value = nil, **kw_args, &block)
33
33
  @_links ||= init_links
34
34
  @_links = @_links.reject { |link| link.rel == rel }
35
- @_links << Link.new(rel, value, http_method: method || methods, &block)
35
+ @_links << Link.new(rel, value, **kw_args, &block)
36
36
  end
37
37
 
38
38
  protected
@@ -1,12 +1,13 @@
1
1
  module HALPresenter
2
2
  class Property
3
- attr_reader :name, :resource, :options
3
+ attr_reader :name, :resource, :embed_depth, :options
4
4
 
5
5
  alias :resources :resource
6
6
 
7
- def initialize(name, value = nil, &block)
7
+ def initialize(name, value = nil, embed_depth: nil, &block)
8
8
  @name = name
9
9
  @value = value
10
+ @embed_depth = embed_depth
10
11
  @scope = nil
11
12
  return unless block_given?
12
13
  @scope = eval 'self', block.binding
@@ -24,6 +24,7 @@ module HALPresenter
24
24
  class Error < StandardError; end
25
25
 
26
26
  def to_hal(resource = nil, options = {})
27
+ options[:_depth] ||= 0
27
28
  hash = to_hash(resource, options)
28
29
  JSON.generate(hash)
29
30
  end
@@ -35,6 +36,7 @@ module HALPresenter
35
36
  "Add a 'collection' spec to the serializer or use another serializer"
36
37
  end
37
38
  options[:paginate] = HALPresenter.paginate unless options.key? :paginate
39
+ options[:_depth] ||= 0
38
40
  hash = to_collection_hash(resources, options)
39
41
  JSON.generate(hash)
40
42
  end
@@ -42,8 +44,7 @@ module HALPresenter
42
44
  protected
43
45
 
44
46
  def to_hash(resource, options)
45
- policy = policy_class&.new(options[:current_user], resource, options)
46
-
47
+ policy = policy_for(resource, options)
47
48
  {}.tap do |serialized|
48
49
  serialized.merge! serialize_attributes(resource, policy, options)
49
50
  serialized.merge! serialize_links(resource, policy, options)
@@ -54,22 +55,24 @@ module HALPresenter
54
55
  end
55
56
 
56
57
  def to_collection_hash(resources, options)
57
- policy = policy_class&.new(options[:current_user], nil, options)
58
- parameters = collection_parameters
59
- links = parameters.links
60
- curies = parameters.curies
58
+ policy = policy_for(nil, options)
59
+ properties = collection_properties
60
+ attributes = properties.attributes
61
+ links = properties.links
62
+ curies = properties.curies
63
+ embedded = properties.embedded
61
64
  {}.tap do |serialized|
62
- serialized.merge! _serialize_attributes(parameters.attributes, resources, policy, options)
65
+ serialized.merge! _serialize_attributes(attributes, resources, policy, options)
63
66
  serialized.merge! _serialize_links(links, curies, resources, policy, options)
64
67
  Pagination.paginate!(serialized, resources) if options[:paginate]
65
68
 
66
69
  # Embedded from collection block
67
- embedded = _serialize_embedded(parameters.embedded, resources, policy, options)
70
+ embedded = _serialize_embedded(embedded, resources, policy, options)
68
71
  serialized[:_embedded] = embedded[:_embedded] || {}
69
72
 
70
73
  # Embedded resources
71
74
  serialized_resources = resources.map { |resource| to_hash(resource, options) }
72
- serialized[:_embedded].merge!({parameters.name => serialized_resources })
75
+ serialized[:_embedded].merge!({properties.name => serialized_resources })
73
76
  end
74
77
  end
75
78
 
@@ -98,6 +101,7 @@ module HALPresenter
98
101
 
99
102
  def _serialize_attributes(attributes, resource, policy, options)
100
103
  attributes.each_with_object({}) do |attribute, hash|
104
+ next unless nested_depth_ok?(attribute, options[:_depth])
101
105
  next if policy && !policy.attribute?(attribute.name)
102
106
  hash[attribute.name] = attribute.value(resource, options)
103
107
  end
@@ -105,6 +109,7 @@ module HALPresenter
105
109
 
106
110
  def _serialize_links(links, curies, resource, policy, options)
107
111
  serialized = links.each_with_object({}) do |link, hash|
112
+ next unless nested_depth_ok?(link, options[:_depth])
108
113
  next if policy && !policy.link?(link.rel)
109
114
  href = link.value(resource, options) or next
110
115
  hash[link.rel] = { href: HALPresenter.href(href) }.tap do |s|
@@ -119,6 +124,7 @@ module HALPresenter
119
124
 
120
125
  def _serialize_curies(curies, resource, policy, options)
121
126
  curies.each_with_object([]) do |curie, array|
127
+ next unless nested_depth_ok?(curie, options[:_depth])
122
128
  href = curie.value(resource, options) or next
123
129
  array << {
124
130
  name: curie.name,
@@ -130,11 +136,13 @@ module HALPresenter
130
136
 
131
137
  def _serialize_embedded(embedded, object, policy, options)
132
138
  serialized = embedded.each_with_object({}) do |embed, hash|
139
+ next unless nested_depth_ok?(embed, options[:_depth])
133
140
  next if policy && !policy.embed?(embed.name)
134
141
  resource = embed.value(object, options) or next
135
142
  presenter = embed.presenter_class
143
+ options[:_depth] += 1
136
144
  hash[embed.name] =
137
- if resource.respond_to? :each
145
+ if resource.is_a? Array
138
146
  _serialize_embedded_collection(resource, presenter, options)
139
147
  else
140
148
  presenter ||= HALPresenter.lookup_presenter(resource).first
@@ -152,8 +160,7 @@ module HALPresenter
152
160
  raise Serializer::Error,
153
161
  "No presenter specified to handle serializing embedded #{clazz}"
154
162
  end
155
- if presenter.respond_to?(:can_serialize_collection?, true) &&
156
- presenter.can_serialize_collection?
163
+ if presenter.can_serialize_collection?
157
164
  presenter.to_collection_hash(resources, options)
158
165
  else
159
166
  resources.map do |resrc|
@@ -161,6 +168,15 @@ module HALPresenter
161
168
  end
162
169
  end
163
170
  end
171
+
172
+ def policy_for(resource, options)
173
+ policy = policy_class&.new(options[:current_user], resource, options)
174
+ end
175
+
176
+ def nested_depth_ok?(property, level)
177
+ return true unless embed_depth = property.embed_depth
178
+ level <= embed_depth
179
+ end
164
180
  end
165
181
  end
166
182
 
data/lib/hal_presenter.rb CHANGED
@@ -22,12 +22,3 @@ module HALPresenter
22
22
  include HALPresenter::Deserializer
23
23
  include HALPresenter::Policy
24
24
  end
25
-
26
- # Keeping this module for backward compatibility!
27
- module HALDecorator
28
- include HALPresenter
29
-
30
- def self.method_missing(m, *args, &block)
31
- HALPresenter.send(m, *args, &block)
32
- end
33
- end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hal_presenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sammy Henningsson
@@ -10,107 +10,106 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRowGAYDVQQDDBFzYW1t
14
- eS5oZW5uaW5nc3NvbjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPy
15
- LGQBGRYDY29tMB4XDTE3MDcwODE0MDUxOVoXDTE4MDcwODE0MDUxOVowSDEaMBgG
16
- A1UEAwwRc2FtbXkuaGVubmluZ3Nzb24xFTATBgoJkiaJk/IsZAEZFgVnbWFpbDET
17
- MBEGCgmSJomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
- ggEBAK+SDC1mfyhucJ6Va21rIHUGscEtQrdvyBqxFG1s2TgPMAv4RbqwdJVPa7kj
19
- tbCzslADlUE1oru2C+rcJsMtVGX02ukMIPHT1OjTyy0/EMqLqSy3WeRI8APyDSxC
20
- Vbe+h5BMf3zZnYfddR6AeG7ln09T1P/tX+9lTMc+I+DW1fUlQgY48CNUayvtJR61
21
- svXvXMrhLhi29SQig1qmH6Zoe22/JgH+m2JksPndY5Ep3gqfDc6Imwu2vGvmGErJ
22
- D63FB0XQ/wb4WVH4l7sHQSTfKDp8SImCt1xqNgIyjw578ZG2geGLoncuxgDrbQ/U
23
- FIJ11lDZd4vLevMhnIxTSJpPr2cCAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
- DwQEAwIEsDAdBgNVHQ4EFgQUukjj1Cd2ea6IOHDLZe0ymzs2jWkwJgYDVR0RBB8w
25
- HYEbc2FtbXkuaGVubmluZ3Nzb25AZ21haWwuY29tMCYGA1UdEgQfMB2BG3NhbW15
26
- Lmhlbm5pbmdzc29uQGdtYWlsLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAGBReofO0
27
- CDGI8uQNn/btde+zQBiCX0mONJMQ6An760MzOHMlWFi6VaVeeKmYj5xCpI2nWaJN
28
- 49ALW/v7GZ+JIW5YmbzWIuD8YfwHJYCFPoH0llzg3GCFCMxbYqI3nDtHX3dMxpOc
29
- 01A72okERe0ne/O5Z4Ym/fOECkyXr0fYondhDQcSuqxU22jsXs1ZjISN8IuHmVkA
30
- GtGteOIqmA05lP+eCXGvyARGLg1GwZDTjnlH5OfpiT1Oy7Dghewi58Gn4/AlZ4bY
31
- CNZdF8Vavp6xMQbPHZwqjaeZz2WRXYS7jyYSvCunjwa3OtvXtfbIEGEWE6IM+t9k
32
- H1g6Q+B6qk9O6g==
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=
33
32
  -----END CERTIFICATE-----
34
- date: 2018-02-16 00:00:00.000000000 Z
33
+ date: 2019-01-03 00:00:00.000000000 Z
35
34
  dependencies:
36
35
  - !ruby/object:Gem::Dependency
37
36
  name: rake
38
37
  requirement: !ruby/object:Gem::Requirement
39
38
  requirements:
40
- - - "~>"
41
- - !ruby/object:Gem::Version
42
- version: '12.0'
43
39
  - - ">="
44
40
  - !ruby/object:Gem::Version
45
41
  version: '10.0'
42
+ - - "~>"
43
+ - !ruby/object:Gem::Version
44
+ version: '12.0'
46
45
  type: :development
47
46
  prerelease: false
48
47
  version_requirements: !ruby/object:Gem::Requirement
49
48
  requirements:
50
- - - "~>"
51
- - !ruby/object:Gem::Version
52
- version: '12.0'
53
49
  - - ">="
54
50
  - !ruby/object:Gem::Version
55
51
  version: '10.0'
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '12.0'
56
55
  - !ruby/object:Gem::Dependency
57
56
  name: activesupport
58
57
  requirement: !ruby/object:Gem::Requirement
59
58
  requirements:
60
- - - "~>"
61
- - !ruby/object:Gem::Version
62
- version: '5.0'
63
59
  - - ">="
64
60
  - !ruby/object:Gem::Version
65
61
  version: '4.0'
62
+ - - "~>"
63
+ - !ruby/object:Gem::Version
64
+ version: '5.0'
66
65
  type: :development
67
66
  prerelease: false
68
67
  version_requirements: !ruby/object:Gem::Requirement
69
68
  requirements:
70
- - - "~>"
71
- - !ruby/object:Gem::Version
72
- version: '5.0'
73
69
  - - ">="
74
70
  - !ruby/object:Gem::Version
75
71
  version: '4.0'
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '5.0'
76
75
  - !ruby/object:Gem::Dependency
77
76
  name: minitest
78
77
  requirement: !ruby/object:Gem::Requirement
79
78
  requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '5.10'
83
79
  - - ">="
84
80
  - !ruby/object:Gem::Version
85
81
  version: '5.0'
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '5.10'
86
85
  type: :development
87
86
  prerelease: false
88
87
  version_requirements: !ruby/object:Gem::Requirement
89
88
  requirements:
90
- - - "~>"
91
- - !ruby/object:Gem::Version
92
- version: '5.10'
93
89
  - - ">="
94
90
  - !ruby/object:Gem::Version
95
91
  version: '5.0'
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '5.10'
96
95
  - !ruby/object:Gem::Dependency
97
96
  name: byebug
98
97
  requirement: !ruby/object:Gem::Requirement
99
98
  requirements:
100
- - - "~>"
99
+ - - ">="
101
100
  - !ruby/object:Gem::Version
102
101
  version: '9.0'
103
- - - ">="
102
+ - - "~>"
104
103
  - !ruby/object:Gem::Version
105
104
  version: '9.0'
106
105
  type: :development
107
106
  prerelease: false
108
107
  version_requirements: !ruby/object:Gem::Requirement
109
108
  requirements:
110
- - - "~>"
109
+ - - ">="
111
110
  - !ruby/object:Gem::Version
112
111
  version: '9.0'
113
- - - ">="
112
+ - - "~>"
114
113
  - !ruby/object:Gem::Version
115
114
  version: '9.0'
116
115
  - !ruby/object:Gem::Dependency
@@ -194,8 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
194
193
  - !ruby/object:Gem::Version
195
194
  version: '0'
196
195
  requirements: []
197
- rubyforge_project:
198
- rubygems_version: 2.7.3
196
+ rubygems_version: 3.0.1
199
197
  signing_key:
200
198
  specification_version: 4
201
199
  summary: JSON HAL serializer
metadata.gz.sig CHANGED
Binary file