metrix_db 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.
- data/.gitignore +5 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +28 -0
- data/README.md +36 -0
- data/Rakefile +2 -0
- data/autotest/discover.rb +1 -0
- data/lib/metrix_db/version.rb +3 -0
- data/lib/metrix_db.rb +38 -0
- data/metrix_db.gemspec +23 -0
- data/spec/metrix_db/data_spec.rb +19 -0
- data/spec/metrix_db/field_spec.rb +31 -0
- data/spec/metrix_db/where_spec.rb +37 -0
- data/spec/metrix_db_spec.rb +2 -0
- data/spec/spec_helper.rb +6 -0
- metadata +113 -0
data/.rspec
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
metrix_db (0.0.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://rubygems.org/
|
8
|
+
specs:
|
9
|
+
ZenTest (4.5.0)
|
10
|
+
autotest (4.4.6)
|
11
|
+
ZenTest (>= 4.4.1)
|
12
|
+
diff-lcs (1.1.2)
|
13
|
+
rspec (2.5.0)
|
14
|
+
rspec-core (~> 2.5.0)
|
15
|
+
rspec-expectations (~> 2.5.0)
|
16
|
+
rspec-mocks (~> 2.5.0)
|
17
|
+
rspec-core (2.5.1)
|
18
|
+
rspec-expectations (2.5.0)
|
19
|
+
diff-lcs (~> 1.1.2)
|
20
|
+
rspec-mocks (2.5.0)
|
21
|
+
|
22
|
+
PLATFORMS
|
23
|
+
ruby
|
24
|
+
|
25
|
+
DEPENDENCIES
|
26
|
+
autotest
|
27
|
+
metrix_db!
|
28
|
+
rspec
|
data/README.md
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
Metrix DB
|
2
|
+
=============
|
3
|
+
|
4
|
+
Simple DB base on ruby Array. The main usage is data mapping.
|
5
|
+
|
6
|
+
Installation
|
7
|
+
-----------
|
8
|
+
|
9
|
+
gem install metrix_db
|
10
|
+
|
11
|
+
|
12
|
+
Usage
|
13
|
+
-----
|
14
|
+
|
15
|
+
class MyDB
|
16
|
+
include MetrixDB
|
17
|
+
field :col1
|
18
|
+
field :col2
|
19
|
+
dataset [[1,2],[3,4]]
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
* Include `MetrixDB`
|
24
|
+
* Define field using `field`, the order of field should match index of your dataset
|
25
|
+
* Set dataset, dataset is the real data of one DB
|
26
|
+
|
27
|
+
|
28
|
+
Query
|
29
|
+
-----
|
30
|
+
|
31
|
+
MyDB.where(:col1 => 1, :col2 => 2) # nil or instance of MyDB.
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Autotest.add_discovery { "rspec2" }
|
data/lib/metrix_db.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module MetrixDB
|
2
|
+
def self.included(base)
|
3
|
+
base.extend ClassMethods
|
4
|
+
base.send(:include, InstanceMethods)
|
5
|
+
end
|
6
|
+
module InstanceMethods
|
7
|
+
attr_reader :data
|
8
|
+
def initialize(data = [])
|
9
|
+
@data = data
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module ClassMethods
|
14
|
+
def field(name)
|
15
|
+
@fields ||= {}
|
16
|
+
@fields[name.to_sym] = @fields.size
|
17
|
+
define_method "#{name}" do
|
18
|
+
@data[self.class.fields[name.to_sym]]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def fields
|
23
|
+
@fields ||= []
|
24
|
+
end
|
25
|
+
|
26
|
+
def dataset(_dataset)
|
27
|
+
@dataset = _dataset
|
28
|
+
end
|
29
|
+
|
30
|
+
def where(conditions={})
|
31
|
+
@dataset.each do |data|
|
32
|
+
conditions.each_pair do |k, v|
|
33
|
+
return self.new(data) if data[@fields[k.to_sym]] == v
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/metrix_db.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "metrix_db/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "metrix_db"
|
7
|
+
s.version = MetrixDb::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Allen Wei"]
|
10
|
+
s.email = ["digruby@gmail.com"]
|
11
|
+
s.homepage = "http://rubygems.org/gems/metrix_db"
|
12
|
+
s.summary = %q{Simple DB base on Ruby Array}
|
13
|
+
s.description = %q{}
|
14
|
+
|
15
|
+
s.rubyforge_project = "metrix_db"
|
16
|
+
s.add_development_dependency "rspec"
|
17
|
+
s.add_development_dependency "autotest"
|
18
|
+
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MetrixDB do
|
4
|
+
context ".dataset" do
|
5
|
+
before do
|
6
|
+
dataset = [[1],[2]]
|
7
|
+
@dataset = dataset
|
8
|
+
@class = Class.new do
|
9
|
+
include MetrixDB
|
10
|
+
dataset dataset
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should store dataset in class variable" do
|
15
|
+
@class.instance_variable_get("@dataset").should == @dataset
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MetrixDB do
|
4
|
+
context ".field" do
|
5
|
+
before do
|
6
|
+
@klass = Class.new do
|
7
|
+
include MetrixDB
|
8
|
+
field :field1
|
9
|
+
field :field2
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should add field defination into fields" do
|
14
|
+
fields = @klass.instance_variable_get("@fields")
|
15
|
+
fields[:field1].should == 0
|
16
|
+
fields[:field2].should == 1
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should define method according to the field" do
|
20
|
+
ins = @klass.new
|
21
|
+
ins.should respond_to :field1
|
22
|
+
ins.should respond_to :field2
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should get data from array data" do
|
26
|
+
ins = @klass.new([1,2])
|
27
|
+
ins.field1.should == 1
|
28
|
+
ins.field2.should == 2
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MetrixDB do
|
4
|
+
context ".where" do
|
5
|
+
before do
|
6
|
+
dataset = [[1,2],[2,3]]
|
7
|
+
@dataset = dataset
|
8
|
+
@class = Class.new do
|
9
|
+
include MetrixDB
|
10
|
+
field :col1
|
11
|
+
field :col2
|
12
|
+
dataset dataset
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it "find data from first col" do
|
17
|
+
@class.where(:col1 => 1).data.should == [1,2]
|
18
|
+
@class.where(:col1 => 2).data.should == [2,3]
|
19
|
+
end
|
20
|
+
|
21
|
+
it "find data from second col" do
|
22
|
+
@class.where(:col2 => 2).data.should == [1,2]
|
23
|
+
@class.where(:col2 => 3).data.should == [2,3]
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should initialize a instance" do
|
27
|
+
@class.where(:col2 => 2).should be_kind_of @class
|
28
|
+
end
|
29
|
+
|
30
|
+
it "newlly created instance should have instance methods according to field definition" do
|
31
|
+
inst = @class.where(:col2 => 2)
|
32
|
+
inst.col1.should == 1
|
33
|
+
inst.col2.should == 2
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: metrix_db
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Allen Wei
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-03-08 00:00:00 +08:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rspec
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :development
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: autotest
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id002
|
49
|
+
description: ""
|
50
|
+
email:
|
51
|
+
- digruby@gmail.com
|
52
|
+
executables: []
|
53
|
+
|
54
|
+
extensions: []
|
55
|
+
|
56
|
+
extra_rdoc_files: []
|
57
|
+
|
58
|
+
files:
|
59
|
+
- .gitignore
|
60
|
+
- .rspec
|
61
|
+
- Gemfile
|
62
|
+
- Gemfile.lock
|
63
|
+
- README.md
|
64
|
+
- Rakefile
|
65
|
+
- autotest/discover.rb
|
66
|
+
- lib/metrix_db.rb
|
67
|
+
- lib/metrix_db/version.rb
|
68
|
+
- metrix_db.gemspec
|
69
|
+
- spec/metrix_db/data_spec.rb
|
70
|
+
- spec/metrix_db/field_spec.rb
|
71
|
+
- spec/metrix_db/where_spec.rb
|
72
|
+
- spec/metrix_db_spec.rb
|
73
|
+
- spec/spec_helper.rb
|
74
|
+
has_rdoc: true
|
75
|
+
homepage: http://rubygems.org/gems/metrix_db
|
76
|
+
licenses: []
|
77
|
+
|
78
|
+
post_install_message:
|
79
|
+
rdoc_options: []
|
80
|
+
|
81
|
+
require_paths:
|
82
|
+
- lib
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
hash: 3
|
89
|
+
segments:
|
90
|
+
- 0
|
91
|
+
version: "0"
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
hash: 3
|
98
|
+
segments:
|
99
|
+
- 0
|
100
|
+
version: "0"
|
101
|
+
requirements: []
|
102
|
+
|
103
|
+
rubyforge_project: metrix_db
|
104
|
+
rubygems_version: 1.3.7
|
105
|
+
signing_key:
|
106
|
+
specification_version: 3
|
107
|
+
summary: Simple DB base on Ruby Array
|
108
|
+
test_files:
|
109
|
+
- spec/metrix_db/data_spec.rb
|
110
|
+
- spec/metrix_db/field_spec.rb
|
111
|
+
- spec/metrix_db/where_spec.rb
|
112
|
+
- spec/metrix_db_spec.rb
|
113
|
+
- spec/spec_helper.rb
|