kefir 1.0.0 → 1.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 13d8742a055b653495c9e655d9469c0ecbd1894a
4
- data.tar.gz: 095c8d016e1d849c91f5556497cc755978777768
3
+ metadata.gz: bcea3ed21f0ba7fe31416b37b53786d25aaf13e9
4
+ data.tar.gz: bfd8a92a87f778b27c4664a10d93908aa7fe6222
5
5
  SHA512:
6
- metadata.gz: c3ce4f0d0abcc83bc1a3b22ed3a70b3ece3b9cb2d79062340dac8a89d0699c4adb8f9b92d04e5eda025dc4cb013179bb4ab88d7abc9f5c0b8d438a12a25c5175
7
- data.tar.gz: 8a38019191d5ce6264e3b327b53ae30a159efb5cfca9e3617ed97ee284aefd2ec93e5773c976021ee86406cf2b4ed8c57edc500ec811cc2ca6530b1bc637b6cf
6
+ metadata.gz: 8eeb38996768205b6aeb63dbd484c0f0568ab6a9e37db182141a6fe350eadaccc4e542adf62ec275ac9b3b85b3a332758b1622ea762bf466a48331837ffa8b75
7
+ data.tar.gz: ad213f47117c01e9f56a132c9be97483f33e04e1dddd9a57fd7e99d1584e7e503f92c719eb025c1337cdf0386592189374c6626c9c761140034b82287c2735c3
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kefir (1.0.0)
4
+ kefir (1.0.1)
5
5
  dig_rb (~> 1.0, >= 1.0.1)
6
6
  env_paths (~> 0.0.2)
7
7
 
@@ -2,17 +2,20 @@ module Kefir
2
2
  class FileStore
3
3
  attr_reader :path
4
4
 
5
- def initialize(config_file_path)
6
- @path = config_file_path
5
+ def initialize(options = {})
6
+ @dir = options[:cwd]
7
+ @path = File.expand_path(options[:config_name], @dir)
7
8
  end
8
9
 
9
10
  def read
10
- File.read(@path) do |contents|
11
- YAML.load(contents)
12
- end
11
+ FileUtils.mkdir_p(@dir)
12
+ YAML.load_file(@path) || {}
13
+ rescue Errno::ENOENT
14
+ {}
13
15
  end
14
16
 
15
17
  def write(data)
18
+ FileUtils.mkdir_p(@dir)
16
19
  File.write(@path, YAML.dump(data))
17
20
  end
18
21
  end
data/lib/kefir/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kefir
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '1.0.1'.freeze
3
3
  end
data/lib/kefir.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'dig_rb'
2
+ require 'fileutils'
2
3
  require 'env_paths'
3
4
  require 'yaml'
4
5
  require 'kefir/version'
@@ -16,7 +17,7 @@ module Kefir
16
17
  raise MissingNamespaceError, 'You must supply a namespace for your configuration files' if namespace.nil? || namespace.empty?
17
18
 
18
19
  parsed_options = parse_options(namespace, options)
19
- store = FileStore.new(parsed_options[:config_file_path])
20
+ store = FileStore.new(parsed_options)
20
21
 
21
22
  Config.new(store, options)
22
23
  end
@@ -25,9 +26,7 @@ module Kefir
25
26
 
26
27
  def self.parse_options(namespace, options)
27
28
  parsed = DEFAULT_OPTIONS.merge(options)
28
- cwd = parsed.fetch(:cwd, EnvPaths.get(namespace).config)
29
- parsed[:config_file_path] = File.expand_path(parsed[:config_name], cwd)
30
-
29
+ parsed[:cwd] = parsed.fetch(:cwd, EnvPaths.get(namespace).config)
31
30
  parsed
32
31
  end
33
32
  end
@@ -1,5 +1,7 @@
1
1
  RSpec.describe Kefir::Config do
2
- let(:store_double) { double(Kefir::FileStore, read: {}, write: nil) }
2
+ let(:store_double) do
3
+ double(Kefir::FileStore, read: {}, write: nil, path: 'custom_path')
4
+ end
3
5
  let(:config) { Kefir::Config.new(store_double, {}) }
4
6
 
5
7
  describe 'initialize' do
@@ -74,7 +76,7 @@ RSpec.describe Kefir::Config do
74
76
 
75
77
  describe 'path' do
76
78
  it 'returns the path of its store' do
77
- store = double(Kefir::FileStore, path: '/config/path')
79
+ store = double(Kefir::FileStore, path: '/config/path')
78
80
  config = Kefir::Config.new(store, {})
79
81
 
80
82
  expect(config.path).to eq('/config/path')
@@ -1,6 +1,12 @@
1
1
  RSpec.describe Kefir::FileStore do
2
- let(:data) { { secret: 'dont tell', users: [{ name: 'bob' }, { name: 'jane' }] } }
3
- let(:file_path) { File.join(@temp_dir, 'config') }
2
+ let(:data) do
3
+ {
4
+ secret: 'dont tell',
5
+ users: [{ name: 'bob' }, { name: 'jane' }]
6
+ }
7
+ end
8
+
9
+ let(:file_path) { File.join(@temp_dir, 'config.yml') }
4
10
 
5
11
  before(:each) do
6
12
  @temp_dir = Dir.mktmpdir
@@ -10,9 +16,14 @@ RSpec.describe Kefir::FileStore do
10
16
  FileUtils.remove_dir(@temp_dir)
11
17
  end
12
18
 
19
+ it 'gives its path' do
20
+ store = Kefir::FileStore.new(cwd: @temp_dir, config_name: 'config.yml')
21
+ expect(store.path).to eq(File.join(@temp_dir, 'config.yml'))
22
+ end
23
+
13
24
  it 'reads a configuration file' do
14
25
  File.write(file_path, YAML.dump(data))
15
- Kefir::FileStore.new(file_path)
26
+ Kefir::FileStore.new(cwd: @temp_dir, config_name: 'config.yml')
16
27
  parsed = YAML.load_file(file_path)
17
28
 
18
29
  expect(parsed).to eq(
@@ -26,8 +37,7 @@ RSpec.describe Kefir::FileStore do
26
37
 
27
38
  it 'writes to a configuration file' do
28
39
  File.write(file_path, YAML.dump(data))
29
- store = Kefir::FileStore.new(file_path)
30
-
40
+ store = Kefir::FileStore.new(cwd: @temp_dir, config_name: 'config.yml')
31
41
  store.write(data.merge(secret: 'changed'))
32
42
 
33
43
  parsed = YAML.load_file(file_path)
@@ -40,4 +50,39 @@ RSpec.describe Kefir::FileStore do
40
50
  ]
41
51
  )
42
52
  end
53
+
54
+ it 'returns an empty hash when file is empty' do
55
+ FileUtils.touch(file_path)
56
+ store = Kefir::FileStore.new(cwd: @temp_dir, config_name: 'config.yml')
57
+ expect(store.read).to eq({})
58
+ end
59
+
60
+ it 'creates nonexistant directories' do
61
+ nonexistant_path = File.join(@temp_dir, 'cool/beans')
62
+ Kefir::FileStore.new(
63
+ cwd: nonexistant_path,
64
+ config_name: 'config.yml'
65
+ ).read
66
+ expect(File.directory?(nonexistant_path)).to eq(true)
67
+ end
68
+
69
+ it 'returns an empty hash when reading nonexistant files' do
70
+ store = Kefir::FileStore.new(
71
+ cwd: @temp_dir,
72
+ config_name: 'config.yml'
73
+ )
74
+
75
+ expect(store.read).to eq({})
76
+ end
77
+
78
+ it 'succesfully writes to nonexistant files' do
79
+ store = Kefir::FileStore.new(
80
+ cwd: @temp_dir,
81
+ config_name: 'config.yml'
82
+ )
83
+
84
+ store.write(foo: 'bar')
85
+
86
+ expect(YAML.load_file(File.join(@temp_dir, 'config.yml'))).to eq(foo: 'bar')
87
+ end
43
88
  end
data/spec/kefir_spec.rb CHANGED
@@ -13,7 +13,8 @@ RSpec.describe Kefir do
13
13
  end
14
14
 
15
15
  it 'returns a fully functioning config object that can read config' do
16
- allow(File).to receive(:read).and_yield("user: bob\napi_key: secret-value")
16
+ allow(File).to receive(:directory?).and_return(true)
17
+ allow(YAML).to receive(:load_file).and_return('user' => 'bob')
17
18
 
18
19
  config = Kefir.config('test')
19
20
 
@@ -21,7 +22,8 @@ RSpec.describe Kefir do
21
22
  end
22
23
 
23
24
  it 'returns a fully functioning config object that can write config' do
24
- allow(File).to receive(:read).and_yield("user: bob\napi_key: secret-value")
25
+ allow(File).to receive(:directory?).and_return(true)
26
+ allow(YAML).to receive(:load_file).with(/config\.yml$/).and_return(false)
25
27
  expect(File).to receive(:write)
26
28
 
27
29
  config = Kefir.config('test')
@@ -30,14 +32,16 @@ RSpec.describe Kefir do
30
32
 
31
33
  context 'options' do
32
34
  it 'provides defaults' do
33
- expect(File).to receive(:read).with(/config\.yml$/).and_yield("user: bob\napi_key: secret-value")
35
+ allow(File).to receive(:directory?).and_return(true)
36
+ expect(YAML).to receive(:load_file).with(/config\.yml$/).and_return(false)
34
37
  config = Kefir.config('test')
35
38
  config.get(:foo)
36
39
  end
37
40
 
38
41
  it 'allows overriding current directory' do
39
42
  custom_cwd = File.expand_path('custom/path', '/')
40
- expect(File).to receive(:read).with(File.join(custom_cwd, 'config.yml')).and_yield("user: bob\napi_key: secret-value")
43
+ allow(File).to receive(:directory?).and_return(true)
44
+ expect(YAML).to receive(:load_file).with(File.join(custom_cwd, 'config.yml')).and_return(false)
41
45
 
42
46
  config = Kefir.config('test', cwd: custom_cwd)
43
47
  config.get(:foo)
@@ -45,7 +49,8 @@ RSpec.describe Kefir do
45
49
 
46
50
  it 'allows overriding the :config_name' do
47
51
  custom_cwd = File.expand_path('custom/path', '/')
48
- expect(File).to receive(:read).with(File.join(custom_cwd, 'custom_config_name.yml')).and_yield("user: bob\napi_key: secret-value")
52
+ allow(File).to receive(:directory?).and_return(true)
53
+ expect(YAML).to receive(:load_file).with(File.join(custom_cwd, 'custom_config_name.yml')).and_return(false)
49
54
 
50
55
  config = Kefir.config('test', cwd: custom_cwd, config_name: 'custom_config_name.yml')
51
56
  config.get(:foo)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kefir
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Tomlin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-30 00:00:00.000000000 Z
11
+ date: 2016-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: env_paths