barley 0.4.1 → 0.5

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: d882b89bf1bf77259eda96813c4732ef1b286142ecb29fcb945837b743e089c9
4
- data.tar.gz: 87dc3b213a614957a668c08865b87eb44f805cf76b79a60c710025a7d18257d8
3
+ metadata.gz: 4808cb10061c5a86be6edbf532a6fb041519e4b7b4a08b770e0d63854a5f61e1
4
+ data.tar.gz: 5ccb1ed50e9d440a0bb3e9c006280e970b70b5ecc64afb7b8660c0d326f58239
5
5
  SHA512:
6
- metadata.gz: a7eb159a6e40374364504f5c828d7e1f82e7a581bd89fe374182916b0dbc6863caaea779acf409e58c8fe60ff3614acdfa944bb3f74dbd808957925db146dded
7
- data.tar.gz: d84b0157c80e83cfa28dbafda0fd300f2774c4362b5e1e47f9fc0381fb0cd8713dce2f1b27f4cfb9896af2c11d354d92b8df0dcfaee6a94bb69e6aca738e45b2
6
+ metadata.gz: 4562ae18d898be75d1abf2d2872bd5f79333f38e6a3e111548624ba6e4b19f4f7316087e36ff35f9103cac56a6b96e9d2f1fb32d1cfb1596430e1b81a1f68c2a
7
+ data.tar.gz: 13c86fbcb1d2678165bd128ea0e57ca80e1e4d63e3a3ccee09f9ac85838bab7cd0894d75cc832c7a513ac29fd697573039b8ee5a1621be1152e2a22c6525b5ce
data/README.md CHANGED
@@ -200,6 +200,25 @@ Feel like using a block to define your associations? You can do that too.
200
200
  end
201
201
  ```
202
202
 
203
+ ## Context
204
+ You can pass a context to the serializer with the `with_context` method.
205
+
206
+ ```ruby
207
+ serializer = PostSerializer.new(Post.last).with_context(current_user: current_user)
208
+ ```
209
+
210
+ This context will be available in the serializer with the `context` method.
211
+
212
+ ```ruby
213
+ class PostSerializer < Barley::Serializer
214
+ attributes :id, :title, :body
215
+
216
+ attribute :is_owner do
217
+ object.user == context.current_user
218
+ end
219
+ end
220
+ ```
221
+
203
222
  ## Generators
204
223
  You have two generators available. One to generate the serializer class:
205
224
 
@@ -3,6 +3,7 @@
3
3
  module Barley
4
4
  class Serializer
5
5
  attr_accessor :object
6
+ attr_accessor :context
6
7
 
7
8
  class << self
8
9
  attr_accessor :defined_attributes
@@ -224,6 +225,25 @@ module Barley
224
225
  Barley::Cache.delete(key)
225
226
  end
226
227
 
228
+ # Sets the context object for the serializer
229
+ #
230
+ # The context object is a Struct built from the given arguments.
231
+ # It can be used to pass additional data to the serializer. The context object is accessible in the serializer with the `context` attribute.
232
+ # @example
233
+ # serializer.with_context(current_user: current_user, locale: I18n.locale)
234
+ # # => #<Barley::Serializer:0x00007f8f3b8b3e08 @object=#<Product id: 1, name: "Product 1">, @context=#<struct current_user=1, locale=:en>>
235
+ # # In the serializer:
236
+ # attribute :name do
237
+ # "#{object.name[context.locale]}" # Will use the locale from the context
238
+ # end
239
+ # @param args [Hash] the context object attributes
240
+ # @return [Barley::Serializer] the serializer
241
+ def with_context(**args)
242
+ @context = Struct.new(*args.keys).new(*args.values)
243
+
244
+ self
245
+ end
246
+
227
247
  private
228
248
 
229
249
  # @api private
@@ -247,15 +267,15 @@ module Barley
247
267
  # Serializes the object
248
268
  #
249
269
  # @api private
270
+ # @raise [Barley::Error] if no attribute or relation is defined in the serializer
250
271
  #
251
272
  # @return [Hash] the serializable hash
252
273
  def _serializable_hash
253
- hash = {}
274
+ raise Barley::Error, "No attribute or relation defined in #{self.class}" if defined_attributes.blank?
254
275
 
255
- defined_attributes.each do |key|
256
- hash[key] = send(key)
276
+ hash = defined_attributes.each_with_object({}) do |key, result|
277
+ result[key] = send(key)
257
278
  end
258
-
259
279
  @root ? {root_key => hash} : hash
260
280
  end
261
281
 
@@ -1,3 +1,3 @@
1
1
  module Barley
2
- VERSION = "0.4.1"
2
+ VERSION = "0.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: barley
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: '0.5'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cedric Delalande
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-27 00:00:00.000000000 Z
11
+ date: 2024-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails