metrix_db 0.0.4 → 0.0.5

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 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