metastore 0.2.3 → 0.3.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 +4 -4
- data/README.md +36 -6
- data/lib/metastore.rb +1 -0
- data/lib/metastore/cabinet.rb +14 -11
- data/lib/metastore/errors.rb +1 -0
- data/lib/metastore/storage.rb +9 -0
- data/lib/metastore/storage/base.rb +33 -0
- data/lib/metastore/storage/json.rb +18 -0
- data/lib/metastore/storage/yaml.rb +18 -0
- data/lib/metastore/storage_factory.rb +11 -0
- data/lib/metastore/version.rb +1 -1
- metadata +7 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 17185ce2d6da4fd3375df8d3e7c51eec1875b146
         | 
| 4 | 
            +
              data.tar.gz: 5dcfcbce2626843877613757859193a108d4efb9
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 04cacb72808ab9a1938a99ac1c5b718afef87b61929d2d80bf327aba5c4b2b095f9fb8f77445eb43a89839f96d9960fafd6e0c79dbd6744a2dc380063407b503
         | 
| 7 | 
            +
              data.tar.gz: 473ce35a7281f94fb605d13c509a1133aa396eca495ac02b8e060244d7efb05a13fbbb75bb596cfce3e9dee2f06739e666a26081ab652d24ed749c61b9acfa15
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,11 +1,12 @@ | |
| 1 1 | 
             
            # Metastore
         | 
| 2 2 |  | 
| 3 3 | 
             
            [](http://badge.fury.io/rb/metastore)
         | 
| 4 | 
            -
            [](https://codeclimate.com/github/ashmckenzie/metastore)
         | 
| 5 4 | 
             
            [](https://travis-ci.org/ashmckenzie/metastore)
         | 
| 5 | 
            +
            [](https://codeclimate.com/github/ashmckenzie/metastore)
         | 
| 6 | 
            +
            [](https://codeclimate.com/github/ashmckenzie/metastore)
         | 
| 6 7 | 
             
            [](https://gemnasium.com/ashmckenzie/metastore)
         | 
| 7 8 |  | 
| 8 | 
            -
            Store and retrieve meta information with ease
         | 
| 9 | 
            +
            Store and retrieve meta information with ease.  Currently YAML and JSON are the supported storage backends.
         | 
| 9 10 |  | 
| 10 11 | 
             
            ## Installation
         | 
| 11 12 |  | 
| @@ -32,13 +33,30 @@ There are four public methods hanging off `Metastore::Cabinet`: | |
| 32 33 | 
             
            * `#clear!`
         | 
| 33 34 | 
             
            * `#contents`
         | 
| 34 35 |  | 
| 36 | 
            +
            When calling `#get()` or `#set()`:
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            `key` can be expressed as follows:
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              * `key` - basic string key
         | 
| 41 | 
            +
              * `:key` - basic symbol key (will be converted into string)
         | 
| 42 | 
            +
              * `key1.key2` - using a `.` here allows nested keys to be defined.
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            When calling `#set()`:
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            `key` can be expressed as described above.  The YAML file is also immediately saved.
         | 
| 47 | 
            +
             | 
| 35 48 | 
             
            ### Setup
         | 
| 36 49 |  | 
| 37 50 | 
             
            ```ruby
         | 
| 38 51 | 
             
            require 'metastore'
         | 
| 39 52 |  | 
| 40 | 
            -
            file = File.join(ENV['HOME'], '. | 
| 41 | 
            -
             | 
| 53 | 
            +
            file = File.join(ENV['HOME'], '.metastore.yaml')
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            # YAML (default)
         | 
| 56 | 
            +
            store = Metastore::Cabinet.new(file, storage_type: :yaml)
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            # JSON
         | 
| 59 | 
            +
            store = Metastore::Cabinet.new(file, storage_type: :json)
         | 
| 42 60 | 
             
            ```
         | 
| 43 61 |  | 
| 44 62 | 
             
            ### Basic example
         | 
| @@ -56,6 +74,9 @@ store.get('key') | |
| 56 74 | 
             
            store.set('key', 'value')
         | 
| 57 75 | 
             
            => true
         | 
| 58 76 |  | 
| 77 | 
            +
            store.get('key')
         | 
| 78 | 
            +
            => "value"
         | 
| 79 | 
            +
             | 
| 59 80 | 
             
            store.contents
         | 
| 60 81 | 
             
            => {"key"=>"value"}
         | 
| 61 82 |  | 
| @@ -86,6 +107,9 @@ store.contents | |
| 86 107 | 
             
            store.set('key3.key4', { 'key' => 'value' })
         | 
| 87 108 | 
             
            => true
         | 
| 88 109 |  | 
| 110 | 
            +
            store.get('key1.key2')
         | 
| 111 | 
            +
            => "key.key2.value"
         | 
| 112 | 
            +
             | 
| 89 113 | 
             
            store.contents
         | 
| 90 114 | 
             
            => {"key1"=>{"key2"=>"key.key2.value"}, "key3"=>{"key4"=>{"key"=>"value"}}}
         | 
| 91 115 | 
             
            ```
         | 
| @@ -103,13 +127,19 @@ store['key1.key2'] | |
| 103 127 | 
             
            => nil
         | 
| 104 128 |  | 
| 105 129 | 
             
            store['key1.key2'] = 'key.key2.value'
         | 
| 106 | 
            -
            =>  | 
| 130 | 
            +
            => "key.key2.value"
         | 
| 131 | 
            +
             | 
| 132 | 
            +
            store['key1.key2']
         | 
| 133 | 
            +
            => "key.key2.value"
         | 
| 107 134 |  | 
| 108 135 | 
             
            store.contents
         | 
| 109 136 | 
             
            => {"key1"=>{"key2"=>"key.key2.value"}}
         | 
| 110 137 |  | 
| 111 138 | 
             
            store['key3.key4'] = { 'key' => 'value' }
         | 
| 112 | 
            -
            =>  | 
| 139 | 
            +
            => {"key"=>"value"}
         | 
| 140 | 
            +
             | 
| 141 | 
            +
            store['key3.key4']
         | 
| 142 | 
            +
            => {"key"=>"value"}
         | 
| 113 143 |  | 
| 114 144 | 
             
            store.contents
         | 
| 115 145 | 
             
            => {"key1"=>{"key2"=>"key.key2.value"}, "key3"=>{"key4"=>{"key"=>"value"}}}
         | 
    
        data/lib/metastore.rb
    CHANGED
    
    
    
        data/lib/metastore/cabinet.rb
    CHANGED
    
    | @@ -1,12 +1,12 @@ | |
| 1 1 | 
             
            require 'fileutils'
         | 
| 2 2 | 
             
            require 'pathname'
         | 
| 3 | 
            -
            require 'yaml'
         | 
| 4 3 |  | 
| 5 4 | 
             
            module Metastore
         | 
| 6 5 | 
             
              class Cabinet
         | 
| 7 6 |  | 
| 8 | 
            -
                def initialize(file)
         | 
| 7 | 
            +
                def initialize(file, storage_type: :yaml)
         | 
| 9 8 | 
             
                  @file = Pathname.new(file).expand_path
         | 
| 9 | 
            +
                  @storage_type = storage_type
         | 
| 10 10 | 
             
                end
         | 
| 11 11 |  | 
| 12 12 | 
             
                def get(key)
         | 
| @@ -17,16 +17,14 @@ module Metastore | |
| 17 17 | 
             
                  current_contents = contents
         | 
| 18 18 | 
             
                  set_key_and_value(current_contents, split_key(key), value)
         | 
| 19 19 | 
             
                  save!(current_contents)
         | 
| 20 | 
            -
                  true
         | 
| 21 20 | 
             
                end
         | 
| 22 21 |  | 
| 23 22 | 
             
                def clear!
         | 
| 24 23 | 
             
                  save!({})
         | 
| 25 | 
            -
                  true
         | 
| 26 24 | 
             
                end
         | 
| 27 25 |  | 
| 28 26 | 
             
                def contents
         | 
| 29 | 
            -
                   | 
| 27 | 
            +
                  storage.contents || {}
         | 
| 30 28 | 
             
                end
         | 
| 31 29 |  | 
| 32 30 | 
             
                alias_method :[], :get
         | 
| @@ -34,7 +32,11 @@ module Metastore | |
| 34 32 |  | 
| 35 33 | 
             
                private
         | 
| 36 34 |  | 
| 37 | 
            -
                  attr_reader :file
         | 
| 35 | 
            +
                  attr_reader :file, :storage_type
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  def storage
         | 
| 38 | 
            +
                    @store || StorageFactory.from_sym(storage_type).new(file)
         | 
| 39 | 
            +
                  end
         | 
| 38 40 |  | 
| 39 41 | 
             
                  def split_key(key)
         | 
| 40 42 | 
             
                    key.to_s.split('.')
         | 
| @@ -45,7 +47,7 @@ module Metastore | |
| 45 47 | 
             
                    input[current_key] = {} unless input[current_key]
         | 
| 46 48 |  | 
| 47 49 | 
             
                    if key.empty?
         | 
| 48 | 
            -
                      input[current_key] =  | 
| 50 | 
            +
                      input[current_key] = stringify_keys(value)
         | 
| 49 51 | 
             
                      input
         | 
| 50 52 | 
             
                    else
         | 
| 51 53 | 
             
                      input[current_key] = {} unless input[current_key].is_a?(Hash)
         | 
| @@ -53,16 +55,16 @@ module Metastore | |
| 53 55 | 
             
                    end
         | 
| 54 56 | 
             
                  end
         | 
| 55 57 |  | 
| 56 | 
            -
                  def  | 
| 58 | 
            +
                  def stringify_keys(input)
         | 
| 57 59 | 
             
                    case input
         | 
| 58 60 | 
             
                    when Hash
         | 
| 59 61 | 
             
                      Hash[
         | 
| 60 62 | 
             
                        input.map do |k, v|
         | 
| 61 | 
            -
                          [ k.respond_to?(:to_s) ? k.to_s : k,  | 
| 63 | 
            +
                          [ k.respond_to?(:to_s) ? k.to_s : k, stringify_keys(v) ]
         | 
| 62 64 | 
             
                        end
         | 
| 63 65 | 
             
                      ]
         | 
| 64 66 | 
             
                    when Enumerable
         | 
| 65 | 
            -
                      input.map { |v|  | 
| 67 | 
            +
                      input.map { |v| stringify_keys(v) }
         | 
| 66 68 | 
             
                    else
         | 
| 67 69 | 
             
                      input.is_a?(Symbol) ? input.to_s : input
         | 
| 68 70 | 
             
                    end
         | 
| @@ -70,7 +72,8 @@ module Metastore | |
| 70 72 |  | 
| 71 73 | 
             
                  def save!(new_values)
         | 
| 72 74 | 
             
                    FileUtils.mkdir_p(file.dirname) unless file.exist?
         | 
| 73 | 
            -
                     | 
| 75 | 
            +
                    storage.save!(new_values)
         | 
| 76 | 
            +
                    true
         | 
| 74 77 | 
             
                  rescue => e
         | 
| 75 78 | 
             
                    raise Errors::CabinetCannotSet.new(e.message)
         | 
| 76 79 | 
             
                  end
         | 
    
        data/lib/metastore/errors.rb
    CHANGED
    
    
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            require 'yaml'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Metastore
         | 
| 4 | 
            +
              module Storage
         | 
| 5 | 
            +
                class Base
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  def initialize(file)
         | 
| 8 | 
            +
                    @file = file
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def contents
         | 
| 12 | 
            +
                    file.exist? ? read : {}
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def save!(values)
         | 
| 16 | 
            +
                    File.open(file.to_s, 'w') { |f| f.write(to_write(values)) }
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  private
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    attr_reader :file
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    def read
         | 
| 24 | 
            +
                      raise NotImplementedError
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    def to_write(values)
         | 
| 28 | 
            +
                      raise NotImplementedError
         | 
| 29 | 
            +
                    end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
    
        data/lib/metastore/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: metastore
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ash McKenzie
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015-03- | 
| 11 | 
            +
            date: 2015-03-06 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -98,6 +98,11 @@ files: | |
| 98 98 | 
             
            - lib/metastore.rb
         | 
| 99 99 | 
             
            - lib/metastore/cabinet.rb
         | 
| 100 100 | 
             
            - lib/metastore/errors.rb
         | 
| 101 | 
            +
            - lib/metastore/storage.rb
         | 
| 102 | 
            +
            - lib/metastore/storage/base.rb
         | 
| 103 | 
            +
            - lib/metastore/storage/json.rb
         | 
| 104 | 
            +
            - lib/metastore/storage/yaml.rb
         | 
| 105 | 
            +
            - lib/metastore/storage_factory.rb
         | 
| 101 106 | 
             
            - lib/metastore/version.rb
         | 
| 102 107 | 
             
            - metastore.gemspec
         | 
| 103 108 | 
             
            homepage: https://github.com/ashmckenzie/metastore
         |