blob: 9ec4c4e1cf51557d79dfc88c61dd1a3176644829 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements. See the NOTICE.txt file distributed with this work for
# additional information regarding copyright ownership. The ASF licenses this
# file to you under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
module Ugc
class Settings
SETTINGS_FILE = 'settings.yml'
def initialize(global_options)
@draw_table_border = global_options[:border]
@show_curl = global_options[:curl]
@settings_file = File.join global_options[:settings], SETTINGS_FILE
@settings = YAML.load_file(@settings_file) rescue default_settings
end
def active_profile_name
@settings['active_profile'] || 'local'
end
def active_profile_name=(name)
raise "unknown profile: #{name}" unless profile(name)
@settings['active_profile'] = name
save_profile
end
def delete_profile(name)
raise "cannot delete active profile" if active_profile_name == name
raise "unknown profile: #{name}" unless profiles[name]
profiles.delete name
save_profile
end
def profile(name=nil)
name ||= active_profile_name
profiles[name] || profiles[name] = {}
end
def profiles
@settings['profiles'] || @settings['profiles'] = {}
end
def base_url
profile['base_url']
end
def base_url=(url)
URI.parse url
set_profile 'base_url', url
end
def organization
profile['organization']
end
def organization=(org)
set_profile 'organization', org
end
def application
profile['application']
end
def application=(app)
set_profile 'application', app
end
def access_token
profile['access_token']
end
def access_token=(token)
set_profile 'access_token', token
end
def configured?
base_url && organization && application
end
def table_border?
!!@draw_table_border
end
def show_curl?
!!@show_curl
end
def logged_in?
!!access_token
end
def save_profile_blob(name, data)
file = File.join settings_dir, "#{active_profile_name}.#{name}"
File.open(file, 'w') do |out|
out.write data
end
end
def load_profile_blob(name)
IO.read File.join settings_dir, "#{active_profile_name}.#{name}"
end
private
def set_profile(prop, value)
if value
profile[prop] = value
else
profile.delete prop
end
save_profile
end
def settings_dir
File.dirname(@settings_file)
end
def save_profile
Dir.mkdir(settings_dir) unless Dir.exist?(settings_dir)
File.open(@settings_file, 'w') do |out|
YAML.dump(@settings, out)
end
end
def default_settings
{
'target' => 'https://api.usergrid.com',
'active_profile' => 'local',
'profiles' => {
'local' => {
'base_url' => 'http://localhost:8080',
'organization' => 'test-organization',
'application' => 'test-app'
},
'apigee' => {
'base_url' => 'https://api.usergrid.com'
}
}
}
end
end
end