diff options
author | Tomasz Maczukin <tomasz@maczukin.pl> | 2018-02-21 01:09:59 +0100 |
---|---|---|
committer | Tomasz Maczukin <tomasz@maczukin.pl> | 2018-03-28 13:55:46 +0200 |
commit | a4ea9a93db98461479dcb8e1d7b8425a77018f1e (patch) | |
tree | b8eedf8ac0fc16dda986ccd03fb33d2beeb2a11a /app/models/concerns/chronic_duration_attribute.rb | |
parent | 3c23cefae0a323887503101d3c227a914dd8f7c4 (diff) | |
download | gitlab-ce-a4ea9a93db98461479dcb8e1d7b8425a77018f1e.tar.gz |
Add ChroniDurationAttribute concern
Diffstat (limited to 'app/models/concerns/chronic_duration_attribute.rb')
-rw-r--r-- | app/models/concerns/chronic_duration_attribute.rb | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/app/models/concerns/chronic_duration_attribute.rb b/app/models/concerns/chronic_duration_attribute.rb new file mode 100644 index 00000000000..2bf33174640 --- /dev/null +++ b/app/models/concerns/chronic_duration_attribute.rb @@ -0,0 +1,25 @@ +module ChronicDurationAttribute + extend ActiveSupport::Concern + + class_methods do + def chronic_duration_attribute(virtual_attribute, source_attribute) + chronic_duration_attribute_reader(virtual_attribute, source_attribute) + chronic_duration_attribute_writer(virtual_attribute, source_attribute) + end + + def chronic_duration_attribute_reader(virtual_attribute, source_attribute) + define_method(virtual_attribute) do + value = self.send(source_attribute) # rubocop:disable GitlabSecurity/PublicSend + ChronicDuration.output(value, format: :short) unless value.nil? + end + end + + def chronic_duration_attribute_writer(virtual_attribute, source_attribute) + define_method("#{virtual_attribute}=") do |value| + new_value = ChronicDuration.parse(value).to_i + self.send("#{source_attribute}=", new_value) # rubocop:disable GitlabSecurity/PublicSend + new_value + end + end + end +end |