offroad 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/LICENSE +674 -674
  2. data/README.rdoc +29 -29
  3. data/Rakefile +75 -75
  4. data/TODO +42 -42
  5. data/lib/app/models/offroad/group_state.rb +85 -85
  6. data/lib/app/models/offroad/mirror_info.rb +53 -53
  7. data/lib/app/models/offroad/model_state.rb +36 -36
  8. data/lib/app/models/offroad/received_record_state.rb +115 -115
  9. data/lib/app/models/offroad/sendable_record_state.rb +91 -91
  10. data/lib/app/models/offroad/system_state.rb +33 -33
  11. data/lib/cargo_streamer.rb +222 -222
  12. data/lib/controller_extensions.rb +74 -74
  13. data/lib/exceptions.rb +16 -16
  14. data/lib/migrate/20100512164608_create_offroad_tables.rb +72 -72
  15. data/lib/mirror_data.rb +376 -376
  16. data/lib/model_extensions.rb +378 -377
  17. data/lib/module_funcs.rb +94 -94
  18. data/lib/offroad.rb +41 -41
  19. data/lib/version.rb +3 -3
  20. data/lib/view_helper.rb +7 -7
  21. data/templates/offline.rb +36 -36
  22. data/templates/offline_database.yml +7 -7
  23. data/templates/offroad.yml +6 -6
  24. data/test/app_root/app/controllers/application_controller.rb +2 -2
  25. data/test/app_root/app/controllers/group_controller.rb +28 -28
  26. data/test/app_root/app/models/global_record.rb +10 -10
  27. data/test/app_root/app/models/group.rb +12 -12
  28. data/test/app_root/app/models/group_owned_record.rb +68 -68
  29. data/test/app_root/app/models/guest.rb +7 -7
  30. data/test/app_root/app/models/subrecord.rb +12 -12
  31. data/test/app_root/app/models/unmirrored_record.rb +4 -4
  32. data/test/app_root/app/views/group/download_down_mirror.html.erb +3 -3
  33. data/test/app_root/app/views/group/download_initial_down_mirror.html.erb +3 -3
  34. data/test/app_root/app/views/group/download_up_mirror.html.erb +5 -5
  35. data/test/app_root/app/views/layouts/mirror.html.erb +8 -8
  36. data/test/app_root/config/boot.rb +115 -115
  37. data/test/app_root/config/database-pg.yml +8 -8
  38. data/test/app_root/config/database.yml +5 -5
  39. data/test/app_root/config/environment.rb +24 -24
  40. data/test/app_root/config/environments/test.rb +17 -17
  41. data/test/app_root/config/offroad.yml +6 -6
  42. data/test/app_root/config/routes.rb +4 -4
  43. data/test/app_root/db/migrate/20100529235049_create_tables.rb +64 -64
  44. data/test/app_root/lib/common_hobo.rb +15 -15
  45. data/test/app_root/vendor/plugins/offroad/init.rb +2 -2
  46. data/test/functional/mirror_operations_test.rb +148 -148
  47. data/test/test_helper.rb +453 -453
  48. data/test/unit/app_state_tracking_test.rb +275 -275
  49. data/test/unit/cargo_streamer_test.rb +332 -332
  50. data/test/unit/global_data_test.rb +102 -102
  51. data/test/unit/group_controller_test.rb +152 -152
  52. data/test/unit/group_data_test.rb +442 -435
  53. data/test/unit/group_single_test.rb +136 -136
  54. data/test/unit/hobo_permissions_test.rb +57 -57
  55. data/test/unit/mirror_data_test.rb +1283 -1283
  56. data/test/unit/mirror_info_test.rb +31 -31
  57. data/test/unit/module_funcs_test.rb +37 -37
  58. data/test/unit/pathological_model_test.rb +62 -62
  59. data/test/unit/test_framework_test.rb +86 -86
  60. data/test/unit/unmirrored_data_test.rb +14 -14
  61. metadata +6 -8
data/lib/module_funcs.rb CHANGED
@@ -1,94 +1,94 @@
1
- module Offroad
2
- @@app_online_flag = nil
3
- @@group_base_model = nil
4
- @@global_data_models = {}
5
- @@group_owned_models = {}
6
- @@group_single_models = {}
7
-
8
- # Used in the environment configuration file to set the app to online or offline mode.
9
- # This should not be called from within the app.
10
- def self.config_app_online(flag)
11
- @@app_online_flag = flag
12
- end
13
-
14
- # Returns true if the app is in offline mode (running on a local system without access to the main server)
15
- def self.app_offline?
16
- not app_online?
17
- end
18
-
19
- # Returns true if the app is in online mode (or in other words, this is the main server)
20
- def self.app_online?
21
- case @@app_online_flag
22
- when true then true
23
- when false then false
24
- else raise AppModeUnknownError.new
25
- end
26
- end
27
-
28
- # Returns a Time that identifies the version of the app
29
- # Specifically, the modification timestamp (on the online app) of the most recently modified source file in the app
30
- def self.app_version
31
- # TODO Implement
32
- # Online - When app is launched, scan all application files, returns the Time of the most recently changed file
33
- # Offline - Based on the app version noted in the last down-mirror file successfully loaded
34
- return 1
35
- end
36
-
37
- #:nodoc#
38
- def self.init
39
- @@config = YAML.load_file(File.join(RAILS_ROOT, "config", "offroad.yml"))
40
- end
41
-
42
- # Returns the record of the group base model that this app is in charge of
43
- # This is only applicable if the app is offline
44
- def self.offline_group
45
- raise PluginError.new("'Offline group' is only meaningful if the app is offline") unless app_offline?
46
- group_base_model.first
47
- end
48
-
49
- private
50
-
51
- def self.online_url
52
- @@config[:online_url] or raise PluginError.new("No online url specified in offroad config")
53
- end
54
-
55
- def self.app_name
56
- @@config[:app_name] or raise PluginError.new("No app name specified in offroad config")
57
- end
58
-
59
- def self.note_global_data_model(cls)
60
- @@global_data_models[cls.name] = cls
61
- end
62
-
63
- def self.global_data_models
64
- @@global_data_models
65
- end
66
-
67
- def self.note_group_base_model(cls)
68
- if @@group_base_model and @@group_base_model.to_s != cls.to_s
69
- raise ModelError.new("You can only define one group base model")
70
- end
71
- @@group_base_model = cls
72
- end
73
-
74
- def self.group_base_model
75
- raise ModelError.new("No group base model was specified") unless @@group_base_model
76
- @@group_base_model
77
- end
78
-
79
- def self.note_group_owned_model(cls)
80
- @@group_owned_models[cls.name] = cls
81
- end
82
-
83
- def self.group_owned_models
84
- @@group_owned_models
85
- end
86
-
87
- def self.note_group_single_model(cls)
88
- @@group_single_models[cls.name] = cls
89
- end
90
-
91
- def self.group_single_models
92
- @@group_single_models
93
- end
94
- end
1
+ module Offroad
2
+ @@app_online_flag = nil
3
+ @@group_base_model = nil
4
+ @@global_data_models = {}
5
+ @@group_owned_models = {}
6
+ @@group_single_models = {}
7
+
8
+ # Used in the environment configuration file to set the app to online or offline mode.
9
+ # This should not be called from within the app.
10
+ def self.config_app_online(flag)
11
+ @@app_online_flag = flag
12
+ end
13
+
14
+ # Returns true if the app is in offline mode (running on a local system without access to the main server)
15
+ def self.app_offline?
16
+ not app_online?
17
+ end
18
+
19
+ # Returns true if the app is in online mode (or in other words, this is the main server)
20
+ def self.app_online?
21
+ case @@app_online_flag
22
+ when true then true
23
+ when false then false
24
+ else raise AppModeUnknownError.new
25
+ end
26
+ end
27
+
28
+ # Returns a Time that identifies the version of the app
29
+ # Specifically, the modification timestamp (on the online app) of the most recently modified source file in the app
30
+ def self.app_version
31
+ # TODO Implement
32
+ # Online - When app is launched, scan all application files, returns the Time of the most recently changed file
33
+ # Offline - Based on the app version noted in the last down-mirror file successfully loaded
34
+ return 1
35
+ end
36
+
37
+ #:nodoc#
38
+ def self.init
39
+ @@config = YAML.load_file(File.join(RAILS_ROOT, "config", "offroad.yml"))
40
+ end
41
+
42
+ # Returns the record of the group base model that this app is in charge of
43
+ # This is only applicable if the app is offline
44
+ def self.offline_group
45
+ raise PluginError.new("'Offline group' is only meaningful if the app is offline") unless app_offline?
46
+ group_base_model.first
47
+ end
48
+
49
+ private
50
+
51
+ def self.online_url
52
+ @@config[:online_url] or raise PluginError.new("No online url specified in offroad config")
53
+ end
54
+
55
+ def self.app_name
56
+ @@config[:app_name] or raise PluginError.new("No app name specified in offroad config")
57
+ end
58
+
59
+ def self.note_global_data_model(cls)
60
+ @@global_data_models[cls.name] = cls
61
+ end
62
+
63
+ def self.global_data_models
64
+ @@global_data_models
65
+ end
66
+
67
+ def self.note_group_base_model(cls)
68
+ if @@group_base_model and @@group_base_model.to_s != cls.to_s
69
+ raise ModelError.new("You can only define one group base model")
70
+ end
71
+ @@group_base_model = cls
72
+ end
73
+
74
+ def self.group_base_model
75
+ raise ModelError.new("No group base model was specified") unless @@group_base_model
76
+ @@group_base_model
77
+ end
78
+
79
+ def self.note_group_owned_model(cls)
80
+ @@group_owned_models[cls.name] = cls
81
+ end
82
+
83
+ def self.group_owned_models
84
+ @@group_owned_models
85
+ end
86
+
87
+ def self.note_group_single_model(cls)
88
+ @@group_single_models[cls.name] = cls
89
+ end
90
+
91
+ def self.group_single_models
92
+ @@group_single_models
93
+ end
94
+ end
data/lib/offroad.rb CHANGED
@@ -1,41 +1,41 @@
1
- # Offroad
2
-
3
- require 'version'
4
- require 'module_funcs'
5
- require 'cargo_streamer'
6
- require 'exceptions'
7
- require 'mirror_data'
8
-
9
- path = File.join(File.dirname(__FILE__), 'app', 'models')
10
- $LOAD_PATH << path
11
- ActiveSupport::Dependencies.autoload_paths << path
12
-
13
- require 'ar-extensions' # External dependency
14
- # Monkey patch a bug in ar-extensions which breaks postgres compatibility
15
- module ActiveRecord # :nodoc:
16
- module ConnectionAdapters # :nodoc:
17
- class AbstractAdapter # :nodoc:
18
- def next_value_for_sequence(sequence_name)
19
- %{nextval('#{sequence_name}')}
20
- end
21
- end
22
- end
23
- end
24
-
25
-
26
- require 'controller_extensions'
27
- class ActionController::Base
28
- extend Offroad::ControllerExtensions
29
- end
30
-
31
- require 'model_extensions'
32
- class ActiveRecord::Base
33
- extend Offroad::ModelExtensions
34
- end
35
-
36
- require 'view_helper'
37
- class ActionView::Base
38
- include Offroad::ViewHelper
39
- end
40
-
41
- Offroad::init
1
+ # Offroad
2
+
3
+ require 'version'
4
+ require 'module_funcs'
5
+ require 'cargo_streamer'
6
+ require 'exceptions'
7
+ require 'mirror_data'
8
+
9
+ path = File.join(File.dirname(__FILE__), 'app', 'models')
10
+ $LOAD_PATH << path
11
+ ActiveSupport::Dependencies.autoload_paths << path
12
+
13
+ require 'ar-extensions' # External dependency
14
+ # Monkey patch a bug in ar-extensions which breaks postgres compatibility
15
+ module ActiveRecord # :nodoc:
16
+ module ConnectionAdapters # :nodoc:
17
+ class AbstractAdapter # :nodoc:
18
+ def next_value_for_sequence(sequence_name)
19
+ %{nextval('#{sequence_name}')}
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+
26
+ require 'controller_extensions'
27
+ class ActionController::Base
28
+ extend Offroad::ControllerExtensions
29
+ end
30
+
31
+ require 'model_extensions'
32
+ class ActiveRecord::Base
33
+ extend Offroad::ModelExtensions
34
+ end
35
+
36
+ require 'view_helper'
37
+ class ActionView::Base
38
+ include Offroad::ViewHelper
39
+ end
40
+
41
+ Offroad::init
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
- module Offroad
2
- VERSION = "0.0.2"
3
- end
1
+ module Offroad
2
+ VERSION = "0.0.3"
3
+ end
data/lib/view_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
- module Offroad
2
- module ViewHelper
3
- def link_to_online_app(name = nil)
4
- link_to(name ? name : Offroad::online_url, Offroad::online_url)
5
- end
6
- end
7
- end
1
+ module Offroad
2
+ module ViewHelper
3
+ def link_to_online_app(name = nil)
4
+ link_to(name ? name : Offroad::online_url, Offroad::online_url)
5
+ end
6
+ end
7
+ end
data/templates/offline.rb CHANGED
@@ -1,36 +1,36 @@
1
- # This file defines the offline envrionment
2
- # "Offline" means that the application is running on a local network, with only a subset of the real online app's data
3
- # It is implemented by the gem Offroad
4
-
5
- # Settings specified here will take precedence over those in config/environment.rb
6
-
7
- # Use the offline database configuration file instead of the regular one
8
- config.database_configuration_file = "config/offline_database.yml"
9
-
10
- # Code is not reloaded between requests
11
- config.cache_classes = true
12
-
13
- # Full error reports are disabled and caching is turned on
14
- config.action_controller.consider_all_requests_local = false
15
- config.action_controller.perform_caching = true
16
- config.action_view.cache_template_loading = true
17
-
18
- # See everything in the log (default is :info)
19
- # config.log_level = :debug
20
-
21
- # Use a different logger for distributed setups
22
- # config.logger = SyslogLogger.new
23
-
24
- # Use a different cache store in production
25
- # config.cache_store = :mem_cache_store
26
-
27
- # Enable serving of images, stylesheets, and javascripts from an asset server
28
- # config.action_controller.asset_host = "http://assets.example.com"
29
-
30
- # Disable delivery errors, bad email addresses will be ignored
31
- # config.action_mailer.raise_delivery_errors = false
32
-
33
- # Enable threaded mode
34
- # config.threadsafe!
35
-
36
- Offroad::config_app_online(false)
1
+ # This file defines the offline envrionment
2
+ # "Offline" means that the application is running on a local network, with only a subset of the real online app's data
3
+ # It is implemented by the gem Offroad
4
+
5
+ # Settings specified here will take precedence over those in config/environment.rb
6
+
7
+ # Use the offline database configuration file instead of the regular one
8
+ config.database_configuration_file = "config/offline_database.yml"
9
+
10
+ # Code is not reloaded between requests
11
+ config.cache_classes = true
12
+
13
+ # Full error reports are disabled and caching is turned on
14
+ config.action_controller.consider_all_requests_local = false
15
+ config.action_controller.perform_caching = true
16
+ config.action_view.cache_template_loading = true
17
+
18
+ # See everything in the log (default is :info)
19
+ # config.log_level = :debug
20
+
21
+ # Use a different logger for distributed setups
22
+ # config.logger = SyslogLogger.new
23
+
24
+ # Use a different cache store in production
25
+ # config.cache_store = :mem_cache_store
26
+
27
+ # Enable serving of images, stylesheets, and javascripts from an asset server
28
+ # config.action_controller.asset_host = "http://assets.example.com"
29
+
30
+ # Disable delivery errors, bad email addresses will be ignored
31
+ # config.action_mailer.raise_delivery_errors = false
32
+
33
+ # Enable threaded mode
34
+ # config.threadsafe!
35
+
36
+ Offroad::config_app_online(false)
@@ -1,7 +1,7 @@
1
- # This database config file is used by the 'offline' environment
2
-
3
- offline:
4
- adapter: sqlite3
5
- database: db/offline.sqlite3
6
- pool: 5
7
- timeout: 5000
1
+ # This database config file is used by the 'offline' environment
2
+
3
+ offline:
4
+ adapter: sqlite3
5
+ database: db/offline.sqlite3
6
+ pool: 5
7
+ timeout: 5000
@@ -1,6 +1,6 @@
1
- # Configuration for Offroad
2
- # :online_url: The URL for the regular online version of the app
3
- # :app_name: The name of the application, to be used in helpful messages in the generated mirror data files.
4
-
5
- :online_url: "http://example.com"
6
- :app_name: Example Application
1
+ # Configuration for Offroad
2
+ # :online_url: The URL for the regular online version of the app
3
+ # :app_name: The name of the application, to be used in helpful messages in the generated mirror data files.
4
+
5
+ :online_url: "http://example.com"
6
+ :app_name: Example Application
@@ -1,2 +1,2 @@
1
- class ApplicationController < ActionController::Base
2
- end
1
+ class ApplicationController < ActionController::Base
2
+ end
@@ -1,28 +1,28 @@
1
- class GroupController < ApplicationController
2
- offroad_group_controller
3
-
4
- def download_down_mirror
5
- render_down_mirror_file Group.find(params[:id]), "down-mirror-file", :layout => "mirror"
6
- end
7
-
8
- def download_initial_down_mirror
9
- render_down_mirror_file Group.find(params[:id]), "down-mirror-file", :layout => "mirror", :initial_mode => true
10
- end
11
-
12
- def download_up_mirror
13
- render_up_mirror_file Group.find(params[:id]), "up-mirror-file", :layout => "mirror"
14
- end
15
-
16
- def upload_up_mirror
17
- load_up_mirror_file Group.find(params[:id]), params[:mirror_data]
18
- end
19
-
20
- def upload_down_mirror
21
- load_down_mirror_file Group.find(params[:id]), params[:mirror_data]
22
- end
23
-
24
- def upload_initial_down_mirror
25
- load_down_mirror_file nil, params[:mirror_data], :initial_mode => true
26
- render :upload_down_mirror
27
- end
28
- end
1
+ class GroupController < ApplicationController
2
+ offroad_group_controller
3
+
4
+ def download_down_mirror
5
+ render_down_mirror_file Group.find(params[:id]), "down-mirror-file", :layout => "mirror"
6
+ end
7
+
8
+ def download_initial_down_mirror
9
+ render_down_mirror_file Group.find(params[:id]), "down-mirror-file", :layout => "mirror", :initial_mode => true
10
+ end
11
+
12
+ def download_up_mirror
13
+ render_up_mirror_file Group.find(params[:id]), "up-mirror-file", :layout => "mirror"
14
+ end
15
+
16
+ def upload_up_mirror
17
+ load_up_mirror_file Group.find(params[:id]), params[:mirror_data]
18
+ end
19
+
20
+ def upload_down_mirror
21
+ load_down_mirror_file Group.find(params[:id]), params[:mirror_data]
22
+ end
23
+
24
+ def upload_initial_down_mirror
25
+ load_down_mirror_file nil, params[:mirror_data], :initial_mode => true
26
+ render :upload_down_mirror
27
+ end
28
+ end