rhoconnect 4.0.4 → 5.1.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.
- checksums.yaml +5 -13
- data/CHANGELOG.md +54 -5
- data/CREDITS +219 -219
- data/Gemfile +2 -2
- data/Gemfile.lock +68 -79
- data/Rakefile +1 -2
- data/bench/benchapp/spec/models/ruby/mock_adapter_spec.rb +17 -17
- data/bench/benchapp/spec/models/ruby/queue_mock_adapter_spec.rb +17 -17
- data/bench/benchapp/spec/spec_helper.rb +3 -3
- data/bench/blobapp/spec/models/ruby/blob_adapter_spec.rb +17 -17
- data/bench/blobapp/spec/spec_helper.rb +3 -3
- data/bench/lib/bench/runner.rb +1 -69
- data/bench/lib/bench.rb +18 -18
- data/bench/spec/mock_adapter_spec.rb +54 -55
- data/bench/spec/mock_client_spec.rb +47 -48
- data/bench/spec/result_spec.rb +41 -44
- data/bench/spec/utils_spec.rb +24 -25
- data/commands/generators/app.rb +7 -5
- data/commands/generators/controller.rb +7 -5
- data/commands/generators/model.rb +7 -5
- data/commands/generators/source.rb +7 -5
- data/commands/parser.rb +1 -1
- data/commands/redis/redis_download.rb +1 -1
- data/doc/async-jobs.txt +9 -9
- data/doc/supported-platforms.txt +0 -2
- data/generators/rhoconnect.rb +92 -212
- data/generators/templates/application/rcgemfile +3 -3
- data/generators/templates/application/spec/application_controller_spec.rb +14 -16
- data/generators/templates/application/spec/js_spec.rb +20 -20
- data/generators/templates/application/spec/spec_helper.rb +1 -1
- data/generators/templates/source/controllers/ruby/controller_spec.rb +18 -19
- data/generators/templates/source/models/ruby/model_spec.rb +17 -17
- data/install.sh +10 -21
- data/installer/unix-like/rho_connect_install_constants.rb +5 -5
- data/installer/unix-like/rho_connect_install_installers.rb +4 -4
- data/installer/utils/constants.rb +6 -6
- data/installer/utils/nix_install_test.rb +29 -29
- data/installer/utils/package_upload/repos.rake +16 -26
- data/js-adapters/node.rb +4 -4
- data/js-adapters/node_channel.rb +4 -8
- data/lib/rhoconnect/db_adapter.rb +13 -13
- data/lib/rhoconnect/handler/changes/engine.rb +1 -1
- data/lib/rhoconnect/jobs/bulk_data_job.rb +29 -29
- data/lib/rhoconnect/license.rb +7 -7
- data/lib/rhoconnect/model/helpers/find_duplicates_on_update.rb +13 -13
- data/lib/rhoconnect/ping/apple.rb +4 -4
- data/lib/rhoconnect/server.rb +2 -2
- data/lib/rhoconnect/source.rb +2 -2
- data/lib/rhoconnect/store.rb +12 -6
- data/lib/rhoconnect/utilities.rb +2 -2
- data/lib/rhoconnect/version.rb +1 -1
- data/lib/rhoconnect.rb +6 -4
- data/rhoconnect.gemspec +5 -6
- data/spec/api/api_helper.rb +1 -1
- data/spec/api/app/fast_delete_spec.rb +22 -22
- data/spec/api/app/fast_insert_spec.rb +23 -23
- data/spec/api/app/fast_update_spec.rb +63 -63
- data/spec/api/app/push_deletes_spec.rb +11 -13
- data/spec/api/app/push_objects_spec.rb +39 -39
- data/spec/api/client/client_get_db_doc_spec.rb +29 -29
- data/spec/api/client/client_set_db_doc_spec.rb +11 -11
- data/spec/api/client/get_client_params_spec.rb +29 -29
- data/spec/api/client/list_client_docs_spec.rb +32 -34
- data/spec/api/client/reset_spec.rb +30 -30
- data/spec/api/readstate/set_refresh_time_spec.rb +43 -43
- data/spec/api/source/get_source_params_spec.rb +32 -34
- data/spec/api/source/list_sources_spec.rb +13 -13
- data/spec/api/source/update_source_params_spec.rb +19 -19
- data/spec/api/store/get_db_doc_spec.rb +27 -27
- data/spec/api/store/set_db_doc_spec.rb +38 -38
- data/spec/api/system/adapter_spec.rb +27 -29
- data/spec/api/system/get_license_info_spec.rb +11 -11
- data/spec/api/system/login_spec.rb +37 -37
- data/spec/api/system/reset_spec.rb +15 -15
- data/spec/api/system/stats_spec.rb +70 -71
- data/spec/api/user/create_user_spec.rb +37 -37
- data/spec/api/user/delete_client_spec.rb +7 -7
- data/spec/api/user/delete_user_spec.rb +62 -62
- data/spec/api/user/list_clients_spec.rb +24 -24
- data/spec/api/user/list_source_docs_spec.rb +29 -29
- data/spec/api/user/list_users_spec.rb +22 -22
- data/spec/api/user/ping_spec.rb +18 -18
- data/spec/api/user/show_user_spec.rb +10 -10
- data/spec/api/user/update_user_spec.rb +43 -43
- data/spec/api/user/user_get_db_doc_spec.rb +12 -12
- data/spec/api/user/user_set_db_doc_spec.rb +37 -37
- data/spec/api_token_spec.rb +8 -8
- data/spec/app_spec.rb +18 -17
- data/spec/apps/jstestapp/settings/settings.yml +2 -0
- data/spec/async_spec.rb +9 -11
- data/spec/bulk_data/bulk_data_spec.rb +120 -120
- data/spec/cli/cli_spec.rb +50 -53
- data/spec/client_spec.rb +105 -105
- data/spec/client_sync_spec.rb +529 -528
- data/spec/controllers/js_base_spec.rb +147 -141
- data/spec/doc/doc_spec.rb +51 -52
- data/spec/document_spec.rb +58 -58
- data/spec/dynamic_adapter_spec.rb +33 -36
- data/spec/generator/generator_spec.rb +76 -42
- data/spec/jobs/bulk_data_job_spec.rb +101 -102
- data/spec/jobs/ping_job_spec.rb +176 -177
- data/spec/jobs/source_job_spec.rb +24 -25
- data/spec/license_spec.rb +54 -55
- data/spec/models/js_base_spec.rb +121 -120
- data/spec/perf/bulk_data_perf_spec.rb +23 -24
- data/spec/perf/perf_spec_helper.rb +7 -7
- data/spec/perf/store_perf_spec.rb +139 -140
- data/spec/ping/apple_spec.rb +65 -65
- data/spec/ping/gcm_spec.rb +83 -84
- data/spec/ping/rhoconnect_push_spec.rb +52 -53
- data/spec/predefined_adapters/rho_internal_bench_adapter_controller_js_spec.rb +100 -101
- data/spec/predefined_adapters/rho_internal_js_bench_adapter_js_spec.rb +29 -31
- data/spec/read_state_spec.rb +24 -25
- data/spec/rhoconnect_spec.rb +7 -7
- data/spec/server/server_spec.rb +664 -662
- data/spec/server/stats_spec.rb +12 -12
- data/spec/source_adapter_spec.rb +124 -125
- data/spec/source_spec.rb +148 -149
- data/spec/source_sync_spec.rb +736 -736
- data/spec/spec_helper.rb +4 -5
- data/spec/stats/record_spec.rb +22 -21
- data/spec/store_orm_spec.rb +48 -48
- data/spec/store_spec.rb +428 -426
- data/spec/support/shared_examples.rb +5 -7
- data/spec/sync_states_spec.rb +67 -67
- data/spec/test_methods_spec.rb +121 -123
- data/spec/testdata/10000-data.txt +0 -0
- data/spec/testdata/5000-data.txt +0 -0
- data/spec/user_spec.rb +102 -102
- data/tasks/redis.rake +3 -3
- metadata +154 -195
- data/bench/benchapp/tmp/pids/passenger.9292.pid.lock +0 -0
- data/bench/benchapp/tmp/restart.txt +0 -0
- data/bench/blobapp/settings/license.key.bak +0 -2
- data/bench/blobapp/tmp/restart.txt +0 -0
- data/bench/lib/testdata/1-data.txt +0 -0
- data/bench/lib/testdata/10-data.txt +0 -0
- data/bench/lib/testdata/2-data.txt +0 -0
- data/bench/lib/testdata/250-data.txt +0 -0
- data/bench/lib/testdata/5-blob_data.txt +0 -0
- data/bench/lib/testdata/5-data.txt +0 -0
- data/bench/lib/testdata/50-data.txt +0 -0
- data/bench/lib/testdata/500-data.txt +0 -0
- data/doc/protocol.html +0 -1993
- data/spec/coverage/rcov/assets/0.2.3/jquery-1.3.2.min.js +0 -19
- data/spec/coverage/rcov/assets/0.2.3/jquery.tablesorter.min.js +0 -15
- data/spec/coverage/rcov/assets/0.2.3/print.css +0 -12
- data/spec/coverage/rcov/assets/0.2.3/rcov.js +0 -42
- data/spec/coverage/rcov/assets/0.2.3/screen.css +0 -270
- data/spec/coverage/rcov/index.html +0 -88
- data/spec/generator/generator_spec_helper.rb +0 -9
data/spec/spec_helper.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
require 'rubygems'
|
|
2
2
|
require 'rspec'
|
|
3
3
|
require 'webmock/rspec'
|
|
4
|
-
require 'rspec/autorun' # Required for Rcov to run with rspec '~> 2.8.0'
|
|
5
4
|
|
|
6
5
|
require 'simplecov'
|
|
7
6
|
require 'simplecov-rcov'
|
|
@@ -56,10 +55,10 @@ ENV['RACK_ENV'] = 'test'
|
|
|
56
55
|
ERROR = '0_broken_object_id' unless defined? ERROR
|
|
57
56
|
|
|
58
57
|
class Rhoconnect::Model::Base
|
|
59
|
-
def inject_result(result)
|
|
58
|
+
def inject_result(result)
|
|
60
59
|
@result = result
|
|
61
60
|
end
|
|
62
|
-
|
|
61
|
+
|
|
63
62
|
def inject_tmpdoc(doctype)
|
|
64
63
|
@tmp_docname = doctype
|
|
65
64
|
@stash_size = 0
|
|
@@ -144,7 +143,7 @@ module TestHelpers
|
|
|
144
143
|
end
|
|
145
144
|
|
|
146
145
|
def setup_post_yield(response)
|
|
147
|
-
RestClient.stub
|
|
146
|
+
RestClient.stub(:post).and_yield(response, nil, nil)
|
|
148
147
|
end
|
|
149
148
|
|
|
150
149
|
def set_state(state,append=false)
|
|
@@ -345,7 +344,7 @@ module TestHelpers
|
|
|
345
344
|
end
|
|
346
345
|
|
|
347
346
|
def unzip_file(file,file_dir)
|
|
348
|
-
Zip::
|
|
347
|
+
Zip::File.open(file) do |zip_file|
|
|
349
348
|
zip_file.each do |f|
|
|
350
349
|
f_path = File.join(file_dir,f.name)
|
|
351
350
|
FileUtils.mkdir_p(File.dirname(f_path))
|
data/spec/stats/record_spec.rb
CHANGED
|
@@ -7,67 +7,68 @@ STATS_RECORD_SIZE = 8 unless defined? STATS_RECORD_SIZE
|
|
|
7
7
|
include Rhoconnect
|
|
8
8
|
|
|
9
9
|
describe "Record" do
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
before(:each) do
|
|
12
12
|
@now = 9
|
|
13
|
+
Store.create
|
|
13
14
|
Store.flush_all
|
|
14
|
-
Store.stub
|
|
15
|
+
Store.stub(:lock).and_yield
|
|
15
16
|
end
|
|
16
|
-
|
|
17
|
+
|
|
17
18
|
it "should add metric to the record and trim record size" do
|
|
18
|
-
Time.stub
|
|
19
|
+
Time.stub(:now).and_return { @now }
|
|
19
20
|
10.times { @now += 1; Rhoconnect::Stats::Record.add('foo') }
|
|
20
21
|
Store.zrange('stat:foo', 0, -1).should == ["2:12", "2:14", "2:16", "2:18"]
|
|
21
22
|
end
|
|
22
|
-
|
|
23
|
+
|
|
23
24
|
it "should add single record" do
|
|
24
|
-
Time.stub
|
|
25
|
+
Time.stub(:now).and_return { @now += 1; @now }
|
|
25
26
|
Rhoconnect::Stats::Record.add('foo')
|
|
26
27
|
Store.zrange('stat:foo', 0, -1).should == ["1:10"]
|
|
27
28
|
end
|
|
28
|
-
|
|
29
|
+
|
|
29
30
|
it "should return type of metric" do
|
|
30
31
|
Rhoconnect::Stats::Record.add('foo')
|
|
31
32
|
Rhoconnect::Stats::Record.rtype('foo').should == 'zset'
|
|
32
33
|
end
|
|
33
|
-
|
|
34
|
+
|
|
34
35
|
it "should set string metric" do
|
|
35
36
|
Rhoconnect::Stats::Record.set_value('foo', 'bar')
|
|
36
37
|
Store.get_value('stat:foo').should == 'bar'
|
|
37
38
|
end
|
|
38
|
-
|
|
39
|
+
|
|
39
40
|
it "should get string metric" do
|
|
40
41
|
Store.put_value('stat:foo', 'bar')
|
|
41
42
|
Rhoconnect::Stats::Record.get_value('foo').should == 'bar'
|
|
42
43
|
end
|
|
43
|
-
|
|
44
|
+
|
|
44
45
|
it "should get keys" do
|
|
45
46
|
Rhoconnect::Stats::Record.add('foo')
|
|
46
47
|
Rhoconnect::Stats::Record.add('bar')
|
|
47
48
|
Rhoconnect::Stats::Record.keys.sort.should == ['bar','foo']
|
|
48
49
|
end
|
|
49
|
-
|
|
50
|
+
|
|
50
51
|
it "should add absolute metric value" do
|
|
51
|
-
Time.stub
|
|
52
|
+
Time.stub(:now).and_return { @now }
|
|
52
53
|
time = 0
|
|
53
|
-
4.times do
|
|
54
|
+
4.times do
|
|
54
55
|
@now += 1
|
|
55
56
|
Rhoconnect::Stats::Record.save_average('foo',time)
|
|
56
57
|
time += 1
|
|
57
58
|
end
|
|
58
59
|
Store.zrange('stat:foo', 0, -1).should == ["2.0,1.0:10", "2.0,5.0:12"]
|
|
59
60
|
end
|
|
60
|
-
|
|
61
|
+
|
|
61
62
|
it "should update metric" do
|
|
62
63
|
Rhoconnect.stats = true
|
|
63
64
|
@incr = 0
|
|
64
|
-
Time.stub
|
|
65
|
+
Time.stub(:now).and_return do
|
|
65
66
|
if @incr > 0
|
|
66
67
|
@now += 1
|
|
67
68
|
@incr -= 1
|
|
68
69
|
end
|
|
69
70
|
@now
|
|
70
|
-
end
|
|
71
|
+
end
|
|
71
72
|
4.times do
|
|
72
73
|
@now += 1
|
|
73
74
|
Rhoconnect::Stats::Record.update('foo') do
|
|
@@ -77,21 +78,21 @@ describe "Record" do
|
|
|
77
78
|
Store.zrange('stat:foo', 0, -1).should == ["1,1.0:14", "1,1.0:18", "1,1.0:20"]
|
|
78
79
|
Rhoconnect.stats = false
|
|
79
80
|
end
|
|
80
|
-
|
|
81
|
+
|
|
81
82
|
it "should get range of metric values" do
|
|
82
|
-
Time.stub
|
|
83
|
+
Time.stub(:now).and_return { @now }
|
|
83
84
|
10.times { @now += 1; Rhoconnect::Stats::Record.add('foo') }
|
|
84
85
|
Rhoconnect::Stats::Record.range('foo', 0, 1).should == ["2:12", "2:14"]
|
|
85
86
|
end
|
|
86
|
-
|
|
87
|
+
|
|
87
88
|
it "should reset metric" do
|
|
88
|
-
Time.stub
|
|
89
|
+
Time.stub(:now).and_return { @now }
|
|
89
90
|
10.times { @now += 1; Rhoconnect::Stats::Record.add('foo') }
|
|
90
91
|
Store.zrange('stat:foo', 0, -1).should == ["2:12", "2:14", "2:16", "2:18"]
|
|
91
92
|
Rhoconnect::Stats::Record.reset('foo')
|
|
92
93
|
Store.zrange('stat:foo', 0, -1).should == []
|
|
93
94
|
end
|
|
94
|
-
|
|
95
|
+
|
|
95
96
|
it "should reset all metrics" do
|
|
96
97
|
Rhoconnect::Stats::Record.add('foo')
|
|
97
98
|
Rhoconnect::Stats::Record.add('bar')
|
data/spec/store_orm_spec.rb
CHANGED
|
@@ -2,31 +2,31 @@
|
|
|
2
2
|
require File.join(File.dirname(__FILE__),'spec_helper')
|
|
3
3
|
|
|
4
4
|
describe Rhoconnect::StoreOrm do
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
context "DSL" do
|
|
7
7
|
class TestDSL < Rhoconnect::StoreOrm
|
|
8
8
|
field :foo
|
|
9
9
|
list :bar
|
|
10
10
|
set :sloppy
|
|
11
11
|
end
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
before(:each) do
|
|
14
14
|
@x = TestDSL.with_key(1)
|
|
15
15
|
end
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
it "should define rw accessors for field" do
|
|
18
18
|
@x.should respond_to(:foo)
|
|
19
19
|
@x.should respond_to(:foo=)
|
|
20
20
|
end
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
it "should define r accessor for list" do
|
|
23
23
|
@x.should respond_to(:bar)
|
|
24
24
|
end
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
it "should define r accessor for set" do
|
|
27
27
|
@x.should respond_to(:sloppy)
|
|
28
28
|
end
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
it "should raise error on invalid type" do
|
|
31
31
|
lambda do
|
|
32
32
|
class TestInvalidType < Rhoconnect::StoreOrm
|
|
@@ -35,7 +35,7 @@ describe Rhoconnect::StoreOrm do
|
|
|
35
35
|
end.should raise_error(ArgumentError, 'Unknown type invalid_type for field invalid')
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
|
-
|
|
38
|
+
|
|
39
39
|
context "field type cast" do
|
|
40
40
|
class TestType < Rhoconnect::StoreOrm
|
|
41
41
|
field :foo_string, :string
|
|
@@ -43,21 +43,21 @@ describe Rhoconnect::StoreOrm do
|
|
|
43
43
|
field :foo_date, :datetime
|
|
44
44
|
field :foo_int, :int
|
|
45
45
|
field :foo_float, :float
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
list :list_date, :datetime
|
|
48
|
-
set :set_date, :datetime
|
|
48
|
+
set :set_date, :datetime
|
|
49
49
|
end
|
|
50
|
-
|
|
50
|
+
|
|
51
51
|
class TestValidateType < Rhoconnect::StoreOrm
|
|
52
52
|
field :v_field, :string
|
|
53
53
|
validates_presence_of :v_field
|
|
54
54
|
end
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
class TestLoadType < Rhoconnect::StoreOrm
|
|
57
57
|
field :something, :string
|
|
58
58
|
attr_accessor :foo
|
|
59
59
|
end
|
|
60
|
-
|
|
60
|
+
|
|
61
61
|
before(:each) do
|
|
62
62
|
Store.create
|
|
63
63
|
Store.flush_all
|
|
@@ -67,47 +67,47 @@ describe Rhoconnect::StoreOrm do
|
|
|
67
67
|
@yRedisDbMock = RSpec::Mocks::Mock.new
|
|
68
68
|
@x = TestType.with_key(1)
|
|
69
69
|
@y = TestType.with_key(1)
|
|
70
|
-
@x.stub
|
|
71
|
-
@y.stub
|
|
72
|
-
@xRedisMock.stub
|
|
73
|
-
@yRedisMock.stub
|
|
70
|
+
@x.stub(:store).and_return(@xRedisMock)
|
|
71
|
+
@y.stub(:store).and_return(@yRedisMock)
|
|
72
|
+
@xRedisMock.stub(:db).and_return(@xRedisDbMock)
|
|
73
|
+
@yRedisMock.stub(:db).and_return(@yRedisDbMock)
|
|
74
74
|
end
|
|
75
|
-
|
|
75
|
+
|
|
76
76
|
it "should create with string id" do
|
|
77
77
|
@x = TestType.create(:id => 'test')
|
|
78
78
|
@x.id.should == 'test'
|
|
79
79
|
end
|
|
80
|
-
|
|
80
|
+
|
|
81
81
|
it "should create with auto-increment id" do
|
|
82
82
|
@x = TestType.create
|
|
83
83
|
@x1 = TestType.create
|
|
84
84
|
@x1.id.should == @x.id + 1
|
|
85
85
|
end
|
|
86
|
-
|
|
86
|
+
|
|
87
87
|
it "should raise ArgumentError on create with duplicate id" do
|
|
88
88
|
@x = TestType.create(:id => 'test1')
|
|
89
|
-
lambda { TestType.create(:id => 'test1') }.should
|
|
89
|
+
lambda { TestType.create(:id => 'test1') }.should
|
|
90
90
|
raise_error(ArgumentError, "Record already exists for 'test1'")
|
|
91
91
|
end
|
|
92
|
-
|
|
92
|
+
|
|
93
93
|
it "should validate_presence_of v_field" do
|
|
94
94
|
lambda { TestValidateType.create(:id => 'test2') }.should
|
|
95
95
|
raise_error(ArgumentError, "Missing required field 'v_field'")
|
|
96
96
|
end
|
|
97
|
-
|
|
97
|
+
|
|
98
98
|
it "should load with attributes set" do
|
|
99
99
|
TestLoadType.create(:id => 'test2')
|
|
100
100
|
@x = TestLoadType.load('test2',{:foo => 'bar'})
|
|
101
101
|
@x.foo.should == 'bar'
|
|
102
102
|
end
|
|
103
|
-
|
|
103
|
+
|
|
104
104
|
it "should save string as is" do
|
|
105
105
|
@xRedisMock.should_receive(:put_value).with('test_type:1:foo_string', 'xxx')
|
|
106
106
|
@yRedisMock.should_receive(:get_value).with('test_type:1:foo_string').and_return('xxx')
|
|
107
107
|
@x.foo_string = 'xxx'
|
|
108
108
|
@y.foo_string.should be_instance_of(String)
|
|
109
109
|
end
|
|
110
|
-
|
|
110
|
+
|
|
111
111
|
it "should marshal integer fields" do
|
|
112
112
|
@xRedisMock.should_receive(:put_value).with('test_type:1:foo_int', '12')
|
|
113
113
|
@yRedisMock.should_receive(:get_value).with('test_type:1:foo_int').and_return('12')
|
|
@@ -115,7 +115,7 @@ describe Rhoconnect::StoreOrm do
|
|
|
115
115
|
@y.foo_int.should be_kind_of(Integer)
|
|
116
116
|
@y.foo_int.should == 12
|
|
117
117
|
end
|
|
118
|
-
|
|
118
|
+
|
|
119
119
|
it "should marshal float fields" do
|
|
120
120
|
@xRedisMock.should_receive(:put_value).with('test_type:1:foo_float', '12.1')
|
|
121
121
|
@yRedisMock.should_receive(:get_value).with('test_type:1:foo_float').and_return('12.1')
|
|
@@ -123,7 +123,7 @@ describe Rhoconnect::StoreOrm do
|
|
|
123
123
|
@y.foo_float.should be_kind_of(Float)
|
|
124
124
|
@y.foo_float.should == 12.1
|
|
125
125
|
end
|
|
126
|
-
|
|
126
|
+
|
|
127
127
|
it "should marshal datetime fields" do
|
|
128
128
|
time = DateTime.now
|
|
129
129
|
str = time.strftime('%FT%T%z')
|
|
@@ -133,7 +133,7 @@ describe Rhoconnect::StoreOrm do
|
|
|
133
133
|
@y.foo_date.should be_kind_of(DateTime)
|
|
134
134
|
@y.foo_date.should.to_s == time.to_s
|
|
135
135
|
end
|
|
136
|
-
|
|
136
|
+
|
|
137
137
|
it "should marshal json structs" do
|
|
138
138
|
data = {'foo' => 'bar', 'x' => 2}
|
|
139
139
|
str = JSON.dump(data)
|
|
@@ -143,16 +143,16 @@ describe Rhoconnect::StoreOrm do
|
|
|
143
143
|
@y.foo_json.should be_kind_of(Hash)
|
|
144
144
|
@y.foo_json.should.inspect == data.inspect
|
|
145
145
|
end
|
|
146
|
-
|
|
146
|
+
|
|
147
147
|
it "should return nil for empty fields" do
|
|
148
148
|
@xRedisMock.should_receive(:get_value).with('test_type:1:foo_date').and_return(nil)
|
|
149
149
|
@x.foo_date.should be_nil
|
|
150
150
|
end
|
|
151
|
-
|
|
151
|
+
|
|
152
152
|
it "should marshal list values" do
|
|
153
153
|
data = DateTime.now
|
|
154
154
|
str = data.strftime('%FT%T%z')
|
|
155
|
-
|
|
155
|
+
|
|
156
156
|
@xRedisDbMock.should_receive('rpush').with('test_type:1:list_date', str)
|
|
157
157
|
@xRedisDbMock.should_receive('lset').with('test_type:1:list_date', 1, str)
|
|
158
158
|
@xRedisDbMock.should_receive('exists').with('test_type:1:list_date', str)
|
|
@@ -172,7 +172,7 @@ describe Rhoconnect::StoreOrm do
|
|
|
172
172
|
@x.list_date.pop_tail.should be_kind_of(DateTime)
|
|
173
173
|
@x.list_date.pop_head.should be_kind_of(DateTime)
|
|
174
174
|
end
|
|
175
|
-
|
|
175
|
+
|
|
176
176
|
it "should marshal set values" do
|
|
177
177
|
data = DateTime.now
|
|
178
178
|
str = data.strftime('%FT%T%z')
|
|
@@ -188,34 +188,34 @@ describe Rhoconnect::StoreOrm do
|
|
|
188
188
|
end
|
|
189
189
|
|
|
190
190
|
it "should handle empty members" do
|
|
191
|
-
@xRedisDbMock.stub
|
|
191
|
+
@xRedisDbMock.stub(:smembers).and_return(nil)
|
|
192
192
|
@x.set_date.members.should == []
|
|
193
193
|
end
|
|
194
194
|
end
|
|
195
|
-
|
|
195
|
+
|
|
196
196
|
context "increment/decrement" do
|
|
197
197
|
class TestIncrements < Rhoconnect::StoreOrm
|
|
198
198
|
field :foo, :integer
|
|
199
199
|
field :bar, :string
|
|
200
200
|
field :baz, :float
|
|
201
201
|
end
|
|
202
|
-
|
|
202
|
+
|
|
203
203
|
before do
|
|
204
204
|
@redisMock = RSpec::Mocks::Mock.new
|
|
205
205
|
@x = TestIncrements.with_key(1)
|
|
206
|
-
@x.stub
|
|
206
|
+
@x.stub(:store).and_return(@redisMock)
|
|
207
207
|
end
|
|
208
|
-
|
|
208
|
+
|
|
209
209
|
it "should send INCR when #increment! is called on an integer" do
|
|
210
210
|
@redisMock.should_receive(:update_count).with("test_increments:1:foo", 1)
|
|
211
211
|
@x.increment!(:foo)
|
|
212
212
|
end
|
|
213
|
-
|
|
213
|
+
|
|
214
214
|
it "should send DECR when #decrement! is called on an integer" do
|
|
215
215
|
@redisMock.should_receive(:update_count).with("test_increments:1:foo", -1)
|
|
216
216
|
@x.decrement!(:foo)
|
|
217
217
|
end
|
|
218
|
-
|
|
218
|
+
|
|
219
219
|
it "should raise an ArgumentError when called on non-integers" do
|
|
220
220
|
[:bar, :baz].each do |f|
|
|
221
221
|
lambda{@x.increment!(f)}.should raise_error(ArgumentError)
|
|
@@ -223,47 +223,47 @@ describe Rhoconnect::StoreOrm do
|
|
|
223
223
|
end
|
|
224
224
|
end
|
|
225
225
|
end
|
|
226
|
-
|
|
226
|
+
|
|
227
227
|
context "redis commands" do
|
|
228
228
|
class TestCommands < Rhoconnect::StoreOrm
|
|
229
229
|
field :foo
|
|
230
230
|
list :bar
|
|
231
231
|
set :sloppy
|
|
232
232
|
end
|
|
233
|
-
|
|
233
|
+
|
|
234
234
|
before(:each) do
|
|
235
235
|
@redisMock = RSpec::Mocks::Mock.new
|
|
236
236
|
@redisDbMock = RSpec::Mocks::Mock.new
|
|
237
237
|
@x = TestCommands.with_key(1)
|
|
238
|
-
@x.stub
|
|
239
|
-
@redisMock.stub
|
|
238
|
+
@x.stub(:store).and_return(@redisMock)
|
|
239
|
+
@redisMock.stub(:db).and_return(@redisDbMock)
|
|
240
240
|
end
|
|
241
|
-
|
|
241
|
+
|
|
242
242
|
it "should send GET on field read" do
|
|
243
243
|
@redisMock.should_receive(:get_value).with('test_commands:1:foo')
|
|
244
244
|
@x.foo
|
|
245
245
|
end
|
|
246
|
-
|
|
246
|
+
|
|
247
247
|
it "should send SET on field write" do
|
|
248
248
|
@redisMock.should_receive(:put_value).with('test_commands:1:foo', 'bar')
|
|
249
249
|
@x.foo = 'bar'
|
|
250
250
|
end
|
|
251
|
-
|
|
251
|
+
|
|
252
252
|
it "should send RPUSH on list <<" do
|
|
253
253
|
@redisDbMock.should_receive(:rpush).with('test_commands:1:bar', 'bar')
|
|
254
254
|
@x.bar << 'bar'
|
|
255
255
|
end
|
|
256
|
-
|
|
256
|
+
|
|
257
257
|
it "should send SADD on set <<" do
|
|
258
258
|
@redisDbMock.should_receive(:sadd).with('test_commands:1:sloppy', 'bar')
|
|
259
259
|
@x.sloppy << 'bar'
|
|
260
260
|
end
|
|
261
|
-
|
|
261
|
+
|
|
262
262
|
it "should delete separate fields" do
|
|
263
263
|
@redisMock.should_receive(:delete_value).with('test_commands:1:foo')
|
|
264
264
|
@x.delete :foo
|
|
265
265
|
end
|
|
266
|
-
|
|
266
|
+
|
|
267
267
|
it "should delete all field" do
|
|
268
268
|
@redisMock.should_receive(:delete_value).with('test_commands:1:foo')
|
|
269
269
|
@redisMock.should_receive(:delete_value).with('test_commands:1:rho__id')
|