alchemy_domains 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.
Files changed (29) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +27 -0
  3. data/Rakefile +39 -0
  4. data/app/controllers/alchemy/alchemy_base_controller_extension.rb +60 -0
  5. data/app/controllers/alchemy/pages_controller_extension.rb +40 -0
  6. data/app/controllers/alchemy_domains/admin/domains_controller.rb +48 -0
  7. data/app/controllers/alchemy_domains/admin/localizations_controller.rb +17 -0
  8. data/app/helpers/base_helper_extension.rb +9 -0
  9. data/app/helpers/pages_helper_extension.rb +70 -0
  10. data/app/models/alchemy_domains/domain.rb +48 -0
  11. data/app/models/alchemy_domains/localization.rb +29 -0
  12. data/app/models/language_extension.rb +11 -0
  13. data/app/models/page_extension.rb +8 -0
  14. data/app/views/alchemy_domains/admin/domains/_domain.html.erb +31 -0
  15. data/app/views/alchemy_domains/admin/domains/_form.html.erb +36 -0
  16. data/app/views/alchemy_domains/admin/domains/edit.html.erb +1 -0
  17. data/app/views/alchemy_domains/admin/domains/index.html.erb +38 -0
  18. data/app/views/alchemy_domains/admin/domains/new.html.erb +1 -0
  19. data/app/views/alchemy_domains/admin/localizations/_localization.html.erb +21 -0
  20. data/config/authorization_rules.rb +8 -0
  21. data/config/locales/alchemy.de.yml +18 -0
  22. data/config/module_definition.yml +12 -0
  23. data/config/routes.rb +7 -0
  24. data/db/migrate/20120224143542_create_alchemy_domains.rb +10 -0
  25. data/db/migrate/20120224144137_create_alchemy_localizations.rb +12 -0
  26. data/lib/alchemy_domains.rb +2 -0
  27. data/lib/alchemy_domains/engine.rb +25 -0
  28. data/lib/alchemy_domains/version.rb +3 -0
  29. metadata +113 -0
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2012 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,27 @@
1
+ #AlchemyDomains [![Build Status](https://secure.travis-ci.org/magiclabs/alchemy_domains.png?branch=master)](http://travis-ci.org/magiclabs/alchemy_domains)
2
+
3
+ ### This gem extends Alchemy CMS with a Localization/Domain management.
4
+ If your website is multilingual and the provided languages should depend on the requested (sub)domain, this gem is what you need.
5
+
6
+
7
+ 1.) You just need to require it in your `Gemfile`
8
+
9
+ gem 'alchemy_domains'
10
+
11
+ 2.) bundle all dependencies
12
+
13
+ bundle install
14
+
15
+ 3.) Then you need to mount it in your application´s `routes.rb`
16
+
17
+ mount AlchemyDomains::Engine => '/'
18
+
19
+ 4.) Copy the migrations to your application
20
+
21
+ rake alchemy_domains:install:migrations
22
+
23
+ 5.) Migrate the database
24
+
25
+ rake db:migrate
26
+
27
+ Ready!
data/Rakefile ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'AlchemyDomains'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.md')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+
27
+ Bundler::GemHelper.install_tasks
28
+
29
+ require 'rake/testtask'
30
+
31
+ Rake::TestTask.new(:test) do |t|
32
+ t.libs << 'lib'
33
+ t.libs << 'test'
34
+ t.pattern = 'test/**/*_test.rb'
35
+ t.verbose = false
36
+ end
37
+
38
+
39
+ task :default => :test
@@ -0,0 +1,60 @@
1
+ # encoding: UTF-8
2
+ # Extending Alchemy::BaseController
3
+
4
+ module Alchemy
5
+ BaseController.class_eval do
6
+
7
+ prepend_before_filter :set_domain
8
+
9
+ def multi_language?
10
+ Language.current_domain(session[:domain_id]).published.count > 1
11
+ end
12
+
13
+ private
14
+
15
+ def set_domain
16
+ @domain = AlchemyDomains::Domain.find_by_hostname(request.host)
17
+ if @domain
18
+ session[:domain_id] ||= @domain.id
19
+ else
20
+ redirect_to request.protocol + AlchemyDomains::Domain.find_by_default(true).hostname, :status => 301
21
+ return false
22
+ end
23
+ end
24
+
25
+ # Sets the language for rendering pages in pages controller
26
+ def set_language
27
+ if params[:lang].blank? and session[:language_id].blank?
28
+ set_language_to_default
29
+ elsif !params[:lang].blank?
30
+ set_language_from(params[:lang])
31
+ ::I18n.locale = params[:lang]
32
+ end
33
+ end
34
+
35
+ # Sets the language from the given params
36
+ def set_language_from(language_code_or_id)
37
+ if language_code_or_id.is_a?(String) && language_code_or_id.match(/^\d+$/)
38
+ language_code_or_id = language_code_or_id.to_i
39
+ end
40
+ case language_code_or_id.class.name
41
+ when "String"
42
+ @language = Language.current_domain(session[:domain_id]).find_by_code(language_code_or_id)
43
+ when "Fixnum"
44
+ @language = Language.find(language_code_or_id)
45
+ end
46
+ store_language_in_session(@language)
47
+ end
48
+
49
+ # Sets the language to the domain´s default language
50
+ def set_language_to_default
51
+ @language = AlchemyDomains::Domain.find(session[:domain_id]).default_language
52
+ if @language
53
+ store_language_in_session(@language)
54
+ else
55
+ raise "No Default Language for requested Domain found! Did you run `rake alchemy:db:seed` task?"
56
+ end
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,40 @@
1
+ module Alchemy
2
+
3
+ PagesController.class_eval do
4
+
5
+ def perform_search
6
+ searchresult_page_layouts = PageLayout.get_all_by_attributes({:searchresults => true})
7
+ if searchresult_page_layouts.any?
8
+ @search_result_page = Page.find_by_page_layout_and_public_and_language_id(searchresult_page_layouts.first["name"], true, session[:language_id])
9
+ if !params[:query].blank? && @search_result_page
10
+ @search_results = []
11
+ %w(Alchemy::EssenceText Alchemy::EssenceRichtext).each do |e|
12
+ @search_results += e.constantize.includes(:contents => {:element => :page}).find_with_ferret(
13
+ "*#{params[:query]}*",
14
+ {:limit => :all},
15
+ {:conditions => [
16
+ 'alchemy_pages.language_id = ? AND alchemy_pages.public = ? AND alchemy_pages.layoutpage = ? AND alchemy_pages.restricted = ?',
17
+ @search_result_page.language_id, true, false, false
18
+ ]}
19
+ )
20
+ end
21
+ return @search_results.sort{ |y, x| x.ferret_score <=> y.ferret_score } if @search_results.any?
22
+ end
23
+ end
24
+ end
25
+
26
+ protected
27
+
28
+ # If merged into Alchemy Core, this can be deleted.
29
+ def load_page
30
+ return @page if @page
31
+ if params[:urlname].blank?
32
+ @page = Page.language_root_for(Language.get_default.id)
33
+ else
34
+ @page = Page.find_by_urlname_and_language_id(params[:urlname], session[:language_id])
35
+ end
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,48 @@
1
+ module AlchemyDomains
2
+ module Admin
3
+ class DomainsController < Alchemy::Admin::ResourcesController
4
+
5
+ def new
6
+ @domain = Domain.new
7
+ @languages = Alchemy::Language.published.all
8
+ @languages.map { |l| @domain.localizations.build(:language => l) }
9
+ render :layout => !request.xhr?
10
+ end
11
+
12
+ def edit
13
+ @domain = Domain.find(params[:id])
14
+ @languages = Alchemy::Language.published.all
15
+ (@languages - @domain.languages).map { |l| @domain.localizations.build(:language => l) }
16
+ render :layout => !request.xhr?
17
+ end
18
+
19
+ def update
20
+ params[:domain][:localizations_attributes].map do |k, v|
21
+ if v[:language_id] == "0"
22
+ v[:_destroy] = '1'
23
+ v.delete(:language_id)
24
+ end
25
+ end
26
+ @domain = Domain.find(params[:id])
27
+ @domain.update_attributes(params[:domain])
28
+ render_errors_or_redirect(
29
+ @domain,
30
+ url_for({:action => :index}),
31
+ flash_notice_for_resource_action
32
+ )
33
+ end
34
+
35
+ def create
36
+ params[:domain][:localizations_attributes].delete_if { |k, v| v[:language_id] == "0" }
37
+ @domain = Domain.new(params[:domain])
38
+ @domain.save
39
+ render_errors_or_redirect(
40
+ @domain,
41
+ admin_domains_path,
42
+ flash_notice_for_resource_action
43
+ )
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,17 @@
1
+ module AlchemyDomains
2
+ module Admin
3
+ class LocalizationsController < Alchemy::Admin::ResourcesController
4
+
5
+ def update
6
+ @localization = Localization.find(params[:id])
7
+ @localization.update_attributes(params[:localization])
8
+ render_errors_or_redirect(
9
+ @localization,
10
+ admin_domains_path,
11
+ flash_notice_for_resource_action
12
+ )
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ module Alchemy
2
+ BaseHelper.class_eval do
3
+
4
+ def multi_language?
5
+ Alchemy::Language.current_domain(session[:domain_id]).published.count > 1
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1,70 @@
1
+ # encoding: UTF-8
2
+ # Extending Alchemy::PagesHelper
3
+
4
+ module Alchemy
5
+ PagesHelper.class_eval do
6
+
7
+ def language_switcher(options={})
8
+ default_options = {
9
+ :linkname => :name,
10
+ :spacer => "",
11
+ :link_to_public_child => configuration(:redirect_to_public_child),
12
+ :link_to_page_with_layout => nil,
13
+ :show_title => true,
14
+ :reverse => false,
15
+ :as_select_box => false,
16
+ :show_flags => false
17
+ }
18
+ options = default_options.merge(options)
19
+ if multi_language?
20
+ language_links = []
21
+ pages = (options[:link_to_public_child] == true) ? Page.language_roots.current_domain(session[:domain_id]) : Page.public_language_roots.current_domain(session[:domain_id])
22
+ return nil if (pages.blank? || pages.length == 1)
23
+ pages.each_with_index do |page, i|
24
+ if(options[:link_to_page_with_layout] != nil)
25
+ page_found_by_layout = Page.current_domain(session[:domain_id]).where(:page_layout => options[:link_to_page_with_layout].to_s, :language_id => page.language_id)
26
+ end
27
+ page = page_found_by_layout || page
28
+ page = (options[:link_to_public_child] ? (page.first_public_child.blank? ? nil : page.first_public_child) : nil) if !page.public?
29
+ if !page.blank?
30
+ active = session[:language_id] == page.language.id
31
+ linkname = page.language.label(options[:linkname])
32
+ if options[:as_select_box]
33
+ language_links << [linkname, show_page_url(:urlname => page.urlname, :lang => page.language.code)]
34
+ else
35
+ language_links << link_to(
36
+ "#{content_tag(:span, '', :class => "flag") if options[:show_flags]}#{ content_tag(:span, linkname)}".html_safe,
37
+ alchemy.show_page_path(:urlname => page.urlname, :lang => page.language.code),
38
+ :class => "#{(active ? 'active ' : nil)}#{page.language.code} #{(i == 0) ? 'first' : (i==pages.length-1) ? 'last' : nil}",
39
+ :title => options[:show_title] ? Alchemy::I18n.t("alchemy.language_links.#{page.language.code}.title", :default => page.language.name) : nil
40
+ )
41
+ end
42
+ end
43
+ # when last iteration and we have just one language_link,
44
+ # we dont need to render it.
45
+ if (i==pages.length-1) && language_links.length == 1
46
+ return nil
47
+ end
48
+ end
49
+ return nil if language_links.empty? || language_links.length == 1
50
+ language_links.reverse! if options[:reverse]
51
+ if options[:as_select_box]
52
+ return select_tag(
53
+ 'language',
54
+ options_for_select(
55
+ language_links,
56
+ show_page_url(:urlname => @page.urlname, :lang => @page.language.code)
57
+ ),
58
+ :onchange => "window.location=this.value"
59
+ )
60
+ else
61
+ raw(language_links.join(options[:spacer]))
62
+ end
63
+ else
64
+ nil
65
+ end
66
+ end
67
+ alias_method :language_switches, :language_switcher
68
+
69
+ end
70
+ end
@@ -0,0 +1,48 @@
1
+ module AlchemyDomains
2
+ class Domain < ActiveRecord::Base
3
+ set_table_name :alchemy_domains
4
+ has_many :localizations, :dependent => :destroy
5
+ has_many :languages, :through => :localizations
6
+ accepts_nested_attributes_for :localizations, :allow_destroy => true
7
+
8
+ validates_presence_of :hostname
9
+ validates_presence_of :default, :message => "Es muss eine Standard Domain geben", :if => proc { |m| m.default_changed? && m.default_was == true }
10
+ validates_format_of :hostname, :with => /^[a-z\d]+([\-\.][a-z\d]+)*\.[a-z]{2,6}/
11
+
12
+ before_create :set_to_default, :if => proc { |m| Domain.default.blank? && self.default == false }
13
+ before_save :remove_old_default, :if => proc { |m| m.default_changed? && m != Domain.default }
14
+
15
+ def default_localization
16
+ self.localizations.where(:default_for_domain => true).first
17
+ end
18
+
19
+ def default_language
20
+ default_localization.language if default_localization.present?
21
+ end
22
+
23
+ def default_language_name
24
+ default_language.name if default_language.present?
25
+ end
26
+
27
+ def self.find_by_hostname_or_default(hostname)
28
+ Domain.find_by_hostname(hostname) || Domain.default # || raise "No Default Domain Found!"
29
+ end
30
+
31
+ def self.default
32
+ Domain.find_by_default(true)
33
+ end
34
+
35
+ private
36
+
37
+ def set_to_default
38
+ self.default = true
39
+ end
40
+
41
+ def remove_old_default
42
+ domain = Domain.default
43
+ return true if domain.nil?
44
+ domain.update_attribute(:default, false)
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,29 @@
1
+ module AlchemyDomains
2
+ class Localization < ActiveRecord::Base
3
+ set_table_name :alchemy_localizations
4
+ belongs_to :domain
5
+ belongs_to :language, :class_name => "Alchemy::Language"
6
+
7
+ before_create :set_to_default_for_domain, :if => proc { |m| m.domain.default_localization.blank? && self.default_for_domain == false }
8
+ before_save :remove_old_default, :if => proc { |m| m.default_for_domain_changed? && m != Localization.default_for_domain(domain_id) }
9
+
10
+ scope :domain_languages
11
+
12
+ def self.default_for_domain(domain_id)
13
+ find_by_default_for_domain_and_domain_id(true, domain_id)
14
+ end
15
+
16
+ private
17
+
18
+ def set_to_default_for_domain
19
+ self.default_for_domain = true
20
+ end
21
+
22
+ def remove_old_default
23
+ localization = Localization.default_for_domain(domain_id)
24
+ return true if localization.nil?
25
+ localization.update_attribute(:default_for_domain, false)
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: UTF-8
2
+ # Extending Alchemy::Language
3
+
4
+ module Alchemy
5
+ Language.class_eval do
6
+ has_many :localizations, :dependent => :destroy, :class_name => "AlchemyDomains::Localization"
7
+ has_many :domains, :through => :localizations, :class_name => "AlchemyDomains::Domain"
8
+
9
+ scope :current_domain, lambda{ |domain_id| includes(:localizations).where("alchemy_localizations.domain_id" => domain_id) }
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: UTF-8
2
+ # Extending Alchemy::Page
3
+
4
+ module Alchemy
5
+ Page.class_eval do
6
+ scope :current_domain, lambda{ |domain_id| includes(:language => :localizations).where('alchemy_localizations.domain_id' => domain_id) }
7
+ end
8
+ end
@@ -0,0 +1,31 @@
1
+ <tr class="<%= cycle('even', 'odd') %>">
2
+ <td><%= domain.hostname -%></td>
3
+ <td style="text-align: center"><%= render_icon(true) if domain.default? %></td>
4
+ <td></td>
5
+ <td></td>
6
+ <td class="tools">
7
+ <%- permitted_to?(:destroy, :alchemy_domains_admin_domains) do -%>
8
+ <%= link_to_confirmation_window(
9
+ '',
10
+ t("Are you sure?"),
11
+ admin_domain_path(domain),
12
+ :title => t("Delete"),
13
+ :class => "icon destroy"
14
+ ) -%>
15
+ <%- end -%>
16
+ <%- permitted_to?(:edit, :alchemy_domains_admin_domains) do -%>
17
+ <%= link_to_overlay_window(
18
+ '',
19
+ edit_admin_domain_path(domain),
20
+ {
21
+ :title => t("Edit")
22
+ },
23
+ {
24
+ :class => "icon edit",
25
+ :title => t("Edit")
26
+ }
27
+ ) -%>
28
+ <%- end -%>
29
+ </td>
30
+ </tr>
31
+ <%= render domain.localizations %>
@@ -0,0 +1,36 @@
1
+ <%= form_for [:admin, @domain], :remote => true do |f| %>
2
+ <div id="errors" style="display: none"></div>
3
+ <table>
4
+
5
+ <tr>
6
+ <td class="label"><%= f.label :hostname %></td>
7
+ <td class="input">
8
+ <%= f.text_field :hostname, :class => 'thin_border' -%>
9
+ </td>
10
+ </tr>
11
+ <tr>
12
+ <td class="label"><%= f.label :default, t('default') %></td>
13
+ <td class="checkbox">
14
+ <%= f.check_box(:default) -%>
15
+ </td>
16
+ </tr>
17
+ <tr>
18
+ <td class="label"><%= f.label :languages, t('languages') %></td>
19
+ <td class="checkbox">
20
+ <% @domain.localizations.each_with_index do |localization, i| -%>
21
+ <%= f.fields_for :localizations, localization do |l| %>
22
+ <div>
23
+ <%= l.check_box(:language_id, {:checked => !l.object.new_record?, :id => "domain_localization_#{i}"}, localization.language.id) %>
24
+ <label for="domain_localization_<%= i%>"><%= localization.language.name -%></label>
25
+ </div>
26
+ <% end %>
27
+ <% end -%>
28
+ </td>
29
+ </tr>
30
+ <tr>
31
+ <td class="submit" colspan="2">
32
+ <%= f.button t('save'), :class => 'button' %>
33
+ </td>
34
+ </tr>
35
+ </table>
36
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= render :partial => "form" %>
@@ -0,0 +1,38 @@
1
+ <%- label_title = t("Create domain", :default => t('Create')) -%>
2
+
3
+ <%- toolbar(
4
+ :buttons => [
5
+ {
6
+ :icon => 'create',
7
+ :label => label_title,
8
+ :url => new_admin_domain_path,
9
+ :title => label_title,
10
+ :overlay_options => {
11
+ :title => label_title
12
+ },
13
+ :if_permitted_to => [:new, :alchemy_domains_admin_domains]
14
+ }
15
+ ],
16
+ :search => true,
17
+ :search_url => admin_domains_path
18
+ ) -%>
19
+
20
+ <%- if @domains.any? -%>
21
+ <table class="list" id="domain_list">
22
+ <tr>
23
+ <th style="width: 180px"><%= ::I18n.t(:hostname, :scope => 'activerecord.attributes.alchemy_domains/domain') %></th>
24
+ <th style="width: 150px; text-align: center"><%= t('default_domain') %></th>
25
+ <th><%= t('languages') %></th>
26
+ <th style="width: 150px; text-align: center"><%= t('default_language') %></th>
27
+ <th class="tools"></th>
28
+ </tr>
29
+
30
+ <%= render @domains %>
31
+
32
+ </table>
33
+
34
+ <%- elsif params[:query] -%>
35
+ <p><%= t('Nothing found') %></p>
36
+ <%- end -%>
37
+
38
+ <%= render 'alchemy/admin/partials/pagination_links', :items => @domains, :scope => alchemy_domains %>
@@ -0,0 +1 @@
1
+ <%= render :partial => "form" %>
@@ -0,0 +1,21 @@
1
+ <tr class="<%= cycle("even", "odd") %>">
2
+ <td></td>
3
+ <td></td>
4
+ <td><%= localization.language.name %></td>
5
+ <td style="text-align: center">
6
+ <% if localization.default_for_domain? -%>
7
+ <%= render_icon(true) %>
8
+ <% else -%>
9
+ <%= link_to(
10
+ t('make default'),
11
+ admin_localization_path(
12
+ :id => localization.id,
13
+ :localization => {:default_for_domain => true}
14
+ ),
15
+ :method => :put,
16
+ :remote => true
17
+ ) %>
18
+ <% end -%>
19
+ </td>
20
+ <td></td>
21
+ </tr>
@@ -0,0 +1,8 @@
1
+ authorization do
2
+
3
+ role :admin do
4
+ has_permission_on :alchemy_domains_admin_domains, :to => [:manage]
5
+ has_permission_on :alchemy_domains_admin_localizations, :to => [:manage]
6
+ end
7
+
8
+ end
@@ -0,0 +1,18 @@
1
+ de:
2
+ alchemy:
3
+
4
+ "make default": "als Standard festlegen"
5
+ default: "Standard"
6
+ languages: "Sprachen"
7
+
8
+ modules:
9
+ domains: "Domains"
10
+
11
+ languages: Sprachen
12
+ default_language: "Standard Sprache"
13
+ default_domain: "Standard Domain"
14
+
15
+ activerecord:
16
+ attributes:
17
+ alchemy_domains/domain:
18
+ hostname: Domain
@@ -0,0 +1,12 @@
1
+ name: domains
2
+ engine_name: alchemy_domains
3
+ order: 1
4
+ navigation:
5
+ name: modules.domains
6
+ controller: alchemy_domains/admin/domains
7
+ action: index
8
+ icon: /assets/module_icon.png
9
+ sub_navigation:
10
+ - name: domains
11
+ controller: alchemy_domains/admin/domains
12
+ action: index
data/config/routes.rb ADDED
@@ -0,0 +1,7 @@
1
+ AlchemyDomains::Engine.routes.draw do
2
+ namespace :admin do
3
+ resources :domains
4
+ resources :localizations, :only => [:update]
5
+ end
6
+ end
7
+
@@ -0,0 +1,10 @@
1
+ class CreateAlchemyDomains < ActiveRecord::Migration
2
+ def change
3
+ create_table :alchemy_domains do |t|
4
+ t.boolean :default, :default => false
5
+ t.string :hostname
6
+ t.timestamps
7
+ end
8
+ add_index :alchemy_domains, :hostname
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ class CreateAlchemyLocalizations < ActiveRecord::Migration
2
+ def change
3
+ create_table :alchemy_localizations do |t|
4
+ t.references :domain
5
+ t.references :language
6
+ t.boolean :default_for_domain, :default => false
7
+ t.timestamps
8
+ end
9
+ add_index :alchemy_localizations, :domain_id
10
+ add_index :alchemy_localizations, :language_id
11
+ end
12
+ end
@@ -0,0 +1,2 @@
1
+ require "alchemy_cms"
2
+ require "alchemy_domains/engine"
@@ -0,0 +1,25 @@
1
+ module AlchemyDomains
2
+ class Engine < Rails::Engine
3
+
4
+ engine_name "alchemy_domains"
5
+ isolate_namespace AlchemyDomains
6
+
7
+ # Registering module in Alchemy CMS
8
+ initializer 'alchemy_domains.register_as_alchemy_module' do
9
+ Alchemy::Modules.register_module(YAML.load_file(File.join(File.dirname(__FILE__), '../..', 'config/module_definition.yml')))
10
+ end
11
+
12
+ # Loading authorization rules and register them to auth engine instance
13
+ initializer 'alchemy_domains.add_authorization_rules' do
14
+ Alchemy::AuthEngine.get_instance.load(File.join(File.dirname(__FILE__), '../..', 'config/authorization_rules.rb'))
15
+ end
16
+
17
+ # Loading all alchemy core extensions found in app folder.
18
+ config.to_prepare do
19
+ Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_extension.rb")) do |e|
20
+ Rails.env.production? ? require(e) : load(e)
21
+ end
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ module AlchemyDomains
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: alchemy_domains
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Robin Böning
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: &70254542699920 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.1.3
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70254542699920
25
+ - !ruby/object:Gem::Dependency
26
+ name: alchemy_cms
27
+ requirement: &70254542712280 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 2.1.7
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70254542712280
36
+ - !ruby/object:Gem::Dependency
37
+ name: sqlite3
38
+ requirement: &70254542709340 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70254542709340
47
+ description: This gem adds domains and associats them with languages. Your website
48
+ can provide certain languages depending on the requested domain.
49
+ email:
50
+ - rb@magiclabs.de
51
+ executables: []
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - app/controllers/alchemy/alchemy_base_controller_extension.rb
56
+ - app/controllers/alchemy/pages_controller_extension.rb
57
+ - app/controllers/alchemy_domains/admin/domains_controller.rb
58
+ - app/controllers/alchemy_domains/admin/localizations_controller.rb
59
+ - app/helpers/base_helper_extension.rb
60
+ - app/helpers/pages_helper_extension.rb
61
+ - app/models/alchemy_domains/domain.rb
62
+ - app/models/alchemy_domains/localization.rb
63
+ - app/models/language_extension.rb
64
+ - app/models/page_extension.rb
65
+ - app/views/alchemy_domains/admin/domains/_domain.html.erb
66
+ - app/views/alchemy_domains/admin/domains/_form.html.erb
67
+ - app/views/alchemy_domains/admin/domains/edit.html.erb
68
+ - app/views/alchemy_domains/admin/domains/index.html.erb
69
+ - app/views/alchemy_domains/admin/domains/new.html.erb
70
+ - app/views/alchemy_domains/admin/localizations/_localization.html.erb
71
+ - config/authorization_rules.rb
72
+ - config/locales/alchemy.de.yml
73
+ - config/module_definition.yml
74
+ - config/routes.rb
75
+ - db/migrate/20120224143542_create_alchemy_domains.rb
76
+ - db/migrate/20120224144137_create_alchemy_localizations.rb
77
+ - lib/alchemy_domains/engine.rb
78
+ - lib/alchemy_domains/version.rb
79
+ - lib/alchemy_domains.rb
80
+ - MIT-LICENSE
81
+ - Rakefile
82
+ - README.md
83
+ homepage: http://magiclabs.de
84
+ licenses: []
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ segments:
96
+ - 0
97
+ hash: -4503359689990071848
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ segments:
105
+ - 0
106
+ hash: -4503359689990071848
107
+ requirements: []
108
+ rubyforge_project:
109
+ rubygems_version: 1.8.10
110
+ signing_key:
111
+ specification_version: 3
112
+ summary: This gem adds the functionality for managing domains in Alchemy CMS.
113
+ test_files: []