metrix_db 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- metrix_db (0.0.3)
4
+ metrix_db (0.0.4)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
data/README.md CHANGED
@@ -15,7 +15,7 @@ Usage
15
15
  class MyDB
16
16
  include MetrixDB
17
17
  field :col1, :uniq => false
18
- field :col2
18
+ field :col2, :ref => true
19
19
  dataset [[1,2],[3,4]]
20
20
  end
21
21
 
@@ -31,6 +31,7 @@ Field
31
31
  Options for field definition
32
32
 
33
33
  `uniq`: Check if column is unique. Default value is true.
34
+ `ref`: Support `[]` query syntax. If not set for all field will use first field as ref field
34
35
 
35
36
 
36
37
  Query
@@ -45,6 +46,11 @@ or alias :one
45
46
  mydb = MyDB.on(:col1 => 1) # nil or instance of MyDB.
46
47
  mydb.col1 # => 1
47
48
  mydb.col2 # => 2
49
+
50
+ use `[]` as query syntax, it will use ref field to query data.
51
+
52
+ mydb = MyDB.[1] # nil or instance of MyDB.
53
+
48
54
 
49
55
 
50
56
 
data/lib/metrix_db.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  module MetrixDB
2
2
  class UniqueFieldError < Exception; end
3
+ class UsageError < Exception; end
3
4
 
4
5
  def self.included(base)
5
6
  base.extend ClassMethods
@@ -19,19 +20,25 @@ module MetrixDB
19
20
  @fields ||= {}
20
21
  index = @fields.size
21
22
  @fields[name.to_sym] = index
23
+
22
24
  @uniq_fields ||= {}
23
25
  @uniq_fields[index] = name.to_s if options[:uniq]
26
+
27
+ raise UsageError.new("Already defined '#{@ref_field}' as ref column") if options[:ref] && @ref_field
28
+ @ref_field = name.to_sym if options[:ref]
29
+
24
30
  define_method "#{name}" do
25
31
  @data[self.class.fields[name.to_sym]]
26
32
  end
27
33
  end
28
34
 
29
35
  def fields
30
- @fields ||= []
36
+ @fields ||= {}
31
37
  end
32
38
 
33
39
  def dataset(_dataset)
34
40
  @dataset = _dataset
41
+ @ref_field ||= @fields.keys.first
35
42
  check_uniq_fields(_dataset)
36
43
  end
37
44
 
@@ -52,7 +59,12 @@ module MetrixDB
52
59
  return self.new(data) if data[@fields[k.to_sym]] == v
53
60
  end
54
61
  end
62
+ return nil
55
63
  end
56
64
  alias :on :first
65
+
66
+ def [](value)
67
+ self.first(@ref_field => value)
68
+ end
57
69
  end
58
70
  end
@@ -1,3 +1,3 @@
1
1
  module MetrixDb
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -7,6 +7,7 @@ describe MetrixDB do
7
7
  @dataset = dataset
8
8
  @class = Class.new do
9
9
  include MetrixDB
10
+ field :field1
10
11
  dataset dataset
11
12
  end
12
13
  end
@@ -47,7 +47,36 @@ describe MetrixDB do
47
47
  end
48
48
  end
49
49
 
50
- context "" do
50
+ context "ref index" do
51
+ it "should use first field as ref field" do
52
+ klass = Class.new do
53
+ include MetrixDB
54
+ field :field1
55
+ field :field2
56
+ dataset [[1,2],[2,3]]
57
+ end
58
+
59
+ klass.instance_variable_get("@ref_field").should == :field1
60
+ end
61
+
62
+ it "can set ref field" do
63
+ klass = Class.new do
64
+ include MetrixDB
65
+ field :field1
66
+ field :field2, :ref => true
67
+ dataset [[1,2],[2,3]]
68
+ end
69
+ klass.instance_variable_get("@ref_field").should == :field2
70
+ end
71
+
72
+ it "will raise error if define two ref field" do
73
+ lambda {Class.new {
74
+ include MetrixDB
75
+ field :field1, :ref => true
76
+ field :field2, :ref => true
77
+ dataset [[1,2],[2,3]]
78
+ }}.should raise_error MetrixDB::UsageError, "Already defined 'field1' as ref column"
79
+ end
51
80
 
52
81
  end
53
82
  end
@@ -38,7 +38,19 @@ describe MetrixDB do
38
38
  inst.col1.should == 1
39
39
  inst.col2.should == 2
40
40
  end
41
-
42
41
  end
42
+
43
+ context "ref query syntax []" do
44
+ it "use first field as search key" do
45
+ klass = Class.new do
46
+ include MetrixDB
47
+ field :field1
48
+ field :field2
49
+ dataset [[1,2],[2,3]]
50
+ end
51
+ klass[2].data.should == [2,3]
52
+ klass[123].should be_nil
53
+ end
54
+ end
43
55
  end
44
56
 
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: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 4
10
- version: 0.0.4
9
+ - 5
10
+ version: 0.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Allen Wei
@@ -68,7 +68,7 @@ files:
68
68
  - metrix_db.gemspec
69
69
  - spec/metrix_db/data_spec.rb
70
70
  - spec/metrix_db/field_spec.rb
71
- - spec/metrix_db/first_spec.rb
71
+ - spec/metrix_db/query_spec.rb
72
72
  - spec/metrix_db_spec.rb
73
73
  - spec/spec_helper.rb
74
74
  has_rdoc: true
@@ -108,6 +108,6 @@ summary: Simple DB base on Ruby Array
108
108
  test_files:
109
109
  - spec/metrix_db/data_spec.rb
110
110
  - spec/metrix_db/field_spec.rb
111
- - spec/metrix_db/first_spec.rb
111
+ - spec/metrix_db/query_spec.rb
112
112
  - spec/metrix_db_spec.rb
113
113
  - spec/spec_helper.rb