Create connector provider records for non-public connectors

Non-public connectors must also be able to have configurations per user
or organization, so the task to create provider records in the
connector_providers table must not ignore them.
Also, now Connector.providers without a user arguments returns the
default enabled state.
pull/9965/head
Javier Goizueta 8 years ago
parent eddb4af97b
commit 6db60dd6b3

@ -11,7 +11,7 @@ module Carto
before_filter :check_availability
def index
render_jsonp(Carto::Connector.providers(current_user))
render_jsonp(Carto::Connector.providers(user: current_user))
end
def show

@ -121,15 +121,23 @@ module Carto
# 'mysql' => { name: 'MySQL', description: '...', enabled: true },
# ...
# }
def self.providers(user = nil)
#
# By default only `public` providers are returned; use `all: true` to return all of them.
# If a `user:` argument is provided, the `enabled` key will indicate if the provider is
# enabled for the user; otherwise it indicates if it is enabled by default.
#
def self.providers(user: nil, all: false)
providers_info = {}
provider_ids.each do |id|
next unless provider_public?(id)
next unless all || provider_public?(id)
# TODO: load description template for provider id
description = nil
if user
enabled = Connector.limits(user: user, provider_name: id)[:enabled]
end
enabled = if user
Connector.limits(user: user, provider_name: id)[:enabled]
else
provider = ConnectorProvider.find_by_name(id)
ConnectorConfiguration.default(provider).enabled if provider
end
providers_info[id] = {
name: provider_name(id),
description: description,

@ -3,13 +3,13 @@ namespace :cartodb do
desc "Create Connector Providers for Provider Classes"
task create_providers: :environment do
Carto::Connector.providers.keys.each do |provider_name|
Carto::Connector.providers(all: true).keys.each do |provider_name|
unless Carto::ConnectorProvider.where(name: provider_name).exists?
puts "Creating ConnectorProvider #{provider_name}"
Carto::ConnectorProvider.create! name: provider_name
end
end
providers = Carto::Connector.providers.keys.map { |name| "'#{name}'" }
providers = Carto::Connector.providers(all: true).keys.map { |name| "'#{name}'" }
Carto::ConnectorProvider.where("name NOT IN (#{providers.join(',')})").each do |provider|
puts "Provider #{provider.name} is not configured in the code!"
end

@ -22,7 +22,7 @@ describe CartoDB::Importer2::ConnectorRunner do
@fake_log = CartoDB::Importer2::Doubles::Log.new(@user)
@providers = %w(mysql postgres sqlserver hive)
@fake_log.clear
Carto::Connector.providers.keys.each do |provider_name|
Carto::Connector.providers(all: true).keys.each do |provider_name|
Carto::ConnectorProvider.create! name: provider_name
end
end
@ -35,7 +35,7 @@ describe CartoDB::Importer2::ConnectorRunner do
after(:all) do
@user.destroy
@feature_flag.destroy
Carto::Connector.providers.keys.each do |provider_name|
Carto::Connector.providers(all: true).keys.each do |provider_name|
Carto::ConnectorProvider.find_by_name(provider_name).destroy
end
end

@ -111,7 +111,7 @@ describe Carto::Connector do
it "Should list providers available for a user with default configuration" do
default_config = { 'mysql' => { 'enabled' => true }, 'postgres' => { 'enabled' => false } }
Cartodb.with_config connectors: default_config do
Carto::Connector.providers(@user).should eq(
Carto::Connector.providers(user: @user).should eq(
"postgres" => { name: "PostgreSQL", enabled: false, description: nil },
"mysql" => { name: "MySQL", enabled: true, description: nil },
"sqlserver" => { name: "Microsoft SQL Server", enabled: false, description: nil },
@ -129,7 +129,7 @@ describe Carto::Connector do
enabled: true
)
Cartodb.with_config connectors: default_config do
Carto::Connector.providers(@user).should eq(
Carto::Connector.providers(user: @user).should eq(
"postgres" => { name: "PostgreSQL", enabled: true, description: nil },
"mysql" => { name: "MySQL", enabled: true, description: nil },
"sqlserver" => { name: "Microsoft SQL Server", enabled: false, description: nil },

Loading…
Cancel
Save