offroad 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/LICENSE +674 -0
- data/README.rdoc +29 -0
- data/Rakefile +75 -0
- data/TODO +42 -0
- data/lib/app/models/offroad/group_state.rb +85 -0
- data/lib/app/models/offroad/mirror_info.rb +53 -0
- data/lib/app/models/offroad/model_state.rb +36 -0
- data/lib/app/models/offroad/received_record_state.rb +109 -0
- data/lib/app/models/offroad/sendable_record_state.rb +91 -0
- data/lib/app/models/offroad/system_state.rb +33 -0
- data/lib/cargo_streamer.rb +222 -0
- data/lib/controller_extensions.rb +74 -0
- data/lib/exceptions.rb +16 -0
- data/lib/migrate/20100512164608_create_offroad_tables.rb +72 -0
- data/lib/mirror_data.rb +354 -0
- data/lib/model_extensions.rb +377 -0
- data/lib/module_funcs.rb +94 -0
- data/lib/offroad.rb +30 -0
- data/lib/version.rb +3 -0
- data/lib/view_helper.rb +7 -0
- data/templates/offline.rb +36 -0
- data/templates/offline_database.yml +7 -0
- data/templates/offroad.yml +6 -0
- data/test/app_root/app/controllers/application_controller.rb +2 -0
- data/test/app_root/app/controllers/group_controller.rb +28 -0
- data/test/app_root/app/models/global_record.rb +10 -0
- data/test/app_root/app/models/group.rb +12 -0
- data/test/app_root/app/models/group_owned_record.rb +68 -0
- data/test/app_root/app/models/guest.rb +7 -0
- data/test/app_root/app/models/subrecord.rb +12 -0
- data/test/app_root/app/models/unmirrored_record.rb +4 -0
- data/test/app_root/app/views/group/download_down_mirror.html.erb +4 -0
- data/test/app_root/app/views/group/download_initial_down_mirror.html.erb +4 -0
- data/test/app_root/app/views/group/download_up_mirror.html.erb +6 -0
- data/test/app_root/app/views/group/upload_down_mirror.html.erb +1 -0
- data/test/app_root/app/views/group/upload_up_mirror.html.erb +1 -0
- data/test/app_root/app/views/layouts/mirror.html.erb +9 -0
- data/test/app_root/config/boot.rb +115 -0
- data/test/app_root/config/database.yml +6 -0
- data/test/app_root/config/environment.rb +15 -0
- data/test/app_root/config/environments/test.rb +17 -0
- data/test/app_root/config/offroad.yml +6 -0
- data/test/app_root/config/routes.rb +4 -0
- data/test/app_root/db/migrate/20100529235049_create_tables.rb +64 -0
- data/test/app_root/lib/common_hobo.rb +15 -0
- data/test/app_root/vendor/plugins/offroad/init.rb +2 -0
- data/test/functional/mirror_operations_test.rb +148 -0
- data/test/test_helper.rb +405 -0
- data/test/unit/app_state_tracking_test.rb +275 -0
- data/test/unit/cargo_streamer_test.rb +332 -0
- data/test/unit/global_data_test.rb +102 -0
- data/test/unit/group_controller_test.rb +152 -0
- data/test/unit/group_data_test.rb +435 -0
- data/test/unit/group_single_test.rb +136 -0
- data/test/unit/hobo_permissions_test.rb +57 -0
- data/test/unit/mirror_data_test.rb +1271 -0
- data/test/unit/mirror_info_test.rb +31 -0
- data/test/unit/module_funcs_test.rb +37 -0
- data/test/unit/pathological_model_test.rb +62 -0
- data/test/unit/test_framework_test.rb +86 -0
- data/test/unit/unmirrored_data_test.rb +14 -0
- metadata +140 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
|
3
|
+
class MirrorInfoTest < Test::Unit::TestCase
|
4
|
+
agnostic_test "can instantiate MirrorInfo instances, but they're invalid by default" do
|
5
|
+
rec = nil
|
6
|
+
assert_nothing_raised do
|
7
|
+
rec = Offroad::MirrorInfo.new
|
8
|
+
end
|
9
|
+
assert_equal false, rec.valid?
|
10
|
+
end
|
11
|
+
|
12
|
+
double_test "can use new_from_group to create a MirrorInfo instance for a particular group" do
|
13
|
+
rec = Offroad::MirrorInfo::new_from_group(@editable_group)
|
14
|
+
assert rec.valid?
|
15
|
+
assert Time.now - rec.created_at < 30
|
16
|
+
assert_equal Offroad::online_url, rec.online_site
|
17
|
+
assert_equal Offroad::app_name, rec.app
|
18
|
+
assert rec.app_mode.downcase.include?( Offroad::app_online? ? "online" : "offline" )
|
19
|
+
assert_equal Offroad::app_version, rec.app_version
|
20
|
+
assert_equal RUBY_PLATFORM, rec.operating_system
|
21
|
+
assert rec.generator.downcase.include?("offroad")
|
22
|
+
end
|
23
|
+
|
24
|
+
double_test "cannot save a MirrorInfo instance" do
|
25
|
+
rec = Offroad::MirrorInfo::new_from_group(@editable_group)
|
26
|
+
assert rec.valid?
|
27
|
+
assert_raise Offroad::DataError do
|
28
|
+
rec.save
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
|
3
|
+
class ModuleFuncsTest < Test::Unit::TestCase
|
4
|
+
online_test "app reports being online" do
|
5
|
+
assert Offroad::app_online?, "App is online"
|
6
|
+
assert_equal false, Offroad::app_offline?, "App is not offline"
|
7
|
+
end
|
8
|
+
|
9
|
+
offline_test "app reports being offline" do
|
10
|
+
assert Offroad::app_offline?, "App is offline"
|
11
|
+
assert_equal false, Offroad::app_online?, "App is not online"
|
12
|
+
end
|
13
|
+
|
14
|
+
online_test "cannot call offline_group" do
|
15
|
+
assert_raise Offroad::PluginError do
|
16
|
+
Offroad::offline_group
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
offline_test "offline_group returns the offline group" do
|
21
|
+
assert_equal @offline_group, Offroad::offline_group
|
22
|
+
end
|
23
|
+
|
24
|
+
agnostic_test "config_app_online can set app to online or offline" do
|
25
|
+
Offroad::config_app_online(true)
|
26
|
+
assert Offroad::app_online?
|
27
|
+
Offroad::config_app_online(false)
|
28
|
+
assert Offroad::app_offline?
|
29
|
+
end
|
30
|
+
|
31
|
+
agnostic_test "config_app_online with nil sets app to unknown mode, which raises exception when checked" do
|
32
|
+
Offroad::config_app_online(nil)
|
33
|
+
assert_raise Offroad::AppModeUnknownError do
|
34
|
+
Offroad::app_online?
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
|
3
|
+
# This is a unit test on the ability of model_extensions to correctly handle bad acts_as_offroadable calls
|
4
|
+
|
5
|
+
class PathologicalModelTest < Test::Unit::TestCase
|
6
|
+
agnostic_test "cannot specify acts_as_offroadable multiple times" do
|
7
|
+
assert_raise Offroad::ModelError do
|
8
|
+
class MultipleTimesBrokenRecord < ActiveRecord::Base
|
9
|
+
set_table_name "broken_records"
|
10
|
+
acts_as_offroadable :global
|
11
|
+
acts_as_offroadable :global
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
agnostic_test "cannot specify invalid mirror mode" do
|
17
|
+
assert_raise Offroad::ModelError do
|
18
|
+
class InvalidModeBrokenRecord < ActiveRecord::Base
|
19
|
+
set_table_name "broken_records"
|
20
|
+
acts_as_offroadable :this_mode_does_not_exist
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
agnostic_test "cannot specify :group_owned mode without :parent" do
|
26
|
+
assert_raise Offroad::ModelError do
|
27
|
+
class NoGroupKeyBrokenRecord < ActiveRecord::Base
|
28
|
+
set_table_name "broken_records"
|
29
|
+
acts_as_offroadable :group_owned # No :parent
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
agnostic_test "cannot specify :group_owned with a :parent to a non-existing association" do
|
35
|
+
self.class.send(:remove_const, :InvalidColumnBrokenRecord) if self.class.const_defined?(:InvalidColumnBrokenRecord)
|
36
|
+
assert_raise Offroad::ModelError do
|
37
|
+
class InvalidColumnBrokenRecord < ActiveRecord::Base
|
38
|
+
set_table_name "broken_records"
|
39
|
+
acts_as_offroadable :group_owned, :parent => :no_such_assoc
|
40
|
+
end
|
41
|
+
InvalidColumnBrokenRecord.create
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
agnostic_test "cannot give acts_as_offroadable unknown options" do
|
46
|
+
assert_raise Offroad::ModelError do
|
47
|
+
class UnknownOptionsBrokenRecord < ActiveRecord::Base
|
48
|
+
set_table_name "broken_records"
|
49
|
+
acts_as_offroadable :global, :foo_bar_bork_narf => 1234
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
agnostic_test "cannot specify more than one group base" do
|
55
|
+
# The Group model has already declare itself as :group base
|
56
|
+
assert_raise Offroad::ModelError do
|
57
|
+
class DoubleGroupBaseBrokenRecord < ActiveRecord::Base
|
58
|
+
acts_as_offroadable :group_base
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
|
3
|
+
class TestFrameworkTest < Test::Unit::TestCase
|
4
|
+
cross_test "online and offline databases are independent" do
|
5
|
+
in_offline_app do
|
6
|
+
assert_equal 0, UnmirroredRecord.count
|
7
|
+
UnmirroredRecord.create(:content => "Testing")
|
8
|
+
end
|
9
|
+
|
10
|
+
in_online_app do
|
11
|
+
assert_equal 0, UnmirroredRecord.count
|
12
|
+
end
|
13
|
+
|
14
|
+
in_offline_app do
|
15
|
+
assert UnmirroredRecord.find_by_content("Testing")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
cross_test "online-specific and offline-specific instance variables are independent" do
|
20
|
+
in_offline_app do
|
21
|
+
@offline_group.name = "Foo"
|
22
|
+
@offline_group.save!
|
23
|
+
assert_equal "Foo", @offline_group.name
|
24
|
+
end
|
25
|
+
|
26
|
+
in_online_app do
|
27
|
+
assert_not_equal "Foo", @offline_group.name
|
28
|
+
end
|
29
|
+
|
30
|
+
in_offline_app do
|
31
|
+
assert_equal "Foo", @offline_group.name
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
cross_test "instance variables lose unsaved data on mode switch" do
|
36
|
+
in_offline_app do
|
37
|
+
@offline_group.name = "Foo"
|
38
|
+
assert_equal "Foo", @offline_group.name
|
39
|
+
# Didn't save @offline_group
|
40
|
+
end
|
41
|
+
|
42
|
+
in_offline_app do
|
43
|
+
assert_not_equal "Foo", @offline_group.name
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
offline_test "callback detection switch on GroupOwnedRecord works on save" do
|
48
|
+
GroupOwnedRecord.reset_callback_called
|
49
|
+
assert !GroupOwnedRecord.callback_called
|
50
|
+
@offline_group_data.description = "Testing"
|
51
|
+
@offline_group_data.save!
|
52
|
+
assert GroupOwnedRecord.callback_called
|
53
|
+
end
|
54
|
+
|
55
|
+
offline_test "callback detection switch on GroupOwnedRecord works on create" do
|
56
|
+
GroupOwnedRecord.reset_callback_called
|
57
|
+
assert !GroupOwnedRecord.callback_called
|
58
|
+
GroupOwnedRecord.create!(:description => "Another new one", :group => @offline_group)
|
59
|
+
assert GroupOwnedRecord.callback_called
|
60
|
+
end
|
61
|
+
|
62
|
+
offline_test "callback detection switch on GroupOwnedRecord works on destroy" do
|
63
|
+
GroupOwnedRecord.reset_callback_called
|
64
|
+
assert !GroupOwnedRecord.callback_called
|
65
|
+
@offline_group_data.destroy
|
66
|
+
assert GroupOwnedRecord.callback_called
|
67
|
+
end
|
68
|
+
|
69
|
+
if HOBO_TEST_MODE
|
70
|
+
class CommonHoboTestModel < ActiveRecord::Base
|
71
|
+
include CommonHobo
|
72
|
+
set_table_name "broken_records" # Not important since we won't be saving anything
|
73
|
+
end
|
74
|
+
agnostic_test "simple unmirrored data hobo permissions work as expected" do
|
75
|
+
g = Guest.new
|
76
|
+
c = CommonHoboTestModel.new
|
77
|
+
assert !c.creatable_by?(g)
|
78
|
+
assert !c.updatable_by?(g)
|
79
|
+
assert !c.destroyable_by?(g)
|
80
|
+
c.permissive = true
|
81
|
+
assert c.creatable_by?(g)
|
82
|
+
assert c.updatable_by?(g)
|
83
|
+
assert c.destroyable_by?(g)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
|
3
|
+
# This is a unit test on the ability of model_extensions to correctly ignore unmirrored data
|
4
|
+
|
5
|
+
class UnmirroredDataTest < Test::Unit::TestCase
|
6
|
+
agnostic_test "unmirrored data model returns false to acts_as_offroadable?" do
|
7
|
+
assert_equal false, UnmirroredRecord.acts_as_offroadable?
|
8
|
+
end
|
9
|
+
|
10
|
+
agnostic_test "offroad_*_data? methods return false on unmirrored data models" do
|
11
|
+
assert_equal false, UnmirroredRecord.offroad_group_data?
|
12
|
+
assert_equal false, UnmirroredRecord.offroad_global_data?
|
13
|
+
end
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: offroad
|
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
|
+
- David Mike Simon
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-04-11 00:00:00 -05:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: ar-extensions
|
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: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
description: Offroad manages offline instances of a Rails app on computers without Internet access. The online and offline instances can communicate via mirror files, transported by the user via thumbdrive, burned CD, etc.
|
36
|
+
email: david.mike.simon@gmail.com
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- LICENSE
|
45
|
+
- README.rdoc
|
46
|
+
- Rakefile
|
47
|
+
- TODO
|
48
|
+
- lib/app/models/offroad/group_state.rb
|
49
|
+
- lib/app/models/offroad/mirror_info.rb
|
50
|
+
- lib/app/models/offroad/model_state.rb
|
51
|
+
- lib/app/models/offroad/received_record_state.rb
|
52
|
+
- lib/app/models/offroad/sendable_record_state.rb
|
53
|
+
- lib/app/models/offroad/system_state.rb
|
54
|
+
- lib/cargo_streamer.rb
|
55
|
+
- lib/controller_extensions.rb
|
56
|
+
- lib/exceptions.rb
|
57
|
+
- lib/migrate/20100512164608_create_offroad_tables.rb
|
58
|
+
- lib/mirror_data.rb
|
59
|
+
- lib/model_extensions.rb
|
60
|
+
- lib/module_funcs.rb
|
61
|
+
- lib/offroad.rb
|
62
|
+
- lib/version.rb
|
63
|
+
- lib/view_helper.rb
|
64
|
+
- templates/offline.rb
|
65
|
+
- templates/offline_database.yml
|
66
|
+
- templates/offroad.yml
|
67
|
+
- test/app_root/app/controllers/application_controller.rb
|
68
|
+
- test/app_root/app/controllers/group_controller.rb
|
69
|
+
- test/app_root/app/models/global_record.rb
|
70
|
+
- test/app_root/app/models/group.rb
|
71
|
+
- test/app_root/app/models/group_owned_record.rb
|
72
|
+
- test/app_root/app/models/guest.rb
|
73
|
+
- test/app_root/app/models/subrecord.rb
|
74
|
+
- test/app_root/app/models/unmirrored_record.rb
|
75
|
+
- test/app_root/app/views/group/download_down_mirror.html.erb
|
76
|
+
- test/app_root/app/views/group/download_initial_down_mirror.html.erb
|
77
|
+
- test/app_root/app/views/group/download_up_mirror.html.erb
|
78
|
+
- test/app_root/app/views/group/upload_down_mirror.html.erb
|
79
|
+
- test/app_root/app/views/group/upload_up_mirror.html.erb
|
80
|
+
- test/app_root/app/views/layouts/mirror.html.erb
|
81
|
+
- test/app_root/config/boot.rb
|
82
|
+
- test/app_root/config/database.yml
|
83
|
+
- test/app_root/config/environment.rb
|
84
|
+
- test/app_root/config/environments/test.rb
|
85
|
+
- test/app_root/config/offroad.yml
|
86
|
+
- test/app_root/config/routes.rb
|
87
|
+
- test/app_root/db/migrate/20100529235049_create_tables.rb
|
88
|
+
- test/app_root/lib/common_hobo.rb
|
89
|
+
- test/app_root/vendor/plugins/offroad/init.rb
|
90
|
+
- test/functional/mirror_operations_test.rb
|
91
|
+
- test/test_helper.rb
|
92
|
+
- test/unit/app_state_tracking_test.rb
|
93
|
+
- test/unit/cargo_streamer_test.rb
|
94
|
+
- test/unit/global_data_test.rb
|
95
|
+
- test/unit/group_controller_test.rb
|
96
|
+
- test/unit/group_data_test.rb
|
97
|
+
- test/unit/group_single_test.rb
|
98
|
+
- test/unit/hobo_permissions_test.rb
|
99
|
+
- test/unit/mirror_data_test.rb
|
100
|
+
- test/unit/mirror_info_test.rb
|
101
|
+
- test/unit/module_funcs_test.rb
|
102
|
+
- test/unit/pathological_model_test.rb
|
103
|
+
- test/unit/test_framework_test.rb
|
104
|
+
- test/unit/unmirrored_data_test.rb
|
105
|
+
has_rdoc: true
|
106
|
+
homepage: http://github.com/DavidMikeSimon/offroad
|
107
|
+
licenses: []
|
108
|
+
|
109
|
+
post_install_message:
|
110
|
+
rdoc_options: []
|
111
|
+
|
112
|
+
require_paths:
|
113
|
+
- lib
|
114
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
115
|
+
none: false
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
hash: 3
|
120
|
+
segments:
|
121
|
+
- 0
|
122
|
+
version: "0"
|
123
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
|
+
none: false
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
hash: 3
|
129
|
+
segments:
|
130
|
+
- 0
|
131
|
+
version: "0"
|
132
|
+
requirements: []
|
133
|
+
|
134
|
+
rubyforge_project: "[none]"
|
135
|
+
rubygems_version: 1.3.7
|
136
|
+
signing_key:
|
137
|
+
specification_version: 3
|
138
|
+
summary: Manages off-Internet instances of a Rails app
|
139
|
+
test_files: []
|
140
|
+
|