metrix_db 0.0.2 → 0.0.3
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/Gemfile.lock +1 -1
- data/README.md +9 -1
- data/lib/metrix_db/version.rb +1 -1
- data/lib/metrix_db.rb +21 -2
- data/spec/metrix_db/field_spec.rb +19 -0
- data/spec/metrix_db/where_spec.rb +2 -1
- metadata +3 -3
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -14,7 +14,7 @@ Usage
|
|
14
14
|
|
15
15
|
class MyDB
|
16
16
|
include MetrixDB
|
17
|
-
field :col1
|
17
|
+
field :col1, :uniq => false
|
18
18
|
field :col2
|
19
19
|
dataset [[1,2],[3,4]]
|
20
20
|
end
|
@@ -25,6 +25,14 @@ Usage
|
|
25
25
|
* Set dataset, dataset is the real data of one DB
|
26
26
|
|
27
27
|
|
28
|
+
Field
|
29
|
+
-----
|
30
|
+
|
31
|
+
Options for field definition
|
32
|
+
|
33
|
+
`uniq`: Check if column is unique. Default value is true.
|
34
|
+
|
35
|
+
|
28
36
|
Query
|
29
37
|
-----
|
30
38
|
|
data/lib/metrix_db/version.rb
CHANGED
data/lib/metrix_db.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
module MetrixDB
|
2
|
+
class UniqueFieldError < Exception; end
|
3
|
+
|
2
4
|
def self.included(base)
|
3
5
|
base.extend ClassMethods
|
4
6
|
base.send(:include, InstanceMethods)
|
@@ -11,9 +13,14 @@ module MetrixDB
|
|
11
13
|
end
|
12
14
|
|
13
15
|
module ClassMethods
|
14
|
-
def field(name)
|
16
|
+
def field(name, options = {})
|
17
|
+
default_options = {:uniq => true}
|
18
|
+
options = default_options.merge(options)
|
15
19
|
@fields ||= {}
|
16
|
-
|
20
|
+
index = @fields.size
|
21
|
+
@fields[name.to_sym] = index
|
22
|
+
@uniq_fields ||= {}
|
23
|
+
@uniq_fields[index] = name.to_s if options[:uniq]
|
17
24
|
define_method "#{name}" do
|
18
25
|
@data[self.class.fields[name.to_sym]]
|
19
26
|
end
|
@@ -25,9 +32,21 @@ module MetrixDB
|
|
25
32
|
|
26
33
|
def dataset(_dataset)
|
27
34
|
@dataset = _dataset
|
35
|
+
check_uniq_fields(_dataset)
|
36
|
+
end
|
37
|
+
|
38
|
+
def check_uniq_fields(_dataset)
|
39
|
+
return unless @uniq_fields
|
40
|
+
@uniq_fields.each_pair do |index, field_name|
|
41
|
+
col_data = _dataset.map {|data| data[index]}
|
42
|
+
if col_data.uniq!
|
43
|
+
raise UniqueFieldError.new("Field '#{field_name}' is not unique")
|
44
|
+
end
|
45
|
+
end
|
28
46
|
end
|
29
47
|
|
30
48
|
def where(conditions={})
|
49
|
+
return nil if @dataset.nil? || @fields.nil?
|
31
50
|
@dataset.each do |data|
|
32
51
|
conditions.each_pair do |k, v|
|
33
52
|
return self.new(data) if data[@fields[k.to_sym]] == v
|
@@ -28,4 +28,23 @@ describe MetrixDB do
|
|
28
28
|
ins.field2.should == 2
|
29
29
|
end
|
30
30
|
end
|
31
|
+
|
32
|
+
context "unique field" do
|
33
|
+
it "should raise exception if field is unique" do
|
34
|
+
lambda { @class = Class.new {
|
35
|
+
include MetrixDB
|
36
|
+
field :field
|
37
|
+
dataset [[1],[1]]
|
38
|
+
}}.should raise_error MetrixDB::UniqueFieldError, "Field 'field' is not unique"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should not raise exception if field is not unique" do
|
42
|
+
lambda { @class = Class.new {
|
43
|
+
include MetrixDB
|
44
|
+
field :field, :uniq => false
|
45
|
+
dataset [[1],[1]]
|
46
|
+
}}.should_not raise_error
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
31
50
|
end
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe MetrixDB do
|
4
4
|
context ".where" do
|
5
5
|
before do
|
6
|
-
dataset = [[1,2],[2,3]]
|
6
|
+
dataset = [[1,2],[2,3]]
|
7
7
|
@dataset = dataset
|
8
8
|
@class = Class.new do
|
9
9
|
include MetrixDB
|
@@ -38,6 +38,7 @@ describe MetrixDB do
|
|
38
38
|
inst.col1.should == 1
|
39
39
|
inst.col2.should == 2
|
40
40
|
end
|
41
|
+
|
41
42
|
end
|
42
43
|
end
|
43
44
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metrix_db
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Allen Wei
|