Add ChroniDurationAttribute concern
This commit is contained in:
parent
3c23cefae0
commit
a4ea9a93db
|
@ -3,6 +3,7 @@ module Ci
|
|||
extend Gitlab::Ci::Model
|
||||
include Gitlab::SQL::Pattern
|
||||
include RedisCacheable
|
||||
include ChronicDurationAttribute
|
||||
|
||||
RUNNER_QUEUE_EXPIRY_TIME = 60.minutes
|
||||
ONLINE_CONTACT_TIMEOUT = 1.hour
|
||||
|
@ -51,6 +52,8 @@ module Ci
|
|||
|
||||
cached_attr_reader :version, :revision, :platform, :architecture, :contacted_at, :ip_address
|
||||
|
||||
chronic_duration_attribute :job_upper_timeout_user_readable, :job_upper_timeout
|
||||
|
||||
# Searches for runners matching the given query.
|
||||
#
|
||||
# This method uses ILIKE on PostgreSQL and LIKE on MySQL.
|
||||
|
|
|
@ -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
|
|
@ -0,0 +1,28 @@
|
|||
require 'spec_helper'
|
||||
|
||||
shared_examples 'ChronicDurationAttribute' do
|
||||
describe 'dynamically defined methods' do
|
||||
it { expect(subject.class).to be_public_method_defined(virtual_field) }
|
||||
it { expect(subject.class).to be_public_method_defined("#{virtual_field}=") }
|
||||
|
||||
it 'parses chronic duration input' do
|
||||
subject.send("#{virtual_field}=", "10m")
|
||||
|
||||
expect(subject.send(source_field)).to eq(600)
|
||||
end
|
||||
|
||||
it 'outputs chronic duration formated value' do
|
||||
subject.send("#{source_field}=", 120)
|
||||
|
||||
expect(subject.send(virtual_field)).to eq('2m')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'ChronicDurationAttribute' do
|
||||
let(:source_field) { :maximum_job_timeout }
|
||||
let(:virtual_field) { :maximum_job_timeout_user_readable }
|
||||
subject { Ci::Runner.new }
|
||||
|
||||
it_behaves_like 'ChronicDurationAttribute'
|
||||
end
|
Loading…
Reference in New Issue