hash_db 0.0.1 → 0.0.2
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.
- data/.travis.yml +7 -0
- data/README.md +22 -2
- data/hash_db.gemspec +1 -1
- data/lib/hash_db/model/core.rb +9 -0
- data/lib/hash_db/model/query.rb +5 -0
- data/lib/hash_db/version.rb +1 -1
- data/spec/hash_db/model/core_spec.rb +11 -0
- data/spec/hash_db/model/query_spec.rb +14 -0
- metadata +5 -4
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# HashDB
|
1
|
+
# HashDB [](https://travis-ci.org/utkarshkukreti/hash_db)
|
2
2
|
|
3
3
|
HashDB is a minimal, in-memory, ActiveRecord like database library,
|
4
4
|
backed by a Ruby Hash.
|
@@ -23,6 +23,26 @@ Or install it yourself as:
|
|
23
23
|
$ bundle install
|
24
24
|
$ rake install
|
25
25
|
|
26
|
+
## Quickstart
|
27
|
+
|
28
|
+
(Complete usage instructions are below.)
|
29
|
+
|
30
|
+
require 'hash_db'
|
31
|
+
|
32
|
+
class Score
|
33
|
+
include HashDB::Model
|
34
|
+
keys :name, :points
|
35
|
+
end
|
36
|
+
|
37
|
+
score = Score.new name: "A", points: 10
|
38
|
+
score.save #= score.id == 1
|
39
|
+
Score.create name: "B", points: 11 #= id == 2
|
40
|
+
Score.create name: "C", points: 6 #= id == 3
|
41
|
+
|
42
|
+
Score.where(name: "B", points: 11).count #= 1
|
43
|
+
Score.where([:points, :>, 4], [:name, :=~, /a|b/i]).count #= 2
|
44
|
+
Score.find_by(:points, :>, 8).id #= 1
|
45
|
+
|
26
46
|
## Usage
|
27
47
|
|
28
48
|
First, require HashDB.
|
@@ -72,7 +92,7 @@ on the class.
|
|
72
92
|
HashDB currently has just 2 query methods, `.where`, which can filter objects
|
73
93
|
using key(s) = value(s), and also using custom method call, like `:<` and `:>`.
|
74
94
|
|
75
|
-
Let's [HN](http://news.ycombinator.com) as an example. :)
|
95
|
+
Let's take [HN](http://news.ycombinator.com) as an example. :)
|
76
96
|
|
77
97
|
class Item
|
78
98
|
include HashDB::Model
|
data/hash_db.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.description = "A minimal, in-memory, ActiveRecord like database, " +
|
12
12
|
"backed by a Ruby Hash."
|
13
13
|
gem.summary = gem.description
|
14
|
-
gem.homepage = ""
|
14
|
+
gem.homepage = "http://utkarshkukreti.github.com/hash_db"
|
15
15
|
gem.license = "MIT"
|
16
16
|
|
17
17
|
gem.files = `git ls-files`.split($/)
|
data/lib/hash_db/model/core.rb
CHANGED
@@ -6,6 +6,7 @@ module HashDB
|
|
6
6
|
klass.extend ClassMethods
|
7
7
|
klass.all = {}
|
8
8
|
klass.keys :id
|
9
|
+
klass.primary_key :id
|
9
10
|
end
|
10
11
|
|
11
12
|
def initialize(args = {})
|
@@ -54,6 +55,14 @@ module HashDB
|
|
54
55
|
object.save
|
55
56
|
end
|
56
57
|
end
|
58
|
+
|
59
|
+
def primary_key(key = nil)
|
60
|
+
if key
|
61
|
+
@primary_key = key
|
62
|
+
else
|
63
|
+
@primary_key
|
64
|
+
end
|
65
|
+
end
|
57
66
|
end
|
58
67
|
end
|
59
68
|
end
|
data/lib/hash_db/model/query.rb
CHANGED
data/lib/hash_db/version.rb
CHANGED
@@ -27,6 +27,17 @@ describe HashDB::Model do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
context ".primary_key" do
|
31
|
+
it "should have :id as primary key by default" do
|
32
|
+
model.primary_key.should eq :id
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should save primary key" do
|
36
|
+
model.primary_key :name
|
37
|
+
model.primary_key.should eq :name
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
30
41
|
context ".new" do
|
31
42
|
it "should assign passed args into keys" do
|
32
43
|
model.keys :integer, :string
|
@@ -42,5 +42,19 @@ describe HashDB::Model do
|
|
42
42
|
model.find_by(:integer, :<, 10).should eq nil
|
43
43
|
end
|
44
44
|
end
|
45
|
+
|
46
|
+
context ".find" do
|
47
|
+
it "should delegate to find_by with key = model.primary_key" do
|
48
|
+
model.should_receive(:find_by).with(name: "A").and_return(:works)
|
49
|
+
model.primary_key :name
|
50
|
+
model.find("A").should eq :works
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context ".[]" do
|
55
|
+
it "should be an alias to .find" do
|
56
|
+
model.method(:[]).should eq model.method(:find)
|
57
|
+
end
|
58
|
+
end
|
45
59
|
end
|
46
60
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash_db
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -68,6 +68,7 @@ extra_rdoc_files: []
|
|
68
68
|
files:
|
69
69
|
- .gitignore
|
70
70
|
- .rspec
|
71
|
+
- .travis.yml
|
71
72
|
- Gemfile
|
72
73
|
- Guardfile
|
73
74
|
- LICENSE.txt
|
@@ -84,7 +85,7 @@ files:
|
|
84
85
|
- spec/hash_db/model/query_spec.rb
|
85
86
|
- spec/hash_db_spec.rb
|
86
87
|
- spec/spec_helper.rb
|
87
|
-
homepage:
|
88
|
+
homepage: http://utkarshkukreti.github.com/hash_db
|
88
89
|
licenses:
|
89
90
|
- MIT
|
90
91
|
post_install_message:
|
@@ -99,7 +100,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
99
100
|
version: '0'
|
100
101
|
segments:
|
101
102
|
- 0
|
102
|
-
hash:
|
103
|
+
hash: -3250930581944786811
|
103
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
105
|
none: false
|
105
106
|
requirements:
|
@@ -108,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
109
|
version: '0'
|
109
110
|
segments:
|
110
111
|
- 0
|
111
|
-
hash:
|
112
|
+
hash: -3250930581944786811
|
112
113
|
requirements: []
|
113
114
|
rubyforge_project:
|
114
115
|
rubygems_version: 1.8.24
|