Class: Houston::Configuration
- Inherits:
-
Object
- Object
- Houston::Configuration
show all
- Defined in:
- lib/configuration.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
-
#abilities(&block) ⇒ Object
-
#add_navigation_renderer(name, &block) ⇒ Object
-
#add_project_feature(slug, &block) ⇒ Object
-
#add_user_option(slug, &block) ⇒ Object
-
#at(time, name, options = {}, &block) ⇒ Object
-
#authentication_strategy(strategy = nil, &block) ⇒ Object
-
#change_tags(*args) ⇒ Object
Configuration for Releases.
-
#configure_abilities(context, user) ⇒ Object
-
#default_role ⇒ Object
-
#defines_abilities? ⇒ Boolean
-
#devise_configuration ⇒ Object
-
#engineyard(&block) ⇒ Object
-
#environments(*args) ⇒ Object
-
#every(interval, name, options = {}, &block) ⇒ Object
-
#fetch_tag(slug) ⇒ Object
-
#get_navigation_renderer(name) ⇒ Object
-
#get_project_feature(slug) ⇒ Object
-
#github(&block) ⇒ Object
-
#host(*args) ⇒ Object
-
#identify_committers(commit = nil, &block) ⇒ Object
-
#initialize ⇒ Configuration
constructor
A new instance of Configuration.
-
#key_dependencies(&block) ⇒ Object
-
#keypair ⇒ Object
-
#load(glob) ⇒ Object
-
#mailer_from ⇒ Object
-
#mailer_sender(*args) ⇒ Object
-
#method_missing(name, *args, &block) ⇒ Object
-
#module(module_name) ⇒ Object
-
#navigation(*args) ⇒ Object
-
#on(event, &block) ⇒ Object
-
#parallelization(*args) ⇒ Object
-
#parallelize? ⇒ Boolean
-
#parse_ticket_description(ticket = nil, &block) ⇒ Object
-
#passphrase(*args) ⇒ Object
-
#project_categories(*args) ⇒ Object
-
#project_colors(*args) ⇒ Object
-
#project_features(*args) ⇒ Object
-
#project_roles(*args) ⇒ Object
-
#roles(*args) ⇒ Object
-
#root(*args) ⇒ Object
-
#s3(&block) ⇒ Object
-
#smtp(&block) ⇒ Object
-
#supports_pull_requests? ⇒ Boolean
-
#ticket_colors ⇒ Object
-
#ticket_types(*args) ⇒ Object
-
#time_zone(*args) ⇒ Object
-
#title(*args) ⇒ Object
-
#use(module_name, args = {}, &block) ⇒ Object
-
#user_options ⇒ Object
-
#uses?(module_name) ⇒ Boolean
-
#validate! ⇒ Object
Constructor Details
Returns a new instance of Configuration.
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/configuration.rb', line 14
def initialize
@root = Rails.root
@modules = []
@gems = []
@navigation_renderers = {}
@user_options = {}
@available_project_features = {}
@ticket_types = {}
@authentication_strategy = :database
@authentication_strategy_configuration = {}
@ticket_tracker_configuration = {}
@ci_server_configuration = {}
@error_tracker_configuration = {}
@timers = []
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object
442
443
444
445
|
# File 'lib/configuration.rb', line 442
def method_missing(name, *args, &block)
puts "\e[33mMissing Configuration option: #{name}\e[0m"
nil
end
|
Instance Attribute Details
#authentication_strategy_configuration ⇒ Object
Returns the value of attribute authentication_strategy_configuration.
256
257
258
|
# File 'lib/configuration.rb', line 256
def authentication_strategy_configuration
@authentication_strategy_configuration
end
|
#modules ⇒ Object
Returns the value of attribute modules.
342
343
344
|
# File 'lib/configuration.rb', line 342
def modules
@modules
end
|
#tag_map ⇒ Object
Returns the value of attribute tag_map.
379
380
381
|
# File 'lib/configuration.rb', line 379
def tag_map
@tag_map
end
|
#timers ⇒ Object
Returns the value of attribute timers.
12
13
14
|
# File 'lib/configuration.rb', line 12
def timers
@timers
end
|
Instance Method Details
#abilities(&block) ⇒ Object
285
286
287
|
# File 'lib/configuration.rb', line 285
def abilities(&block)
@abilities_block = block
end
|
#add_navigation_renderer(name, &block) ⇒ Object
139
140
141
|
# File 'lib/configuration.rb', line 139
def add_navigation_renderer(name, &block)
@navigation_renderers[name] = block
end
|
#add_project_feature(slug, &block) ⇒ Object
174
175
176
177
178
179
180
181
182
183
184
|
# File 'lib/configuration.rb', line 174
def add_project_feature(slug, &block)
dsl = ProjectFeatureDsl.new
dsl.instance_eval(&block)
feature = dsl.feature
feature.slug = slug
raise ArgumentError, "Project Feature must supply name, but #{slug.inspect} doesn't" unless feature.name
raise ArgumentError, "Project Feature must supply icon, but #{slug.inspect} doesn't" unless feature.icon
raise ArgumentError, "Project Feature must supply path lambda, but #{slug.inspect} doesn't" unless feature.path_block
@available_project_features[slug] = feature
end
|
#add_user_option(slug, &block) ⇒ Object
149
150
151
152
153
154
155
156
|
# File 'lib/configuration.rb', line 149
def add_user_option(slug, &block)
dsl = FormBuilderDsl.new
dsl.instance_eval(&block)
form = dsl.form
form.slug = slug
@user_options[slug] = form
end
|
#at(time, name, options = {}, &block) ⇒ Object
406
407
408
|
# File 'lib/configuration.rb', line 406
def at(time, name, options={}, &block)
@timers.push [:cron, time, name, options, block]
end
|
#authentication_strategy(strategy = nil, &block) ⇒ Object
250
251
252
253
254
255
|
# File 'lib/configuration.rb', line 250
def authentication_strategy(strategy=nil, &block)
@authentication_strategy = strategy if strategy
@authentication_strategy_configuration = HashDsl.hash_from_block(block) if block_given?
@authentication_strategy
end
|
Configuration for Releases
360
361
362
363
364
365
366
367
368
369
370
371
372
373
|
# File 'lib/configuration.rb', line 360
def change_tags(*args)
if args.any?
@tag_map = {}
args.flatten.each_with_index do |hash, position|
Tag.new(hash.pick(:name, :color).merge(slug: hash[:as], position: position)).tap do |tag|
@tag_map[tag.slug] = tag
hash.fetch(:aliases, []).each do |slug|
@tag_map[slug] = tag
end
end
end
end
(@tag_map ||= {}).values.uniq
end
|
293
294
295
|
# File 'lib/configuration.rb', line 293
def configure_abilities(context, user)
context.instance_exec(user, &@abilities_block)
end
|
#default_role ⇒ Object
203
204
205
|
# File 'lib/configuration.rb', line 203
def default_role
"Guest"
end
|
#defines_abilities? ⇒ Boolean
289
290
291
|
# File 'lib/configuration.rb', line 289
def defines_abilities?
@abilities_block.present?
end
|
#devise_configuration ⇒ Object
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
|
# File 'lib/configuration.rb', line 258
def devise_configuration
configuration = [:database_authenticatable, :token_authenticatable]
unless Rails.env.test? configuration << :ldap_authenticatable if authentication_strategy == :ldap
end
configuration.concat [
:recoverable,
:rememberable,
:trackable,
:validatable,
:invitable ]
end
|
#engineyard(&block) ⇒ Object
124
125
126
127
|
# File 'lib/configuration.rb', line 124
def engineyard(&block)
@engineyard = HashDsl.hash_from_block(block) if block_given?
@engineyard ||= {}
end
|
#environments(*args) ⇒ Object
193
194
195
196
|
# File 'lib/configuration.rb', line 193
def environments(*args)
@environments = args if args.any?
@environments ||= []
end
|
#every(interval, name, options = {}, &block) ⇒ Object
410
411
412
|
# File 'lib/configuration.rb', line 410
def every(interval, name, options={}, &block)
@timers.push [:every, interval, name, options, block]
end
|
#fetch_tag(slug) ⇒ Object
375
376
377
|
# File 'lib/configuration.rb', line 375
def fetch_tag(slug)
tag_map.fetch(slug, NullTag.instance)
end
|
#get_navigation_renderer(name) ⇒ Object
143
144
145
|
# File 'lib/configuration.rb', line 143
def get_navigation_renderer(name)
@navigation_renderers.fetch(name)
end
|
#get_project_feature(slug) ⇒ Object
170
171
172
|
# File 'lib/configuration.rb', line 170
def get_project_feature(slug)
@available_project_features[slug]
end
|
#github(&block) ⇒ Object
324
325
326
327
|
# File 'lib/configuration.rb', line 324
def github(&block)
@github_configuration = HashDsl.hash_from_block(block) if block_given?
@github_configuration ||= {}
end
|
#host(*args) ⇒ Object
68
69
70
71
|
# File 'lib/configuration.rb', line 68
def host(*args)
@host = args.first if args.any?
@host ||= nil
end
|
#identify_committers(commit = nil, &block) ⇒ Object
236
237
238
239
240
241
242
|
# File 'lib/configuration.rb', line 236
def identify_committers(commit=nil, &block)
if block_given?
@identify_committers_proc = block
elsif commit
@identify_committers_proc ? Array(@identify_committers_proc.call(commit)) : [commit.committer_email]
end
end
|
#key_dependencies(&block) ⇒ Object
387
388
389
390
391
392
393
394
|
# File 'lib/configuration.rb', line 387
def key_dependencies(&block)
if block_given?
dependencies = Houston::Dependencies.new
dependencies.instance_eval(&block)
@dependencies = dependencies.values
end
@dependencies || []
end
|
#keypair ⇒ Object
101
102
103
|
# File 'lib/configuration.rb', line 101
def keypair
root.join("config", "keypair.pem")
end
|
#load(glob) ⇒ Object
418
419
420
421
422
423
424
425
|
# File 'lib/configuration.rb', line 418
def load(glob)
__file__ = caller[0].split(":")[0]
glob << ".rb" unless glob.end_with? ".rb"
Dir.glob("#{File.dirname(__file__)}/#{glob}").each do |file|
next if File.directory?(file)
require file
end
end
|
#mailer_from ⇒ Object
87
88
89
90
91
92
93
94
|
# File 'lib/configuration.rb', line 87
def mailer_from
require "mail"
Mail::Address.new.tap do |email|
email.display_name = title
email.address = mailer_sender
end.to_s
end
|
#mailer_sender(*args) ⇒ Object
79
80
81
82
83
84
85
|
# File 'lib/configuration.rb', line 79
def mailer_sender(*args)
if args.any?
@mailer_sender = args.first
(Rails.application.config.action_mailer.default_options ||= {}).merge!(from: @mailer_sender)
end
@mailer_sender ||= nil
end
|
#module(module_name) ⇒ Object
349
350
351
352
|
# File 'lib/configuration.rb', line 349
def module(module_name)
module_name = module_name.to_s
modules.detect { |mod| mod.name == module_name }
end
|
#navigation(*args) ⇒ Object
134
135
136
137
|
# File 'lib/configuration.rb', line 134
def navigation(*args)
@navigation = args if args.any?
@navigation ||= []
end
|
#on(event, &block) ⇒ Object
402
403
404
|
# File 'lib/configuration.rb', line 402
def on(event, &block)
Houston.observer.on(event, &block)
end
|
#parallelization(*args) ⇒ Object
105
106
107
108
|
# File 'lib/configuration.rb', line 105
def parallelization(*args)
@parallelization = args.first if args.any?
@parallelization ||= :off
end
|
#parallelize? ⇒ Boolean
110
111
112
|
# File 'lib/configuration.rb', line 110
def parallelize?
parallelization == :on
end
|
#parse_ticket_description(ticket = nil, &block) ⇒ Object
228
229
230
231
232
233
234
|
# File 'lib/configuration.rb', line 228
def parse_ticket_description(ticket=nil, &block)
if block_given?
@parse_ticket_description_proc = block
elsif ticket
@parse_ticket_description_proc.call(ticket) if @parse_ticket_description_proc
end
end
|
#passphrase(*args) ⇒ Object
96
97
98
99
|
# File 'lib/configuration.rb', line 96
def passphrase(*args)
@passphrase = args.first if args.any?
@passphrase ||= nil
end
|
#project_categories(*args) ⇒ Object
129
130
131
132
|
# File 'lib/configuration.rb', line 129
def project_categories(*args)
@project_categories = args if args.any?
@project_categories ||= []
end
|
#project_colors(*args) ⇒ Object
188
189
190
191
|
# File 'lib/configuration.rb', line 188
def project_colors(*args)
@project_colors = args.first.each_with_object({}) { |(key, hex), hash| hash[key] = ColorValue.new(hex) } if args.any?
@project_colors ||= []
end
|
#project_features(*args) ⇒ Object
164
165
166
167
168
|
# File 'lib/configuration.rb', line 164
def project_features(*args)
@project_features = args if args.any?
return @available_project_features.keys unless @project_features
@project_features & @available_project_features.keys
end
|
#project_roles(*args) ⇒ Object
207
208
209
210
|
# File 'lib/configuration.rb', line 207
def project_roles(*args)
@project_roles = args if args.any?
["Follower"] + (@project_roles ||= [])
end
|
#roles(*args) ⇒ Object
198
199
200
201
|
# File 'lib/configuration.rb', line 198
def roles(*args)
@roles = args if args.any?
["Guest"] + (@roles ||= [])
end
|
#root(*args) ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/configuration.rb', line 36
def root(*args)
return @root if args.none?
@root = args.first
ActiveRecord::Tasks::DatabaseTasks.db_dir = root.join("db")
Houston::Application.paths["config/database"] = root.join("config/database.yml")
Houston::Application.paths["public"] = root.join("public")
Houston::Application.paths["log"] = root.join("log/#{Rails.env}.log")
Houston::Application.paths["tmp"] = root.join("tmp")
Houston::Application.paths["config/environments"] << root.join("config/environments")
Rails.application.assets = Sprockets::Environment.new(root) do |env|
env.version = Rails.env
path = "#{Houston.root}/tmp/cache/assets/#{Rails.env}"
env.cache = Sprockets::Cache::FileStore.new(path)
env.context_class.class_eval do
include ::Sprockets::Rails::Helper
end
end
end
|
#s3(&block) ⇒ Object
119
120
121
122
|
# File 'lib/configuration.rb', line 119
def s3(&block)
@s3 = HashDsl.hash_from_block(block) if block_given?
@s3 ||= {}
end
|
#smtp(&block) ⇒ Object
114
115
116
117
|
# File 'lib/configuration.rb', line 114
def smtp(&block)
Rails.application.config.action_mailer.smtp_settings = HashDsl.hash_from_block(block) if block_given?
Rails.application.config.action_mailer.smtp_settings
end
|
#supports_pull_requests? ⇒ Boolean
329
330
331
|
# File 'lib/configuration.rb', line 329
def supports_pull_requests?
github[:organization].present?
end
|
#ticket_colors ⇒ Object
220
221
222
|
# File 'lib/configuration.rb', line 220
def ticket_colors
@ticket_types
end
|
#ticket_types(*args) ⇒ Object
212
213
214
215
216
217
218
|
# File 'lib/configuration.rb', line 212
def ticket_types(*args)
if args.any?
@ticket_types = args.first
@ticket_types.default = "EFEFEF"
end
@ticket_types.keys
end
|
#time_zone(*args) ⇒ Object
73
74
75
76
77
|
# File 'lib/configuration.rb', line 73
def time_zone(*args)
return Rails.application.config.time_zone if args.none?
Rails.application.config.time_zone = args.first
Time.zone = args.first
end
|
#title(*args) ⇒ Object
63
64
65
66
|
# File 'lib/configuration.rb', line 63
def title(*args)
@title = args.first if args.any?
@title ||= "Houston"
end
|
#use(module_name, args = {}, &block) ⇒ Object
339
340
341
|
# File 'lib/configuration.rb', line 339
def use(module_name, args={}, &block)
@modules << ::Houston::Module.new(module_name, args, &block)
end
|
#user_options ⇒ Object
158
159
160
|
# File 'lib/configuration.rb', line 158
def user_options
@user_options.values
end
|
#uses?(module_name) ⇒ Boolean
344
345
346
347
|
# File 'lib/configuration.rb', line 344
def uses?(module_name)
module_name = module_name.to_s
modules.any? { |mod| mod.name == module_name }
end
|
#validate! ⇒ Object
431
432
433
434
435
436
437
438
439
440
|
# File 'lib/configuration.rb', line 431
def validate!
raise MissingConfiguration, <<-ERROR unless mailer_sender
Houston requires a default email address to be supplied for mailers
You can set the address by adding the following line to config/config.rb:
mailer_sender "[email protected]"
ERROR
end
|