diff --git a/Gemfile b/Gemfile index ab1dc3bf..ccf97b60 100644 --- a/Gemfile +++ b/Gemfile @@ -11,6 +11,7 @@ gem 'travis-settings', github: 'travis-ci/travis-settings' gem 'travis-sidekiqs', github: 'travis-ci/travis-sidekiqs' gem 'travis-yaml', github: 'travis-ci/travis-yaml' +gem 'travis-settings', github: 'travis-ci/travis-settings' gem 'mustermann', github: 'rkh/mustermann' gem 'sinatra' gem 'sinatra-contrib', require: nil #github: 'sinatra/sinatra-contrib', require: nil diff --git a/Gemfile.lock b/Gemfile.lock index 0dda637b..96104e61 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -53,6 +53,14 @@ GIT activemodel virtus +GIT + remote: git://github.com/travis-ci/travis-settings.git + revision: d510e63b6c6f059cccae141c265e7a0c7236d1fd + specs: + travis-settings (0.0.1) + activemodel + virtus + GIT remote: git://github.com/travis-ci/travis-sidekiqs.git revision: c5d4a4abc6c3737f9c43d3333efb94daa18b9fbb diff --git a/lib/travis/api/v3/models/admin_settings.rb b/lib/travis/api/v3/models/admin_settings.rb new file mode 100644 index 00000000..ee1d9d2a --- /dev/null +++ b/lib/travis/api/v3/models/admin_settings.rb @@ -0,0 +1,5 @@ +module Travis::API::V3 + class Models::AdminSettings < Travis::Settings::Model + attribute :api_builds_rate_limit, Integer + end +end diff --git a/lib/travis/api/v3/models/repository.rb b/lib/travis/api/v3/models/repository.rb index b462db88..1b14bd5f 100644 --- a/lib/travis/api/v3/models/repository.rb +++ b/lib/travis/api/v3/models/repository.rb @@ -65,7 +65,15 @@ module Travis::API::V3 end 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 diff --git a/lib/travis/api/v3/models/settings.rb b/lib/travis/api/v3/models/settings.rb index 00949495..0d3e4593 100644 --- a/lib/travis/api/v3/models/settings.rb +++ b/lib/travis/api/v3/models/settings.rb @@ -1,12 +1,5 @@ module Travis::API::V3 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 def initialize(repository) @@ -14,13 +7,11 @@ module Travis::API::V3 end def to_h - DEFAULTS.merge(repository.settings || {}) + repository.user_settings.to_hash end def update(settings = {}) - settings = to_h.merge(settings) - repository.settings.clear - settings.each { |k, v| repository.settings[k] = v } + repository.user_settings.update(settings) repository.save! end end diff --git a/lib/travis/api/v3/models/user_settings.rb b/lib/travis/api/v3/models/user_settings.rb new file mode 100644 index 00000000..42e6519e --- /dev/null +++ b/lib/travis/api/v3/models/user_settings.rb @@ -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 diff --git a/lib/travis/api/v3/services/requests/create.rb b/lib/travis/api/v3/services/requests/create.rb index ea3827de..87c54d2d 100644 --- a/lib/travis/api/v3/services/requests/create.rb +++ b/lib/travis/api/v3/services/requests/create.rb @@ -23,11 +23,7 @@ module Travis::API::V3 end def limit(repository) - if repository.settings.nil? - Travis.config.requests_create_api_limit || LIMIT - else - repository.settings["api_builds_rate_limit"] || Travis.config.requests_create_api_limit || LIMIT - end + repository.admin_settings.api_builds_rate_limit || Travis.config.requests_create_api_limit || LIMIT end def remaining_requests(repository)