Class: DotEnvAndroid::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/dotenv-android/generator.rb

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Generator

Returns a new instance of Generator.



13
14
15
16
17
18
19
# File 'lib/dotenv-android/generator.rb', line 13

def initialize(options)
  @options = options

  @ui = DotEnvAndroid::UI.new(@options.verbose, @options.debug)

  Dotenv.load('.env')
end

Instance Method Details

#generate_output(env_variables) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/dotenv-android/generator.rb', line 83

def generate_output(env_variables)
  @ui.verbose("Outputting environment variables to #{@options.out}")

  package_name_header = package_header
  file_contents = "#{package_name_header}\n\n"
  file_contents += "object Env {\n\n"
  env_variables.each do |key, value|
    file_contents += "  val #{DotEnvAndroid::Util.snake_to_camel(key)} = \"#{value}\"\n"
  end

  file_contents += "\n}"

  @ui.debug("Output file: #{file_contents}")

  File.open(@options.out, 'w') { |file| file.write(file_contents) }

  @ui.success('Environment variables file generated!')
  @ui.success("File generated, #{@options.out}. If you don't like this output path, run command again with `-o` CLI option")
end

#get_env_requests(file) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/dotenv-android/generator.rb', line 45

def get_env_requests(file)
  requests = []

  File.readlines(file).each do |line|
    # Regex matcher: https://regexr.com/4rf2s
    matches = line.match(/Env\.[a-z]\w*/)
    next if matches.nil?

    matches.to_a.each do |word|
      word = word.gsub('_', '') # \w in regex pattern above allows underscores. We want to remove those.

      requested_variable = word.split('.')[1]
      requested_variable = DotEnvAndroid::Util.to_snakecase(requested_variable).upcase

      requests.push(requested_variable)
    end
  end

  requests
end

#get_values(requests) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/dotenv-android/generator.rb', line 66

def get_values(requests)
  values = {}

  requests.each do |request|
    @ui.warning("Environment variable #{request} not found in .env") unless ENV[request]

    values[request] = ENV[request] if ENV[request]
  end

  @ui.debug("Values: #{values}")
  values
end

#iterate_sourceObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/dotenv-android/generator.rb', line 27

def iterate_source
  source_pattern = File.expand_path("#{@options.source}/**/*.kt")
  @ui.verbose("Searching for environment vars in source: #{source_pattern}")

  requests = Set[]

  Dir.glob(source_pattern) do |kotlin_file|
    next if File.directory? kotlin_file

    @ui.verbose("Looking for Env usage in: #{kotlin_file}")
    requests.merge(get_env_requests(kotlin_file))
    @ui.verbose("Found #{requests.count} requests")
    @ui.debug("Requests found for file: #{requests.to_a}")
  end

  requests.to_a
end

#package_headerObject



79
80
81
# File 'lib/dotenv-android/generator.rb', line 79

def package_header
  "package #{@options.package_name}"
end

#startObject



21
22
23
24
25
# File 'lib/dotenv-android/generator.rb', line 21

def start
  requests = iterate_source
  env_variables = get_values(requests)
  generate_output(env_variables)
end