module KongSchema::Schema
Public Instance Methods
commit(config, directives)
click to toggle source
Commit changes to Kong's database through its REST API.
@param [Object] config @param [Array<Change>] changes
@return NilClass
# File lib/kong_schema/schema.rb, line 43 def commit(config, directives) Client.connect(config) do |client| directives.each do |d| begin d.apply(client, config) rescue StandardError e = $ERROR_INFO raise e, "#{e}\nSource:\n#{YAML.dump(d)}", e.backtrace end end end end
scan(config)
click to toggle source
Scan for changes between Kong's database and the configuration. To commit the changes (if any) use {.commit} with the results.
@param [Object] config
The configuration directives as explain in README.
@return [Array<Change>]
# File lib/kong_schema/schema.rb, line 21 def scan(config) Client.connect(config) do [ scan_in(model: Resource::Api, directives: Array(config['apis'])), scan_in(model: Resource::Plugin, directives: Array(config['plugins'])), # order matters in some of the resources; Upstream directives must be # handled before Target ones scan_in(model: Resource::Upstream, directives: Array(config['upstreams'])), scan_in(model: Resource::Target, directives: Array(config['targets'])) ].flatten end end
Private Instance Methods
build_create_changes(model:, defined:, declared:)
click to toggle source
# File lib/kong_schema/schema.rb, line 76 def build_create_changes(model:, defined:, declared:) to_create = declared.keys - defined.keys creatable = to_create.select do |id| model.creatable?(declared[id]) end creatable.map do |id| Actions::Create.new(model: model, params: declared[id]) end end
build_delete_changes(model:, defined:, declared:)
click to toggle source
# File lib/kong_schema/schema.rb, line 102 def build_delete_changes(model:, defined:, declared:) to_delete = defined.keys - declared.keys to_delete.map do |id| Actions::Delete.new(model: model, record: defined[id]) end end
build_update_changes(model:, defined:, declared:)
click to toggle source
# File lib/kong_schema/schema.rb, line 87 def build_update_changes(model:, defined:, declared:) to_update = declared.keys & defined.keys changed = to_update.select do |id| model.changed?(defined[id], declared[id]) end changed.map do |id| Actions::Update.new( model: model, record: defined[id], params: declared[id] ) end end
scan_in(model:, directives:)
click to toggle source
# File lib/kong_schema/schema.rb, line 58 def scan_in(model:, directives:) state = { model: model, defined: model.all.each_with_object({}) do |record, map| map[model.identify(record)] = record end, declared: directives.each_with_object({}) do |directive, map| map[model.identify(directive)] = directive end } [ build_create_changes(state), build_update_changes(state), build_delete_changes(state) ].flatten end