alba 3.0.2 → 3.0.3

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: 0f7b454e9de7d518fe1287a46d1b14a0c8cb8d13e3b10fcce3eee8a9e3df05c9
4
- data.tar.gz: ab670cee9399503a4480f74b4533a40eb4fd67048a0b9c93b9f706712ecc1a8f
3
+ metadata.gz: 7a2aa4a1fc6859ca700fefbe63af11657031743b9ad6c4ec9f97c7d7eac2cef7
4
+ data.tar.gz: 8703816ac23d30e432053c6836a8ed3e517f318a9924ae4bf67e5b3cff79f666
5
5
  SHA512:
6
- metadata.gz: 758481e888e55ae7a1ac87d61060cdbe76f3effea46e59b0906a125c4d804ef54f337aee014cba3df35fbd819601ad66c84eaafb820fd1a1144842a48969125a
7
- data.tar.gz: 5960c6958060c3169152c4634aaecd34af1a0920b7cb6461c9652e690e6fed661275efea1a6988513be0e7142eec6e13fe3a6f61658af68a70fc25ad04eaf430
6
+ metadata.gz: abd511841f6100e00e53687a3f4b7a58a04645090f3e7204edec2c7f8ea438d70e9014b576e56aae302db293796ccd793aa4d976b4241f91f25a1cf15d0e19e6
7
+ data.tar.gz: bf76202cdf514b5134b5a3f1e17b17cca78dbb9c9f1029f562d9d4ccc992c9d8aaeefbf01d1c45d1f4aff658d53a21e24b0caa279b6852e1516765c6ce62d99d
data/CHANGELOG.md CHANGED
@@ -6,6 +6,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [3.0.3] 2023-12-25
10
+
11
+ ### Fixed
12
+
13
+ - Make `as_json` compatible with Rails [#350](https://github.com/okuramasafumi/alba/pull/350)
14
+ - Fix circular association for nested_attribute [#353](https://github.com/okuramasafumi/alba/pull/353)
15
+
9
16
  ## [3.0.2] 2023-12-05
10
17
 
11
18
  ### Fixed
data/README.md CHANGED
@@ -1457,6 +1457,8 @@ end
1457
1457
 
1458
1458
  Within `helper` block, all methods should be defined without `self.`.
1459
1459
 
1460
+ `helper`
1461
+
1460
1462
  ### Caching
1461
1463
 
1462
1464
  Currently, Alba doesn't support caching, primarily due to the behavior of `ActiveRecord::Relation`'s cache. See [the issue](https://github.com/rails/rails/issues/41784).
@@ -1563,6 +1565,40 @@ end
1563
1565
 
1564
1566
  In this way we have shorter and cleaner code. Note that we need to use `send` or `public_send` in `attribute` block to get attribute data.
1565
1567
 
1568
+ #### Using `helper`
1569
+
1570
+ When we `extend AlbaExtension` like above, it's not available in inline associations.
1571
+
1572
+ ```ruby
1573
+ class BarResource
1574
+ include Alba::Resource
1575
+ extend AlbaExtension
1576
+ # other attributes
1577
+ formatted_time_attributes :created_at, :updated_at
1578
+
1579
+ one :something do
1580
+ # This DOES NOT work!
1581
+ formatted_time_attributes :updated_at
1582
+ end
1583
+ end
1584
+ ```
1585
+
1586
+ In this case, we can use [helper](#helper) instead of `extend`.
1587
+
1588
+ ```ruby
1589
+ class BarResource
1590
+ include Alba::Resource
1591
+ helper AlbaExtension # HERE!
1592
+ # other attributes
1593
+ formatted_time_attributes :created_at, :updated_at
1594
+
1595
+ one :something do
1596
+ # This WORKS!
1597
+ formatted_time_attributes :updated_at
1598
+ end
1599
+ end
1600
+ ```
1601
+
1566
1602
  ### Debugging
1567
1603
 
1568
1604
  Debugging is not easy. If you find Alba not working as you expect, there are a few things to do:
@@ -11,12 +11,13 @@ module Alba
11
11
 
12
12
  # @param object [Object] the object being serialized
13
13
  # @param params [Hash] params Hash inherited from Resource
14
+ # @param within [Object, nil, false, true] determines what associations to be serialized. If not set, it serializes all associations.
14
15
  # @return [Hash] hash serialized from running the class body in the object
15
- def value(object:, params:)
16
+ def value(object:, params:, within:)
16
17
  resource_class = Alba.resource_class
17
18
  resource_class.transform_keys(@key_transformation)
18
19
  resource_class.class_eval(&@block)
19
- resource_class.new(object, params: params).serializable_hash
20
+ resource_class.new(object, params: params, within: within).serializable_hash
20
21
  end
21
22
  end
22
23
  end
data/lib/alba/resource.rb CHANGED
@@ -26,7 +26,7 @@ module Alba
26
26
  base.class_eval do
27
27
  # Initialize
28
28
  INTERNAL_VARIABLES.each do |name, initial|
29
- instance_variable_set("@#{name}", initial.dup) unless instance_variable_defined?("@#{name}")
29
+ instance_variable_set(:"@#{name}", initial.dup) unless instance_variable_defined?(:"@#{name}")
30
30
  setup_method_body << "@#{name} = self.class.#{name};"
31
31
  end
32
32
  base.define_method(:encode, Alba.encoder)
@@ -71,10 +71,11 @@ module Alba
71
71
 
72
72
  # Returns a Hash correspondng {#serialize}
73
73
  #
74
+ # @param _options [Hash] dummy parameter for Rails compatibility
74
75
  # @param root_key [Symbol, nil, true]
75
76
  # @param meta [Hash] metadata for this seialization
76
77
  # @return [Hash]
77
- def as_json(root_key: nil, meta: {})
78
+ def as_json(_options = {}, root_key: nil, meta: {})
78
79
  key = root_key.nil? ? fetch_key : root_key
79
80
  key = Alba.regularize_key(key)
80
81
  if key && !key.empty?
@@ -246,7 +247,7 @@ module Alba
246
247
  when Proc then instance_exec(obj, &attribute)
247
248
  when Alba::Association then yield_if_within(attribute.name.to_sym) { |within| attribute.to_h(obj, params: params, within: within) }
248
249
  when TypedAttribute then attribute.value(obj)
249
- when NestedAttribute then attribute.value(object: obj, params: params)
250
+ when NestedAttribute then attribute.value(object: obj, params: params, within: @within)
250
251
  when ConditionalAttribute then attribute.with_passing_condition(resource: self, object: obj) { |attr| fetch_attribute(obj, key, attr) }
251
252
  else raise ::Alba::Error, "Unsupported type of attribute: #{attribute.class}"
252
253
  end
@@ -316,7 +317,7 @@ module Alba
316
317
  # @private
317
318
  def inherited(subclass)
318
319
  super
319
- INTERNAL_VARIABLES.each_key { |name| subclass.instance_variable_set("@#{name}", instance_variable_get("@#{name}").clone) }
320
+ INTERNAL_VARIABLES.each_key { |name| subclass.instance_variable_set(:"@#{name}", instance_variable_get(:"@#{name}").clone) }
320
321
  end
321
322
 
322
323
  # Defining methods for DSLs and disable parameter number check since for users' benefits increasing params is fine
data/lib/alba/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Alba
2
- VERSION = '3.0.2'.freeze
2
+ VERSION = '3.0.3'.freeze
3
3
  end
data/lib/alba.rb CHANGED
@@ -114,11 +114,14 @@ module Alba
114
114
  raise Alba::Error, 'Inference is disabled so Alba cannot infer resource name. Set inflector before use.' unless Alba.inflector
115
115
 
116
116
  const_parent = nesting.nil? ? Object : Object.const_get(nesting)
117
+ # rubocop-performance 1.20.2 might resolve this
118
+ # rubocop:disable Performance/StringIdentifierArgument
117
119
  begin
118
120
  const_parent.const_get("#{inflector.classify(name)}Resource")
119
121
  rescue NameError # Retry for serializer
120
122
  const_parent.const_get("#{inflector.classify(name)}Serializer")
121
123
  end
124
+ # rubocop:enable Performance/StringIdentifierArgument
122
125
  end
123
126
 
124
127
  # Configure Alba to symbolize keys
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alba
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - OKURA Masafumi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-05 00:00:00.000000000 Z
11
+ date: 2023-12-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Alba is the fastest JSON serializer for Ruby. It focuses on performance,
14
14
  flexibility and usability.