mack-distributed 0.7.1.1 → 0.8.0
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/README +8 -10
- data/lib/mack-distributed/distributable.rb +6 -6
- data/lib/mack-distributed/extensions/route_map.rb +14 -19
- data/lib/mack-distributed/extensions/urls.rb +2 -3
- data/lib/mack-distributed/routes/urls.rb +4 -4
- data/lib/mack-distributed/utils/rinda.rb +3 -3
- data/lib/mack-distributed/views/rendering/type/layout.rb +8 -12
- data/lib/mack-distributed/views/view.rb +3 -3
- data/lib/mack-distributed.rb +7 -9
- metadata +13 -3
data/README
CHANGED
@@ -18,11 +18,10 @@ Distributed objects are an easy way to share functionality across many different
|
|
18
18
|
|
19
19
|
Let's configure our 'server' application. This is where pretty much all the 'heavy lifting' is done. First we need setup our configuration file:
|
20
20
|
|
21
|
-
config/
|
21
|
+
config/configatron/default.rb:
|
22
22
|
# All distributed applications need to have a unique name so they can easily be identified for lookup.
|
23
|
-
mack
|
24
|
-
|
25
|
-
mack::share_objects: true
|
23
|
+
configatron.mack.distributed.app_name = 'my_cool_app'
|
24
|
+
configatron.mack.distributed.share_objects = true
|
26
25
|
|
27
26
|
Let's assume that we have a simple User DataMapper model that looks something like this:
|
28
27
|
|
@@ -71,12 +70,11 @@ When you include Mack::Distributable into a class it registers a proxy of that c
|
|
71
70
|
With distributed views, you can easily share views and layouts among different Mack Applications.
|
72
71
|
|
73
72
|
== Application #1 (Server)
|
74
|
-
config/
|
75
|
-
|
76
|
-
mack
|
77
|
-
|
78
|
-
mack
|
79
|
-
# and all the model sharing settings...
|
73
|
+
config/configatron/default.rb:
|
74
|
+
|
75
|
+
configatron.mack.distributed.site_domain = 'http://localhost:3001'
|
76
|
+
configatron.mack.distributed.share_views = true
|
77
|
+
configatron.mack.app_name = 'my_cool_app'
|
80
78
|
|
81
79
|
That's it. When the server is started, the distributed view module will register a proxy with rinda ready for use by the client.
|
82
80
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Mack # :nodoc:
|
2
2
|
# Include this module into any class it will instantly register that class with
|
3
3
|
# the mack_ring_server. The class will be registered with the name of the class
|
4
|
-
# and the mack.distributed_app_name configured in your config/
|
4
|
+
# and the mack.distributed_app_name configured in your config/configatron/*.rb file.
|
5
5
|
# If the mack.distributed_app_name configuration parameter is nil it will raise
|
6
6
|
# an Mack::Distributed::Errors::ApplicationNameUndefined exception.
|
7
7
|
#
|
@@ -17,7 +17,7 @@ module Mack # :nodoc:
|
|
17
17
|
module Distributable
|
18
18
|
|
19
19
|
def self.included(base) # :nodoc:
|
20
|
-
if
|
20
|
+
if configatron.mack.distributed.share_objects
|
21
21
|
base.class_eval do
|
22
22
|
include ::DRbUndumped
|
23
23
|
end
|
@@ -43,8 +43,8 @@ module Mack # :nodoc:
|
|
43
43
|
# end
|
44
44
|
end
|
45
45
|
}
|
46
|
-
raise Mack::Distributed::Errors::ApplicationNameUndefined.new if
|
47
|
-
Mack::Distributed::Utils::Rinda.register_or_renew(:space =>
|
46
|
+
raise Mack::Distributed::Errors::ApplicationNameUndefined.new if configatron.mack.distributed.app_name.nil?
|
47
|
+
Mack::Distributed::Utils::Rinda.register_or_renew(:space => configatron.mack.distributed.app_name.to_sym,
|
48
48
|
:klass_def => "#{base}".to_sym,
|
49
49
|
:object => "Mack::Distributed::#{base}Proxy".constantize.instance)
|
50
50
|
end
|
@@ -56,10 +56,10 @@ end # Mack
|
|
56
56
|
module DRb # :nodoc:
|
57
57
|
class DRbObject # :nodoc:
|
58
58
|
|
59
|
-
|
59
|
+
alias_instance_method :inspect
|
60
60
|
|
61
61
|
def inspect
|
62
|
-
"#{
|
62
|
+
"#{_original_inspect}|#{method_missing(:inspect)}"
|
63
63
|
end
|
64
64
|
|
65
65
|
undef :id
|
@@ -1,25 +1,20 @@
|
|
1
1
|
module Mack
|
2
2
|
module Routes # :nodoc:
|
3
3
|
class RouteMap # :nodoc:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
}
|
19
|
-
end
|
20
|
-
end # connect_with_named_route
|
21
|
-
|
22
|
-
end
|
4
|
+
|
5
|
+
alias_instance_method :connect_with_name
|
6
|
+
|
7
|
+
def connect_with_name(name, path, options = {}, &block) # :nodoc:
|
8
|
+
n_route = name.methodize
|
9
|
+
_original_connect_with_name(n_route, path, options, &block)
|
10
|
+
if configatron.mack.distributed.share_routes
|
11
|
+
Mack::Routes::Urls.class_eval %{
|
12
|
+
def #{n_route}_distributed_url(options = {})
|
13
|
+
(@dsd || configatron.mack.distributed.site_domain) + #{n_route}_url(options)
|
14
|
+
end
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end # connect_with_name
|
23
18
|
|
24
19
|
end # RouteMap
|
25
20
|
end # Routes
|
@@ -1,8 +1,7 @@
|
|
1
1
|
module Mack # :nodoc:
|
2
2
|
module Routes # :nodoc:
|
3
3
|
module Urls
|
4
|
-
|
5
|
-
alias_deprecated_method :droute_url, :distributed_url, '0.7.0', '>=0.8.0'
|
4
|
+
|
6
5
|
# Retrieves a distributed route from a DRb server.
|
7
6
|
#
|
8
7
|
# Example:
|
@@ -18,7 +17,7 @@ module Mack # :nodoc:
|
|
18
17
|
route_name << "_distributed_url"
|
19
18
|
end
|
20
19
|
|
21
|
-
if !
|
20
|
+
if !configatron.mack.distributed.app_name.nil? && app_name.to_sym == configatron.mack.distributed.app_name.to_sym
|
22
21
|
# if it's local let's just use it and not go out to Rinda
|
23
22
|
return self.send(route_name, options)
|
24
23
|
end
|
@@ -11,7 +11,7 @@ module Mack
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def put
|
14
|
-
Mack::Distributed::Utils::Rinda.register_or_renew(:space =>
|
14
|
+
Mack::Distributed::Utils::Rinda.register_or_renew(:space => configatron.mack.distributed.app_name.to_sym,
|
15
15
|
:klass_def => :distributed_routes,
|
16
16
|
:object => self, :timeout => 0)
|
17
17
|
end
|
@@ -36,10 +36,10 @@ module Mack
|
|
36
36
|
end # Mack
|
37
37
|
|
38
38
|
Mack::Routes.after_class_method(:build) do
|
39
|
-
if
|
40
|
-
raise Mack::Distributed::Errors::ApplicationNameUndefined.new if
|
39
|
+
if configatron.mack.distributed.share_routes
|
40
|
+
raise Mack::Distributed::Errors::ApplicationNameUndefined.new if configatron.mack.distributed.app_name.nil?
|
41
41
|
|
42
|
-
d_urls = Mack::Distributed::Routes::Urls.new(
|
42
|
+
d_urls = Mack::Distributed::Routes::Urls.new(configatron.mack.distributed.site_domain)
|
43
43
|
d_urls.put
|
44
44
|
Mack::Routes::Urls.include_safely_into(Mack::Distributed::Routes::Urls)
|
45
45
|
Mack::Distributed::Routes::Urls.protected_instance_methods.each do |m|
|
@@ -23,8 +23,8 @@ module Mack
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.ring_server
|
26
|
-
if
|
27
|
-
acl = ACL.new(
|
26
|
+
if configatron.mack.distributed.retrieve(:acl, nil)
|
27
|
+
acl = ACL.new(configatron.mack.distributed.acl)
|
28
28
|
DRb.install_acl(acl)
|
29
29
|
end
|
30
30
|
::DRb.start_service
|
@@ -39,7 +39,7 @@ module Mack
|
|
39
39
|
|
40
40
|
private
|
41
41
|
def self.handle_options(options = {})
|
42
|
-
{:space => nil, :klass_def => nil, :object => nil, :description => nil, :timeout =>
|
42
|
+
{:space => nil, :klass_def => nil, :object => nil, :description => nil, :timeout => configatron.mack.distributed.timeout}.merge(options)
|
43
43
|
end
|
44
44
|
|
45
45
|
end
|
@@ -2,15 +2,13 @@ module Mack
|
|
2
2
|
module Rendering # :nodoc:
|
3
3
|
module Type # :nodoc:
|
4
4
|
class Layout
|
5
|
-
|
6
|
-
|
7
|
-
alias_method :old_render, :render
|
8
|
-
end
|
5
|
+
|
6
|
+
alias_instance_method :render
|
9
7
|
|
10
8
|
def render
|
11
9
|
if !self.options[:layout].starts_with?("distributed")
|
12
10
|
# this is the regular layout, so call the local_render method
|
13
|
-
|
11
|
+
_original_render
|
14
12
|
else
|
15
13
|
uri = Addressable::URI.parse(self.options[:layout])
|
16
14
|
raise InvalidAddressableURIFormat.new("#{self.options[:layout]}") if uri.host.nil? or uri.path.nil?
|
@@ -34,13 +32,11 @@ module Mack
|
|
34
32
|
old_render_value = self.view_template.render_value.dup
|
35
33
|
self.view_template.render_value = raw
|
36
34
|
Mack::Rendering::Type::Inline.new(self.view_template).render
|
37
|
-
# self.view_template.render_value = old_render_value
|
38
35
|
end
|
39
36
|
end
|
40
|
-
end
|
37
|
+
end # render
|
41
38
|
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
39
|
+
end # Layout
|
40
|
+
end # Type
|
41
|
+
end # Rendering
|
42
|
+
end # Mack
|
@@ -13,11 +13,11 @@ module Mack
|
|
13
13
|
|
14
14
|
class << self
|
15
15
|
def register
|
16
|
-
if
|
17
|
-
raise Mack::Distributed::Errors::ApplicationNameUndefined.new if
|
16
|
+
if configatron.mack.distributed.share_views
|
17
|
+
raise Mack::Distributed::Errors::ApplicationNameUndefined.new if configatron.mack.distributed.app_name.nil?
|
18
18
|
# Mack.logger.info "Registering Mack::Distributed::View for '#{app_config.mack.distributed_app_name}' with Rinda"
|
19
19
|
|
20
|
-
Mack::Distributed::Utils::Rinda.register_or_renew(:space =>
|
20
|
+
Mack::Distributed::Utils::Rinda.register_or_renew(:space => configatron.mack.distributed.app_name.to_sym,
|
21
21
|
:klass_def => :distributed_views,
|
22
22
|
:object => Mack::Distributed::View.instance)
|
23
23
|
end
|
data/lib/mack-distributed.rb
CHANGED
@@ -1,18 +1,16 @@
|
|
1
1
|
require 'drb/acl'
|
2
2
|
require 'addressable/uri'
|
3
3
|
require 'ruby-debug'
|
4
|
+
require 'mack-caching'
|
4
5
|
|
5
6
|
base = File.join(File.dirname(__FILE__), "mack-distributed")
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
"mack::drb_timeout" => 0
|
14
|
-
}
|
15
|
-
app_config.load_hash(config.merge(app_config.final_configuration_settings), "mack-distributed")
|
8
|
+
configatron.mack.distributed.set_default(:share_routes, false)
|
9
|
+
configatron.mack.distributed.set_default(:share_objects, false)
|
10
|
+
configatron.mack.distributed.set_default(:share_views, false)
|
11
|
+
configatron.mack.distributed.set_default(:app_name, nil)
|
12
|
+
configatron.mack.distributed.set_default(:site_domain, 'http://localhost:3000')
|
13
|
+
configatron.mack.distributed.set_default(:timeout, 0)
|
16
14
|
|
17
15
|
# load *.rb files
|
18
16
|
Dir.glob(File.join(base, "**", "*.rb")).each do |f|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mack-distributed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- markbates
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-10-06 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -22,6 +22,16 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 1.0.4
|
24
24
|
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: mack-caching
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.8.0
|
34
|
+
version:
|
25
35
|
description: Distributed Application Support for Mack Framework
|
26
36
|
email: mark@mackframework.com
|
27
37
|
executables:
|
@@ -70,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
80
|
requirements: []
|
71
81
|
|
72
82
|
rubyforge_project: magrathea
|
73
|
-
rubygems_version: 1.
|
83
|
+
rubygems_version: 1.3.0
|
74
84
|
signing_key:
|
75
85
|
specification_version: 2
|
76
86
|
summary: Distributed Application
|