road_to_el_duration 0.1.0 → 1.0.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: e61bb17754de369f7def0f960b0912e74b90486f88339bfbf37be1540de592dc
4
- data.tar.gz: 8d4914de53c504eaa680be2c83aae08a6778aafd5defbe37359f3e734d4a23c1
3
+ metadata.gz: 1d0a0614c1d994dc0147a886302cb7b1ba5c07af58f36fdfc695618233cade40
4
+ data.tar.gz: bd8abb6d4dcc62e9071a719f00517938e2d5e1c1df3f2d0646392d09d122b506
5
5
  SHA512:
6
- metadata.gz: 5aa9cce3f2e8ef38a0f70bd181965bfde0e2e998a3a49d655f5c93c4793ed91a3d8f5f2055bf72f62b00123f4193b5f222c53fbe95c761e46f7a151ff50b8b02
7
- data.tar.gz: 65b61abea98d14685197eb37611ff04ee16f0363aafe4726ba8654262a37244d6dfcc14a3cd7aa9ae97df7a225f660613ab74d11b735e71f493eb4969ad0fead
6
+ metadata.gz: 9100463c5e7a10d7105cc2609d9fd1bdd01a7c612394c6c87fffd96a53298f8bb4d8f62dc6835114ef28305e6e734ebf5c3b485ff47548ac85b02f904ecc7614
7
+ data.tar.gz: afc0bcbe9b437df54775386c55c2cf61d3722f35931f0c6bd72ea6765652033706db896e635563ad9b79b90edbc54cbdaed2a9c388db1f2e44c1f3d3201663e6
data/README.md CHANGED
@@ -14,6 +14,15 @@ ActiveSupport::Duration class and the Ruby Integer class. This is an opt-in
14
14
  feature so you don't have to use it if you don't want.
15
15
 
16
16
  ## Usage
17
+
18
+ The gem provides two modules that you can include in your models. One named
19
+ `RoadToElDuration::Calculations` which provides the `calculates_duration_from`
20
+ and `updates_duration_of` methods and the other named `RoadToElDuration::Coder`
21
+ which provides the `coder` class that is used to serialize and deserialize the
22
+ duration columns.
23
+
24
+ Let's look at a simple example.
25
+
17
26
  ```ruby
18
27
  class Episode < ApplicationRecord
19
28
  include RoadToElDuration::Calculations
@@ -35,6 +44,44 @@ class Series < ApplicationRecord
35
44
  end
36
45
  ```
37
46
 
47
+ Here we have two models, `Episode` and `Series`. The `Series` model has its
48
+ `duration` column serialized with the `RoadToElDuration::DurationCoder` coder and
49
+ the `Episode` model has its `duration` column serialized with the
50
+ `RoadToElDuration::DurationCoder` coder as well. The `Series` model also
51
+ has its `duration` attribute populated from the sum of episode `duration` that
52
+ belongs to a series.
53
+
54
+ This setup assumes that both the `Episode` and `Series` models have an integer
55
+ column on their tables named `duration` that is used to store the duration in
56
+ seconds.
57
+
58
+ If your columns are named differently you can specify the column names in both
59
+ the `calculates_duration_from` and `updates_duration_of` methods by passing
60
+ the column name as a symbol or a string as the `column` keyword argument.
61
+
62
+ For example:
63
+ ```ruby
64
+ class Episode < ApplicationRecord
65
+ include RoadToElDuration::Calculations
66
+
67
+ belongs_to :series
68
+
69
+ serialize :duration, coder: RoadToElDuration::DurationCoder
70
+ updates_duration_of :series, column: :total_length
71
+ end
72
+
73
+
74
+ class Series < ApplicationRecord
75
+ include RoadToElDuration::Calculations
76
+
77
+ has_many :episodes
78
+
79
+ serialize :duration, coder: RoadToElDuration::DurationCoder
80
+ calculates_duration_from :episodes, column: :length
81
+ end
82
+ ```
83
+
84
+
38
85
  ## Installation
39
86
  Add this line to your application's Gemfile:
40
87
 
@@ -47,7 +94,7 @@ And then execute:
47
94
  $ bundle
48
95
  ```
49
96
  ## Contributing
50
- Contribution directions go here.
97
+ If you would like to contribute something, go for it. 👍
51
98
 
52
99
  ## License
53
100
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -26,14 +26,16 @@ module RoadToElDuration
26
26
  # to calculate the duration.
27
27
  #
28
28
  def calculates_duration_from(child_association_name, column: :duration)
29
+ raise ArgumentError, "Please pass a valid child_association argument to the #{__method__} instead of nil" if child_association_name.nil?
29
30
  self.child_association_name= child_association_name
30
31
  self.child_duration_column = column
31
32
  end
32
33
 
33
34
  # This class method is used to set the parent association that will be updated.
34
35
  #
35
- def updates_duration_of(parent_association, column: :duration)
36
- self.parent_association_name = parent_association
36
+ def updates_duration_of(parent_association_name, column: :duration)
37
+ raise ArgumentError, "Please pass a valid parent_association argument to the #{__method__} instead of nil" if parent_association_name.nil?
38
+ self.parent_association_name = parent_association_name
37
39
  self.parent_duration_column = column
38
40
  end
39
41
  end
@@ -1,3 +1,3 @@
1
1
  module RoadToElDuration
2
- VERSION = "0.1.0"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -4,4 +4,5 @@ require "road_to_el_duration/calculations"
4
4
  require "road_to_el_duration/duration_coder"
5
5
 
6
6
  module RoadToElDuration
7
+ class ArgumentError < ::ArgumentError; end
7
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: road_to_el_duration
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Collin Jilbert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-08 00:00:00.000000000 Z
11
+ date: 2024-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails