dotenvious 0.0.4 → 0.0.5

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
  SHA1:
3
- metadata.gz: ded812743d06ce1ec2fbbdf754845a23d15c89ef
4
- data.tar.gz: 5496628b478e37c9950ca4abe035428706a34665
3
+ metadata.gz: 729dd3bb01a80922fc0db320fcaa80c4c58f269f
4
+ data.tar.gz: 093d53d8abeb5a7de6fddebe2985cb4a28ddfc5c
5
5
  SHA512:
6
- metadata.gz: 0cf2b4106f000e56c5c791f04d27c7aea03d02b388847f2209331366923f8c4cff209e9a01192aecebeb98a47d05e5ba43fec3671c117d777ea11ecaf0dc4634
7
- data.tar.gz: a709bd2b181c094ff1320e9eec5719be8d032f0a8ef4c69c81d71e20677fdbddb954b84de3b4a0525198db2ea6562c57798c5b7f169692ac61256f0f713fe491
6
+ metadata.gz: a688ece6d08099e7fba7e527e9400fd4e40cdea906384ae5e1e4c6761bd8396453e487993fe611428d97653893f1e6e88c6de2fad4e07e748a8aa67719e95139
7
+ data.tar.gz: a5a3969e275bc327de6ad6b1277ba5d0eec0814f9947fafaeb4d71df85113232b02aa4e5d4817bfde9193d394269ce497a992dea3fa722401175a82307758d27
data/dotenvious.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'dotenvious'
3
- s.version = '0.0.4'
4
- s.date = '2016-10-29'
3
+ s.version = '0.0.5'
4
+ s.date = '2017-01-08'
5
5
  s.summary = "Dotenvious"
6
6
  s.description = "A Gem to manage environment variables"
7
7
  s.authors = ["Jake Faris"]
@@ -6,9 +6,13 @@ require_relative '../loaders/configuration'
6
6
  module Dotenvious
7
7
  module CLI
8
8
  class EnvFileConsolidator
9
+ def initialize(options = {})
10
+ @example_file = options[:example_file]
11
+ end
12
+
9
13
  def run
10
14
  Loaders::Configuration.new.load
11
- Loaders::Environments.new.load_envs
15
+ Loaders::Environments.new({example_file: example_file}).load_environments
12
16
  unless all_vars_present? && all_vars_match?
13
17
  alert_user
14
18
  decision = STDIN.gets.strip
@@ -18,7 +22,7 @@ module Dotenvious
18
22
 
19
23
  private
20
24
 
21
- attr_reader :filename
25
+ attr_reader :example_file, :filename
22
26
 
23
27
  def alert_user
24
28
  puts "You have missing ENV variables. Examime them? [y/n]"
@@ -1,11 +1,7 @@
1
- require_relative '../loaders/env'
2
-
3
1
  module Dotenvious
4
2
  module CLI
5
3
  class EnvFileSorter
6
4
  def run
7
- Loaders::Env.new.load
8
- puts "Sorting..."
9
5
  File.open('.env', 'w') do |file|
10
6
  file.write(sorted_env_text)
11
7
  end
@@ -1,25 +1,47 @@
1
+ require 'optparse'
1
2
  require_relative 'env_file_consolidator'
2
3
  require_relative 'env_file_sorter'
3
4
 
4
5
  module Dotenvious
5
6
  module CLI
6
7
  class Main
8
+ def initialize
9
+ @options = {}
10
+ end
11
+
7
12
  def run
8
- if ARGV[0].to_s.empty?
9
- EnvFileConsolidator.new.run
10
- elsif ARGV[0].to_s == '--sort'
11
- EnvFileSorter.new.run
12
- else
13
- ask_user_to_remove_flags
14
- end
13
+ parse_options
14
+ EnvFileConsolidator.new({example_file: options[:file]}).run
15
+ EnvFileSorter.new.run if options[:sort]
15
16
  end
16
17
 
17
18
  private
18
19
 
19
- attr_reader :filename
20
+ attr_accessor :options
21
+
22
+ def parse_options
23
+ parser = OptionParser.new do |opts|
24
+ opts.banner = "How to use Dotenvious:"
25
+
26
+ opts.on('-f .example-environment-file', '--file .example-environment-file', 'Specify which example file to use') do |file|
27
+ options[:file] = file
28
+ end
20
29
 
21
- def ask_user_to_remove_flags
22
- puts "dotenvious does not have flags at this time. Run 'dotenvious' without flags to get the main functionality."
30
+ opts.on('-s', '--sort', 'Sort .env file by key names alphabetically') do
31
+ options[:sort] = true
32
+ end
33
+
34
+ opts.on('-h', '--help', 'View this message') do
35
+ puts opts
36
+ exit
37
+ end
38
+ end
39
+
40
+ begin
41
+ parser.parse!
42
+ rescue OptionParser::InvalidOption => e
43
+ puts "Warning #{e}"
44
+ end
23
45
  end
24
46
  end
25
47
  end
@@ -1,31 +1,35 @@
1
1
  module Dotenvious
2
2
  module Loaders
3
- class Environment
3
+ class DotenvFile
4
+ def self.load_from(filename)
5
+ new(filename).load
6
+ end
7
+
8
+ def initialize(filename)
9
+ @filename = filename
10
+ end
11
+
4
12
  def load
5
13
  #took from Dotenv source code whoops
6
14
  if file_missing?
7
15
  puts "This repo does not have an #{filename} file"
8
- return
16
+ return {}
9
17
  end
10
- file.each do |line|
11
- environment[$1] = $2 if line =~ /\A([\w_]+)=(.*)\z/
18
+ Hash.new.tap do |environment|
19
+ file.each do |line|
20
+ environment[$1] = $2 if line =~ /\A([\w_]+)=(.*)\z/
21
+ end
12
22
  end
13
23
  end
14
24
 
15
25
  private
16
26
 
27
+ attr_reader :filename
28
+
17
29
  def file_missing?
18
30
  !File.exists?(filename)
19
31
  end
20
32
 
21
- def environment
22
- raise "environment must be defined in child class"
23
- end
24
-
25
- def filename
26
- raise "fileame must be defined in child class"
27
- end
28
-
29
33
  def file
30
34
  File.read(filename).split("\n")
31
35
  end
@@ -1,13 +1,20 @@
1
- require_relative 'example'
2
- require_relative 'env'
1
+ require_relative 'dotenv_file'
3
2
 
4
3
  module Dotenvious
5
4
  module Loaders
6
5
  class Environments
7
- def load_envs
8
- Env.new.load
9
- Example.new.load
6
+ def initialize(options = {})
7
+ @example_file = options[:example_file] || DEFAULT_EXAMPLE_ENV_FILE
10
8
  end
9
+
10
+ def load_environments
11
+ ENV.merge!(DotenvFile.load_from('.env'))
12
+ ENV_EXAMPLE.merge!(DotenvFile.load_from(example_file))
13
+ end
14
+
15
+ private
16
+
17
+ attr_reader :example_file
11
18
  end
12
19
  end
13
20
  end
@@ -2,19 +2,19 @@ require 'spec_helper'
2
2
 
3
3
  describe Dotenvious::CLI::EnvFileConsolidator do
4
4
  describe '.new' do
5
- xit 'determines the correct file to use as example' do
6
- # future release work
5
+ it 'takes option hash' do
6
+ expect { described_class.new({example_file: '.envenvenv'}) }.to_not raise_error
7
7
  end
8
8
  end
9
9
 
10
10
  describe '#run' do
11
- context 'with no flags' do
11
+ context 'without options' do
12
12
  before do
13
13
  allow(File).to receive(:read).and_return("")
14
14
  end
15
15
 
16
16
  it 'loads the environment & example environment variables' do
17
- expect_any_instance_of(Dotenvious::Loaders::Environments).to receive(:load_envs)
17
+ expect_any_instance_of(Dotenvious::Loaders::Environments).to receive(:load_environments)
18
18
 
19
19
  described_class.new.run
20
20
  end
@@ -51,5 +51,16 @@ describe Dotenvious::CLI::EnvFileConsolidator do
51
51
  end
52
52
  end
53
53
  end
54
+
55
+ context 'given an option hash with :example_file' do
56
+ it 'loads environments with that example_file' do
57
+ environments_double = double
58
+ expect(Dotenvious::Loaders::Environments).to receive(:new)
59
+ .with({example_file: '.test.env.test'}).and_return(environments_double)
60
+ expect(environments_double).to receive(:load_environments)
61
+
62
+ described_class.new({example_file: '.test.env.test'}).run
63
+ end
64
+ end
54
65
  end
55
66
  end
@@ -3,8 +3,6 @@ require 'spec_helper'
3
3
  describe Dotenvious::CLI::EnvFileSorter do
4
4
  describe '#run' do
5
5
  it "sorts the key-value pairs back into .env" do
6
- expect_any_instance_of(Dotenvious::Loaders::Env).to receive(:load).and_return true
7
-
8
6
  stub_const('Dotenvious::ENV', {'TEST' => 'same', 'ABC' => '123'} )
9
7
 
10
8
  fake_file = double
@@ -15,14 +15,47 @@ describe Dotenvious::CLI::Main do
15
15
  end
16
16
 
17
17
  context 'when option flags are given' do
18
- before do
19
- stub_const('ARGV', ['--test'])
18
+ context 'and the flag is not implemented' do
19
+ before do
20
+ stub_const('ARGV', ['--test'])
21
+ end
22
+
23
+ it 'ignores the flag and runs main process' do
24
+ expect_any_instance_of(Dotenvious::CLI::EnvFileConsolidator).to receive(:run)
25
+
26
+ described_class.new.run
27
+ end
20
28
  end
21
29
 
22
- it 'tells the user to try again without flags' do
23
- expect_any_instance_of(described_class).to receive(:ask_user_to_remove_flags)
30
+ context 'and the flag is implemented' do
31
+ context '--sort' do
32
+ before do
33
+ stub_const('ARGV', ['--sort'])
34
+ end
24
35
 
25
- described_class.new.run
36
+ it 'runs EnvFileSorter after main process' do
37
+ expect_any_instance_of(Dotenvious::CLI::EnvFileConsolidator).to receive(:run)
38
+ expect_any_instance_of(Dotenvious::CLI::EnvFileSorter).to receive(:run)
39
+
40
+ described_class.new.run
41
+ end
42
+ end
43
+
44
+ context '--file' do
45
+ before do
46
+ stub_const('ARGV', ['--file', '.my-test-file-env'])
47
+ end
48
+
49
+ it 'uses the user-specified filename to read example environment' do
50
+ fake_consolidator = double
51
+ expect(fake_consolidator).to receive(:run)
52
+ expect(Dotenvious::CLI::EnvFileConsolidator).to receive(:new)
53
+ .with({example_file: '.my-test-file-env'})
54
+ .and_return(fake_consolidator)
55
+
56
+ described_class.new.run
57
+ end
58
+ end
26
59
  end
27
60
  end
28
61
  end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dotenvious::Loaders::DotenvFile do
4
+ describe '.load_from' do
5
+ context 'given a file which does not exist' do
6
+ before do
7
+ expect(File).to receive(:exists?).and_return false
8
+ end
9
+ it 'aborts the process' do
10
+ described_class.load_from('.env')
11
+ end
12
+ end
13
+
14
+ context 'given a file which exists' do
15
+ before do
16
+ expect(File).to receive(:exists?).and_return true
17
+ end
18
+
19
+ it 'reads the given Dotenv format file and returns hash' do
20
+ expect(File).to receive(:read).and_return "TEST=123\nEXAMPLE=234"
21
+
22
+ response = described_class.load_from('.env')
23
+
24
+ expect(response['TEST']).to eq '123'
25
+ expect(response['EXAMPLE']).to eq '234'
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,12 +1,29 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Dotenvious::Loaders::Environments do
4
- describe '#load_envs' do
5
- it 'loads from Dotenv as well as Loaders::Example' do
6
- expect_any_instance_of(Dotenvious::Loaders::Example).to receive(:load)
7
- expect_any_instance_of(Dotenvious::Loaders::Env).to receive(:load)
4
+ describe '#new' do
5
+ it 'takes options hash' do
6
+ expect{ described_class.new({example_file: '.my.example.file'}) }.to_not raise_error
7
+ end
8
+ end
9
+
10
+ describe '#load_environments' do
11
+ context 'without user-specified example file' do
12
+ it 'loads from Dotenv as well as Loaders::Example' do
13
+ expect(Dotenvious::Loaders::DotenvFile).to receive(:load_from).with('.env').and_return({})
14
+ expect(Dotenvious::Loaders::DotenvFile).to receive(:load_from).with('.example-env').and_return({})
15
+
16
+ described_class.new.load_environments
17
+ end
18
+ end
19
+
20
+ context 'with user-specified example file' do
21
+ it 'loads that example environment' do
22
+ expect(Dotenvious::Loaders::DotenvFile).to receive(:load_from).with('.env').and_return({})
23
+ expect(Dotenvious::Loaders::DotenvFile).to receive(:load_from).with('.my.example.file').and_return({})
8
24
 
9
- described_class.new.load_envs
25
+ described_class.new({example_file: '.my.example.file'}).load_environments
26
+ end
10
27
  end
11
28
  end
12
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dotenvious
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jake Faris
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-29 00:00:00.000000000 Z
11
+ date: 2017-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,10 +72,8 @@ files:
72
72
  - lib/dotenvious/configuration.rb
73
73
  - lib/dotenvious/env_appender.rb
74
74
  - lib/dotenvious/loaders/configuration.rb
75
- - lib/dotenvious/loaders/env.rb
76
- - lib/dotenvious/loaders/environment.rb
75
+ - lib/dotenvious/loaders/dotenv_file.rb
77
76
  - lib/dotenvious/loaders/environments.rb
78
- - lib/dotenvious/loaders/example.rb
79
77
  - lib/dotenvious/mismatched_variable_finder.rb
80
78
  - lib/dotenvious/missing_variable_finder.rb
81
79
  - lib/dotenvious/prompter.rb
@@ -86,9 +84,8 @@ files:
86
84
  - spec/dotenvious/configuration_spec.rb
87
85
  - spec/dotenvious/env_appender_spec.rb
88
86
  - spec/dotenvious/loaders/configuration_spec.rb
89
- - spec/dotenvious/loaders/env_spec.rb
87
+ - spec/dotenvious/loaders/dotenv_file_spec.rb
90
88
  - spec/dotenvious/loaders/environments_spec.rb
91
- - spec/dotenvious/loaders/example_spec.rb
92
89
  - spec/dotenvious/mismatched_variable_finder_spec.rb
93
90
  - spec/dotenvious/missing_variable_finder_spec.rb
94
91
  - spec/dotenvious/prompter_spec.rb
@@ -1,15 +0,0 @@
1
- module Dotenvious
2
- module Loaders
3
- class Env < Environment
4
- private
5
-
6
- def filename
7
- DEFAULT_ENV_FILE
8
- end
9
-
10
- def environment
11
- Dotenvious::ENV
12
- end
13
- end
14
- end
15
- end
@@ -1,17 +0,0 @@
1
- require_relative 'environment'
2
-
3
- module Dotenvious
4
- module Loaders
5
- class Example < Environment
6
- private
7
-
8
- def filename
9
- DEFAULT_EXAMPLE_ENV_FILE
10
- end
11
-
12
- def environment
13
- Dotenvious::ENV_EXAMPLE
14
- end
15
- end
16
- end
17
- end
@@ -1,34 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Dotenvious::Loaders::Env do
4
- describe '#load' do
5
- context 'when .env are not present' do
6
- before do
7
- expect(File).to receive(:exists?).and_return false
8
- end
9
- it 'aborts the process' do
10
- described_class.new.load
11
- end
12
- end
13
-
14
- context 'when .env is present' do
15
- before do
16
- expect(File).to receive(:exists?).and_return true
17
- end
18
- it 'loads files from .env' do
19
- expect(File).to receive(:read).with('.env').and_return ""
20
-
21
- described_class.new.load
22
- end
23
-
24
- it 'passes those arguments to Dotenvious::ENV_EXAMPLE' do
25
- expect(File).to receive(:read).and_return "TEST=123\nEXAMPLE=234"
26
-
27
- described_class.new.load
28
-
29
- expect(Dotenvious::ENV['TEST']).to eq '123'
30
- expect(Dotenvious::ENV['EXAMPLE']).to eq '234'
31
- end
32
- end
33
- end
34
- end
@@ -1,37 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Dotenvious::Loaders::Example do
4
- describe '#load' do
5
- context 'when example-env does not exist' do
6
- before do
7
- expect(File).to receive(:exists?).and_return false
8
- end
9
-
10
- it 'aborts the process' do
11
- described_class.new.load
12
- end
13
- end
14
-
15
- context 'when example-env exists' do
16
- before do
17
- expect(File).to receive(:exists?).and_return true
18
- stub_const('Dotenvious::DEFAULT_EXAMPLE_ENV_FILE', '.example-env')
19
- end
20
-
21
- it 'loads files from Dotenvious::DEFAULT_EXAMPLE_ENV_FILE' do
22
- expect(File).to receive(:read).with('.example-env').and_return ""
23
-
24
- described_class.new.load
25
- end
26
-
27
- it 'passes those arguments to Dotenvious::ENV_EXAMPLE' do
28
- expect(File).to receive(:read).and_return "TEST=123\nEXAMPLE=234"
29
-
30
- described_class.new.load
31
-
32
- expect(Dotenvious::ENV_EXAMPLE['TEST']).to eq '123'
33
- expect(Dotenvious::ENV_EXAMPLE['EXAMPLE']).to eq '234'
34
- end
35
- end
36
- end
37
- end