store2 0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 462d37b0c81d0e774272fa08c03f0525d7556a6f
4
+ data.tar.gz: b9f70df4a2d8b3f02ffdaa184bf9700a598e8d10
5
+ SHA512:
6
+ metadata.gz: db6596b207fa4d09bdcd3df0037095e8513de1dab9ee7930d50dac15cabf93f0c06884583ad2e53b5f11431bf73447e165a12eca251667274759faafc5d38581
7
+ data.tar.gz: 3f8af30002e9425e0804cbace7eb8ac1e15e1c8577ad62241c5b57198802c66da08b34587a7a4e53d9eb082e2905851cc8527ffae758c80556f9c3e9644d6d1b
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in store2.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Oleksii Fedorov
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,126 @@
1
+ # Store2
2
+
3
+ Persistence in YAML files, yay!
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem "store2"
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install store2
20
+
21
+ ## Usage
22
+
23
+ ```ruby
24
+ require "store2"
25
+ ```
26
+
27
+ ### Open a file
28
+
29
+ ```ruby
30
+ store2 = Store2.open("test.yml")
31
+ # => <#Store2::File:0x00f28746a47 @filename = "test.yml">
32
+ ```
33
+
34
+ ### Get root-scoped store object
35
+
36
+ ```ruby
37
+ root_scoped = store2.build
38
+ # => <#Store2::Scoped:0x00f2d746a41 @keys = []>
39
+ ```
40
+
41
+ ### Get scoped store object
42
+
43
+ ```ruby
44
+ user_scoped = store2.scoped("users", "72AC97F03A")
45
+ # => <#Store2::Scoped:0x00a2d746a91 @keys = ["users", "72AC97F03A"]
46
+ ```
47
+
48
+ ### Get scoped store object out of another scoped store object
49
+
50
+ ```ruby
51
+ items_scoped = user_scoped.scoped("items")
52
+ # => <#Store2::Scoped:0x00922faa907 @keys = ["users", "72AC97F03A", "items"]
53
+ ```
54
+
55
+ ### Reading the value
56
+
57
+ ```ruby
58
+ user_scoped.get("profile", "email")
59
+ # => "john@example.org"
60
+ ```
61
+
62
+ raises `KeyError` if value is not present
63
+
64
+ ### Writing the value
65
+
66
+ ```ruby
67
+ user_scoped.set("profile", "name", "John Smith")
68
+ # => "John Smith"
69
+ ```
70
+
71
+ ### Reading the value with writing the default if missing
72
+
73
+ ```ruby
74
+ # when profile/email is present
75
+ user_scoped.get_or_set("profile", "email", "john.smith@example.org")
76
+ # => "john@example.org"
77
+
78
+ # when profile/alternative_email is not present
79
+ user_scoped.get_or_set("profile", "alternative_email", "john.smith@example.org")
80
+ # => "john.smith@example.org"
81
+ ```
82
+
83
+ Does not raise `KeyError`
84
+
85
+ ### Check if value is present
86
+
87
+ ```ruby
88
+ user_scoped.has?("profile", "email")
89
+ # => true
90
+
91
+ user_scoped.has?("profile", "some", "long", "nested", "and", "boring", "attribute")
92
+ # => false
93
+ ```
94
+
95
+ ### Fetch value and provide block for execution if it is not present
96
+
97
+ ```ruby
98
+ items_scoped.fetch(item_code) do
99
+ fail ItemNotFound, "Item #{item_code} is not found"
100
+ end
101
+ ```
102
+
103
+ ### Saving your changes back to the file
104
+
105
+ ```ruby
106
+ store.save
107
+
108
+ # the same as
109
+ root_scoped.save
110
+
111
+ # the same as
112
+ user_scoped.save
113
+
114
+ # and
115
+ items_scoped.save
116
+ ```
117
+
118
+ All of them eventually will delegate to `store.save`
119
+
120
+ ## Contributing
121
+
122
+ 1. Fork it ( https://github.com/waterlink/store2/fork )
123
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
124
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
125
+ 4. Push to the branch (`git push origin my-new-feature`)
126
+ 5. Create a new Pull Request
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,5 @@
1
+ require "store2/version"
2
+
3
+ module Store2
4
+ # Your code goes here...
5
+ end
@@ -0,0 +1,3 @@
1
+ module Store2
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'store2/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "store2"
8
+ spec.version = Store2::VERSION
9
+ spec.authors = ["Oleksii Fedorov"]
10
+ spec.email = ["waterlink000@gmail.com"]
11
+ spec.summary = %q{Persistence in YAML files, yay!}
12
+ spec.description = %q{Persistence in YAML files, yay!}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: store2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Oleksii Fedorov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Persistence in YAML files, yay!
42
+ email:
43
+ - waterlink000@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - Gemfile
50
+ - LICENSE.txt
51
+ - README.md
52
+ - Rakefile
53
+ - lib/store2.rb
54
+ - lib/store2/version.rb
55
+ - store2.gemspec
56
+ homepage: ''
57
+ licenses:
58
+ - MIT
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 2.2.2
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: Persistence in YAML files, yay!
80
+ test_files: []