data_store 0.0.1 → 0.0.2

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.
@@ -0,0 +1,181 @@
1
+ require File.expand_path '../test_helper', __FILE__
2
+
3
+ class TableTest < Test::Unit::TestCase
4
+
5
+ context 'DataStore::table general' do
6
+
7
+ setup do
8
+ DataStore::Connector.new.reset!
9
+ @record = DataStore::Base.create(identifier: 1,
10
+ type: 'gauge',
11
+ name: 'Electra',
12
+ description: 'Actual usage of electra in the home',
13
+ compression_schema: [5,6,10])
14
+ @table = DataStore::Table.new(1)
15
+ end
16
+
17
+ should 'return the value of the identifier' do
18
+ assert_equal 1, @table.identifier
19
+ end
20
+
21
+ should 'return the corresponding parent record' do
22
+ assert_equal true, @table.parent.is_a?(DataStore::Base)
23
+ assert_equal 1, @table.parent.identifier
24
+ end
25
+
26
+ context 'adding datapoints' do
27
+
28
+ setup do
29
+ @table.stubs(:calculate_average_values)
30
+ end
31
+
32
+ should 'add a datapoint to the table' do
33
+ @table.add(120.34)
34
+ assert_equal 1, @table.count
35
+ end
36
+
37
+ should 'be able to add a datapoint to the table asynchronously' do
38
+ @table.add!(120.34)
39
+ assert_equal 1, @table.count
40
+ end
41
+
42
+ should 'return the last datapoint' do
43
+ @table.add(120.34)
44
+ @table.add(120.38)
45
+ assert_equal 120.38, @table.last.value
46
+ end
47
+
48
+ should 'return corresponding model' do
49
+ @table.add(123.45)
50
+ assert_equal 123.45, @table.model.find(value: 123.45).value
51
+ end
52
+ end
53
+
54
+ should 'Trigger the average calculator after adding a value' do
55
+ calculator = mock
56
+ #Need to use any_parameters instead of @table because of Celluloid
57
+ DataStore::AverageCalculator.expects(:new).with(any_parameters).returns(calculator)
58
+ calculator.expects(:perform)
59
+ @table.add(120.34)
60
+ end
61
+
62
+ should 'be able to import datapoints' do
63
+ @table.import([[100, 10], [120, 20], [130, 20]])
64
+ assert_equal 3, @table.model.db[:ds_1].count
65
+ end
66
+
67
+ context 'fetch' do
68
+ setup do
69
+ @from = Time.now.utc.to_f - 3600
70
+ @till = Time.now.utc.to_f
71
+
72
+ @table.model.insert(value: 10, created: @from)
73
+ @table.model.insert(value: 11, created: @from + 10)
74
+ end
75
+
76
+ should 'return the datapoints in a given time frame' do
77
+ assert_equal [10.0, 11.0], @table.fetch(:from => @from, :till => @till).map{|datapoint| datapoint[0]}
78
+ assert_equal [@from.round, (@from + 10).round], @table.fetch(:from => @from, :till => @till).map{|datapoint| datapoint[1].round}
79
+ end
80
+
81
+ should 'return the datapoints from the corresponding time frame' do
82
+ time = Time.now.utc.to_f
83
+
84
+ #Extensive mocking, should we introduce Timeslot object for a more clean and simple test?
85
+ fourth_query = mock
86
+ fourth_query.stubs(:all).returns([])
87
+ third_query = mock
88
+ third_query.stubs(:order).returns(fourth_query)
89
+ second_query = mock
90
+ second_query.stubs(:where).returns(third_query)
91
+ first_query = mock
92
+ first_query.stubs(:where).returns(second_query)
93
+
94
+ @table.parent.db.expects('[]').with(:ds_1_5).returns(first_query)
95
+ @table.fetch(:from => time, :till => time + 8001)
96
+
97
+ @table.parent.db.expects('[]').with(:ds_1_30).returns(first_query)
98
+ @table.fetch(:from => time, :till => time + 40001)
99
+ end
100
+
101
+ end
102
+
103
+ context 'DataStore::table general' do
104
+
105
+ setup do
106
+ DataStore::Connector.new.reset!
107
+ @record = DataStore::Base.create(identifier: 1,
108
+ type: 'gauge',
109
+ name: 'Electra',
110
+ description: 'Actual usage of electra in the home',
111
+ compression_schema: [5,6,10])
112
+
113
+ @table = DataStore::Table.new(1, 1)
114
+ @table.stubs(:calculate_average_values)
115
+ end
116
+
117
+ should 'store a value in the compressed table' do
118
+ @table.add(12345.67)
119
+ assert_equal 12345.67, DataStore::Base.db[:ds_1_5].first[:value]
120
+ end
121
+
122
+ should 'store a value in the compressed table with the corresponding index' do
123
+ @table.add(765.432, table_index: 3)
124
+ assert_equal 765.432, DataStore::Base.db[:ds_1_300].first[:value]
125
+ end
126
+
127
+ end
128
+
129
+ context 'with a counter type' do
130
+
131
+ setup do
132
+ @record = DataStore::Base.create(identifier: 2,
133
+ type: 'counter',
134
+ name: 'Gas',
135
+ description: 'Actual usage of natural gas',
136
+ compression_schema: [])
137
+ @table = DataStore::Table.new(2)
138
+ end
139
+
140
+ context 'adding datapoints' do
141
+
142
+ setup do
143
+ @table.stubs(:calculate_average_values)
144
+ end
145
+
146
+ should 'add the original value as the first datapoint to the table' do
147
+ @table.add(120123)
148
+ assert_equal 120123, @table.last.value
149
+ end
150
+
151
+ should 'storing the difference between current and last value' do
152
+ @table.add(120125)
153
+ @table.add(120127)
154
+ @table.add(120129)
155
+ assert_equal 2, @table.last.value
156
+ end
157
+
158
+ should 'remove the very first record after more datapoints' do
159
+ #first record => [#< @values={:id=>1, :value=>120125.0, :original_value=>120125.0, :created=>1358023611.75022}>]
160
+ #So this will be removed in order to maintain a dataset with only 'difference' values
161
+ @table.add(120125)
162
+
163
+ @table.add(120127)
164
+ @table.add(120129)
165
+
166
+ assert_equal 2, @table.count
167
+ end
168
+
169
+ should 'add the difference when adding datapoints but store orginal value as well' do
170
+ @table.add(120125)
171
+ @table.add(120127)
172
+ assert_equal 120127, @table.last[:original_value] #original_value is not added as column to the Sequel model
173
+ end
174
+
175
+ end
176
+
177
+ end
178
+
179
+ end
180
+
181
+ end
@@ -0,0 +1,32 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'mocha'
12
+ require 'shoulda'
13
+
14
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
15
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
16
+
17
+ require 'data_store'
18
+
19
+ class Test::Unit::TestCase
20
+
21
+ DataStore.configure do |config|
22
+ config.database = ENV['DB'] || :postgres
23
+ config.enable_logging = false
24
+ end
25
+
26
+ def time_now_utc_returns(value)
27
+ time = mock
28
+ Time.stubs(:now).returns(time)
29
+ time.stubs(:utc).returns(value)
30
+ end
31
+
32
+ end
metadata CHANGED
@@ -1,93 +1,83 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: data_store
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 1
9
- version: 0.0.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Frank Oxener
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2012-11-06 00:00:00 +01:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: shoulda
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- version: "0"
30
- type: :development
31
- version_requirements: *id001
32
- - !ruby/object:Gem::Dependency
33
- name: rspec
34
- prerelease: false
35
- requirement: &id002 !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- segments:
40
- - 0
41
- version: "0"
42
- type: :development
43
- version_requirements: *id002
44
- description: DataStore is designed to store real time data but still manage the growth of your dataset and still keeping historical data
45
- email:
12
+ date: 2013-02-11 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: DataStore is designed to store real time data but still manage the growth
15
+ of your dataset and still keeping historical data
16
+ email:
46
17
  - frank.oxener@gmail.com
47
18
  executables: []
48
-
49
19
  extensions: []
50
-
51
20
  extra_rdoc_files: []
52
-
53
- files:
21
+ files:
54
22
  - .gitignore
23
+ - .rvmrc
24
+ - .travis.yml
25
+ - CHANGELOG.md
55
26
  - Gemfile
27
+ - Guardfile
56
28
  - LICENSE
57
29
  - README.md
30
+ - REMINDERS
58
31
  - Rakefile
32
+ - config/database.yml
59
33
  - data_store.gemspec
34
+ - db/data_store.db
60
35
  - lib/data_store.rb
36
+ - lib/data_store/average_calculator.rb
37
+ - lib/data_store/base.rb
38
+ - lib/data_store/configuration.rb
39
+ - lib/data_store/connector.rb
40
+ - lib/data_store/definitions.rb
41
+ - lib/data_store/table.rb
61
42
  - lib/data_store/version.rb
62
- has_rdoc: true
63
- homepage: ""
64
- licenses:
43
+ - test/average_calculator_test.rb
44
+ - test/configuration_test.rb
45
+ - test/connector_test.rb
46
+ - test/data_store_test.rb
47
+ - test/integration_test.rb
48
+ - test/table_test.rb
49
+ - test/test_helper.rb
50
+ homepage: https://github.com/dovadi/data_store
51
+ licenses:
65
52
  - MIT
66
53
  post_install_message:
67
54
  rdoc_options: []
68
-
69
- require_paths:
55
+ require_paths:
70
56
  - lib
71
- required_ruby_version: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- segments:
76
- - 0
77
- version: "0"
78
- required_rubygems_version: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- segments:
83
- - 0
84
- version: "0"
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
85
69
  requirements: []
86
-
87
70
  rubyforge_project:
88
- rubygems_version: 1.3.6
71
+ rubygems_version: 1.8.24
89
72
  signing_key:
90
73
  specification_version: 3
91
74
  summary: DataStore for storing real time data
92
- test_files: []
93
-
75
+ test_files:
76
+ - test/average_calculator_test.rb
77
+ - test/configuration_test.rb
78
+ - test/connector_test.rb
79
+ - test/data_store_test.rb
80
+ - test/integration_test.rb
81
+ - test/table_test.rb
82
+ - test/test_helper.rb
83
+ has_rdoc: