unit_measurements-rails 1.1.0 → 1.3.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: 5f1843c7f2b52c98319dc2157d86f1028638fcc375e3104551ea79f2954560a4
4
- data.tar.gz: 271f1f7c5103ad50e3eddf357cc1456aba6e7219eebeca8768ab7fc5b9bcae9e
3
+ metadata.gz: cf20e075bf5db7bd8a33f60eb2e14493aa4ed985defd4a3f49b020498a66ec6b
4
+ data.tar.gz: df3f2e54ed849cab6b0b6e7221e57bc74c11480053136aba222f6f91b3c43410
5
5
  SHA512:
6
- metadata.gz: c824399cc26f750e0e5981f39f4ea14ef50e2c1cb6d6c8dbfabf402bea3e06248ed4e48a0787ce015b223c9aa8b52949b15c6527db655bbb47c7b0db2da76957
7
- data.tar.gz: 236a331b4812c7598f997f27203f5b1bfaadd8f0f8a9ac667d2d1e454a8f5f46395eb9dfb7590f81443b0a1ae0b3fe83ead51d5d838eba9de70203f39ede554f
6
+ metadata.gz: 4a59d3f2cd7a3d7f716aa68ba88ff3c19ae29aade038c6aa1258a5eeef77c6fc44634e3c66167b8e9e499865c51b15861f0122e3cb6b226d1414daa8cb18af14
7
+ data.tar.gz: 3c722fab2b67d36ae090aef75a01222e5bbecf937c9a2322c03832a4960e0304975d9a347eef5178ea94cc5ae184f5055f97436e37a5702a1ded9b5cbebd5cc2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ ## [1.3.0](https://github.com/shivam091/unit_measurements-rails/compare/v1.2.0...v1.3.0) - 2023-11-22
2
+
3
+ ### What's new
4
+
5
+ - Raise `BaseError` if already measured attribute.
6
+ - Added wrapper for defining `density` measured attributes.
7
+ - Added wrapper for defining `temperature` measured attributes.
8
+ - Added wrapper for defining `time` measured attributes.
9
+
10
+ -----------
11
+
12
+ ## [1.2.0](https://github.com/shivam091/unit_measurements-rails/compare/v1.1.0...v1.2.0) - 2023-11-20
13
+
14
+ ### What's new
15
+
16
+ - Added method `.measured_fields` to provide ability to maintain measured attribute names and their options.
17
+
18
+ -----------
19
+
1
20
  ## [1.1.0](https://github.com/shivam091/unit_measurements-rails/compare/v1.0.0...v1.1.0) - 2023-11-16
2
21
 
3
22
  ### What's new
@@ -14,7 +33,7 @@
14
33
 
15
34
  ### What's new
16
35
 
17
- - Added method `measured` to store and retrieve measurement object.
36
+ - Added method `.measured` to store and retrieve measurement object.
18
37
  - Added RDoc for modules and classes.
19
38
 
20
39
  -----------
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- unit_measurements-rails (1.1.0)
4
+ unit_measurements-rails (1.3.0)
5
5
  activemodel (>= 7)
6
6
  activerecord (>= 7)
7
7
  railties (>= 7)
data/README.md CHANGED
@@ -41,7 +41,11 @@ Or otherwise simply install it yourself as:
41
41
 
42
42
  ### ActiveRecord
43
43
 
44
- Attribute names are expected to have the `_quantity` and `_unit` suffix, and be `DECIMAL` and `VARCHAR` types, respectively, and defaults values are accepted.
44
+ Attribute names are expected to have the `_quantity` and `_unit` suffix, and be
45
+ `DECIMAL` and `VARCHAR` types, respectively, and defaults values are accepted.
46
+
47
+ Customizing the accessors used to hold quantity and unit is supported, see below
48
+ for details.
45
49
 
46
50
  ```ruby
47
51
  class CreateTableCubes < ActiveRecord::Migration[7.0]
@@ -94,6 +98,18 @@ class Land < ActiveRecord::Base
94
98
  end
95
99
  ```
96
100
 
101
+ You can optionally customize the model's quantity and unit accessors by specifying
102
+ them in the `quantity_attribute_name` and `unit_attribute_name` option, respectively,
103
+ as follows:
104
+
105
+ ```ruby
106
+ class CubeWithCustomAccessor < ActiveRecord::Base
107
+ measured_length :length, unit_attribute_name: :length_uom
108
+ measured_length :width, quantity_attribute_name: :width_value
109
+ measured_length :height, quantity_attribute_name: :height_value, unit_attribute_name: :height_uom
110
+ end
111
+ ```
112
+
97
113
  There are some simpler methods for predefined types:
98
114
 
99
115
  ```ruby
@@ -2,6 +2,15 @@
2
2
  # -*- frozen_string_literal: true -*-
3
3
  # -*- warn_indent: true -*-
4
4
 
5
+ # The +UnitMeasurements+ module provides functionality for handling unit
6
+ # measurements. It includes various classes and modules for persisting and
7
+ # retrieving measurements with their units.
8
+ #
9
+ # The module also offers support for integrating with Rails ActiveRecord models
10
+ # for handling unit measurements conveniently.
11
+ #
12
+ # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
13
+ # @since 1.0.0
5
14
  module UnitMeasurements
6
15
  module Rails
7
16
  # The +UnitMeasurements::Rails::ActiveRecord+ module enhances ActiveRecord
@@ -12,6 +21,7 @@ module UnitMeasurements
12
21
  # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
13
22
  # @since 1.0.0
14
23
  module ActiveRecord
24
+ # @!scope class
15
25
  # Defines a _reader_ and _writer_ methods for the measured attributes in
16
26
  # the +ActiveRecord+ model.
17
27
  #
@@ -29,6 +39,10 @@ module UnitMeasurements
29
39
  # The unit group class or its name as a string.
30
40
  # @param [Array<String|Symbol>] measured_attrs
31
41
  # An array of the names of measured attributes.
42
+ # @param [Hash] options A customizable set of options
43
+ # @option options [String|Symbol] :quantity_attribute_name The name of the quantity attribute.
44
+ # @option options [String|Symbol] :unit_attribute_name The name of the unit attribute.
45
+ #
32
46
  # @return [void]
33
47
  #
34
48
  # @raise [BaseError]
@@ -37,14 +51,21 @@ module UnitMeasurements
37
51
  # @see BaseError
38
52
  # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
39
53
  # @since 1.0.0
40
- def measured(unit_group, *measured_attrs)
54
+ def measured(unit_group, *measured_attrs, **options)
55
+ validate_unit_group!(unit_group)
56
+
57
+ options = options.reverse_merge(quantity_attribute_name: nil, unit_attribute_name: nil)
41
58
  unit_group = unit_group.constantize if unit_group.is_a?(String)
42
59
 
43
- validate_unit_group!(unit_group)
60
+ options[:unit_group] = unit_group
44
61
 
45
62
  measured_attrs.map(&:to_s).each do |measured_attr|
46
- quantity_attr = "#{measured_attr}_quantity"
47
- unit_attr = "#{measured_attr}_unit"
63
+ raise BaseError, "The field '#{measured_attr}' has already been measured." if measured_attributes.key?(measured_attr)
64
+
65
+ quantity_attr = options[:quantity_attribute_name]&.to_s || "#{measured_attr}_quantity"
66
+ unit_attr = options[:unit_attribute_name]&.to_s || "#{measured_attr}_unit"
67
+
68
+ measured_attributes[measured_attr] = options.merge(quantity_attribute_name: quantity_attr, unit_attribute_name: unit_attr)
48
69
 
49
70
  define_reader_for_measured_attr(measured_attr, quantity_attr, unit_attr, unit_group)
50
71
  define_writer_for_measured_attr(measured_attr, quantity_attr, unit_attr, unit_group)
@@ -53,8 +74,37 @@ module UnitMeasurements
53
74
  end
54
75
  end
55
76
 
77
+ # @!scope class
78
+ # Returns a hash containing information about the measured attributes and
79
+ # their options.
80
+ #
81
+ # @return [Hash{String => Hash{Symbol => String|Class}}]
82
+ # A hash where keys represent the names of the measured attributes, and
83
+ # values are hashes containing the options for each measured attribute.
84
+ #
85
+ # @example
86
+ # {
87
+ # "height" => {
88
+ # unit_group: UnitMeasurements::Length,
89
+ # quantity_attribute_name: "height_quantity",
90
+ # unit_attribute_name: "height_unit"
91
+ # },
92
+ # "weight" => {
93
+ # unit_group: UnitMeasurements::Length,
94
+ # quantity_attribute_name: "weight_quantity",
95
+ # unit_attribute_name: "weight_unit"
96
+ # }
97
+ # }
98
+ #
99
+ # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
100
+ # @since 1.2.0
101
+ def measured_attributes
102
+ @measured_attributes ||= {}
103
+ end
104
+
56
105
  private
57
106
 
107
+ # @!scope class
58
108
  # @private
59
109
  # Validates whether +unit_group+ is a subclass of +UnitMeasurements::Measurement+.
60
110
  #
@@ -73,6 +123,7 @@ module UnitMeasurements
73
123
  end
74
124
  end
75
125
 
126
+ # @!scope class
76
127
  # @private
77
128
  # Defines the method to read the measured attribute.
78
129
  #
@@ -97,6 +148,7 @@ module UnitMeasurements
97
148
  end
98
149
  end
99
150
 
151
+ # @!scope class
100
152
  # @private
101
153
  # Defines the method to write the measured attribute.
102
154
  #
@@ -121,6 +173,7 @@ module UnitMeasurements
121
173
  end
122
174
  end
123
175
 
176
+ # @!scope class
124
177
  # @private
125
178
  # Redefines the writer method to set the quantity attribute.
126
179
  #
@@ -133,7 +186,7 @@ module UnitMeasurements
133
186
  def redefine_quantity_writer(quantity_attr)
134
187
  redefine_method("#{quantity_attr}=") do |quantity|
135
188
  quantity = BigDecimal(quantity, Float::DIG) if quantity.is_a?(String)
136
- quantity = if quantity
189
+ if quantity
137
190
  db_column_props = self.column_for_attribute(quantity_attr)
138
191
  precision, scale = db_column_props.precision, db_column_props.scale
139
192
 
@@ -144,6 +197,7 @@ module UnitMeasurements
144
197
  end
145
198
  end
146
199
 
200
+ # @!scope class
147
201
  # @private
148
202
  # Redefines the writer method to set the unit attribute.
149
203
  #
@@ -156,7 +210,7 @@ module UnitMeasurements
156
210
  # @since 1.0.0
157
211
  def redefine_unit_writer(unit_attr, unit_group)
158
212
  redefine_method("#{unit_attr}=") do |unit|
159
- unit_name = unit_group.unit_group.unit_for(unit).try!(:name)
213
+ unit_name = unit_group.unit_for(unit).try!(:name)
160
214
  write_attribute(unit_attr, (unit_name || unit))
161
215
  end
162
216
  end
@@ -167,5 +221,5 @@ end
167
221
  # ActiveSupport hook to extend ActiveRecord with the `UnitMeasurements::Rails::ActiveRecord`
168
222
  # module.
169
223
  ActiveSupport.on_load(:active_record) do
170
- ::ActiveRecord::Base.send :extend, UnitMeasurements::Rails::ActiveRecord
224
+ ::ActiveRecord::Base.send(:extend, UnitMeasurements::Rails::ActiveRecord)
171
225
  end
@@ -2,7 +2,10 @@
2
2
  # -*- frozen_string_literal: true -*-
3
3
  # -*- warn_indent: true -*-
4
4
 
5
+ require_relative "area"
6
+ require_relative "density"
5
7
  require_relative "length"
6
- require_relative "weight"
8
+ require_relative "temperature"
9
+ require_relative "time"
7
10
  require_relative "volume"
8
- require_relative "area"
11
+ require_relative "weight"
@@ -11,14 +11,18 @@
11
11
  # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
12
12
  # @since 1.1.0
13
13
  module UnitMeasurements::Rails::ActiveRecord::Area
14
+ # @!scope class
14
15
  # Defines _area-measured_ attributes in the +ActiveRecord+ model.
15
16
  #
16
17
  # This method serves as a wrapper around the +measured+ method and allows easy
17
18
  # definition of area-measured attributes by accepting an array of attribute
18
- # names.
19
+ # names along with their options.
19
20
  #
20
21
  # @param [Array<String|Symbol>] measured_attrs
21
22
  # An array of the names of area-measured attributes.
23
+ # @param [Hash] options A customizable set of options
24
+ # @option options [String|Symbol] :quantity_attribute_name The name of the quantity attribute.
25
+ # @option options [String|Symbol] :unit_attribute_name The name of the unit attribute.
22
26
  #
23
27
  # @example Define single area-measured attribute:
24
28
  # class Land < ActiveRecord::Base
@@ -32,15 +36,15 @@ module UnitMeasurements::Rails::ActiveRecord::Area
32
36
  #
33
37
  # @return [void]
34
38
  #
35
- # @see #measured
39
+ # @see .measured
36
40
  # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
37
41
  # @since 1.1.0
38
- def measured_area(*measured_attrs)
39
- measured(UnitMeasurements::Area, *measured_attrs)
42
+ def measured_area(*measured_attrs, **options)
43
+ measured(UnitMeasurements::Area, *measured_attrs, **options)
40
44
  end
41
45
  end
42
46
 
43
47
  # ActiveSupport hook to extend ActiveRecord with the `UnitMeasurements::Rails::ActiveRecord::Area` module.
44
48
  ActiveSupport.on_load(:active_record) do
45
- ::ActiveRecord::Base.send :extend, UnitMeasurements::Rails::ActiveRecord::Area
49
+ ::ActiveRecord::Base.send(:extend, UnitMeasurements::Rails::ActiveRecord::Area)
46
50
  end
@@ -0,0 +1,50 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ # The +UnitMeasurements::Rails::ActiveRecord::Density+ module provides a convenient
6
+ # way to define density-measured attributes in +ActiveRecord+ models.
7
+ #
8
+ # It acts as a wrapper for the +measured+ method, simplifying the definition of
9
+ # density-measured attributes without directly invoking the +measured+ method.
10
+ #
11
+ # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
12
+ # @since 1.3.0
13
+ module UnitMeasurements::Rails::ActiveRecord::Density
14
+ # @!scope class
15
+ # Defines _density-measured_ attributes in the +ActiveRecord+ model.
16
+ #
17
+ # This method serves as a wrapper around the +measured+ method and allows easy
18
+ # definition of density-measured attributes by accepting an array of attribute
19
+ # names along with their options.
20
+ #
21
+ # @param [Array<String|Symbol>] measured_attrs
22
+ # An array of the names of density-measured attributes.
23
+ # @param [Hash] options A customizable set of options
24
+ # @option options [String|Symbol] :quantity_attribute_name The name of the quantity attribute.
25
+ # @option options [String|Symbol] :unit_attribute_name The name of the unit attribute.
26
+ #
27
+ # @example Define single density-measured attribute:
28
+ # class Substance < ActiveRecord::Base
29
+ # measured_density :total_density
30
+ # end
31
+ #
32
+ # @example Define multiple density-measured attributes:
33
+ # class Substance < ActiveRecord::Base
34
+ # measured_density :internal_density, :external_density
35
+ # end
36
+ #
37
+ # @return [void]
38
+ #
39
+ # @see .measured
40
+ # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
41
+ # @since 1.3.0
42
+ def measured_density(*measured_attrs, **options)
43
+ measured(UnitMeasurements::Density, *measured_attrs, **options)
44
+ end
45
+ end
46
+
47
+ # ActiveSupport hook to extend ActiveRecord with the `UnitMeasurements::Rails::ActiveRecord::Density` module.
48
+ ActiveSupport.on_load(:active_record) do
49
+ ::ActiveRecord::Base.send(:extend, UnitMeasurements::Rails::ActiveRecord::Density)
50
+ end
@@ -11,14 +11,18 @@
11
11
  # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
12
12
  # @since 1.1.0
13
13
  module UnitMeasurements::Rails::ActiveRecord::Length
14
+ # @!scope class
14
15
  # Defines _length-measured_ attributes in the +ActiveRecord+ model.
15
16
  #
16
17
  # This method serves as a wrapper around the +measured+ method and allows easy
17
18
  # definition of length-measured attributes by accepting an array of attribute
18
- # names.
19
+ # names along with their options.
19
20
  #
20
21
  # @param [Array<String|Symbol>] measured_attrs
21
22
  # An array of the names of length-measured attributes.
23
+ # @param [Hash] options A customizable set of options
24
+ # @option options [String|Symbol] :quantity_attribute_name The name of the quantity attribute.
25
+ # @option options [String|Symbol] :unit_attribute_name The name of the unit attribute.
22
26
  #
23
27
  # @example Define single length-measured attribute:
24
28
  # class Cube < ActiveRecord::Base
@@ -32,15 +36,15 @@ module UnitMeasurements::Rails::ActiveRecord::Length
32
36
  #
33
37
  # @return [void]
34
38
  #
35
- # @see #measured
39
+ # @see .measured
36
40
  # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
37
41
  # @since 1.1.0
38
- def measured_length(*measured_attrs)
39
- measured(UnitMeasurements::Length, *measured_attrs)
42
+ def measured_length(*measured_attrs, **options)
43
+ measured(UnitMeasurements::Length, *measured_attrs, **options)
40
44
  end
41
45
  end
42
46
 
43
47
  # ActiveSupport hook to extend ActiveRecord with the `UnitMeasurements::Rails::ActiveRecord::Length` module.
44
48
  ActiveSupport.on_load(:active_record) do
45
- ::ActiveRecord::Base.send :extend, UnitMeasurements::Rails::ActiveRecord::Length
49
+ ::ActiveRecord::Base.send(:extend, UnitMeasurements::Rails::ActiveRecord::Length)
46
50
  end
@@ -0,0 +1,50 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ # The +UnitMeasurements::Rails::ActiveRecord::Temperature+ module provides a convenient
6
+ # way to define temperature-measured attributes in +ActiveRecord+ models.
7
+ #
8
+ # It acts as a wrapper for the +measured+ method, simplifying the definition of
9
+ # temperature-measured attributes without directly invoking the +measured+ method.
10
+ #
11
+ # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
12
+ # @since 1.3.0
13
+ module UnitMeasurements::Rails::ActiveRecord::Temperature
14
+ # @!scope class
15
+ # Defines _temperature-measured_ attributes in the +ActiveRecord+ model.
16
+ #
17
+ # This method serves as a wrapper around the +measured+ method and allows easy
18
+ # definition of temperature-measured attributes by accepting an array of attribute
19
+ # names along with their options.
20
+ #
21
+ # @param [Array<String|Symbol>] measured_attrs
22
+ # An array of the names of temperature-measured attributes.
23
+ # @param [Hash] options A customizable set of options
24
+ # @option options [String|Symbol] :quantity_attribute_name The name of the quantity attribute.
25
+ # @option options [String|Symbol] :unit_attribute_name The name of the unit attribute.
26
+ #
27
+ # @example Define single temperature-measured attribute:
28
+ # class WeatherReport < ActiveRecord::Base
29
+ # measured_temperature :average_temperature
30
+ # end
31
+ #
32
+ # @example Define multiple temperature-measured attributes:
33
+ # class WeatherReport < ActiveRecord::Base
34
+ # measured_temperature :day_temperature, :night_temperature
35
+ # end
36
+ #
37
+ # @return [void]
38
+ #
39
+ # @see .measured
40
+ # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
41
+ # @since 1.3.0
42
+ def measured_temperature(*measured_attrs, **options)
43
+ measured(UnitMeasurements::Temperature, *measured_attrs, **options)
44
+ end
45
+ end
46
+
47
+ # ActiveSupport hook to extend ActiveRecord with the `UnitMeasurements::Rails::ActiveRecord::Temperature` module.
48
+ ActiveSupport.on_load(:active_record) do
49
+ ::ActiveRecord::Base.send(:extend, UnitMeasurements::Rails::ActiveRecord::Temperature)
50
+ end
@@ -0,0 +1,50 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ # The +UnitMeasurements::Rails::ActiveRecord::Time+ module provides a convenient
6
+ # way to define time-measured attributes in +ActiveRecord+ models.
7
+ #
8
+ # It acts as a wrapper for the +measured+ method, simplifying the definition of
9
+ # time-measured attributes without directly invoking the +measured+ method.
10
+ #
11
+ # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
12
+ # @since 1.3.0
13
+ module UnitMeasurements::Rails::ActiveRecord::Time
14
+ # @!scope class
15
+ # Defines _time-measured_ attributes in the +ActiveRecord+ model.
16
+ #
17
+ # This method serves as a wrapper around the +measured+ method and allows easy
18
+ # definition of time-measured attributes by accepting an array of attribute
19
+ # names along with their options.
20
+ #
21
+ # @param [Array<String|Symbol>] measured_attrs
22
+ # An array of the names of time-measured attributes.
23
+ # @param [Hash] options A customizable set of options
24
+ # @option options [String|Symbol] :quantity_attribute_name The name of the quantity attribute.
25
+ # @option options [String|Symbol] :unit_attribute_name The name of the unit attribute.
26
+ #
27
+ # @example Define single time-measured attribute:
28
+ # class ProjectTimeline < ActiveRecord::Base
29
+ # measured_time :duration
30
+ # end
31
+ #
32
+ # @example Define multiple time-measured attributes:
33
+ # class ProjectTimeline < ActiveRecord::Base
34
+ # measured_time :setup_time, :processing_time
35
+ # end
36
+ #
37
+ # @return [void]
38
+ #
39
+ # @see .measured
40
+ # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
41
+ # @since 1.3.0
42
+ def measured_time(*measured_attrs, **options)
43
+ measured(UnitMeasurements::Time, *measured_attrs, **options)
44
+ end
45
+ end
46
+
47
+ # ActiveSupport hook to extend ActiveRecord with the `UnitMeasurements::Rails::ActiveRecord::Time` module.
48
+ ActiveSupport.on_load(:active_record) do
49
+ ::ActiveRecord::Base.send(:extend, UnitMeasurements::Rails::ActiveRecord::Time)
50
+ end
@@ -11,14 +11,18 @@
11
11
  # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
12
12
  # @since 1.1.0
13
13
  module UnitMeasurements::Rails::ActiveRecord::Volume
14
+ # @!scope class
14
15
  # Defines _volume-measured_ attributes in the +ActiveRecord+ model.
15
16
  #
16
17
  # This method serves as a wrapper around the +measured+ method and allows easy
17
18
  # definition of volume-measured attributes by accepting an array of attribute
18
- # names.
19
+ # names along with their options.
19
20
  #
20
21
  # @param [Array<String|Symbol>] measured_attrs
21
22
  # An array of the names of volume-measured attributes.
23
+ # @param [Hash] options A customizable set of options
24
+ # @option options [String|Symbol] :quantity_attribute_name The name of the quantity attribute.
25
+ # @option options [String|Symbol] :unit_attribute_name The name of the unit attribute.
22
26
  #
23
27
  # @example Define single volume-measured attribute:
24
28
  # class Container < ActiveRecord::Base
@@ -32,15 +36,15 @@ module UnitMeasurements::Rails::ActiveRecord::Volume
32
36
  #
33
37
  # @return [void]
34
38
  #
35
- # @see #measured
39
+ # @see .measured
36
40
  # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
37
41
  # @since 1.1.0
38
- def measured_volume(*measured_attrs)
39
- measured(UnitMeasurements::Volume, *measured_attrs)
42
+ def measured_volume(*measured_attrs, **options)
43
+ measured(UnitMeasurements::Volume, *measured_attrs, **options)
40
44
  end
41
45
  end
42
46
 
43
47
  # ActiveSupport hook to extend ActiveRecord with the `UnitMeasurements::Rails::ActiveRecord::Volume` module.
44
48
  ActiveSupport.on_load(:active_record) do
45
- ::ActiveRecord::Base.send :extend, UnitMeasurements::Rails::ActiveRecord::Volume
49
+ ::ActiveRecord::Base.send(:extend, UnitMeasurements::Rails::ActiveRecord::Volume)
46
50
  end
@@ -11,14 +11,18 @@
11
11
  # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
12
12
  # @since 1.1.0
13
13
  module UnitMeasurements::Rails::ActiveRecord::Weight
14
+ # @!scope class
14
15
  # Defines _weight-measured_ attributes in the +ActiveRecord+ model.
15
16
  #
16
17
  # This method serves as a wrapper around the +measured+ method and allows easy
17
18
  # definition of weight-measured attributes by accepting an array of attribute
18
- # names.
19
+ # names along with their options.
19
20
  #
20
21
  # @param [Array<String|Symbol>] measured_attrs
21
22
  # An array of the names of weight-measured attributes.
23
+ # @param [Hash] options A customizable set of options
24
+ # @option options [String|Symbol] :quantity_attribute_name The name of the quantity attribute.
25
+ # @option options [String|Symbol] :unit_attribute_name The name of the unit attribute.
22
26
  #
23
27
  # @example Define single weight-measured attribute:
24
28
  # class Package < ActiveRecord::Base
@@ -32,15 +36,15 @@ module UnitMeasurements::Rails::ActiveRecord::Weight
32
36
  #
33
37
  # @return [void]
34
38
  #
35
- # @see #measured
39
+ # @see .measured
36
40
  # @author {Harshal V. Ladhe}[https://shivam091.github.io/]
37
41
  # @since 1.1.0
38
- def measured_weight(*measured_attrs)
39
- measured(UnitMeasurements::Weight, *measured_attrs)
42
+ def measured_weight(*measured_attrs, **options)
43
+ measured(UnitMeasurements::Weight, *measured_attrs, **options)
40
44
  end
41
45
  end
42
46
 
43
47
  # ActiveSupport hook to extend ActiveRecord with the `UnitMeasurements::Rails::ActiveRecord::Weight` module.
44
48
  ActiveSupport.on_load(:active_record) do
45
- ::ActiveRecord::Base.send :extend, UnitMeasurements::Rails::ActiveRecord::Weight
49
+ ::ActiveRecord::Base.send(:extend, UnitMeasurements::Rails::ActiveRecord::Weight)
46
50
  end
@@ -5,6 +5,6 @@
5
5
  module UnitMeasurements
6
6
  module Rails
7
7
  # Current stable version.
8
- VERSION = "1.1.0"
8
+ VERSION = "1.3.0"
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unit_measurements-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harshal LADHE
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-11-17 00:00:00.000000000 Z
11
+ date: 2023-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -170,7 +170,10 @@ files:
170
170
  - lib/unit_measurements/rails/railtie.rb
171
171
  - lib/unit_measurements/rails/unit_groups/all.rb
172
172
  - lib/unit_measurements/rails/unit_groups/area.rb
173
+ - lib/unit_measurements/rails/unit_groups/density.rb
173
174
  - lib/unit_measurements/rails/unit_groups/length.rb
175
+ - lib/unit_measurements/rails/unit_groups/temperature.rb
176
+ - lib/unit_measurements/rails/unit_groups/time.rb
174
177
  - lib/unit_measurements/rails/unit_groups/volume.rb
175
178
  - lib/unit_measurements/rails/unit_groups/weight.rb
176
179
  - lib/unit_measurements/rails/version.rb