Module: Jira::Auto::Tool::Helpers::EnvironmentBasedValue

Included in:
Jira::Auto::Tool, Ticket
Defined in:
lib/jira/auto/tool/helpers/environment_based_value.rb

Instance Method Summary collapse

Instance Method Details

#corresponding_environment_variable_defined?(caller_method_name = caller_locations(1, 1).first.base_label) ⇒ Boolean

Returns:

  • (Boolean)


86
87
88
89
90
91
92
# File 'lib/jira/auto/tool/helpers/environment_based_value.rb', line 86

def corresponding_environment_variable_defined?(caller_method_name = caller_locations(1, 1).first.base_label)
  environment_variable_name = caller_method_name.upcase

  log.debug { "corresponding_environment_variable_defined?(#{environment_variable_name})" }

  ENV.key?(environment_variable_name)
end

#define_environment_variable_name_constant(method_name) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/jira/auto/tool/helpers/environment_based_value.rb', line 59

def define_environment_variable_name_constant(method_name)
  constant_name = method_name.to_s.upcase
  class_eval "    # This module and constant will be interpolated as follows:\n    # class Environment\n    #   CONSTANT_NAME = \"CONSTANT_NAME\"\n    # end\n    class Environment\n       \#{constant_name} = \#{constant_name.inspect}\n    end\n  EOCONSTANT\nend\n", __FILE__, __LINE__ + 1

#define_holds_a_secret_predicate(method_name, holds_a_secret) ⇒ Object



36
37
38
# File 'lib/jira/auto/tool/helpers/environment_based_value.rb', line 36

def define_holds_a_secret_predicate(method_name, holds_a_secret)
  define_method(:"#{method_name}_holds_a_secret?") { holds_a_secret }
end

#define_overridable_environment_based_value(method_name, holds_a_secret) ⇒ Object

TODO: overly complex - simplify by moving this to the Config and define a Configurable module



9
10
11
12
13
14
15
16
# File 'lib/jira/auto/tool/helpers/environment_based_value.rb', line 9

def define_overridable_environment_based_value(method_name, holds_a_secret)
  define_reader(method_name)
  define_predicate(method_name)
  define_reader_accepting_default_value(method_name)
  define_writer(method_name)
  define_environment_variable_name_constant(method_name)
  define_holds_a_secret_predicate(method_name, holds_a_secret)
end

#define_predicate(method_name) ⇒ Object



30
31
32
33
34
# File 'lib/jira/auto/tool/helpers/environment_based_value.rb', line 30

def define_predicate(method_name)
  define_method(:"#{method_name}_defined?") do
    self.class.corresponding_environment_variable_defined?(method_name.to_s)
  end
end

#define_reader(method_name) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/jira/auto/tool/helpers/environment_based_value.rb', line 18

def define_reader(method_name)
  define_method(method_name) do
    self.class.instance_variable_name(method_name)

    if config.key?(method_name)
      config[method_name]
    else
      self.class.fetch_corresponding_environment_variable(method_name.to_s)
    end
  end
end

#define_reader_accepting_default_value(method_name) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/jira/auto/tool/helpers/environment_based_value.rb', line 40

def define_reader_accepting_default_value(method_name)
  define_method(:"#{method_name}_when_defined_else") do |value|
    if config.key?(method_name)
      config[method_name]
    elsif self.class.corresponding_environment_variable_defined?(method_name.to_s)
      send(method_name)
    else
      value
    end
  end
end

#define_writer(method_name) ⇒ Object



52
53
54
55
56
57
# File 'lib/jira/auto/tool/helpers/environment_based_value.rb', line 52

def define_writer(method_name)
  define_method(:"#{method_name}=") do |value|
    log.debug { "#{method_name}= #{value.inspect}" }
    config[method_name] = value
  end
end

#fetch_corresponding_environment_variable(caller_method_name = caller_locations(1, 1).first.base_label) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/jira/auto/tool/helpers/environment_based_value.rb', line 72

def fetch_corresponding_environment_variable(
  caller_method_name = caller_locations(1, 1).first.base_label
)
  environment_variable_name = caller_method_name.upcase

  value = ENV.fetch(environment_variable_name) do |name|
    raise KeyError, "Missing #{name} environment variable!"
  end

  log.debug { "fetch_corresponding_environment_variable(#{environment_variable_name}) - #{value.inspect}" }

  value
end

#instance_variable_name(method_name) ⇒ Object



94
95
96
# File 'lib/jira/auto/tool/helpers/environment_based_value.rb', line 94

def instance_variable_name(method_name)
  "@#{method_name}"
end