Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/bkeepers/dotenv
Browse files Browse the repository at this point in the history
  • Loading branch information
nitsujri committed Apr 1, 2022
2 parents da92d8b + c237d6d commit 7d79f66
Show file tree
Hide file tree
Showing 11 changed files with 105 additions and 76 deletions.
10 changes: 10 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
version: 2
updates:
- package-ecosystem: "bundler"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
23 changes: 0 additions & 23 deletions .github/main.workflow

This file was deleted.

31 changes: 31 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: CI
on:
push:
branches: [master]
pull_request:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
ruby: ['2.5', '2.6', '2.7', '3.0']
steps:
- name: Check out repository code
uses: actions/checkout@v2
- name: Do some action caching
uses: actions/cache@v2.1.6
with:
path: vendor
key: ${{ runner.os }}-gem-${{ hashFiles('Gemfile', '*.gemspec') }}
restore-keys: |
${{ runner.os }}-gem-
- name: Set up Ruby
uses: actions/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
- name: Install bundler
run: gem install bundler
- name: Run bundler
run: bundle install --jobs 4 --retry 3
- name: Run Rake
run: bundle exec rake
19 changes: 19 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Publish Gem
on: release
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Release dotenv
uses: cadwallion/publish-rubygems-action@master
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}}
RELEASE_COMMAND: rake dotenv:release
- name: Release dotenv-rails
uses: cadwallion/publish-rubygems-action@master
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}}
RELEASE_COMMAND: rake dotenv-rails:release
24 changes: 0 additions & 24 deletions .travis.yml

This file was deleted.

14 changes: 0 additions & 14 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,3 @@ group :guard do
gem "guard-bundler"
gem "rb-fsevent"
end

platforms :rbx do
gem "rubysl", "~> 2.0" # if using anything in the ruby standard library
end

if Gem::Version.create(RUBY_VERSION) < Gem::Version.create("2.2.2")
# Rack 2 requires Ruby version >= 2.2.2
gem "rack", ">= 1.6.5", "< 2.0.0"
end

if Gem::Version.create(RUBY_VERSION) < Gem::Version.create("2.1.0")
# Nokogiri 1.7 requires Ruby version >= 2.1.0.
gem "nokogiri", ">= 1.6.8", "< 1.7.0"
end
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# dotenv [![Build Status](https://secure.travis-ci.org/bkeepers/dotenv.svg?branch=master)](https://travis-ci.org/bkeepers/dotenv) [![Gem Version](https://badge.fury.io/rb/dotenv.svg)](https://badge.fury.io/rb/dotenv) [![Join the chat at https://gitter.im/bkeepers/dotenv](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/bkeepers/dotenv?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
# dotenv [![Gem Version](https://badge.fury.io/rb/dotenv.svg)](https://badge.fury.io/rb/dotenv) [![Join the chat at https://gitter.im/bkeepers/dotenv](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/bkeepers/dotenv?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

Shim to load environment variables from `.env` into `ENV` in *development*.

Expand Down
32 changes: 22 additions & 10 deletions lib/dotenv/parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -70,16 +70,9 @@ def parse_line(line)
def parse_value(value)
# Remove surrounding quotes
value = value.strip.sub(/\A(['"])(.*)\1\z/m, '\2')

if Regexp.last_match(1) == '"'
value = unescape_characters(expand_newlines(value))
end

if Regexp.last_match(1) != "'"
self.class.substitutions.each do |proc|
value = proc.call(value, @hash, @is_load)
end
end
maybe_quote = Regexp.last_match(1)
value = unescape_value(value, maybe_quote)
value = perform_substitutions(value, maybe_quote)
value
end

Expand All @@ -94,5 +87,24 @@ def expand_newlines(value)
def variable_not_set?(line)
!line.split[1..-1].all? { |var| @hash.member?(var) }
end

def unescape_value(value, maybe_quote)
if maybe_quote == '"'
unescape_characters(expand_newlines(value))
elsif maybe_quote.nil?
unescape_characters(value)
else
value
end
end

def perform_substitutions(value, maybe_quote)
if maybe_quote != "'"
self.class.substitutions.each do |proc|
value = proc.call(value, @hash, @is_load)
end
end
value
end
end
end
13 changes: 9 additions & 4 deletions lib/dotenv/template.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
module Dotenv
EXPORT_COMMAND = "export ".freeze
# Class for creating a template from a env file
class EnvTemplate
def initialize(env_file)
Expand All @@ -9,13 +10,17 @@ def create_template
File.open(@env_file, "r") do |env_file|
File.open("#{@env_file}.template", "w") do |env_template|
env_file.each do |line|
var, value = line.split("=")
is_a_comment = var.strip[0].eql?("#")
line_transform = value.nil? || is_a_comment ? line : "#{var}=#{var}"
env_template.puts line_transform
env_template.puts template_line(line)
end
end
end
end

def template_line(line)
var, value = line.split("=")
template = var.gsub(EXPORT_COMMAND, "")
is_a_comment = var.strip[0].eql?("#")
value.nil? || is_a_comment ? line : "#{var}=#{template}"
end
end
end
9 changes: 9 additions & 0 deletions spec/dotenv/cli_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,15 @@ def run(*args)
expect(@buffer.string).to eq("FOO=FOO\nFOO2=FOO2\n")
end

it "templates variables with export prefix" do
@input = StringIO.new("export FOO=BAR\nexport FOO2=BAR2")
allow(File).to receive(:open).with(@origin_filename, "r").and_yield(@input)
allow(File).to receive(:open).with(@template_filename, "w").and_yield(@buffer)
cli = Dotenv::CLI.new(["-t", @origin_filename])
cli.send(:parse_argv!, cli.argv)
expect(@buffer.string).to eq("export FOO=FOO\nexport FOO2=FOO2\n")
end

it "ignores blank lines" do
@input = StringIO.new("\nFOO=BAR\nFOO2=BAR2")
allow(File).to receive(:open).with(@origin_filename, "r").and_yield(@input)
Expand Down
4 changes: 4 additions & 0 deletions spec/dotenv/parser_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ def env(string)
expect(env("FOO= bar")).to eql("FOO" => "bar")
end

it "parses unquoted escape characters correctly" do
expect(env("FOO=bar\\ bar")).to eql("FOO" => "bar bar")
end

it "parses values with spaces around equal sign" do
expect(env("FOO =bar")).to eql("FOO" => "bar")
expect(env("FOO= bar")).to eql("FOO" => "bar")
Expand Down

0 comments on commit 7d79f66

Please sign in to comment.