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 ADDED
@@ -0,0 +1,5 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ *.swp
5
+ /.rvmrc
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ -f documentation
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in metrix_db.gemspec
4
+ gemspec
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,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1 @@
1
+ Autotest.add_discovery { "rspec2" }
@@ -0,0 +1,3 @@
1
+ module MetrixDb
2
+ VERSION = "0.0.1"
3
+ end
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
+
@@ -0,0 +1,2 @@
1
+ require 'spec_helper'
2
+
@@ -0,0 +1,6 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'rspec'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ require 'metrix_db'
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