diff --git a/vendor/plugins/design/README b/vendor/plugins/design/README
new file mode 100644
index 0000000..c3e0785
--- /dev/null
+++ b/vendor/plugins/design/README
@@ -0,0 +1,4 @@
+Design
+======
+
+Description goes here
\ No newline at end of file
diff --git a/vendor/plugins/design/Rakefile b/vendor/plugins/design/Rakefile
new file mode 100644
index 0000000..48d08ce
--- /dev/null
+++ b/vendor/plugins/design/Rakefile
@@ -0,0 +1,22 @@
+require 'rake'
+require 'rake/testtask'
+require 'rake/rdoctask'
+
+desc 'Default: run unit tests.'
+task :default => :test
+
+desc 'Test the design plugin.'
+Rake::TestTask.new(:test) do |t|
+ t.libs << 'lib'
+ t.pattern = 'test/**/*_test.rb'
+ t.verbose = true
+end
+
+desc 'Generate documentation for the design plugin.'
+Rake::RDocTask.new(:rdoc) do |rdoc|
+ rdoc.rdoc_dir = 'rdoc'
+ rdoc.title = 'Design'
+ rdoc.options << '--line-numbers' << '--inline-source'
+ rdoc.rdoc_files.include('README')
+ rdoc.rdoc_files.include('lib/**/*.rb')
+end
diff --git a/vendor/plugins/design/init.rb b/vendor/plugins/design/init.rb
new file mode 100644
index 0000000..353ef4f
--- /dev/null
+++ b/vendor/plugins/design/init.rb
@@ -0,0 +1,25 @@
+require 'design'
+
+class ActionController::Base
+
+ # Declares that this controller uses design plugin to generate its layout.
+ # See the plugin README for options that can be passed to this method.
+ def self.design(config = {})
+ if (config.has_key?(:holder) && config.has_key?(:fixed)) || (!config.has_key?(:holder) && !config.has_key?(:fixed))
+ raise ArgumentError.new("You must supply either :holder or :fixed to design.")
+ end
+
+ @design_plugin_config = config
+
+ include Design
+ end
+
+ # declares this controller as a design editor, including in it all the
+ # functionalities to do that (besides those for using a design). Accepts the
+ # same options as design.
+ def self.design_editor(config = {})
+ self.design(config)
+ include Design::Editor
+ end
+
+end
diff --git a/vendor/plugins/design/install.rb b/vendor/plugins/design/install.rb
new file mode 100644
index 0000000..f7732d3
--- /dev/null
+++ b/vendor/plugins/design/install.rb
@@ -0,0 +1 @@
+# Install hook code here
diff --git a/vendor/plugins/design/lib/design.rb b/vendor/plugins/design/lib/design.rb
new file mode 100644
index 0000000..69f8cf1
--- /dev/null
+++ b/vendor/plugins/design/lib/design.rb
@@ -0,0 +1,29 @@
+require 'design/fixed_design_holder'
+require 'design/proxy_design_holder'
+
+require 'design/helper'
+require 'design/editor'
+
+module Design
+
+ # gets the Design object for this controller
+ def design
+ @design_plugin_data ||= Hash.new
+ data = @design_plugin_data
+
+ return data[:design] if data.has_key?(:design)
+
+ config = self.class.instance_variable_get("@design_plugin_config")
+
+ if config.has_key?(:holder)
+ holder_variable_name = config[:holder]
+ data[:design] = Design::ProxyDesignHolder.new(self.instance_variable_get("@#{holder_variable_name}"))
+ else
+ options = (config[:fixed].kind_of? Hash) ? config[:fixed] : {}
+ data[:design] = Design::FixedDesignHolder.new(options)
+ end
+
+ data[:design] # redundant, but makes more clear the return value
+ end
+ protected :design
+end
diff --git a/vendor/plugins/design/lib/design/editor.rb b/vendor/plugins/design/lib/design/editor.rb
new file mode 100644
index 0000000..4f75d33
--- /dev/null
+++ b/vendor/plugins/design/lib/design/editor.rb
@@ -0,0 +1,7 @@
+module Design
+
+ # This module contains the functionality for e design editor.
+ module Editor
+ end
+
+end
diff --git a/vendor/plugins/design/lib/design/fixed_design_holder.rb b/vendor/plugins/design/lib/design/fixed_design_holder.rb
new file mode 100644
index 0000000..fde139d
--- /dev/null
+++ b/vendor/plugins/design/lib/design/fixed_design_holder.rb
@@ -0,0 +1,25 @@
+module Design
+
+ class FixedDesignHolder
+ attr_reader :template, :theme, :icon_theme, :boxes
+ def initialize(options = {})
+ @template = options[:template] || 'default'
+ @theme = options[:theme] || 'default'
+ @icon_theme = options[:icon_theme] || 'default'
+ @boxes = options[:boxes] || default_boxes
+ end
+
+ # creates some default boxes
+ def default_boxes
+ box1 = Box.new
+ box2 = Box.new
+ box2.blocks << MainBlock.new
+ box3 = Box.new
+
+ [box1, box2, box3]
+ end
+ private :default_boxes
+ end
+
+end
+
diff --git a/vendor/plugins/design/lib/design/helper.rb b/vendor/plugins/design/lib/design/helper.rb
new file mode 100644
index 0000000..6e62416
--- /dev/null
+++ b/vendor/plugins/design/lib/design/helper.rb
@@ -0,0 +1,4 @@
+module Design
+ module Helper
+ end
+end
diff --git a/vendor/plugins/design/lib/design/proxy_design_holder.rb b/vendor/plugins/design/lib/design/proxy_design_holder.rb
new file mode 100644
index 0000000..485722a
--- /dev/null
+++ b/vendor/plugins/design/lib/design/proxy_design_holder.rb
@@ -0,0 +1,43 @@
+module Design
+
+ # This class uses an external holder object to hold the details of the
+ # design, and proxies all access to the template data to it. This object can
+ # be any object that responds to the following methods:
+ #
+ # * +template+
+ # * +template=+
+ # * +theme+
+ # * +theme=+
+ # * +icon_theme+
+ # * +icon_theme=+
+ # * +boxes+
+ # * +boxes=+
+ #
+ # These methods must implement get/set semantics for atrributes with their
+ # names, and can be implemented with +attr_accessor+, as ActiveRecord
+ # columns, or event explicity by writing the methods and storing the values
+ # wherever you want.
+ #
+ # +template+, +theme+ and +icon_theme+ must return (and accept in the
+ # setters) strings, while +boxes+ must be an array of Box objects.
+ class ProxyDesignHolder
+
+ attr_reader :holder
+
+ # creates a new proxy for +holder+
+ def initialize(holder)
+ @holder = holder
+ end
+
+ # proxies all calls to +template+, +theme+, +icon_theme+ and +boxes+ (as
+ # well as their setters counterparts) to the holder object
+ def method_missing(method_id, *args)
+ if method_id.to_s =~ /^(template|theme|icon_theme|boxes)=?$/
+ holder.send(method_id, *args)
+ else
+ raise NoMethodError.new("Design has no method \"#{method_id}\"")
+ end
+ end
+ end
+
+end
diff --git a/vendor/plugins/design/tasks/design_tasks.rake b/vendor/plugins/design/tasks/design_tasks.rake
new file mode 100644
index 0000000..2408303
--- /dev/null
+++ b/vendor/plugins/design/tasks/design_tasks.rake
@@ -0,0 +1,4 @@
+# desc "Explaining what the task does"
+# task :design do
+# # Task goes here
+# end
\ No newline at end of file
diff --git a/vendor/plugins/design/test/design_test.rb b/vendor/plugins/design/test/design_test.rb
new file mode 100644
index 0000000..7b9cf05
--- /dev/null
+++ b/vendor/plugins/design/test/design_test.rb
@@ -0,0 +1,24 @@
+require File.join(File.dirname(__FILE__), 'test_helper')
+
+class FixedDesignHolderTest < Test::Unit::TestCase
+
+ def test_design_should_include_design_module
+ assert FixedDesignTestController.included_modules.include?(Design)
+ end
+
+ def test_design_editor_should_include_design_and_design_editor_module
+ assert DesignEditorTestController.included_modules.include?(Design)
+ assert DesignEditorTestController.included_modules.include?(Design::Editor)
+ end
+
+ def test_should_not_accept_no_holder_and_no_fixed
+ assert_raise ArgumentError do
+ DesignEditorTestController.design
+ end
+ end
+ def test_should_not_accept_both_holder_and_fixed
+ assert_raise ArgumentError do
+ DesignEditorTestController.design :holder => 'something', :fixed => true end
+ end
+
+end
diff --git a/vendor/plugins/design/test/fixed_design_holder_test.rb b/vendor/plugins/design/test/fixed_design_holder_test.rb
new file mode 100644
index 0000000..8d4c5c6
--- /dev/null
+++ b/vendor/plugins/design/test/fixed_design_holder_test.rb
@@ -0,0 +1,53 @@
+require File.join(File.dirname(__FILE__), 'test_helper')
+
+class FixedDesignHolderTest < Test::Unit::TestCase
+
+ include Design
+
+ def test_explicit_design
+ controller = FixedDesignTestController.new
+ assert_kind_of Design::FixedDesignHolder, controller.design
+ assert_equal 'some_template', controller.design.template
+ assert_equal 'some_theme', controller.design.theme
+ assert_equal 'some_icon_theme', controller.design.icon_theme
+ assert_equal [FixedDesignTestController::BOX1, FixedDesignTestController::BOX2, FixedDesignTestController::BOX3], controller.design.boxes
+ end
+
+ def test_explicit_design_should_have_sensible_defaults
+ controller = FixedDesignDefaultTestController.new
+ assert_kind_of Design::FixedDesignHolder, controller.design
+ assert_equal 'default', controller.design.template
+ assert_equal 'default', controller.design.theme
+ assert_equal 'default', controller.design.icon_theme
+ assert_kind_of Array, controller.design.boxes
+ assert_equal 3, controller.design.boxes.size
+ end
+
+ def test_should_not_be_able_to_assign_template
+ # FixedDesignHolder does not implement assigment, on purpose
+ assert_raise NoMethodError do
+ FixedDesignHolder.new.template = 'break'
+ end
+ end
+
+ def test_should_not_be_able_to_assign_theme
+ # FixedDesignHolder does not implement assigment, on purpose
+ assert_raise NoMethodError do
+ FixedDesignHolder.new.theme = 'break'
+ end
+ end
+
+ def test_should_not_be_able_to_assign_icon_theme
+ assert_raise NoMethodError do
+ FixedDesignHolder.new.icon_theme = 'break'
+ end
+ end
+
+ def test_should_not_be_able_to_assign_boxes
+ assert_raise NoMethodError do
+ FixedDesignHolder.new.boxes = []
+ end
+ end
+
+
+end
diff --git a/vendor/plugins/design/test/proxy_design_holder_test.rb b/vendor/plugins/design/test/proxy_design_holder_test.rb
new file mode 100644
index 0000000..d85b873
--- /dev/null
+++ b/vendor/plugins/design/test/proxy_design_holder_test.rb
@@ -0,0 +1,32 @@
+require File.join(File.dirname(__FILE__), 'test_helper')
+
+
+class ProxyDesignHolderTest < Test::Unit::TestCase
+
+ # FIXME: rewrite this test with mocha
+ def test_design_should_interact_with_sample_holder
+ design = Design::ProxyDesignHolder.new(SampleHolderForTestingProxyDesignHolder.new)
+ design.template = 'bli'
+ assert_equal 'bli', design.template
+ design.theme = 'bli'
+ assert_equal 'bli', design.theme
+ design.icon_theme = 'bli'
+ assert_equal 'bli', design.icon_theme
+ design.boxes = []
+ assert_equal [], design.boxes
+ end
+
+ def test_design_user_controller_should_get_a_proper_design
+ controller = ProxyDesignHolderTestController.new
+ design = controller.send(:design)
+ design.template = 'bli'
+ assert_equal 'bli', design.template
+ design.theme = 'bli'
+ assert_equal 'bli', design.theme
+ design.icon_theme = 'bli'
+ assert_equal 'bli', design.icon_theme
+ design.boxes = []
+ assert_equal [], design.boxes
+ end
+
+end
diff --git a/vendor/plugins/design/test/test_helper.rb b/vendor/plugins/design/test/test_helper.rb
new file mode 100644
index 0000000..7740339
--- /dev/null
+++ b/vendor/plugins/design/test/test_helper.rb
@@ -0,0 +1,44 @@
+ENV["RAILS_ENV"] = "test"
+require File.expand_path(File.dirname(__FILE__) + "/../../../../config/environment")
+
+require 'test/unit'
+
+########################
+# test clases below here
+########################
+
+class FixedDesignTestController < ActionController::Base
+
+ BOX1 = Box.new
+ BOX2 = Box.new
+ BOX3 = Box.new
+
+ design :fixed => {
+ :template => 'some_template',
+ :theme => 'some_theme',
+ :icon_theme => 'some_icon_theme',
+ :boxes => [ BOX1, BOX2, BOX3 ],
+ }
+end
+
+class FixedDesignDefaultTestController < ActionController::Base
+ design :fixed => true
+end
+
+class SampleHolderForTestingProxyDesignHolder
+ attr_accessor :template, :theme, :icon_theme, :boxes
+end
+
+class ProxyDesignHolderTestController < ActionController::Base
+ design :holder => 'sample_object'
+ def initialize
+ @sample_object = SampleHolderForTestingProxyDesignHolder.new
+ end
+end
+
+class DesignEditorTestController < ActionController::Base
+ design_editor :holder => 'sample_object'
+ def initialize
+ @sample_object = SampleHolderForTestingProxyDesignHolder.new
+ end
+end
diff --git a/vendor/plugins/design/uninstall.rb b/vendor/plugins/design/uninstall.rb
new file mode 100644
index 0000000..9738333
--- /dev/null
+++ b/vendor/plugins/design/uninstall.rb
@@ -0,0 +1 @@
+# Uninstall hook code here
--
libgit2 0.21.2