dotenvx 4.0.1-aarch64-linux → 4.0.4-aarch64-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da018e0fd6a44ee8e8de780d49ec23cf3e564a522e35b46684a8ecdd7e0b29d5
4
- data.tar.gz: 0dec0df0b1622c8f4a5e2bec536dcf81addd787453584e8fc943b01a7acc9708
3
+ metadata.gz: 175831972b38370f6dd9d99f66f4c290c6a8671bc19eb54a3feb5036f4ec1932
4
+ data.tar.gz: 21662fb9e6fa46ae773d1211b584cd27cd3bc8513d1a666fa20c0fd02557c034
5
5
  SHA512:
6
- metadata.gz: 86a4a56837034aeaf2faabee353d89660543706aa15af5cef7568b7287196a139fdaf959f36e560c6b879f70fc77100d65dfefeda07324539c93f8155cbd13ee
7
- data.tar.gz: 8b24f4e00adbaed36106e537897e3d22b8ac4c83116f045c476fc0acaa8babd1a121af390732def69e0658da740f4d81e2a2073029681afd08bcd8bfbaa06977
6
+ metadata.gz: c77e0e64712d1b1bbbb6993d790b8b2b9d0cfdda7ce4e1154d5457559991f6150ee8d01fd337e1bea5f5235b77ea86962cb9e973a139d25c0081ee78a96c0d35
7
+ data.tar.gz: 593b316496aa977d8cd133ce203f9904ef4a571c4f651ea375feed11110ff652a315acecb001e1754534d7bc65143c17fe69cddd5c0aafac238fbacd4bab5524
data/CHANGELOG.md CHANGED
@@ -2,7 +2,11 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
- ## [Unreleased](https://github.com/dotenvx/dotenvx-ruby/compare/v4.0.0...main)
5
+ ## [Unreleased](https://github.com/dotenvx/dotenvx-ruby/compare/v4.0.4...main)
6
+
7
+ ## [4.0.4](https://github.com/dotenvx/dotenvx-ruby/compare/v4.0.3...v4.0.4)
8
+
9
+ - Report the unique variables injected from readable dotenv files.
6
10
 
7
11
  ## [4.0.0](https://github.com/dotenvx/dotenvx-ruby/compare/v0.0.2...v4.0.0)
8
12
 
Binary file
data/lib/dotenvx/rails.rb CHANGED
@@ -37,7 +37,10 @@ module Dotenvx
37
37
  config.before_configuration { Dotenvx::Railtie.instance.load }
38
38
 
39
39
  def load
40
+ return if @loaded
41
+
40
42
  Dotenvx.load(*dotenvx_files)
43
+ @loaded = true
41
44
  end
42
45
 
43
46
  private
@@ -1,3 +1,3 @@
1
1
  module Dotenvx
2
- VERSION = "4.0.1"
2
+ VERSION = "4.0.4"
3
3
  end
data/lib/dotenvx.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require "dotenvx/version"
2
2
  require "dotenvx/dotenvx_native"
3
+ require "json"
4
+ require "pathname"
3
5
 
4
6
  module Dotenvx
5
7
  class MissingKeys < RuntimeError
@@ -15,8 +17,14 @@ module Dotenvx
15
17
  attr_accessor :instrumenter
16
18
 
17
19
  def load(*filenames, overwrite: false, ignore: true)
18
- env = parse(*filenames, overwrite: overwrite, ignore: ignore)
19
- update(env, overwrite: overwrite)
20
+ env, injected_keys, loaded_paths = parse_files(
21
+ *filenames,
22
+ overwrite: overwrite,
23
+ ignore: ignore
24
+ )
25
+ changed = update(env, overwrite: overwrite)
26
+ log_injected(injected_keys, loaded_paths)
27
+ changed
20
28
  end
21
29
 
22
30
  def load!(*filenames)
@@ -34,31 +42,7 @@ module Dotenvx
34
42
  alias overload! overwrite!
35
43
 
36
44
  def parse(*filenames, overwrite: false, ignore: true)
37
- filenames = [".env"] if filenames.empty?
38
- filenames = filenames.flatten.reverse if overwrite
39
-
40
- process_env = ENV.to_h
41
- filenames.reduce({}) do |values, filename|
42
- path = File.expand_path(filename)
43
- begin
44
- source = File.binread(path).sub(/\A\xEF\xBB\xBF/, "").force_encoding(Encoding::UTF_8)
45
- rescue Errno::ENOENT, Errno::EISDIR
46
- raise unless ignore
47
- next values
48
- end
49
-
50
- parsed, = Native.parse_dotenv(
51
- source,
52
- process_env.to_a,
53
- overwrite == true,
54
- key_files(path)
55
- )
56
- parsed = parsed.to_h
57
- process_env.merge!(parsed)
58
- values.merge!(parsed)
59
- yield Environment.new(path, parsed) if block_given?
60
- values
61
- end
45
+ parse_files(*filenames, overwrite: overwrite, ignore: ignore).first
62
46
  end
63
47
 
64
48
  def update(env = {}, overwrite: false)
@@ -88,6 +72,56 @@ module Dotenvx
88
72
 
89
73
  private
90
74
 
75
+ def parse_files(*filenames, overwrite: false, ignore: true)
76
+ filenames = [".env"] if filenames.empty?
77
+ filenames = filenames.flatten.reverse if overwrite
78
+
79
+ process_env = ENV.to_h
80
+ injected_keys = {}
81
+ loaded_paths = []
82
+ values = filenames.reduce({}) do |accumulator, filename|
83
+ path = File.expand_path(filename)
84
+ begin
85
+ source = File.binread(path).sub(/\A\xEF\xBB\xBF/, "").force_encoding(Encoding::UTF_8)
86
+ rescue Errno::ENOENT, Errno::EISDIR
87
+ raise unless ignore
88
+ next accumulator
89
+ end
90
+
91
+ parsed, injected = Native.parse_dotenv(JSON.generate(
92
+ source: source,
93
+ process_env: process_env,
94
+ overwrite: overwrite == true,
95
+ key_files: key_files(path)
96
+ ))
97
+ parsed = parsed.to_h
98
+ injected.each { |key, _value| injected_keys[key] = true }
99
+ loaded_paths << path
100
+ process_env.merge!(parsed)
101
+ accumulator.merge!(parsed)
102
+ yield Environment.new(path, parsed) if block_given?
103
+ accumulator
104
+ end
105
+ [values, injected_keys.keys, loaded_paths]
106
+ end
107
+
108
+ def log_injected(injected_keys, loaded_paths)
109
+ message = "⟐ injected env (#{injected_keys.length})"
110
+ unless loaded_paths.empty?
111
+ paths = loaded_paths.map { |path| readable_path(path) }
112
+ message = "#{message} from #{paths.join(", ")}"
113
+ end
114
+ warn message
115
+ end
116
+
117
+ def readable_path(path)
118
+ pathname = Pathname.new(path)
119
+ relative = pathname.relative_path_from(Pathname.pwd).to_s
120
+ relative.start_with?("../") ? pathname.to_s : relative
121
+ rescue ArgumentError
122
+ pathname.to_s
123
+ end
124
+
91
125
  def key_files(path)
92
126
  candidates = ["#{path}.keys", File.join(File.dirname(path), ".env.keys")]
93
127
  candidates.select { |candidate| File.file?(candidate) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dotenvx
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.1
4
+ version: 4.0.4
5
5
  platform: aarch64-linux
6
6
  authors:
7
7
  - motdotla