metastore 0.1.0 → 0.2.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
  SHA1:
3
- metadata.gz: 6e042df2a98306bef7e934e17af9b2cc4ddb9971
4
- data.tar.gz: 1ff18205ea8e0fe6cac324a725e6b7081db83dd3
3
+ metadata.gz: 9907f2335978385ce08d9d57db9c8d7e39235421
4
+ data.tar.gz: 657b40f2a2b41dc58d69e2e54c6f928a25ee3ff3
5
5
  SHA512:
6
- metadata.gz: 58720d771ae07b28a5daa90f07cd5330d918589b7fd14f39146f5c8ccd57abbb3ad6ac7125046c8e1559e75c9b875163c45761c1735a16fe38c966234a282ab4
7
- data.tar.gz: 56f6332d9da637fa7bf4826a2387ea5d95973868d4bea69696ab08746653476468d90e0ff942111f3f495710946b5ee931b2f591220db17afd4aa57e7d00153f
6
+ metadata.gz: fd1d3525002716dd313976d9bc60988dd0ee54b6edded5902aa9387db7c1c76bfa5a6d1a7c1ef1f05df1eb3d403e7467e51a18d9de85e246ebb57774a40ce6be
7
+ data.tar.gz: 78d5c985e6f4dd2508cea585ac2e684009a02dd5e5f643aa7ab51c5337ac2502f7a4be732854da33e479fb30a5464b3d9bcb1e777311d87648a0239008ff667d
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ .ruby-version
data/.travis.yml CHANGED
@@ -1,3 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.5
3
+ - 2.2
4
+ branches:
5
+ only:
6
+ - master
7
+ - wip
8
+ script: bundle exec rake spec
data/Gemfile CHANGED
@@ -1,3 +1,12 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
+
5
+ group :test do
6
+ gem 'codeclimate-test-reporter', '~> 0.1', require: nil
7
+ end
8
+
9
+ group :development do
10
+ gem 'pry-byebug', '~> 3.0'
11
+ gem 'awesome_print', '~> 1.0'
12
+ end
data/README.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Metastore
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/metastore.svg)](http://badge.fury.io/rb/metastore)
4
+ [![Code Climate](https://codeclimate.com/github/ashmckenzie/metastore/badges/gpa.svg)](https://codeclimate.com/github/ashmckenzie/metastore)
5
+ [![Build Status](https://travis-ci.org/ashmckenzie/metastore.svg?branch=wip)](https://travis-ci.org/ashmckenzie/metastore)
6
+ [![Dependency Status](https://gemnasium.com/ashmckenzie/metastore.svg)](https://gemnasium.com/ashmckenzie/metastore)
7
+
3
8
  Store and retrieve meta information with ease
4
9
 
5
10
  ## Installation
data/Rakefile CHANGED
@@ -1,2 +1,4 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
2
3
 
4
+ RSpec::Core::RakeTask.new('spec')
@@ -0,0 +1,75 @@
1
+ require 'fileutils'
2
+ require 'pathname'
3
+ require 'yaml'
4
+
5
+ module Metastore
6
+ class Cabinet
7
+
8
+ def initialize(file)
9
+ @file = Pathname.new(file).expand_path
10
+ end
11
+
12
+ def get(key)
13
+ split_key(key).inject(contents) { |c, k| c.is_a?(Hash) ? c[k] : nil }
14
+ end
15
+
16
+ def set(key, value)
17
+ current_contents = contents
18
+ set_key_and_value(current_contents, split_key(key), value)
19
+ save!(current_contents)
20
+ end
21
+
22
+ def clear!
23
+ save!({})
24
+ end
25
+
26
+ def contents
27
+ file.exist? ? YAML.load(file.read) || {} : {}
28
+ end
29
+
30
+ alias_method :[], :get
31
+ alias_method :[]=, :set
32
+
33
+ private
34
+
35
+ attr_reader :file
36
+
37
+ def split_key(key)
38
+ key.to_s.split('.')
39
+ end
40
+
41
+ def set_key_and_value(input, key, value)
42
+ current_key = key.shift.to_s
43
+ input[current_key] = {} unless input[current_key]
44
+
45
+ if key.empty?
46
+ input[current_key] = recursive_stringify_keys(value)
47
+ input
48
+ else
49
+ input[current_key] = {} unless input[current_key].is_a?(Hash)
50
+ set_key_and_value(input[current_key], key, value)
51
+ end
52
+ end
53
+
54
+ def recursive_stringify_keys(input)
55
+ case input
56
+ when Hash
57
+ Hash[
58
+ input.map do |k, v|
59
+ [ k.respond_to?(:to_s) ? k.to_s : k, recursive_stringify_keys(v) ]
60
+ end
61
+ ]
62
+ when Enumerable
63
+ input.map { |v| recursive_stringify_keys(v) }
64
+ else
65
+ input.is_a?(Symbol) ? input.to_s : input
66
+ end
67
+ end
68
+
69
+ def save!(new_values)
70
+ FileUtils.mkdir_p(file.dirname) unless file.exist?
71
+ File.open(file.to_s, 'w') { |f| f.write(new_values.to_yaml) }
72
+ end
73
+
74
+ end
75
+ end
@@ -1,3 +1,3 @@
1
1
  module Metastore
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/metastore.rb CHANGED
@@ -1,5 +1,5 @@
1
- require "metastore/version"
1
+ require 'metastore/version'
2
+ require 'metastore/cabinet'
2
3
 
3
4
  module Metastore
4
- # Your code goes here...
5
5
  end
data/metastore.gemspec CHANGED
@@ -16,6 +16,9 @@ Gem::Specification.new do |spec|
16
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
17
  spec.require_paths = ["lib"]
18
18
 
19
- spec.add_development_dependency "bundler", "~> 1.8"
20
- spec.add_development_dependency "rake", "~> 10.0"
19
+ spec.add_development_dependency 'bundler', '~> 1.7'
20
+ spec.add_development_dependency 'rake', '~> 10.0'
21
+ spec.add_development_dependency 'rspec', '~> 3.2'
22
+ spec.add_development_dependency 'simplecov', '~> 0.9'
23
+ spec.add_development_dependency 'fakefs', '~> 0.6'
21
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metastore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ash McKenzie
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.8'
19
+ version: '1.7'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.8'
26
+ version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +38,48 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: fakefs
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.6'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.6'
41
83
  description:
42
84
  email:
43
85
  - ash@the-rebellion.net
@@ -54,6 +96,7 @@ files:
54
96
  - README.md
55
97
  - Rakefile
56
98
  - lib/metastore.rb
99
+ - lib/metastore/cabinet.rb
57
100
  - lib/metastore/version.rb
58
101
  - metastore.gemspec
59
102
  homepage: https://github.com/ashmckenzie/metastore
@@ -76,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
119
  version: '0'
77
120
  requirements: []
78
121
  rubyforge_project:
79
- rubygems_version: 2.2.2
122
+ rubygems_version: 2.4.5
80
123
  signing_key:
81
124
  specification_version: 4
82
125
  summary: Store and retrieve meta information with ease