Class: Datapimp::Configuration

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/datapimp/configuration.rb

Constant Summary collapse

DefaultSettings =
{
  manifest_filename: "datapimp.json",

  github_username: '',
  github_organization: '',
  github_app_key: '',
  github_app_secret: '',
  github_access_token: '',

  pivotal_access_token: '',

  keen_project_id: '',
  keen_read_key: '',
  keen_write_key: '',

  dnsimple_api_token: '',
  dnsimple_username: '',

  dropbox_app_key: '',
  dropbox_app_secret: '',
  dropbox_app_type: 'sandbox',
  dropbox_client_token: '',
  dropbox_client_secret: '',

  aws_access_key_id: '',
  aws_secret_access_key: '',
  aws_region: 'us-east-1',

  google_client_id: '',
  google_client_secret: '',
  google_refresh_token: '',
  google_access_token: ''
}

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(meth, *args, &block) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/datapimp/configuration.rb', line 54

def method_missing(meth, *args, &block)
  if current.key?(meth.to_s)
    return current.fetch(meth)
  end

  super
end

Class Method Details

.method_missing(meth, *args, &block) ⇒ Object



46
47
48
49
50
51
52
# File 'lib/datapimp/configuration.rb', line 46

def self.method_missing(meth, *args, &block)
  if instance.respond_to?(meth)
    return instance.send meth, *args, &block
  end

  nil
end

Instance Method Details

#amazon_setup?Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/datapimp/configuration.rb', line 94

def amazon_setup?
  aws_access_key_id.to_s.length > 0 && aws_secret_access_key.to_s.length > 0
end

#applied_configObject

Applied config is configuration values passed in context usually from the cli, but also in the unit tests



190
191
192
# File 'lib/datapimp/configuration.rb', line 190

def applied_config
  @applied_config ||= {}
end

#apply_all(options = {}) ⇒ Object



124
125
126
# File 'lib/datapimp/configuration.rb', line 124

def apply_all(options={})
  current.merge!(options)
end

#apply_config(hash = {}) ⇒ Object



155
156
157
158
# File 'lib/datapimp/configuration.rb', line 155

def apply_config(hash={})
  applied_config.merge!(hash)
  current.merge(applied_config)
end

#apply_config_from_path(path) ⇒ Object



160
161
162
163
164
165
# File 'lib/datapimp/configuration.rb', line 160

def apply_config_from_path(path)
  path = Pathname(path)
  parsed = JSON.parse(path.read) rescue {}
  applied_config.merge!(parsed)
  nil
end

#calculate_config(using_environment = true) ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/datapimp/configuration.rb', line 137

def calculate_config(using_environment = true)
  @current = defaults.merge(home_config.merge(cwd_config.merge(applied_config))).to_mash

  if ENV['DATAPIMP_CONFIG_EXTRA'].to_s.length > 0
    extra_config = Datapimp::Util.load_config_file(ENV['DATAPIMP_CONFIG_EXTRA'])
    @current.merge!(extra_config) if extra_config.is_a?(Hash)
  end

  (defaults.keys + home_config.keys + cwd_config.keys).uniq.each do |key|
    upper = key.to_s.upcase
    if ENV[upper]
      @current[key] = ENV[upper]
    end
  end if using_environment

  @current
end

#current(using_environment = true) ⇒ Object



42
43
44
# File 'lib/datapimp/configuration.rb', line 42

def current(using_environment = true)
  @current ||= calculate_config(using_environment)
end

#cwd_configObject



194
195
196
197
198
199
200
# File 'lib/datapimp/configuration.rb', line 194

def cwd_config
  @cwd_config ||= begin
    (cwd_config_path.exist? rescue false) ? JSON.parse(cwd_config_path.read) : {}
  rescue
    {}
  end
end

#cwd_config_pathObject



224
225
226
# File 'lib/datapimp/configuration.rb', line 224

def cwd_config_path
  @cwd_config_path || Pathname(Datapimp.pwd).join(manifest_filename)
end

#cwd_config_path=(value) ⇒ Object



220
221
222
# File 'lib/datapimp/configuration.rb', line 220

def cwd_config_path= value
  @cwd_config_path = Pathname(value)
end

#defaultsObject



133
134
135
# File 'lib/datapimp/configuration.rb', line 133

def defaults
  DefaultSettings.dup
end

#deploy_manifests_pathObject



72
73
74
75
76
# File 'lib/datapimp/configuration.rb', line 72

def deploy_manifests_path
  Pathname(home_config_path.dirname).join("deploy-manifests").tap do |dir|
    FileUtils.mkdir_p(dir) unless dir.exist?
  end
end

#dnsimple_setup?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'lib/datapimp/configuration.rb', line 82

def dnsimple_setup?
  dnsimple_api_token.to_s.length > 0 && dnsimple_username.to_s.length > 0
end

#dropbox_setup?Boolean

Returns:

  • (Boolean)


86
87
88
# File 'lib/datapimp/configuration.rb', line 86

def dropbox_setup?
  dropbox_app_key.to_s.length > 0 && dropbox_app_secret.to_s.length > 0
end

#get(setting) ⇒ Object



112
113
114
115
# File 'lib/datapimp/configuration.rb', line 112

def get(setting)
  setting = setting.to_s.downcase
  primary_config[setting]
end

#google_setup?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/datapimp/configuration.rb', line 90

def google_setup?
  google_client_secret.to_s.length > 0 && google_client_id.to_s.length > 0
end

#home_configObject



202
203
204
205
206
207
208
209
210
# File 'lib/datapimp/configuration.rb', line 202

def home_config
  initialize! unless home_config_path.exist?

  @home_config ||= begin
    (home_config_path.exist? rescue false) ? JSON.parse(home_config_path.read) : {}
  rescue
    {}
  end
end

#home_config_pathObject



216
217
218
# File 'lib/datapimp/configuration.rb', line 216

def home_config_path
  @home_config_path || Pathname(ENV['HOME']).join(".datapimp", manifest_filename)
end

#home_config_path=(value) ⇒ Object



212
213
214
# File 'lib/datapimp/configuration.rb', line 212

def home_config_path= value
  @home_config_path = Pathname(value)
end

#initialize!(fresh = false) ⇒ Object



62
63
64
65
66
67
68
69
70
# File 'lib/datapimp/configuration.rb', line 62

def initialize!(fresh=false)
  return if home_config_path.exist? && !fresh

  FileUtils.mkdir_p home_config_path.dirname

  home_config_path.open("w+") do |fh|
    fh.write(DefaultSettings.to_json)
  end
end

#manifest_filenameObject



78
79
80
# File 'lib/datapimp/configuration.rb', line 78

def manifest_filename
  "datapimp.json"
end

#primary_configObject



108
109
110
# File 'lib/datapimp/configuration.rb', line 108

def primary_config
  cwd_config_path.exist? ? cwd_config : home_config
end

#save!Object



167
168
169
170
171
172
# File 'lib/datapimp/configuration.rb', line 167

def save!
  save_home_config
  save_cwd_config
  @current = nil
  true
end

#save_cwd_configObject



174
175
176
177
178
179
180
# File 'lib/datapimp/configuration.rb', line 174

def save_cwd_config
  return nil unless cwd_config_path.exist?

  File.open(cwd_config_path, 'w+') do |fh|
    fh.write JSON.generate(cwd_config.to_hash)
  end
end

#save_home_configObject



182
183
184
185
186
# File 'lib/datapimp/configuration.rb', line 182

def save_home_config
  File.open(home_config_path, 'w+') do |fh|
    fh.write JSON.generate(home_config.to_hash)
  end
end

#set(setting, value, persist = true, options = {}) ⇒ Object



117
118
119
120
121
122
# File 'lib/datapimp/configuration.rb', line 117

def set(setting, value, persist = true, options={})
  setting = setting.to_s.downcase
  primary_config[setting] = value
  save! if persist == true
  value
end

#showObject



98
99
100
101
102
103
104
105
106
# File 'lib/datapimp/configuration.rb', line 98

def show
  current.each do |p|
    key, value = p

    unless key == 'sites_directory'
      puts "#{key}: #{ value.inspect }"
    end
  end
end

#unset(setting, persist = true) ⇒ Object



128
129
130
131
# File 'lib/datapimp/configuration.rb', line 128

def unset(setting, persist = true)
  primary_config.delete(setting)
  save! if persist == true
end