metastore 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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