Use travis-settings to manage JSON settings field
Since we use repository.settings as a kind of dump for all sorts of settings, some user-facing and some not, this lets us leave the db as it is, but pretend to have separate models for each "kind" of setting.
This commit is contained in:
parent
cf5ea374d4
commit
026dc4cb98
1
Gemfile
1
Gemfile
|
@ -11,6 +11,7 @@ gem 'travis-settings', github: 'travis-ci/travis-settings'
|
||||||
gem 'travis-sidekiqs', github: 'travis-ci/travis-sidekiqs'
|
gem 'travis-sidekiqs', github: 'travis-ci/travis-sidekiqs'
|
||||||
|
|
||||||
gem 'travis-yaml', github: 'travis-ci/travis-yaml'
|
gem 'travis-yaml', github: 'travis-ci/travis-yaml'
|
||||||
|
gem 'travis-settings', github: 'travis-ci/travis-settings'
|
||||||
gem 'mustermann', github: 'rkh/mustermann'
|
gem 'mustermann', github: 'rkh/mustermann'
|
||||||
gem 'sinatra'
|
gem 'sinatra'
|
||||||
gem 'sinatra-contrib', require: nil #github: 'sinatra/sinatra-contrib', require: nil
|
gem 'sinatra-contrib', require: nil #github: 'sinatra/sinatra-contrib', require: nil
|
||||||
|
|
|
@ -53,6 +53,14 @@ GIT
|
||||||
activemodel
|
activemodel
|
||||||
virtus
|
virtus
|
||||||
|
|
||||||
|
GIT
|
||||||
|
remote: git://github.com/travis-ci/travis-settings.git
|
||||||
|
revision: d510e63b6c6f059cccae141c265e7a0c7236d1fd
|
||||||
|
specs:
|
||||||
|
travis-settings (0.0.1)
|
||||||
|
activemodel
|
||||||
|
virtus
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: git://github.com/travis-ci/travis-sidekiqs.git
|
remote: git://github.com/travis-ci/travis-sidekiqs.git
|
||||||
revision: c5d4a4abc6c3737f9c43d3333efb94daa18b9fbb
|
revision: c5d4a4abc6c3737f9c43d3333efb94daa18b9fbb
|
||||||
|
|
5
lib/travis/api/v3/models/admin_settings.rb
Normal file
5
lib/travis/api/v3/models/admin_settings.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
module Travis::API::V3
|
||||||
|
class Models::AdminSettings < Travis::Settings::Model
|
||||||
|
attribute :api_builds_rate_limit, Integer
|
||||||
|
end
|
||||||
|
end
|
|
@ -65,7 +65,15 @@ module Travis::API::V3
|
||||||
end
|
end
|
||||||
|
|
||||||
def settings
|
def settings
|
||||||
@settings ||= JSON.load(super)
|
@settings ||= JSON.load(super || '{}'.freeze)
|
||||||
|
end
|
||||||
|
|
||||||
|
def user_settings
|
||||||
|
@user_settings ||= Models::UserSettings.new(settings)
|
||||||
|
end
|
||||||
|
|
||||||
|
def admin_settings
|
||||||
|
@admin_settings ||= Models::AdminSettings.new(settings)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,12 +1,5 @@
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Models::Settings
|
class Models::Settings
|
||||||
DEFAULTS = {
|
|
||||||
'builds_only_with_travis_yml' => false,
|
|
||||||
'build_pushes' => true,
|
|
||||||
'build_pull_requests' => true,
|
|
||||||
'maximum_number_of_builds' => 0
|
|
||||||
}.freeze
|
|
||||||
|
|
||||||
attr_reader :repository
|
attr_reader :repository
|
||||||
|
|
||||||
def initialize(repository)
|
def initialize(repository)
|
||||||
|
@ -14,13 +7,11 @@ module Travis::API::V3
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_h
|
def to_h
|
||||||
DEFAULTS.merge(repository.settings || {})
|
repository.user_settings.to_hash
|
||||||
end
|
end
|
||||||
|
|
||||||
def update(settings = {})
|
def update(settings = {})
|
||||||
settings = to_h.merge(settings)
|
repository.user_settings.update(settings)
|
||||||
repository.settings.clear
|
|
||||||
settings.each { |k, v| repository.settings[k] = v }
|
|
||||||
repository.save!
|
repository.save!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
8
lib/travis/api/v3/models/user_settings.rb
Normal file
8
lib/travis/api/v3/models/user_settings.rb
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
module Travis::API::V3
|
||||||
|
class Models::UserSettings < Travis::Settings::Model
|
||||||
|
attribute :builds_only_with_travis_yml, Boolean, default: false
|
||||||
|
attribute :build_pushes, Boolean, default: true
|
||||||
|
attribute :build_pull_requests, Boolean, default: true
|
||||||
|
attribute :maximum_number_of_builds, Integer, default: 0
|
||||||
|
end
|
||||||
|
end
|
|
@ -23,11 +23,7 @@ module Travis::API::V3
|
||||||
end
|
end
|
||||||
|
|
||||||
def limit(repository)
|
def limit(repository)
|
||||||
if repository.settings.nil?
|
repository.admin_settings.api_builds_rate_limit || Travis.config.requests_create_api_limit || LIMIT
|
||||||
Travis.config.requests_create_api_limit || LIMIT
|
|
||||||
else
|
|
||||||
repository.settings["api_builds_rate_limit"] || Travis.config.requests_create_api_limit || LIMIT
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def remaining_requests(repository)
|
def remaining_requests(repository)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user