dotenv-merge 1.0.2 → 7.1.1

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.
data/lib/dotenv-merge.rb CHANGED
@@ -1,4 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # For technical reasons, if we move to Zeitwerk, this cannot be require_relative.
2
4
  # See: https://github.com/fxn/zeitwerk#for_gem_extension
3
5
  # Hook for other libraries to load this library (e.g. via bundler)
4
- require "dotenv/merge"
6
+ require 'dotenv/merge'
7
+ require 'version_gem'
8
+ require_relative 'dotenv/merge/version'
9
+
10
+ Dotenv::Merge::Version.class_eval do
11
+ extend VersionGem::Basic
12
+ end
data/sig/dotenv/merge.rbs CHANGED
@@ -1,212 +1,8 @@
1
- # Type signatures for dotenv-merge gem
2
- # Smart merge for .env files using line-based analysis
3
-
4
1
  module Dotenv
5
2
  module Merge
6
- VERSION: String
7
-
8
- # Base error class for dotenv-merge
9
- class Error < StandardError
10
- end
11
-
12
- # Raised when the template file cannot be parsed
13
- class TemplateParseError < Error
14
- attr_reader errors: Array[String]
15
- attr_reader content: String?
16
-
17
- def initialize: (Array[String] errors, ?content: String?) -> void
18
- end
19
-
20
- # Raised when the destination file cannot be parsed
21
- class DestinationParseError < Error
22
- attr_reader errors: Array[String]
23
- attr_reader content: String?
24
-
25
- def initialize: (Array[String] errors, ?content: String?) -> void
26
- end
27
-
28
- # Debug logging utility for Dotenv::Merge
29
- module DebugLogger
30
- extend Ast::Merge::DebugLogger
31
-
32
- def self.env_var_name: () -> String
33
- def self.env_var_name=: (String name) -> String
34
- def self.log_prefix: () -> String
35
- def self.log_prefix=: (String prefix) -> String
36
- def self.enabled?: () -> bool
37
- def self.debug: (String message, ?Hash[Symbol, untyped] context) -> void
38
- def self.info: (String message) -> void
39
- def self.warning: (String message) -> void
40
- def self.time: [T] (String operation) { () -> T } -> T
41
- def self.extract_node_info: (untyped node) -> Hash[Symbol, untyped]
42
- end
43
-
44
- # Represents a single line in a dotenv file
45
- class EnvLine
46
- attr_reader line_number: Integer
47
- attr_reader raw: String
48
- attr_reader key: String?
49
- attr_reader value: String?
50
- attr_reader comment: String?
51
-
52
- def initialize: (
53
- Integer line_number,
54
- String raw,
55
- ?key: String?,
56
- ?value: String?,
57
- ?comment: String?
58
- ) -> void
59
-
60
- def assignment?: () -> bool
61
- def comment?: () -> bool
62
- def blank?: () -> bool
63
- def signature: () -> Array[Symbol | String]
64
- def start_line: () -> Integer
65
- def end_line: () -> Integer
66
- def location: () -> Ast::Merge::FreezeNode::Location
67
- def freeze_node?: () -> bool
68
- def slice: () -> String
69
- def to_s: () -> String
70
- end
71
-
72
- # Represents a freeze block in a dotenv file
73
- class FreezeNode < Ast::Merge::FreezeNode
74
- InvalidStructureError: singleton(Ast::Merge::FreezeNode::InvalidStructureError)
75
- Location: singleton(Ast::Merge::FreezeNode::Location)
76
-
77
- attr_reader analysis: FileAnalysis
78
- attr_reader lines: Array[EnvLine]
79
- attr_reader reason: String?
80
-
81
- def initialize: (
82
- start_line: Integer,
83
- end_line: Integer,
84
- analysis: FileAnalysis,
85
- ?lines: Array[EnvLine]?,
86
- ?reason: String?,
87
- ?pattern_type: Symbol
88
- ) -> void
89
-
90
- def content: () -> String
91
- def signature: () -> Array[Symbol | String]
92
- def env_lines: () -> Array[EnvLine]
93
- def assignment?: () -> bool
94
- def comment?: () -> bool
95
- def slice: () -> String
96
- def inspect: () -> String
97
- end
98
-
99
- # File analysis for dotenv files
100
- class FileAnalysis
101
- include Ast::Merge::FileAnalysisBase
102
-
103
- DEFAULT_FREEZE_TOKEN: String
104
-
105
- attr_reader source: String
106
- attr_reader lines: Array[EnvLine]
107
- attr_reader freeze_token: String
108
- attr_reader signature_generator: (^(EnvLine) -> Array[Symbol | String]?)?
109
- attr_reader statements: Array[EnvLine | FreezeNode]
110
- attr_reader freeze_blocks: Array[FreezeNode]
111
-
112
- def initialize: (
113
- String source,
114
- ?freeze_token: String,
115
- ?signature_generator: (^(EnvLine) -> Array[Symbol | String]?)?
116
- ) -> void
117
-
118
- def valid?: () -> bool
119
- def nodes: () -> Array[EnvLine | FreezeNode]
120
- def assignment_lines: () -> Array[EnvLine]
121
- def line_at: (Integer line_number) -> String?
122
- def normalized_line: (Integer line_num) -> String?
123
- def in_freeze_block?: (Integer line_num) -> bool
124
- def freeze_block_at: (Integer line_num) -> FreezeNode?
125
- def signature_at: (Integer index) -> Array[Symbol | String]?
126
- def generate_signature: (EnvLine | FreezeNode node) -> Array[Symbol | String]?
127
- def compute_node_signature: (untyped node) -> Array[Symbol | String]?
128
-
129
- private
130
-
131
- def parse_lines: () -> Array[EnvLine]
132
- def extract_freeze_blocks: () -> Array[FreezeNode]
133
- def integrate_lines_and_freeze_blocks: () -> Array[EnvLine | FreezeNode]
134
- end
135
-
136
- # Result of a merge operation
137
- class MergeResult < Ast::Merge::MergeResult
138
- DECISION_KEPT_TEMPLATE: Symbol
139
- DECISION_KEPT_DEST: Symbol
140
- DECISION_MERGED: Symbol
141
- DECISION_ADDED: Symbol
142
- DECISION_FREEZE_BLOCK: Symbol
143
-
144
- attr_reader template_analysis: FileAnalysis
145
- attr_reader dest_analysis: FileAnalysis
146
- attr_reader lines: Array[String]
147
- attr_reader provenance: Array[Hash[Symbol, untyped]]
148
- attr_reader decisions: Array[Hash[Symbol, untyped]]
149
-
150
- def initialize: (
151
- ?template_analysis: FileAnalysis?,
152
- ?dest_analysis: FileAnalysis?,
153
- ?conflicts: Array[Hash[Symbol, untyped]],
154
- ?frozen_blocks: Array[FreezeNode],
155
- ?stats: Hash[Symbol, untyped]
156
- ) -> void
157
-
158
- def add_line: (String line, Symbol origin, ?Integer? source_line) -> void
159
- def add_env_line: (EnvLine env_line, Symbol decision) -> void
160
- def add_freeze_block: (FreezeNode freeze_node) -> void
161
- def to_s: () -> String
162
- def to_dotenv: () -> String
163
- def content: () -> Array[String]
164
- def content_string: () -> String
165
- def empty?: () -> bool
166
- end
167
-
168
- # Smart merger for dotenv files
169
- class SmartMerger
170
- include Ast::Merge::MergerConfig
171
-
172
- attr_reader template_analysis: FileAnalysis
173
- attr_reader dest_analysis: FileAnalysis
174
- attr_reader signature_match_preference: (Symbol | Hash[Symbol, Symbol])
175
- attr_reader add_template_only_nodes: bool
176
-
177
- def initialize: (
178
- String template_content,
179
- String dest_content,
180
- ?signature_match_preference: (Symbol | Hash[Symbol, Symbol]),
181
- ?add_template_only_nodes: bool,
182
- ?freeze_token: String,
183
- ?signature_generator: (^(EnvLine) -> Array[Symbol | String]?)?,
184
- ?node_splitter: Hash[Symbol, untyped]?
185
- ) -> void
186
-
187
- def merge: () -> MergeResult
188
-
189
- private
190
-
191
- def perform_merge: () -> MergeResult
192
- def merge_lines: (MergeResult result) -> void
193
- end
194
-
195
- # Conflict resolver for dotenv merges
196
- class ConflictResolver
197
- attr_reader template_analysis: FileAnalysis
198
- attr_reader dest_analysis: FileAnalysis
199
- attr_reader signature_match_preference: (Symbol | Hash[Symbol, Symbol])
200
- attr_reader add_template_only_nodes: bool
201
-
202
- def initialize: (
203
- FileAnalysis template_analysis,
204
- FileAnalysis dest_analysis,
205
- ?signature_match_preference: (Symbol | Hash[Symbol, Symbol]),
206
- ?add_template_only_nodes: bool
207
- ) -> void
208
-
209
- def resolve: (untyped boundary, MergeResult result) -> void
3
+ module Version
4
+ VERSION: String
210
5
  end
6
+ VERSION: String
211
7
  end
212
8
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dotenv-merge
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 7.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -38,45 +38,47 @@ cert_chain:
38
38
  date: 1980-01-02 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
- name: tree_haver
41
+ name: ast-merge
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '5.0'
47
- - - ">="
44
+ - - '='
48
45
  - !ruby/object:Gem::Version
49
- version: 5.0.3
46
+ version: 7.1.1
50
47
  type: :runtime
51
48
  prerelease: false
52
49
  version_requirements: !ruby/object:Gem::Requirement
53
50
  requirements:
54
- - - "~>"
55
- - !ruby/object:Gem::Version
56
- version: '5.0'
57
- - - ">="
51
+ - - '='
58
52
  - !ruby/object:Gem::Version
59
- version: 5.0.3
53
+ version: 7.1.1
60
54
  - !ruby/object:Gem::Dependency
61
- name: ast-merge
55
+ name: plain-merge
62
56
  requirement: !ruby/object:Gem::Requirement
63
57
  requirements:
64
- - - "~>"
65
- - !ruby/object:Gem::Version
66
- version: '4.0'
67
- - - ">="
58
+ - - '='
68
59
  - !ruby/object:Gem::Version
69
- version: 4.0.5
60
+ version: 7.1.1
70
61
  type: :runtime
71
62
  prerelease: false
72
63
  version_requirements: !ruby/object:Gem::Requirement
73
64
  requirements:
74
- - - "~>"
65
+ - - '='
75
66
  - !ruby/object:Gem::Version
76
- version: '4.0'
77
- - - ">="
67
+ version: 7.1.1
68
+ - !ruby/object:Gem::Dependency
69
+ name: tree_haver
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - '='
78
73
  - !ruby/object:Gem::Version
79
- version: 4.0.5
74
+ version: 7.1.1
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - '='
80
+ - !ruby/object:Gem::Version
81
+ version: 7.1.1
80
82
  - !ruby/object:Gem::Dependency
81
83
  name: version_gem
82
84
  requirement: !ruby/object:Gem::Requirement
@@ -86,7 +88,7 @@ dependencies:
86
88
  version: '1.1'
87
89
  - - ">="
88
90
  - !ruby/object:Gem::Version
89
- version: 1.1.9
91
+ version: 1.1.15
90
92
  type: :runtime
91
93
  prerelease: false
92
94
  version_requirements: !ruby/object:Gem::Requirement
@@ -96,35 +98,41 @@ dependencies:
96
98
  version: '1.1'
97
99
  - - ">="
98
100
  - !ruby/object:Gem::Version
99
- version: 1.1.9
101
+ version: 1.1.15
100
102
  - !ruby/object:Gem::Dependency
101
103
  name: kettle-dev
102
104
  requirement: !ruby/object:Gem::Requirement
103
105
  requirements:
104
106
  - - "~>"
105
107
  - !ruby/object:Gem::Version
106
- version: '1.1'
108
+ version: '2.5'
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: 2.5.17
107
112
  type: :development
108
113
  prerelease: false
109
114
  version_requirements: !ruby/object:Gem::Requirement
110
115
  requirements:
111
116
  - - "~>"
112
117
  - !ruby/object:Gem::Version
113
- version: '1.1'
118
+ version: '2.5'
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: 2.5.17
114
122
  - !ruby/object:Gem::Dependency
115
123
  name: bundler-audit
116
124
  requirement: !ruby/object:Gem::Requirement
117
125
  requirements:
118
126
  - - "~>"
119
127
  - !ruby/object:Gem::Version
120
- version: 0.9.2
128
+ version: 0.9.3
121
129
  type: :development
122
130
  prerelease: false
123
131
  version_requirements: !ruby/object:Gem::Requirement
124
132
  requirements:
125
133
  - - "~>"
126
134
  - !ruby/object:Gem::Version
127
- version: 0.9.2
135
+ version: 0.9.3
128
136
  - !ruby/object:Gem::Dependency
129
137
  name: rake
130
138
  requirement: !ruby/object:Gem::Requirement
@@ -159,40 +167,86 @@ dependencies:
159
167
  - - ">="
160
168
  - !ruby/object:Gem::Version
161
169
  version: 1.0.4
170
+ - !ruby/object:Gem::Dependency
171
+ name: anonymous_loader
172
+ requirement: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - "~>"
175
+ - !ruby/object:Gem::Version
176
+ version: '0.1'
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: 0.1.3
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '0.1'
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: 0.1.3
162
190
  - !ruby/object:Gem::Dependency
163
191
  name: appraisal2
164
192
  requirement: !ruby/object:Gem::Requirement
165
193
  requirements:
166
194
  - - "~>"
167
195
  - !ruby/object:Gem::Version
168
- version: '3.0'
196
+ version: '3.2'
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: 3.2.0
169
200
  type: :development
170
201
  prerelease: false
171
202
  version_requirements: !ruby/object:Gem::Requirement
172
203
  requirements:
173
204
  - - "~>"
174
205
  - !ruby/object:Gem::Version
175
- version: '3.0'
206
+ version: '3.2'
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: 3.2.0
176
210
  - !ruby/object:Gem::Dependency
177
211
  name: kettle-test
178
212
  requirement: !ruby/object:Gem::Requirement
179
213
  requirements:
180
214
  - - "~>"
181
215
  - !ruby/object:Gem::Version
182
- version: '1.0'
216
+ version: '2.0'
183
217
  - - ">="
184
218
  - !ruby/object:Gem::Version
185
- version: 1.0.6
219
+ version: 2.0.19
186
220
  type: :development
187
221
  prerelease: false
188
222
  version_requirements: !ruby/object:Gem::Requirement
189
223
  requirements:
190
224
  - - "~>"
191
225
  - !ruby/object:Gem::Version
192
- version: '1.0'
226
+ version: '2.0'
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: 2.0.19
230
+ - !ruby/object:Gem::Dependency
231
+ name: turbo_tests2
232
+ requirement: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: '3.2'
193
237
  - - ">="
194
238
  - !ruby/object:Gem::Version
195
- version: 1.0.6
239
+ version: 3.2.4
240
+ type: :development
241
+ prerelease: false
242
+ version_requirements: !ruby/object:Gem::Requirement
243
+ requirements:
244
+ - - "~>"
245
+ - !ruby/object:Gem::Version
246
+ version: '3.2'
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: 3.2.4
196
250
  - !ruby/object:Gem::Dependency
197
251
  name: ruby-progressbar
198
252
  requirement: !ruby/object:Gem::Requirement
@@ -216,7 +270,7 @@ dependencies:
216
270
  version: '1.0'
217
271
  - - ">="
218
272
  - !ruby/object:Gem::Version
219
- version: 1.0.2
273
+ version: 1.0.8
220
274
  type: :development
221
275
  prerelease: false
222
276
  version_requirements: !ruby/object:Gem::Requirement
@@ -226,58 +280,41 @@ dependencies:
226
280
  version: '1.0'
227
281
  - - ">="
228
282
  - !ruby/object:Gem::Version
229
- version: 1.0.2
283
+ version: 1.0.8
230
284
  - !ruby/object:Gem::Dependency
231
285
  name: gitmoji-regex
232
286
  requirement: !ruby/object:Gem::Requirement
233
287
  requirements:
234
288
  - - "~>"
235
289
  - !ruby/object:Gem::Version
236
- version: '1.0'
290
+ version: '2.0'
237
291
  - - ">="
238
292
  - !ruby/object:Gem::Version
239
- version: 1.0.3
293
+ version: 2.0.11
240
294
  type: :development
241
295
  prerelease: false
242
296
  version_requirements: !ruby/object:Gem::Requirement
243
297
  requirements:
244
298
  - - "~>"
245
299
  - !ruby/object:Gem::Version
246
- version: '1.0'
300
+ version: '2.0'
247
301
  - - ">="
248
302
  - !ruby/object:Gem::Version
249
- version: 1.0.3
250
- description: "☯️ Dotenv::Merge provides smart .env file merging that preserves comments,
251
- understands variable assignments, and supports freeze blocks for protecting sensitive
252
- configuration. Perfect for merging environment templates with local overrides."
303
+ version: 2.0.11
304
+ description: "☯️ Dotenv assignment, comment, freeze-block, and template merge behavior
305
+ for Structured Merge."
253
306
  email:
254
307
  - floss@galtzo.com
255
308
  executables: []
256
309
  extensions: []
257
- extra_rdoc_files:
258
- - CHANGELOG.md
259
- - CITATION.cff
260
- - CODE_OF_CONDUCT.md
261
- - CONTRIBUTING.md
262
- - FUNDING.md
263
- - LICENSE.txt
264
- - README.md
265
- - REEK
266
- - RUBOCOP.md
267
- - SECURITY.md
310
+ extra_rdoc_files: []
268
311
  files:
269
- - CHANGELOG.md
270
- - CITATION.cff
271
- - CODE_OF_CONDUCT.md
272
- - CONTRIBUTING.md
273
- - FUNDING.md
274
- - LICENSE.txt
312
+ - LICENSE.md
275
313
  - README.md
276
- - REEK
277
- - RUBOCOP.md
278
- - SECURITY.md
279
314
  - lib/dotenv-merge.rb
280
315
  - lib/dotenv/merge.rb
316
+ - lib/dotenv/merge/backend.rb
317
+ - lib/dotenv/merge/comment_tracker.rb
281
318
  - lib/dotenv/merge/debug_logger.rb
282
319
  - lib/dotenv/merge/env_line.rb
283
320
  - lib/dotenv/merge/file_analysis.rb
@@ -286,24 +323,25 @@ files:
286
323
  - lib/dotenv/merge/smart_merger.rb
287
324
  - lib/dotenv/merge/version.rb
288
325
  - sig/dotenv/merge.rbs
289
- - sig/dotenv/merge/env_line.rbs
290
- homepage: https://github.com/kettle-rb/dotenv-merge
326
+ homepage: https://github.com/structuredmerge/structuredmerge-ruby
291
327
  licenses:
292
- - MIT
328
+ - AGPL-3.0-only
329
+ - PolyForm-Small-Business-1.0.0
293
330
  metadata:
294
- homepage_uri: https://dotenv-merge.galtzo.com/
295
- source_code_uri: https://github.com/kettle-rb/dotenv-merge/tree/v1.0.2
296
- changelog_uri: https://github.com/kettle-rb/dotenv-merge/blob/v1.0.2/CHANGELOG.md
297
- bug_tracker_uri: https://github.com/kettle-rb/dotenv-merge/issues
298
- documentation_uri: https://www.rubydoc.info/gems/dotenv-merge/1.0.2
331
+ homepage_uri: https://structuredmerge.org
332
+ source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.1
333
+ changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.1/CHANGELOG.md
334
+ bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
335
+ documentation_uri: https://www.rubydoc.info/gems/dotenv-merge/7.1.1
299
336
  funding_uri: https://github.com/sponsors/pboling
300
- wiki_uri: https://github.com/kettle-rb/dotenv-merge/wiki
337
+ wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
301
338
  news_uri: https://www.railsbling.com/tags/dotenv-merge
302
339
  discord_uri: https://discord.gg/3qme4XHNKN
340
+ mailing_list_uri: https://www.rubyforum.org/tag/structuredmerge
303
341
  rubygems_mfa_required: 'true'
304
342
  rdoc_options:
305
343
  - "--title"
306
- - dotenv-merge - ☯️ Intelligent .env file merging using structured parsing
344
+ - dotenv-merge - ☯️ Structured Merge dotenv analysis and merge for Ruby
307
345
  - "--main"
308
346
  - README.md
309
347
  - "--exclude"
@@ -317,14 +355,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
317
355
  requirements:
318
356
  - - ">="
319
357
  - !ruby/object:Gem::Version
320
- version: 3.2.0
358
+ version: 4.0.0
321
359
  required_rubygems_version: !ruby/object:Gem::Requirement
322
360
  requirements:
323
361
  - - ">="
324
362
  - !ruby/object:Gem::Version
325
363
  version: '0'
326
364
  requirements: []
327
- rubygems_version: 4.0.5
365
+ rubygems_version: 4.0.17
328
366
  specification_version: 4
329
- summary: "☯️ Intelligent .env file merging using structured parsing"
367
+ summary: "☯️ Structured Merge dotenv analysis and merge for Ruby"
330
368
  test_files: []
metadata.gz.sig CHANGED
Binary file
data/CHANGELOG.md DELETED
@@ -1,95 +0,0 @@
1
- # Changelog
2
-
3
- [![SemVer 2.0.0][📌semver-img]][📌semver] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog]
4
-
5
- All notable changes to this project will be documented in this file.
6
-
7
- The format is based on [Keep a Changelog][📗keep-changelog],
8
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
9
- and [yes][📌major-versions-not-sacred], platform and engine support are part of the [public API][📌semver-breaking].
10
- Please file a bug if you notice a violation of semantic versioning.
11
-
12
- [📌semver]: https://semver.org/spec/v2.0.0.html
13
- [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-FFDD67.svg?style=flat
14
- [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
15
- [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
16
- [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
17
- [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat
18
-
19
- ## [Unreleased]
20
-
21
- ### Added
22
-
23
- ### Changed
24
-
25
- ### Deprecated
26
-
27
- ### Removed
28
-
29
- ### Fixed
30
-
31
- ### Security
32
-
33
- ## [1.0.2] - 2026-02-01
34
-
35
- - TAG: [v1.0.2][1.0.2t]
36
- - COVERAGE: 97.73% -- 345/353 lines in 8 files
37
- - BRANCH COVERAGE: 83.06% -- 103/124 branches in 8 files
38
- - 96.83% documented
39
-
40
- ### Added
41
-
42
- - Utilizes `Ast::Merge::RSpec::MergeGemRegistry` when running RSpec tests
43
-
44
- ### Changed
45
-
46
- - Documentation cleanup
47
- - Upgrade to [ast-merge v4.0.5](https://github.com/kettle-rb/ast-merge/releases/tag/v4.0.5)
48
- - Upgrade to [tree_haver v5.0.3](https://github.com/kettle-rb/tree_haver/releases/tag/v5.0.3)
49
-
50
- ## [1.0.1] - 2026-01-01
51
-
52
- - TAG: [v1.0.1][1.0.1t]
53
- - COVERAGE: 97.72% -- 343/351 lines in 8 files
54
- - BRANCH COVERAGE: 83.61% -- 102/122 branches in 8 files
55
- - 96.83% documented
56
-
57
- ### Added
58
-
59
- - `node_typing` parameter for per-node-type merge preferences
60
- - Enables `preference: { default: :destination, special_type: :template }` pattern
61
- - Works with custom merge_types assigned via node_typing lambdas
62
- - `match_refiner` parameter for fuzzy matching support
63
- - `regions` and `region_placeholder` parameters for nested content merging
64
- - `EnvLine#type` method returning `"env_line"` for TreeHaver::Node protocol compatibility
65
-
66
- ### Changed
67
-
68
- - **SmartMerger**: Added `**options` for forward compatibility
69
- - Accepts additional options that may be added to base class in future
70
- - Passes all options through to `SmartMergerBase`
71
- - **MergeResult**: Added `**options` for forward compatibility
72
- - **BREAKING**: `SmartMerger` now inherits from `Ast::Merge::SmartMergerBase`
73
- - Provides standardized options API consistent with all other `*-merge` gems
74
- - All keyword arguments are now explicit (no more positional-only arguments)
75
- - Gains automatic support for new SmartMergerBase features
76
- - Renamed `EnvLine#type` attribute to `EnvLine#line_type` to avoid conflict with TreeHaver::Node protocol
77
-
78
- ## [1.0.0] - 2025-12-12
79
-
80
- - TAG: [v1.0.0][1.0.0t]
81
- - COVERAGE: 97.85% -- 319/326 lines in 8 files
82
- - BRANCH COVERAGE: 82.69% -- 86/104 branches in 8 files
83
- - 96.97% documented
84
-
85
- ### Added
86
-
87
- - Initial release
88
-
89
- [Unreleased]: https://github.com/kettle-rb/dotenv-merge/compare/v1.0.2...HEAD
90
- [1.0.2]: https://github.com/kettle-rb/dotenv-merge/compare/v1.0.1...v1.0.2
91
- [1.0.2t]: https://github.com/kettle-rb/dotenv-merge/releases/tag/v1.0.2
92
- [1.0.1]: https://github.com/kettle-rb/dotenv-merge/compare/v1.0.0...v1.0.1
93
- [1.0.1t]: https://github.com/kettle-rb/dotenv-merge/releases/tag/v1.0.1
94
- [1.0.0]: https://github.com/kettle-rb/dotenv-merge/compare/a34c8f20c877a45d03b9f0b83b973614e123a92b...v1.0.0
95
- [1.0.0t]: https://github.com/kettle-rb/dotenv-merge/tags/v1.0.0