summaryrefslogtreecommitdiff
path: root/app/models/concerns/chronic_duration_attribute.rb
diff options
context:
space:
mode:
authorTomasz Maczukin <tomasz@maczukin.pl>2018-02-21 01:09:59 +0100
committerTomasz Maczukin <tomasz@maczukin.pl>2018-03-28 13:55:46 +0200
commita4ea9a93db98461479dcb8e1d7b8425a77018f1e (patch)
treeb8eedf8ac0fc16dda986ccd03fb33d2beeb2a11a /app/models/concerns/chronic_duration_attribute.rb
parent3c23cefae0a323887503101d3c227a914dd8f7c4 (diff)
downloadgitlab-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.rb25
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