milieu 0.0.2 → 0.1.0

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: b93d7c84ab238126d6755d8caff3bb7620d38b57f58d0394630150b54ed5613e
4
- data.tar.gz: a5c89fa6ad45d888ed097996016e649b2cdffd79e4f4c7929bc9039a9a37e6a6
3
+ metadata.gz: f9bfa6c19d9d9140f6b48910845044ed3f7bf9582b8c8769bff1a3ff9f13c2c0
4
+ data.tar.gz: cc1df2f3b560aac2eba4c2011ecbc4981ae7d5a4eb02403233e846fc24111b74
5
5
  SHA512:
6
- metadata.gz: 6e1da56d1addcc84b35c8d9727323a8a4537b9f2f36288e00dc29d3c10c24578c67dd9e77b61156cf93d34665a67855557dcfe129b41874182505514d0dd3a34
7
- data.tar.gz: c703e841c1968bec75a2532b0384b53c59ca866a35500685b676a8b827e5d53877f555a1902bdf09fbe8264144285cac419aa6855c3a488b4b8d97ebba703101
6
+ metadata.gz: 6f6dd1ad33ad4035781f407baad358bc0b853c2749e53c1cbdc96ab26b52b6d3621366801bd0e07c689ddb8e0d95566fbf3f1f1fd72291cd6254fce3c0d28ba0
7
+ data.tar.gz: 5b67e52563f9152c882e6c049372292bd57db11d2358c2bd3422c4aab3bad5faad87792ce8a4f1eec39a17256ddf8494e7e99b4d5ae4a3a7e2b098ca1b2f9226
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  ## [Released]
2
2
 
3
+ ## [0.1.0] - 2026-02-25
4
+
5
+ - Moved source code to Codeberg
6
+ - Generate `.development.env`, `.test.env`, `.production.env` files
7
+
3
8
  ## [0.0.2] - 2025-04-11
4
9
 
5
10
  - Initial release
data/README.md CHANGED
@@ -18,17 +18,19 @@ gem install milieu
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ Run `milieu init` to create a new workspace. It will create a folder `.milieu/schema.rb`.
22
+
23
+ You can make changes to the schema and then run `milieu dump` to export them to an `.env` file
22
24
 
23
25
  ## Development
24
26
 
25
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
27
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
26
28
 
27
29
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
28
30
 
29
31
  ## Contributing
30
32
 
31
- Bug reports and pull requests are welcome on GitHub at https://github.com/dcaaraujo/milieu. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/dcaaraujo/milieu/blob/main/CODE_OF_CONDUCT.md).
33
+ Bug reports and pull requests are welcome on Codeberg at https://codeberg.org/dcaraujo/milieu. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://codeberg.org/dcaraujo/milieu/src/branch/main/CODE_OF_CONDUCT.md).
32
34
 
33
35
  ## License
34
36
 
@@ -36,5 +38,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
36
38
 
37
39
  ## Code of Conduct
38
40
 
39
- Everyone interacting in the Milieu project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/dcaaraujo/milieu/blob/main/CODE_OF_CONDUCT.md).
40
-
41
+ Everyone interacting in the Milieu project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://codeberg.org/dcaraujo/milieu/src/branch/main/CODE_OF_CONDUCT.md).
data/Rakefile CHANGED
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bundler/gem_tasks"
4
- require "minitest/test_task"
4
+ require "rspec/core/rake_task"
5
5
 
6
- Minitest::TestTask.create
6
+ RSpec::Core::RakeTask.new(:spec)
7
7
 
8
8
  require "standard/rake"
9
9
 
10
- task default: %i[test standard]
10
+ task default: %i[spec standard]
data/bin/milieu ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "../lib/milieu"
5
+
6
+ Milieu::CLI.run
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/cli"
4
+
5
+ module Milieu
6
+ module CLI
7
+ module Command
8
+ class Dump < Dry::CLI::Command
9
+ desc "Creates or replaces .env file from schema"
10
+
11
+ argument :path
12
+
13
+ def call(path: ".", **)
14
+ @schema_file = File.join(path, ".milieu", "schema.rb")
15
+ unless File.exist?(@schema_file)
16
+ warn "Could not find schema.rb in your Milieu workspace.\n"
17
+ return
18
+ end
19
+ export_env_file
20
+ end
21
+
22
+ private
23
+
24
+ def export_env_file
25
+ Milieu::EnvFileExporter.new(read_schema).export
26
+ end
27
+
28
+ def read_schema
29
+ instance_eval(File.read(@schema_file))
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/cli"
4
+
5
+ module Milieu
6
+ module CLI
7
+ module Command
8
+ class Init < Dry::CLI::Command
9
+ desc "Create a new Milieu workspace"
10
+
11
+ argument :path
12
+
13
+ def call(path: ".", **)
14
+ @milieu_folder = File.join(path, ".milieu")
15
+ if Dir.exist?(@milieu_folder)
16
+ warn "Milieu workspace already exists.\n"
17
+ return
18
+ end
19
+ create_workspace_dir
20
+ create_schema_file
21
+ end
22
+
23
+ private
24
+
25
+ def create_workspace_dir
26
+ Dir.mkdir(@milieu_folder)
27
+ end
28
+
29
+ def create_schema_file
30
+ schema_file_path = File.join(@milieu_folder, "schema.rb")
31
+ content = <<~RUBY
32
+ # frozen_string_literal: true
33
+
34
+ Milieu::Schema.create do
35
+ end
36
+ RUBY
37
+ File.write(schema_file_path, content)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/cli"
4
+
5
+ module Milieu
6
+ module CLI
7
+ module Command
8
+ class Version < Dry::CLI::Command
9
+ desc "Prints the current version"
10
+
11
+ def call(*)
12
+ puts Milieu::VERSION
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/cli"
4
+
5
+ module Milieu
6
+ module CLI
7
+ module Registry
8
+ extend Dry::CLI::Registry
9
+
10
+ register "version", Command::Version, aliases: ["-v", "--version"]
11
+ register "init", Command::Init
12
+ register "dump", Command::Dump
13
+ end
14
+ end
15
+ end
data/lib/milieu/cli.rb CHANGED
@@ -1,21 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "thor"
3
+ require "dry/cli"
4
4
 
5
5
  module Milieu
6
- class CLI < Thor
7
- include Thor::Actions
6
+ module CLI
7
+ extend self
8
8
 
9
- desc "version", "Prints current version"
10
- def version
11
- puts Milieu::VERSION
12
- end
13
-
14
- desc "init DIR", "Creates a new Milieu workspace"
15
- option :quiet, type: :boolean, required: false
16
- def init(dir)
17
- empty_directory("#{dir}/.milieu", verbose: !options[:quiet])
18
- create_file("#{dir}/.milieu/.keep", verbose: !options[:quiet])
9
+ def run
10
+ Dry::CLI.new(Milieu::CLI::Registry).call
19
11
  end
20
12
  end
21
13
  end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Milieu
4
+ class EnvFileExporter
5
+ def initialize(schema)
6
+ @schema = schema
7
+ end
8
+
9
+ def export
10
+ File.write("./.env", export_schema)
11
+ File.write("./.env.development", export_development_schema)
12
+ File.write("./.env.test", export_test_schema)
13
+ File.write("./.env.production", export_production_schema)
14
+ end
15
+
16
+ def export_schema
17
+ @schema.env_variables.map { |key, value| "#{key}=#{format_value(value)}\n" }.join
18
+ end
19
+
20
+ def export_development_schema
21
+ @schema.env_overrides[:development].map { |key, value| "#{key}=#{format_value(value)}\n" }.join
22
+ end
23
+
24
+ def export_test_schema
25
+ @schema.env_overrides[:test].map { |key, value| "#{key}=#{format_value(value)}\n" }.join
26
+ end
27
+
28
+ def export_production_schema
29
+ @schema.env_overrides[:production].map { |key, value| "#{key}=#{format_value(value)}\n" }.join
30
+ end
31
+
32
+ def format_value(value)
33
+ case value
34
+ when String
35
+ %("#{value}")
36
+ else
37
+ value
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Milieu
4
+ class Schema
5
+ attr_accessor :env_variables
6
+ attr_accessor :env_overrides
7
+
8
+ def self.create(&block)
9
+ new.tap do |schema|
10
+ schema.instance_eval(&block)
11
+ end
12
+ end
13
+
14
+ def initialize
15
+ @env_variables = {}
16
+ @env_overrides = {development: {}, test: {}, production: {}}
17
+ end
18
+
19
+ def add(key, value, overrides = {})
20
+ env_key = normalize_key(key)
21
+ @env_variables[env_key] = value
22
+ if overrides[:development]
23
+ @env_overrides[:development][env_key] = overrides[:development]
24
+ end
25
+ if overrides[:test]
26
+ @env_overrides[:test][env_key] = overrides[:test]
27
+ end
28
+ if overrides[:production]
29
+ @env_overrides[:production][env_key] = overrides[:production]
30
+ end
31
+ self
32
+ end
33
+
34
+ def remove(key)
35
+ @env_variables.delete(normalize_key(key))
36
+ self
37
+ end
38
+
39
+ private
40
+
41
+ def normalize_key(key)
42
+ key.to_s.upcase
43
+ end
44
+ end
45
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Milieu
4
- VERSION = "0.0.2"
4
+ VERSION = "0.1.0"
5
5
  end
data/lib/milieu.rb CHANGED
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "milieu/version"
4
- require_relative "milieu/cli"
3
+ require "zeitwerk"
4
+
5
+ loader = Zeitwerk::Loader.for_gem
6
+ loader.setup
7
+ loader.inflector.inflect("cli" => "CLI")
5
8
 
6
9
  module Milieu
7
10
  end
data/mise.toml ADDED
@@ -0,0 +1,2 @@
1
+ [tools]
2
+ ruby = "4.0.1"
metadata CHANGED
@@ -1,51 +1,126 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: milieu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Araujo
8
- bindir: exe
8
+ bindir: bin
9
9
  cert_chain: []
10
- date: 2025-04-12 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
- name: thor
13
+ name: dry-cli
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '1.3'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '1.3'
26
+ - !ruby/object:Gem::Dependency
27
+ name: zeitwerk
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.7'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.7'
40
+ - !ruby/object:Gem::Dependency
41
+ name: irb
14
42
  requirement: !ruby/object:Gem::Requirement
15
43
  requirements:
16
44
  - - ">="
17
45
  - !ruby/object:Gem::Version
18
46
  version: '0'
19
- type: :runtime
47
+ type: :development
20
48
  prerelease: false
21
49
  version_requirements: !ruby/object:Gem::Requirement
22
50
  requirements:
23
51
  - - ">="
24
52
  - !ruby/object:Gem::Version
25
53
  version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: rake
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '13.0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '13.0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rspec
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.0'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3.0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: standard
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '1.3'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.3'
26
96
  executables:
27
97
  - milieu
28
98
  extensions: []
29
99
  extra_rdoc_files: []
30
100
  files:
31
- - ".standard.yml"
32
101
  - CHANGELOG.md
33
102
  - CODE_OF_CONDUCT.md
34
103
  - LICENSE.txt
35
104
  - README.md
36
105
  - Rakefile
37
- - exe/milieu
106
+ - bin/milieu
38
107
  - lib/milieu.rb
39
108
  - lib/milieu/cli.rb
109
+ - lib/milieu/cli/command/dump.rb
110
+ - lib/milieu/cli/command/init.rb
111
+ - lib/milieu/cli/command/version.rb
112
+ - lib/milieu/cli/registry.rb
113
+ - lib/milieu/env_file_exporter.rb
114
+ - lib/milieu/schema.rb
40
115
  - lib/milieu/version.rb
41
- - sig/milieu.rbs
42
- homepage: https://github.com/dcaaraujo/milieu
116
+ - mise.toml
117
+ homepage: https://codeberg.org/dcaraujo/milieu
43
118
  licenses:
44
119
  - MIT
45
120
  metadata:
46
- homepage_uri: https://github.com/dcaaraujo/milieu
47
- source_code_uri: https://github.com/dcaaraujo/milieu
48
- changelog_uri: https://github.com/dcaaraujo/milieu/blob/main/CHANGELOG.md
121
+ homepage_uri: https://codeberg.org/dcaraujo/milieu
122
+ source_code_uri: https://codeberg.org/dcaraujo/milieu
123
+ changelog_uri: https://codeberg.org/dcaraujo/milieu/src/branch/main/CODE_OF_CONDUCT.md
49
124
  rdoc_options: []
50
125
  require_paths:
51
126
  - lib
@@ -53,14 +128,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
53
128
  requirements:
54
129
  - - ">="
55
130
  - !ruby/object:Gem::Version
56
- version: 3.1.0
131
+ version: 3.2.0
57
132
  required_rubygems_version: !ruby/object:Gem::Requirement
58
133
  requirements:
59
134
  - - ">="
60
135
  - !ruby/object:Gem::Version
61
136
  version: '0'
62
137
  requirements: []
63
- rubygems_version: 3.6.6
138
+ rubygems_version: 4.0.6
64
139
  specification_version: 4
65
- summary: A simple tool to gracefully manage your env files
140
+ summary: A simple tool to gracefully manage your env files.
66
141
  test_files: []
data/.standard.yml DELETED
@@ -1,3 +0,0 @@
1
- # For available configuration options, see:
2
- # https://github.com/standardrb/standard
3
- ruby_version: 3.1
data/exe/milieu DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- $LOAD_PATH.unshift("#{__dir__}/../lib")
5
-
6
- require "milieu/cli"
7
-
8
- Milieu::CLI.start ARGV.clone
data/sig/milieu.rbs DELETED
@@ -1,4 +0,0 @@
1
- module Milieu
2
- VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- end