dotenv 0.5.0 → 0.6.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.
@@ -1,17 +1,45 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.6.0 - Mar 22, 2013
4
+
5
+ * Add dotenv-rails gem for autoloading in a Rails app
6
+
7
+ * Deprecated autoloading with plain dotenv gem
8
+
9
+ * Support for double quotes
10
+
11
+ A="some value"
12
+ B="with \"escaped\" quotes"
13
+ C="and newline\n expansion"
14
+
15
+ * Support for pow-style variables prefixed with export
16
+
17
+ export VARIABLE="some value"
18
+
19
+ [Full Changelog](https://github.com/bkeepers/dotenv/compare/v0.5.0...v0.6.0)
20
+
3
21
  ## 0.5.0 - Jan 25, 2013
4
22
 
5
23
  * Load immediately on require in Rails instead of waiting for initialization
24
+
6
25
  * Add YAML-style variables
7
- VARIABLE: some value
26
+
27
+ VARIABLE: some value
28
+
29
+ [Full Changelog](https://github.com/bkeepers/dotenv/compare/v0.4.0...v0.5.0)
8
30
 
9
31
  ## 0.4.0 - Nov 13, 2012
10
32
 
11
33
  * Add support for quoted options, e.g.:
12
- VARIABLE='some value'
34
+
35
+ VARIABLE='some value'
36
+
13
37
  * Fix rake deprecation warnings
14
38
 
39
+ [Full Changelog](https://github.com/bkeepers/dotenv/compare/v0.3.0...v0.4.0)
40
+
15
41
  ## 0.3.0 - Oct 25, 2012
16
42
 
17
43
  * Avoid overriding existing ENV variables so values set before loading the app are maintained.
44
+
45
+ [Full Changelog](https://github.com/bkeepers/dotenv/compare/v0.2.0...v0.3.0)
data/Gemfile CHANGED
@@ -1,2 +1,6 @@
1
1
  source 'https://rubygems.org'
2
- gemspec
2
+ gemspec :name => 'dotenv'
3
+
4
+ gem 'guard-rspec'
5
+ gem 'guard-bundler'
6
+ gem 'rb-fsevent'
@@ -0,0 +1,9 @@
1
+ guard 'bundler' do
2
+ watch('Gemfile')
3
+ end
4
+
5
+ guard 'rspec', :cli => '--color' do
6
+ watch(%r{^spec/.+_spec\.rb$})
7
+ watch(%r{^spec/spec_helper.rb$}) { "spec" }
8
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
9
+ end
data/README.md CHANGED
@@ -11,7 +11,7 @@ Read more about the [motivation for dotenv at opensoul.org](http://opensoul.org/
11
11
  Add this line to your application's Gemfile:
12
12
 
13
13
  ```ruby
14
- gem 'dotenv', :groups => [:development, :test]
14
+ gem 'dotenv-rails', :groups => [:development, :test]
15
15
  ```
16
16
 
17
17
  And then execute:
@@ -43,25 +43,26 @@ end
43
43
 
44
44
  ## Usage
45
45
 
46
- Add your application configuration to `.env`.
46
+ Add your application configuration to your `.env` file in the root of
47
+ your project:
47
48
 
48
49
  ```shell
49
- S3_BUCKET=dotenv
50
- SECRET_KEY=sssshhh!
50
+ S3_BUCKET=YOURS3BUCKET
51
+ SECRET_KEY=YOURSECRETKEYGOESHERE
51
52
  ```
52
53
 
53
54
  You can also create files per environment, such as `.env.test`:
54
55
 
55
56
  ```shell
56
- S3_BUCKET=test
57
- SECRET_KEY=test
57
+ S3_BUCKET=tests3bucket
58
+ SECRET_KEY=testsecretkey
58
59
  ```
59
60
 
60
61
  An alternate yaml-like syntax is supported:
61
62
 
62
63
  ```yaml
63
- S3_BUCKET: dotenv
64
- SECRET_KEY: 'sesame, open'
64
+ S3_BUCKET: yamlstyleforyours3bucket
65
+ SECRET_KEY: thisisalsoanokaysecret
65
66
  ```
66
67
 
67
68
  Whenever your application loads, these variables will be available in `ENV`:
data/Rakefile CHANGED
@@ -1,5 +1,16 @@
1
1
  #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
2
+
3
+ require 'bundler/gem_helper'
4
+ %w(dotenv dotenv-rails).each do |name|
5
+ namespace name do
6
+ Bundler::GemHelper.install_tasks :name => name
7
+ end
8
+
9
+ task :build => "#{name}:build"
10
+ task :install => "#{name}:install"
11
+ task :release => "#{name}:release"
12
+ end
13
+
3
14
  require 'rspec/core/rake_task'
4
15
 
5
16
  desc "Run all specs"
@@ -8,5 +19,4 @@ RSpec::Core::RakeTask.new(:spec) do |t|
8
19
  t.verbose = false
9
20
  end
10
21
 
11
-
12
- task :default => :spec
22
+ task :default => :spec
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/dotenv/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.version = Dotenv::VERSION
6
+ gem.authors = ["Brandon Keepers"]
7
+ gem.email = ["brandon@opensoul.org"]
8
+ gem.description = %q{Autoload dotenv in Rails.}
9
+ gem.summary = %q{Autoload dotenv in Rails.}
10
+ gem.homepage = "https://github.com/bkeepers/dotenv"
11
+
12
+ gem.files = ["lib/dotenv-rails.rb"]
13
+ gem.name = "dotenv-rails"
14
+ gem.require_paths = ["lib"]
15
+
16
+ gem.add_dependency 'dotenv', Dotenv::VERSION
17
+ end
@@ -1,7 +1,8 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/dotenv/version', __FILE__)
2
3
 
3
4
  Gem::Specification.new do |gem|
4
- gem.version = '0.5.0'
5
+ gem.version = Dotenv::VERSION
5
6
  gem.authors = ["Brandon Keepers"]
6
7
  gem.email = ["brandon@opensoul.org"]
7
8
  gem.description = %q{Loads environment variables from `.env`.}
@@ -0,0 +1,2 @@
1
+ require 'dotenv/railtie'
2
+ Dotenv::Railtie.no_warn!
@@ -9,4 +9,5 @@ module Dotenv
9
9
  end
10
10
  end
11
11
 
12
+ # Deprecated
12
13
  require 'dotenv/railtie' if defined?(Rails) and defined?(Rails::Railtie)
@@ -7,7 +7,16 @@ module Dotenv
7
7
 
8
8
  def load
9
9
  read.each do |line|
10
- self[$1] = $2 || $3 if line =~ /\A(\w+)(?:=|: ?)(?:'([^']*)'|([^']*))\z/
10
+ if line =~ /\A(?:export\s+)?(\w+)(?:=|: ?)(.*)\z/
11
+ key = $1
12
+ case val = $2
13
+ # Remove single quotes
14
+ when /\A'(.*)'\z/ then self[key] = $1
15
+ # Remove double quotes and unescape string preserving newline characters
16
+ when /\A"(.*)"\z/ then self[key] = $1.gsub('\n', "\n").gsub(/\\(.)/, '\1')
17
+ else self[key] = val
18
+ end
19
+ end
11
20
  end
12
21
  end
13
22
 
@@ -1,3 +1,5 @@
1
+ require 'dotenv'
2
+
1
3
  module Dotenv
2
4
  class Railtie < Rails::Railtie
3
5
  include Rake::DSL if defined?(Rake)
@@ -8,6 +10,25 @@ module Dotenv
8
10
  Dotenv.load ".env.#{Rails.env}", '.env'
9
11
  end
10
12
  end
13
+
14
+ class << self
15
+ def no_warn!
16
+ @no_warn = true
17
+ end
18
+
19
+ def no_warn?
20
+ @no_warn
21
+ end
22
+ end
23
+
24
+ initializer 'dotenv', :group => :all do
25
+ unless self.class.no_warn?
26
+ warn <<-EOF
27
+ [DEPRECATION] Autoloading for dotenv has been moved to the `dotenv-rails` gem. Change your Gemfile to:
28
+ gem 'dotenv-rails', :groups => [:development, :test]
29
+ EOF
30
+ end
31
+ end
11
32
  end
12
33
  end
13
34
 
@@ -0,0 +1,3 @@
1
+ module Dotenv
2
+ VERSION = '0.6.0'
3
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dotenv::Environment do
4
+ subject { env("OPTION_A=1\nOPTION_B=2") }
5
+
6
+ describe 'initialize' do
7
+ it 'reads the file' do
8
+ expect(subject['OPTION_A']).to eq('1')
9
+ expect(subject['OPTION_B']).to eq('2')
10
+ end
11
+ end
12
+
13
+ describe 'apply' do
14
+ it 'sets variables in ENV' do
15
+ subject.apply
16
+ expect(ENV['OPTION_A']).to eq('1')
17
+ end
18
+
19
+ it 'does not override defined variables' do
20
+ ENV['OPTION_A'] = 'predefined'
21
+ subject.apply
22
+ expect(ENV['OPTION_A']).to eq('predefined')
23
+ end
24
+
25
+ context 'when the file does not exist' do
26
+ subject { Dotenv::Environment.new('.env_does_not_exist') }
27
+
28
+ it 'fails silently' do
29
+ expect { subject.apply }.not_to raise_error
30
+ expect(ENV.keys).to eq(@env_keys)
31
+ end
32
+ end
33
+ end
34
+
35
+ it 'parses unquoted values' do
36
+ expect(env('FOO=bar')).to eql({'FOO' => 'bar'})
37
+ end
38
+
39
+ it 'parses double quoted values' do
40
+ expect(env('FOO="bar"')).to eql({'FOO' => 'bar'})
41
+ end
42
+
43
+ it 'parses single quoted values' do
44
+ expect(env("FOO='bar'")).to eql({'FOO' => 'bar'})
45
+ end
46
+
47
+ it 'parses escaped double quotes' do
48
+ expect(env('FOO="escaped\"bar"')).to eql({'FOO' => 'escaped"bar'})
49
+ end
50
+
51
+ it 'parses yaml style options' do
52
+ expect(env("OPTION_A: 1")).to eql('OPTION_A' => '1')
53
+ end
54
+
55
+ it 'parses export keyword' do
56
+ expect(env("export OPTION_A=2")).to eql('OPTION_A' => '2')
57
+ end
58
+
59
+ it 'expands newlines in quoted strings' do
60
+ expect(env('FOO="bar\nbaz"')).to eql({"FOO" => "bar\nbaz"})
61
+ end
62
+
63
+ require 'tempfile'
64
+ def env(text)
65
+ file = Tempfile.new('dotenv')
66
+ file.write text
67
+ file.close
68
+ env = Dotenv::Environment.new(file.path)
69
+ file.unlink
70
+ env
71
+ end
72
+ end
@@ -3,14 +3,6 @@ require 'spec_helper'
3
3
  describe Dotenv do
4
4
  let(:env_path) { fixture_path('plain.env') }
5
5
 
6
- before do
7
- @env_keys = ENV.keys
8
- end
9
-
10
- after do
11
- ENV.delete_if { |k,v| !@env_keys.include?(k) }
12
- end
13
-
14
6
  describe 'load' do
15
7
  context 'with no args' do
16
8
  it 'defaults to .env' do
@@ -39,79 +31,10 @@ describe Dotenv do
39
31
  it 'returns hash of loaded environments' do
40
32
  expect(subject).to eq(expected)
41
33
  end
42
-
43
- context 'with quoted file' do
44
- let(:expected) do
45
- {'OPTION_A' => '1', 'OPTION_B' => '2', 'OPTION_C' => '', 'OPTION_D' => '\n', 'DOTENV' => 'true'}
46
- end
47
- let(:env_path) { fixture_path('quoted.env') }
48
-
49
- it 'returns hash of loaded environments' do
50
- expect(subject).to eq(expected)
51
- end
52
-
53
- end
54
-
55
- context 'with yaml file' do
56
- let(:expected) do
57
- {'OPTION_A' => '1', 'OPTION_B' => '2', 'OPTION_C' => '', 'OPTION_D' => '\n', 'DOTENV' => 'true'}
58
- end
59
- let(:env_path) { fixture_path('yaml.env') }
60
-
61
- it 'returns hash of loaded environments' do
62
- expect(subject).to eq(expected)
63
- end
64
-
65
- end
66
34
  end
67
35
  end
68
36
 
69
- describe Dotenv::Environment do
70
- subject { Dotenv::Environment.new(env_path) }
71
-
72
- context 'with a plain env file' do
73
-
74
- describe 'initialize' do
75
- it 'reads environment config' do
76
- expect(subject['OPTION_A']).to eq('1')
77
- expect(subject['OPTION_B']).to eq('2')
78
- end
79
- end
80
-
81
- describe 'apply' do
82
- it 'sets variables in ENV' do
83
- subject.apply
84
- expect(ENV['OPTION_A']).to eq('1')
85
- end
86
-
87
- it 'does not override defined variables' do
88
- ENV['OPTION_A'] = 'predefined'
89
- subject.apply
90
- expect(ENV['OPTION_A']).to eq('predefined')
91
- end
92
- end
93
- end
94
-
95
- context 'when the file does not exist' do
96
- let(:env_path) { fixture_path('.env_does_not_exist') }
97
-
98
- describe 'initialize' do
99
- it 'fails silently' do
100
- expect { Dotenv::Environment.new('.env_does_not_exist') }.not_to raise_error
101
- end
102
- end
103
-
104
- describe 'apply' do
105
- it 'does not effect env' do
106
- subject.apply
107
- expect(ENV.keys).to eq(@env_keys)
108
- end
109
- end
110
- end
111
-
112
- end
113
-
114
37
  def fixture_path(name)
115
38
  File.join(File.expand_path('../fixtures', __FILE__), name)
116
39
  end
117
- end
40
+ end
@@ -0,0 +1,2 @@
1
+ export OPTION_A=2
2
+ export OPTION_B='\n'
@@ -2,3 +2,7 @@ OPTION_A='1'
2
2
  OPTION_B='2'
3
3
  OPTION_C=''
4
4
  OPTION_D='\n'
5
+ OPTION_E="1"
6
+ OPTION_F="2"
7
+ OPTION_G=""
8
+ OPTION_H="\n"
@@ -1 +1,7 @@
1
- require 'dotenv'
1
+ require 'dotenv'
2
+
3
+ RSpec.configure do |config|
4
+ # Restore the state of ENV after each spec
5
+ config.before { @env_keys = ENV.keys }
6
+ config.after { ENV.delete_if { |k,v| !@env_keys.include?(k) } }
7
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dotenv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-25 00:00:00.000000000 Z
12
+ date: 2013-03-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -55,15 +55,21 @@ files:
55
55
  - .travis.yml
56
56
  - Changelog.md
57
57
  - Gemfile
58
+ - Guardfile
58
59
  - LICENSE
59
60
  - README.md
60
61
  - Rakefile
62
+ - dotenv-rails.gemspec
61
63
  - dotenv.gemspec
64
+ - lib/dotenv-rails.rb
62
65
  - lib/dotenv.rb
63
66
  - lib/dotenv/environment.rb
64
67
  - lib/dotenv/railtie.rb
65
68
  - lib/dotenv/tasks.rb
69
+ - lib/dotenv/version.rb
70
+ - spec/dotenv/environment_spec.rb
66
71
  - spec/dotenv_spec.rb
72
+ - spec/fixtures/exported.env
67
73
  - spec/fixtures/plain.env
68
74
  - spec/fixtures/quoted.env
69
75
  - spec/fixtures/yaml.env
@@ -80,18 +86,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
80
86
  - - ! '>='
81
87
  - !ruby/object:Gem::Version
82
88
  version: '0'
83
- segments:
84
- - 0
85
- hash: -3615033000965864371
86
89
  required_rubygems_version: !ruby/object:Gem::Requirement
87
90
  none: false
88
91
  requirements:
89
92
  - - ! '>='
90
93
  - !ruby/object:Gem::Version
91
94
  version: '0'
92
- segments:
93
- - 0
94
- hash: -3615033000965864371
95
95
  requirements: []
96
96
  rubyforge_project:
97
97
  rubygems_version: 1.8.23
@@ -99,7 +99,9 @@ signing_key:
99
99
  specification_version: 3
100
100
  summary: Loads environment variables from `.env`.
101
101
  test_files:
102
+ - spec/dotenv/environment_spec.rb
102
103
  - spec/dotenv_spec.rb
104
+ - spec/fixtures/exported.env
103
105
  - spec/fixtures/plain.env
104
106
  - spec/fixtures/quoted.env
105
107
  - spec/fixtures/yaml.env