Class: DotEnvAndroid::Generator
- Inherits:
-
Object
- Object
- DotEnvAndroid::Generator
- Defined in:
- lib/dotenv-android/generator.rb
Instance Method Summary collapse
- #generate_output(env_variables) ⇒ Object
- #get_env_requests(file) ⇒ Object
- #get_values(requests) ⇒ Object
-
#initialize(options) ⇒ Generator
constructor
A new instance of Generator.
- #iterate_source ⇒ Object
- #package_header ⇒ Object
- #start ⇒ Object
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 = @ui = DotEnvAndroid::UI.new(@options.verbose, @options.debug) @all_env_vars = Dotenv.parse('.env') end |
Instance Method Details
#generate_output(env_variables) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/dotenv-android/generator.rb', line 93 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.fail("Environment variable #{request} not found in .env") unless @all_env_vars[request] values[request] = @all_env_vars[request] end @ui.debug("Values: #{values}") values end |
#iterate_source ⇒ Object
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.("#{@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_header ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/dotenv-android/generator.rb', line 79 def package_header package_name_header = "package #{@options.package_name}" unless @options.package_name.include? '.' package_name = @all_env_vars[@options.package_name] @ui.fail("Cannot find package name in .env file with key, #{@options.package_name}") if package_name.nil? package_name_header = "package #{package_name}" end @ui.debug("Package name header: #{package_name_header}") package_name_header end |
#start ⇒ Object
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 |