diff --git a/Gemfile b/Gemfile
index 74ad22d06c..f6eb508dbf 100644
--- a/Gemfile
+++ b/Gemfile
@@ -9,6 +9,9 @@ path "./" do
gem "refinerycms-resources"
end
+# TODO: Remove this before merging this PR
+gem 'refinerycms-i18n', git: 'https://github.com/refinery/refinerycms-i18n', branch: 'feature/mobility'
+
gem 'spring'
gem 'spring-commands-rspec'
gem 'poltergeist', '>= 1.8.1'
@@ -28,7 +31,7 @@ end
if !ENV['TRAVIS'] || ENV['DB'] == 'mysql'
group :mysql do
gem 'activerecord-jdbcmysql-adapter', '>= 1.3.0.rc1', platform: :jruby
- gem 'mysql2', '~> 0.3.18', :platform => :ruby
+ gem 'mysql2', '~> 0.4.10', :platform => :ruby
end
end
diff --git a/core/lib/generators/refinery/engine/templates/Gemfile b/core/lib/generators/refinery/engine/templates/Gemfile
index f443da549f..cf6921bd72 100644
--- a/core/lib/generators/refinery/engine/templates/Gemfile
+++ b/core/lib/generators/refinery/engine/templates/Gemfile
@@ -20,7 +20,7 @@ end
platforms :ruby do
gem 'sqlite3'
- gem 'mysql2'
+ gem 'mysql2', '~> 0.4.10'
gem 'pg'
end
diff --git a/core/lib/generators/refinery/engine/templates/app/models/refinery/namespace/singular_name.rb.erb b/core/lib/generators/refinery/engine/templates/app/models/refinery/namespace/singular_name.rb.erb
index 1d000fd766..7973c1a79c 100644
--- a/core/lib/generators/refinery/engine/templates/app/models/refinery/namespace/singular_name.rb.erb
+++ b/core/lib/generators/refinery/engine/templates/app/models/refinery/namespace/singular_name.rb.erb
@@ -6,6 +6,7 @@ module Refinery
<% end %>
<% if localized? -%>
+ extend Mobility
translates <%= localized_attributes.map { |a| ":#{a.name}" }.join(', ') %>
<% end -%>
<% if string_attributes.any? -%>
diff --git a/core/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_form.html.erb b/core/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_form.html.erb
index 5ca1367bf6..b3811d6fe2 100644
--- a/core/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_form.html.erb
+++ b/core/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_form.html.erb
@@ -9,7 +9,7 @@
<% if localized? -%>
<%%= render '/refinery/admin/locale_picker',
- :current_locale => Globalize.locale %>
+ :current_locale => Mobility.locale %>
<% end -%>
<% attributes.each_with_index do |attribute, index| -%>
<% if attribute.refinery_type == :image -%>
diff --git a/core/lib/generators/refinery/engine/templates/db/migrate/1_create_namespace_plural_name.rb.erb b/core/lib/generators/refinery/engine/templates/db/migrate/1_create_namespace_plural_name.rb.erb
index df0a8c5610..7175280d8d 100644
--- a/core/lib/generators/refinery/engine/templates/db/migrate/1_create_namespace_plural_name.rb.erb
+++ b/core/lib/generators/refinery/engine/templates/db/migrate/1_create_namespace_plural_name.rb.erb
@@ -2,18 +2,30 @@ class Create<%= namespacing %><%= class_name.pluralize %> < ActiveRecord::Migrat
def up
create_table :refinery_<%= "#{namespacing.underscore}_" if table_name != namespacing.underscore.pluralize -%><%= table_name %> do |t|
-<% attributes.each do |attribute| -%>
+<% (attributes - localized_attributes).each do |attribute| -%>
t.<%= attribute.type %> :<%= attribute.column_name %>
<% end -%>
t.integer :position
t.timestamps
end
+
<% if localized? %>
- Refinery::<%= namespacing %>::<%= class_name %>.create_translation_table! <%= attributes_for_translation_table %>
+ create_table :<%= localized_table_name %> do |t|
+<% localized_attributes.each do |attribute| -%>
+ t.<%= attribute.type %> :<%= attribute.column_name %>
+<% end -%>
+ t.string :locale, null: false
+ t.integer :refinery_<%= singular_table_name %>_id, null: false
+ t.timestamps
+ end
+
+ add_index :<%= localized_table_name %>, :locale, name: :index_<%= localized_table_name %>_on_locale
+ add_index :<%= localized_table_name %>, [:refinery_<%= singular_table_name %>_id, :locale], name: :index_<%= Digest::SHA1.hexdigest(localized_table_name) %>, unique: true
<% end %>
end
+
def down
if defined?(::Refinery::UserPlugin)
::Refinery::UserPlugin.destroy_all({:name => "refinerycms-<%= namespacing.underscore %>"})
@@ -25,8 +37,7 @@ class Create<%= namespacing %><%= class_name.pluralize %> < ActiveRecord::Migrat
<% end %>
drop_table :refinery_<%= "#{namespacing.underscore}_" if table_name != namespacing.underscore.pluralize -%><%= table_name %>
<% if localized? %>
- Refinery::<%= namespacing %>::<%= class_name %>.drop_translation_table!
+ drop_table :<%= localized_table_name %>
<% end %>
end
-
end
diff --git a/core/lib/refinery/core/engine.rb b/core/lib/refinery/core/engine.rb
index 0475b3f100..ae0b04c84b 100644
--- a/core/lib/refinery/core/engine.rb
+++ b/core/lib/refinery/core/engine.rb
@@ -44,6 +44,15 @@ def refinery_inclusion!
WillPaginate.per_page = 20
end
+ initializer "refinery.mobility" do
+ Mobility.configure do |config|
+ config.default_backend = :table
+ config.accessor_method = :translates
+ config.query_method = :i18n
+ config.default_options[:dirty] = true
+ end
+ end
+
before_inclusion do
Refinery::Plugin.register do |plugin|
plugin.pathname = root
diff --git a/core/lib/refinery/extension_generation.rb b/core/lib/refinery/extension_generation.rb
index c7b6207571..9c5c78cfa3 100644
--- a/core/lib/refinery/extension_generation.rb
+++ b/core/lib/refinery/extension_generation.rb
@@ -68,6 +68,13 @@ def localized_attributes
@localized_attributes ||= attributes.select{ |a| options[:i18n].include?(a.name)}
end
+ def localized_table_name
+ localized_table_name = [ 'refinery']
+ localized_table_name << namespacing.underscore if table_name != namespacing.underscore.pluralize
+ localized_table_name << [ singular_table_name, 'translations']
+ localized_table_name.join('_')
+ end
+
def attributes_for_translation_table
localized_attributes.inject([]) { |memo, attr| memo << ":#{attr.name} => :#{attr.type}"}.join(', ')
end
diff --git a/core/refinerycms-core.gemspec b/core/refinerycms-core.gemspec
index 9bc9c1c220..090f413ead 100644
--- a/core/refinerycms-core.gemspec
+++ b/core/refinerycms-core.gemspec
@@ -22,8 +22,7 @@ Gem::Specification.new do |s|
s.required_ruby_version = Refinery::Version.required_ruby_version
- s.add_dependency 'refinerycms-i18n', ['~> 4.0', '>= 4.0.0']
- s.add_dependency 'awesome_nested_set', ['~> 3.0', '>= 3.0.0']
+ s.add_dependency 'refinerycms-i18n', ['~> 5.0', '>= 5.0.0']
s.add_dependency 'railties', rails_version
s.add_dependency 'activerecord', rails_version
s.add_dependency 'actionpack', rails_version
diff --git a/core/spec/helpers/refinery/translation_helper_spec.rb b/core/spec/helpers/refinery/translation_helper_spec.rb
index 1132274a22..10bbde9634 100644
--- a/core/spec/helpers/refinery/translation_helper_spec.rb
+++ b/core/spec/helpers/refinery/translation_helper_spec.rb
@@ -14,12 +14,12 @@ module Refinery
let(:page) { FactoryBot.build(:page) }
before do
- Globalize.with_locale(:en) do
+ Mobility.with_locale(:en) do
page.title = "draft"
page.save!
end
- Globalize.with_locale(:lv) do
+ Mobility.with_locale(:lv) do
page.title = "melnraksts"
page.save!
end
@@ -33,7 +33,7 @@ module Refinery
context "when title for current locale isn't available" do
it "returns existing title from translations" do
- Page.translation_class.where(locale: :en).first.destroy
+ Page::Translation.where(locale: :en).first.destroy
expect(helper.translated_field(page, :title)).to eq("melnraksts")
end
end
diff --git a/core/spec/presenters/refinery/translated_field_presenter_spec.rb b/core/spec/presenters/refinery/translated_field_presenter_spec.rb
index c0e6132c90..bad639bee2 100644
--- a/core/spec/presenters/refinery/translated_field_presenter_spec.rb
+++ b/core/spec/presenters/refinery/translated_field_presenter_spec.rb
@@ -5,12 +5,12 @@ module Refinery
let(:page) { FactoryBot.build(:page) }
before do
- Globalize.with_locale(:en) do
+ Mobility.with_locale(:en) do
page.title = "draft"
page.save!
end
- Globalize.with_locale(:lv) do
+ Mobility.with_locale(:lv) do
page.title = "melnraksts"
page.save!
end
@@ -25,7 +25,7 @@ module Refinery
context "when title for current locale isn't available" do
it "returns existing title from translations" do
- Page.translation_class.where(locale: :en).first.destroy
+ Page::Translation.where(locale: :en).first.destroy
expect(TranslatedFieldPresenter.new(page).call(:title)).to eq("melnraksts")
end
end
diff --git a/images/app/models/refinery/image.rb b/images/app/models/refinery/image.rb
index 0ddbb6c157..257f19e927 100644
--- a/images/app/models/refinery/image.rb
+++ b/images/app/models/refinery/image.rb
@@ -2,11 +2,9 @@
module Refinery
class Image < Refinery::Core::BaseModel
+ extend Mobility
translates :image_title, :image_alt
- attribute :image_title
- attribute :image_alt
-
dragonfly_accessor :image, :app => :refinery_images
include Images::Validators
diff --git a/images/app/views/refinery/admin/images/_form.html.erb b/images/app/views/refinery/admin/images/_form.html.erb
index 41fbd27621..162f72876a 100644
--- a/images/app/views/refinery/admin/images/_form.html.erb
+++ b/images/app/views/refinery/admin/images/_form.html.erb
@@ -5,7 +5,7 @@
object: @image,
include_object_name: false %>
- <%= render '/refinery/admin/locale_picker', :current_locale => Globalize.locale if @image.persisted? %>
+ <%= render '/refinery/admin/locale_picker', :current_locale => Mobility.locale if @image.persisted? %>
<% if action_name =~ /(edit)|(update)/ %>
diff --git a/images/db/migrate/20150430171341_translate_refinery_images.rb b/images/db/migrate/20150430171341_translate_refinery_images.rb
index a55a279d4a..57e3e4181e 100644
--- a/images/db/migrate/20150430171341_translate_refinery_images.rb
+++ b/images/db/migrate/20150430171341_translate_refinery_images.rb
@@ -1,22 +1,18 @@
class TranslateRefineryImages < ActiveRecord::Migration[4.2]
- def self.up
- begin
- ::Refinery::Image.create_translation_table!({
- image_alt: :string,
- image_title: :string
- }, {
- :migrate_data => true
- })
- rescue NameError
- warn "Refinery::Image was not defined!"
- end
- end
+ def change
+ create_table :refinery_image_translations do |t|
+
+ # Translated attribute(s)
+ t.string :image_alt
+ t.string :image_title
- def self.down
- begin
- Refinery::Image.drop_translation_table! migrate_data: true
- rescue NameError
- warn "Refinery::Image was not defined!"
+ t.string :locale, null: false
+ t.integer :refinery_image_id, null: false
+
+ t.timestamps null: false
end
+
+ add_index :refinery_image_translations, :locale, name: :index_refinery_image_translations_on_locale
+ add_index :refinery_image_translations, [:refinery_image_id, :locale], name: :index_2f245f0c60154d35c851e1df2ffc4c86571726f0, unique: true
end
end
\ No newline at end of file
diff --git a/images/lib/refinery/images.rb b/images/lib/refinery/images.rb
index 6b3bb2fc22..8f89d89cb1 100644
--- a/images/lib/refinery/images.rb
+++ b/images/lib/refinery/images.rb
@@ -24,5 +24,5 @@ def factory_paths
end
ActiveSupport.on_load(:active_record) do
- require 'globalize'
+ require 'mobility'
end
diff --git a/images/refinerycms-images.gemspec b/images/refinerycms-images.gemspec
index 754579a0e1..12f22488eb 100644
--- a/images/refinerycms-images.gemspec
+++ b/images/refinerycms-images.gemspec
@@ -19,10 +19,8 @@ Gem::Specification.new do |s|
s.files = `git ls-files`.split("\n")
s.test_files = `git ls-files -- spec/*`.split("\n")
- s.add_dependency 'refinerycms-dragonfly', '~> 1.0'
- s.add_dependency 'globalize', ['>= 5.1.0.beta1', '< 5.2']
- s.add_dependency 'activemodel-serializers-xml', '~> 1.0', '>= 1.0.1'
- s.add_dependency 'refinerycms-core', version
+ s.add_dependency 'refinerycms-core', version
+ s.add_dependency 'refinerycms-dragonfly', '~> 1.0'
s.required_ruby_version = Refinery::Version.required_ruby_version
diff --git a/images/spec/support/shared_examples/image_translator.rb b/images/spec/support/shared_examples/image_translator.rb
index bf2a6df59a..8341544fd5 100644
--- a/images/spec/support/shared_examples/image_translator.rb
+++ b/images/spec/support/shared_examples/image_translator.rb
@@ -25,7 +25,7 @@
click_button "Save"
expect(page).to have_content("'Titre de la première image' was successfully updated.")
- expect(Refinery::Image.translation_class.count).to eq(1)
+ expect(Refinery::Image::Translation.count).to eq(1)
end
end
end
diff --git a/pages/app/controllers/refinery/admin/page_parts_controller.rb b/pages/app/controllers/refinery/admin/page_parts_controller.rb
index 69cf21a9d8..c8fbfef091 100644
--- a/pages/app/controllers/refinery/admin/page_parts_controller.rb
+++ b/pages/app/controllers/refinery/admin/page_parts_controller.rb
@@ -28,7 +28,7 @@ def new_page_part_params
private
def permitted_new_page_part_params
- [:title, :slug, :body, :locale]
+ [:title, :slug, :body]
end
end
end
diff --git a/pages/app/controllers/refinery/admin/pages_controller.rb b/pages/app/controllers/refinery/admin/pages_controller.rb
index 36fc71fe52..7951f1e3e8 100644
--- a/pages/app/controllers/refinery/admin/pages_controller.rb
+++ b/pages/app/controllers/refinery/admin/pages_controller.rb
@@ -67,14 +67,14 @@ def find_page
# We can safely assume ::Refinery::I18n is defined because this method only gets
# Invoked when the before_action from the plugin is run.
- def globalize!
+ def mobility!
return super unless action_name.to_s == 'index'
# Always display the tree of pages from the default frontend locale.
if Refinery::I18n.built_in_locales.keys.map(&:to_s).include?(params[:switch_locale])
- Globalize.locale = params[:switch_locale].try(:to_sym)
+ Mobility.locale = params[:switch_locale].try(:to_sym)
else
- Globalize.locale = Refinery::I18n.default_frontend_locale
+ Mobility.locale = Refinery::I18n.default_frontend_locale
end
end
diff --git a/pages/app/controllers/refinery/admin/pages_dialogs_controller.rb b/pages/app/controllers/refinery/admin/pages_dialogs_controller.rb
index 112c211732..7a13d5eb62 100644
--- a/pages/app/controllers/refinery/admin/pages_dialogs_controller.rb
+++ b/pages/app/controllers/refinery/admin/pages_dialogs_controller.rb
@@ -6,16 +6,16 @@ class PagesDialogsController < ::Refinery::Admin::DialogsController
def link_to
# Get the switch_local variable to determine the locale we're currently editing
- # Set up Globalize with our current locale
- Globalize.locale = if params[:switch_locale].present? && Refinery::I18n.built_in_locales.keys.map(&:to_s).include?(params[:switch_locale])
- Globalize.locale = params[:switch_locale]
+ # Set up Mobility with our current locale
+ Mobility.locale = if params[:switch_locale].present? && Refinery::I18n.built_in_locales.keys.map(&:to_s).include?(params[:switch_locale])
+ Mobility.locale = params[:switch_locale]
else
Refinery::I18n.default_locale
end
@pages = ::Refinery::Page.roots.paginate(:page => params[:page], :per_page => ::Refinery::Page.per_page(true))
- @pages = @pages.with_globalize
+ @pages = @pages.with_mobility
if ::Refinery::Plugins.registered.names.include?('refinery_files')
@resources = Resource.paginate(:page => params[:resource_page], :per_page => Resource.per_page(true)).
diff --git a/pages/app/models/refinery/page.rb b/pages/app/models/refinery/page.rb
index c70f898f81..29b64538b0 100644
--- a/pages/app/models/refinery/page.rb
+++ b/pages/app/models/refinery/page.rb
@@ -1,74 +1,62 @@
# Encoding: utf-8
require 'friendly_id'
+require 'friendly_id/mobility'
require 'refinery/core/base_model'
require 'refinery/pages/url'
require 'refinery/pages/finder'
module Refinery
class Page < Core::BaseModel
- extend FriendlyId
-
- translates :title, :menu_title, :custom_slug, :slug, :include => :seo_meta
-
- attribute :title
- attribute :menu_title
- attribute :custom_slug
- attribute :slug
+ extend Mobility
+ translates :title, :menu_title, :custom_slug, :slug, :browser_title, :meta_description
- after_save { translations.collect(&:save) }
+ after_save { translations.in_locale(Mobility.locale).seo_meta.save! }
class Translation
is_seo_meta
-
- def self.seo_fields
- ::SeoMeta.attributes.keys.map{ |a| [a, :"#{a}="]}.flatten
- end
end
+ has_many :parts, -> {
+ scope = ::Refinery::PagePart.respond_to?(:mobility) ? i18n.includes(:translations) : all
+ scope = scope.order('position ASC')
+ scope
+ }, :foreign_key => :refinery_page_id,
+ :class_name => '::Refinery::PagePart',
+ :inverse_of => :page,
+ :dependent => :destroy
+
+ accepts_nested_attributes_for :parts, :allow_destroy => true
+
+ # Docs for acts_as_nested_set https://github.com/collectiveidea/awesome_nested_set
+ # rather than :delete_all we want :destroy
+ acts_as_nested_set :dependent => :destroy
+
class FriendlyIdOptions
def self.options
# Docs for friendly_id https://github.com/norman/friendly_id
friendly_id_options = {
- use: [:reserved],
+ use: [:mobility, :reserved],
reserved_words: Refinery::Pages.friendly_id_reserved_words
}
if ::Refinery::Pages.scope_slug_by_parent
friendly_id_options[:use] << :scoped
friendly_id_options.merge!(scope: :parent)
end
- friendly_id_options[:use] << :globalize
+
friendly_id_options
end
end
+ extend FriendlyId
+ friendly_id :custom_slug_or_title, FriendlyIdOptions.options
+
# If title changes tell friendly_id to regenerate slug when saving record
def should_generate_new_friendly_id?
- changes.keys.include?("title") || changes.keys.include?("custom_slug")
+ title_changed? || custom_slug_changed?
end
- # Delegate SEO Attributes to globalize translation
- delegate(*(Translation.seo_fields << {:to => :translation}))
-
- validates :title, :presence => true
-
- validates :custom_slug, :uniqueness => true, :allow_blank => true
-
- # Docs for acts_as_nested_set https://github.com/collectiveidea/awesome_nested_set
- # rather than :delete_all we want :destroy
- acts_as_nested_set counter_cache: :children_count, dependent: :destroy, touch: true
-
- friendly_id :custom_slug_or_title, FriendlyIdOptions.options
-
- has_many :parts, -> {
- scope = order('position ASC')
- scope = scope.includes(:translations) if ::Refinery::PagePart.respond_to?(:translation_class)
- scope
- }, :foreign_key => :refinery_page_id,
- :class_name => '::Refinery::PagePart',
- :inverse_of => :page,
- :dependent => :destroy
-
- accepts_nested_attributes_for :parts, :allow_destroy => true
+ validates :title, presence: true
+ validates :custom_slug, uniqueness: true, allow_blank: true
before_destroy :deletable?
after_save :reposition_parts!
@@ -103,7 +91,7 @@ def find_by_path_or_id(path, id)
def find_by_path_or_id!(path, id)
page = find_by_path_or_id(path, id)
- raise ActiveRecord::RecordNotFound unless page
+ raise ::ActiveRecord::RecordNotFound unless page
page
end
@@ -129,7 +117,7 @@ def by_slug(slug, conditions = {})
# This works using a query against the translated content first and then
# using all of the page_ids we further filter against this model's table.
def in_menu
- where(:show_in_menu => true).with_globalize
+ where(show_in_menu: true).with_mobility
end
# An optimised scope containing only live pages ordered for display in a menu.
@@ -138,8 +126,8 @@ def fast_menu
end
# Wrap up the logic of finding the pages based on the translations table.
- def with_globalize(conditions = {})
- Pages::Finder.with_globalize(conditions)
+ def with_mobility(conditions = {})
+ Pages::Finder.with_mobility(conditions)
end
# Returns how many pages per page should there be when paginating pages
@@ -155,7 +143,7 @@ def rebuild!
protected
def nullify_duplicate_slugs_under_the_same_parent!
- t_slug = translation_class.arel_table[:slug]
+ t_slug = Translation.arel_table[:slug]
joins(:translations).group(:locale, :parent_id, t_slug).having(t_slug.count.gt(1)).count.
each do |(locale, parent_id, slug), count|
by_slug(slug, :locale => locale).where(:parent_id => parent_id).drop(1).each do |page|
@@ -167,20 +155,20 @@ def nullify_duplicate_slugs_under_the_same_parent!
end
def translated_to_default_locale?
- persisted? && translations.any?{ |t| t.locale == Refinery::I18n.default_frontend_locale}
+ persisted? && translations.any?{ |t| t.locale.to_sym == Refinery::I18n.default_frontend_locale}
end
# The canonical page for this particular page.
# Consists of:
# * The current locale's translated slug
def canonical
- Globalize.with_locale(::Refinery::I18n.current_frontend_locale) { url }
+ Mobility.with_locale(::Refinery::I18n.current_frontend_locale) { url }
end
# The canonical slug for this particular page.
# This is the slug for the current frontend locale.
def canonical_slug
- Globalize.with_locale(::Refinery::I18n.current_frontend_locale) { slug }
+ Mobility.with_locale(::Refinery::I18n.current_frontend_locale) { slug }
end
# Returns in cascading order: custom_slug or menu_title or title depending on
@@ -237,7 +225,7 @@ def url
end
def nested_url
- Globalize.with_locale(slug_locale) do
+ Mobility.with_locale(slug_locale) do
if ::Refinery::Pages.scope_slug_by_parent && !root?
self_and_ancestors.includes(:translations).map(&:to_param)
else
@@ -379,9 +367,9 @@ def puts_destroy_help
end
def slug_locale
- return Globalize.locale if translation_for(Globalize.locale, false).try(:slug).present?
+ return Mobility.locale if slug
- if translations.empty? || translation_for(Refinery::I18n.default_frontend_locale, false).try(:slug).present?
+ if translations.empty? || slug(locale: Refinery::I18n.default_frontend_locale)
Refinery::I18n.default_frontend_locale
else
translations.first.locale
diff --git a/pages/app/models/refinery/page_part.rb b/pages/app/models/refinery/page_part.rb
index 5294246d85..37dba13469 100644
--- a/pages/app/models/refinery/page_part.rb
+++ b/pages/app/models/refinery/page_part.rb
@@ -9,16 +9,15 @@ class PagePart < Refinery::Core::BaseModel
validates :slug, :presence => true, :uniqueness => {:scope => :refinery_page_id}
alias_attribute :content, :body
+ extend Mobility
translates :body
- attribute :body
-
def to_param
"page_part_#{slug.downcase.gsub(/\W/, '_')}"
end
def body=(value)
- write_attribute(:body, value)
+ super
normalise_text_fields
end
@@ -33,8 +32,8 @@ def slug_matches?(other_slug)
protected
def normalise_text_fields
- if read_attribute(:body).present? && read_attribute(:body) !~ %r{^<}
- write_attribute(:body, "
#{read_attribute(:body).gsub("\r\n\r\n", "
").gsub("\r\n", "
")}
")
+ if body? && body !~ %r{^<}
+ self.body = "
#{body.gsub("\r\n\r\n", "
").gsub("\r\n", "
")}
"
end
end
diff --git a/pages/app/views/refinery/admin/pages/_form.html.erb b/pages/app/views/refinery/admin/pages/_form.html.erb
index 8076e12653..ca2562046c 100644
--- a/pages/app/views/refinery/admin/pages/_form.html.erb
+++ b/pages/app/views/refinery/admin/pages/_form.html.erb
@@ -3,7 +3,7 @@
<%= render '/refinery/admin/error_messages', :object => @page, :include_object_name => true %>
- <%= render '/refinery/admin/locale_picker', :current_locale => Globalize.locale %>
+ <%= render '/refinery/admin/locale_picker', :current_locale => Mobility.locale %>
<%= f.label :title %>
diff --git a/pages/app/views/refinery/admin/pages_dialogs/_page_link.html.erb b/pages/app/views/refinery/admin/pages_dialogs/_page_link.html.erb
index 37381370d4..e6362b9b8d 100644
--- a/pages/app/views/refinery/admin/pages_dialogs/_page_link.html.erb
+++ b/pages/app/views/refinery/admin/pages_dialogs/_page_link.html.erb
@@ -1,6 +1,6 @@
<%
link_args = defined?(link_to_arguments) ? link_to_arguments : {}
- page_link_url = Globalize.with_locale(params[:switch_locale]) { refinery.url_for(page_link.url) }
+ page_link_url = Mobility.with_locale(params[:switch_locale]) { refinery.url_for(page_link.url) }
# current_link is relative so check against the relative url portion before conditionally making it absolute
linked = params[:current_link].present? && page_link_url == params[:current_link]
page_link_url = "#{[request.protocol, request.host_with_port].join}#{page_link_url}" if Refinery::Pages.absolute_page_links
diff --git a/pages/db/migrate/20100913234708_create_refinerycms_pages_schema.rb b/pages/db/migrate/20100913234708_create_refinerycms_pages_schema.rb
index 0bdd262a0b..8ba729f153 100644
--- a/pages/db/migrate/20100913234708_create_refinerycms_pages_schema.rb
+++ b/pages/db/migrate/20100913234708_create_refinerycms_pages_schema.rb
@@ -1,5 +1,5 @@
class CreateRefinerycmsPagesSchema < ActiveRecord::Migration[4.2]
- def up
+ def change
create_table :refinery_page_parts do |t|
t.integer :refinery_page_id
t.string :title
@@ -38,38 +38,35 @@ def up
add_index :refinery_pages, :parent_id
add_index :refinery_pages, :rgt
- begin
- ::Refinery::PagePart.create_translation_table!({
- :body => :text
- })
- rescue NameError
- warn "Refinery::PagePart was not defined!"
- end
+ create_table :refinery_page_part_translations do |t|
- begin
- ::Refinery::Page.create_translation_table!({
- :title => :string,
- :custom_slug => :string,
- :menu_title => :string,
- :slug => :string
- })
- rescue NameError
- warn "Refinery::Page was not defined!"
- end
- end
+ # Translated attribute(s)
+ t.text :body
- def down
- drop_table :refinery_page_parts
- drop_table :refinery_pages
- begin
- ::Refinery::PagePart.drop_translation_table!
- rescue NameError
- warn "Refinery::PagePart was not defined!"
+ t.string :locale, null: false
+ t.integer :refinery_page_part_id, null: false
+
+ t.timestamps null: false
end
- begin
- ::Refinery::Page.drop_translation_table! if defined?(::Refinery::Page)
- rescue NameError
- warn "Refinery::Page was not defined!"
+
+ add_index :refinery_page_part_translations, :locale, name: :index_refinery_page_part_translations_on_locale
+ add_index :refinery_page_part_translations, [:refinery_page_part_id, :locale], name: :index_93b7363baf444ecab114aab0bbdedc79d0ec4f4b, unique: true
+
+ create_table :refinery_page_translations do |t|
+
+ # Translated attribute(s)
+ t.string :title
+ t.string :custom_slug
+ t.string :menu_title
+ t.string :slug
+
+ t.string :locale, null: false
+ t.integer :refinery_page_id, null: false
+
+ t.timestamps null: false
end
+
+ add_index :refinery_page_translations, :locale, name: :index_refinery_page_translations_on_locale
+ add_index :refinery_page_translations, [:refinery_page_id, :locale], name: :index_refinery_page_t10s_on_refinery_page_id_and_locale, unique: true
end
end
diff --git a/pages/lib/refinery/pages.rb b/pages/lib/refinery/pages.rb
index 210228ffed..4a1f24f853 100644
--- a/pages/lib/refinery/pages.rb
+++ b/pages/lib/refinery/pages.rb
@@ -1,5 +1,5 @@
require 'refinerycms-core'
-require 'globalize'
+require 'mobility'
module Refinery
autoload :PagesGenerator, 'generators/refinery/pages/pages_generator'
diff --git a/pages/lib/refinery/pages/finder.rb b/pages/lib/refinery/pages/finder.rb
index ec4085d284..fa030d7d96 100644
--- a/pages/lib/refinery/pages/finder.rb
+++ b/pages/lib/refinery/pages/finder.rb
@@ -17,7 +17,7 @@ def self.by_slug(slug, conditions = {})
FinderBySlug.new(slug, conditions).find
end
- def self.with_globalize(conditions = {})
+ def self.with_mobility(conditions = {})
Finder.new(conditions).find
end
@@ -26,15 +26,15 @@ def initialize(conditions)
end
def find
- with_globalize
+ with_mobility
end
- def with_globalize
- globalized_conditions = {:locale => ::Globalize.locale.to_s}.merge(conditions)
- translations_conditions = translations_conditions(globalized_conditions)
+ def with_mobility
+ mobility_conditions = {:locale => ::Mobility.locale.to_s}.merge(conditions)
+ translations_conditions = translations_conditions(mobility_conditions)
# A join implies readonly which we don't really want.
- Page.where(globalized_conditions).
+ Page.i18n.where(mobility_conditions).
joins(:translations).
where(translations_conditions).
readonly(false)
@@ -51,7 +51,7 @@ def translations_conditions(original_conditions)
translations_conditions = {}
original_conditions.keys.each do |key|
if translated_attributes.include? key.to_s
- translations_conditions["#{Page.translation_class.table_name}.#{key}"] = original_conditions.delete(key)
+ translations_conditions["#{Page::Translation.table_name}.#{key}"] = original_conditions.delete(key)
end
end
translations_conditions
diff --git a/pages/refinerycms-pages.gemspec b/pages/refinerycms-pages.gemspec
index 1c5bcada09..13bfcb61eb 100644
--- a/pages/refinerycms-pages.gemspec
+++ b/pages/refinerycms-pages.gemspec
@@ -19,13 +19,12 @@ Gem::Specification.new do |s|
s.files = `git ls-files`.split("\n")
s.test_files = `git ls-files -- spec/*`.split("\n")
+ s.add_dependency 'refinerycms-core', version
s.add_dependency 'friendly_id', ['>= 5.1.0', '< 5.3']
- s.add_dependency 'globalize', ['>= 5.1.0.beta1', '< 5.2']
- s.add_dependency 'activemodel-serializers-xml', '~> 1.0', '>= 1.0.1'
+ s.add_dependency 'friendly_id-mobility', '~> 0.5'
s.add_dependency 'awesome_nested_set', '~> 3.1', '>= 3.1.0'
s.add_dependency 'seo_meta', '~> 3.0', '>= 3.0.0'
- s.add_dependency 'refinerycms-core', version
- s.add_dependency 'babosa', '!= 0.3.6'
+ s.add_dependency 'babosa', '~> 1.0'
s.add_dependency 'speakingurl-rails', '~> 8.0', '>= 8.0.0'
s.add_dependency 'diffy', '~> 3.1', '>= 3.1.0'
diff --git a/pages/spec/features/refinery/admin/pages_spec.rb b/pages/spec/features/refinery/admin/pages_spec.rb
index 724b189b77..ae65e02747 100644
--- a/pages/spec/features/refinery/admin/pages_spec.rb
+++ b/pages/spec/features/refinery/admin/pages_spec.rb
@@ -451,13 +451,13 @@ module Admin
allow(Refinery::I18n).to receive(:frontend_locales).and_return([:en, :ru])
# Create a home page in both locales (needed to test menus)
- home_page = Globalize.with_locale(:en) do
+ home_page = Mobility.with_locale(:en) do
Page.create :title => 'Home',
:link_url => '/',
:menu_match => "^/$"
end
- Globalize.with_locale(:ru) do
+ Mobility.with_locale(:ru) do
home_page.title = 'Домашняя страница'
home_page.save
end
@@ -520,10 +520,10 @@ module Admin
let!(:news_page) do
allow(Refinery::I18n).to receive(:frontend_locales).and_return([:en, :ru])
- _page = Globalize.with_locale(:en) {
+ _page = Mobility.with_locale(:en) {
Page.create :title => en_page_title
}
- Globalize.with_locale(:ru) do
+ Mobility.with_locale(:ru) do
_page.title = ru_page_title
_page.save
end
@@ -599,7 +599,7 @@ module Admin
describe "add a page with title only for secondary locale", js:true do
let(:ru_page) {
- Globalize.with_locale(:ru) {
+ Mobility.with_locale(:ru) {
Page.create :title => ru_page_title
}
}
@@ -670,7 +670,7 @@ module Admin
it 'succeeds' do
ru_page.destroy!
parent_page = Page.create(:title => "Parent page")
- sub_page = Globalize.with_locale(:ru) {
+ sub_page = Mobility.with_locale(:ru) {
Page.create :title => ru_page_title, :parent_id => parent_page.id
}
expect(sub_page.parent).to eq(parent_page)
@@ -807,7 +807,7 @@ module Admin
end
describe "TranslatePages", :type => :feature do
- before { Globalize.locale = :en }
+ before { Mobility.locale = :en }
refinery_login
describe "a page with a single locale" do
@@ -833,11 +833,11 @@ module Admin
allow(Refinery::I18n).to receive(:frontend_locales).and_return [:en, :ru]
# Create a page in both locales
- about_page = Globalize.with_locale(:en) do
+ about_page = Mobility.with_locale(:en) do
Page.create :title => 'About'
end
- Globalize.with_locale(:ru) do
+ Mobility.with_locale(:ru) do
about_page.title = 'About Ru'
about_page.save
end
diff --git a/pages/spec/features/refinery/pages_spec.rb b/pages/spec/features/refinery/pages_spec.rb
index e628c54da6..60303ebc18 100644
--- a/pages/spec/features/refinery/pages_spec.rb
+++ b/pages/spec/features/refinery/pages_spec.rb
@@ -8,7 +8,7 @@ module Refinery
let(:draft_page) { Page.create :title => 'Draft', :draft => true }
before do
# Stub the menu pages we're expecting
- ::I18n.default_locale = Globalize.locale = :en
+ ::I18n.default_locale = Mobility.locale = :en
allow(Page).to receive(:fast_menu).and_return([home_page, about_page])
end
@@ -370,8 +370,8 @@ def standard_page_menu_items_exist?
let(:ru_page_title) { 'Новости' }
let(:ru_page_slug_encoded) { '%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8' }
let!(:news_page) do
- @page = Globalize.with_locale(:en) { Page.create title: en_page_title }
- Globalize.with_locale(:ru) do
+ @page = Mobility.with_locale(:en) { Page.create title: en_page_title }
+ Mobility.with_locale(:ru) do
@page.title = ru_page_title
@page.save
end
@@ -425,12 +425,12 @@ def standard_page_menu_items_exist?
let(:nested_page_slug) { 'nested_page' }
let!(:nested_page) do
- Globalize.fallbacks = [:ru]
- _page = Globalize.with_locale(:en) {
+ ::I18n.fallbacks[:ru]
+ _page = Mobility.with_locale(:en) {
news_page.children.create :title => nested_page_title
}
- Globalize.with_locale(:ru) do
+ Mobility.with_locale(:ru) do
_page.title = nested_page_title
_page.save
end
diff --git a/pages/spec/models/refinery/page_menu_spec.rb b/pages/spec/models/refinery/page_menu_spec.rb
index 3621d3a732..e1f917465f 100644
--- a/pages/spec/models/refinery/page_menu_spec.rb
+++ b/pages/spec/models/refinery/page_menu_spec.rb
@@ -42,7 +42,7 @@ module Refinery
context "with #menu_title" do
before do
- page[:menu_title] = "Menu Title"
+ page.menu_title = "Menu Title"
end
it_should_behave_like "Refinery menu item hash"
@@ -54,7 +54,7 @@ module Refinery
context "with #title" do
before do
- page[:title] = "Title"
+ page.title = "Title"
end
it_should_behave_like "Refinery menu item hash"
diff --git a/pages/spec/models/refinery/page_url_spec.rb b/pages/spec/models/refinery/page_url_spec.rb
index 0b770e9c24..b712b18edc 100644
--- a/pages/spec/models/refinery/page_url_spec.rb
+++ b/pages/spec/models/refinery/page_url_spec.rb
@@ -105,7 +105,7 @@ def turn_off_custom_slugs
describe '#canonical' do
let!(:default_canonical) {
- Globalize.with_locale(Refinery::I18n.default_frontend_locale) {
+ Mobility.with_locale(Refinery::I18n.default_frontend_locale) {
page.canonical
}
}
@@ -121,7 +121,7 @@ def turn_off_custom_slugs
specify "translated page returns its pages's canonical" do
allow(Refinery::I18n).to receive(:current_frontend_locale).and_return(:ru)
- Globalize.with_locale(:ru) do
+ Mobility.with_locale(:ru) do
page.title = ru_page_title
page.save
@@ -133,7 +133,7 @@ def turn_off_custom_slugs
describe '#canonical_slug' do
let!(:default_canonical_slug) {
- Globalize.with_locale(Refinery::I18n.default_frontend_locale) {
+ Mobility.with_locale(Refinery::I18n.default_frontend_locale) {
page.canonical_slug
}
}
@@ -148,7 +148,7 @@ def turn_off_custom_slugs
specify "translated page returns its page's canonical slug'" do
allow(Refinery::I18n).to receive(:current_frontend_locale).and_return(:ru)
- Globalize.with_locale(:ru) do
+ Mobility.with_locale(:ru) do
page.title = ru_page_title
page.save
diff --git a/resources/app/models/refinery/resource.rb b/resources/app/models/refinery/resource.rb
index 97b893bf3f..05defeaf8e 100644
--- a/resources/app/models/refinery/resource.rb
+++ b/resources/app/models/refinery/resource.rb
@@ -4,10 +4,9 @@ module Refinery
class Resource < Refinery::Core::BaseModel
include Resources::Validators
+ extend Mobility
translates :resource_title
- attribute :resource_title
-
dragonfly_accessor :file, :app => :refinery_resources
validates :file, :presence => true
diff --git a/resources/app/views/refinery/admin/resources/_form.html.erb b/resources/app/views/refinery/admin/resources/_form.html.erb
index 50adcecbce..806d634727 100644
--- a/resources/app/views/refinery/admin/resources/_form.html.erb
+++ b/resources/app/views/refinery/admin/resources/_form.html.erb
@@ -6,7 +6,7 @@
:object => @resource,
:include_object_name => false %>
- <%= render '/refinery/admin/locale_picker', :current_locale => Globalize.locale if @resource.persisted? %>
+ <%= render '/refinery/admin/locale_picker', :current_locale => Mobility.locale if @resource.persisted? %>
diff --git a/resources/db/migrate/20150430180959_add_translated_title_to_refinery_resources.rb b/resources/db/migrate/20150430180959_add_translated_title_to_refinery_resources.rb
index 532374b2d8..600c7a3ad9 100644
--- a/resources/db/migrate/20150430180959_add_translated_title_to_refinery_resources.rb
+++ b/resources/db/migrate/20150430180959_add_translated_title_to_refinery_resources.rb
@@ -1,11 +1,17 @@
class AddTranslatedTitleToRefineryResources < ActiveRecord::Migration[4.2]
- def self.up
- Refinery::Resource.create_translation_table!({
- resource_title: :string
- })
- end
+ def change
+ create_table :refinery_resource_translations do |t|
+
+ # Translated attribute(s)
+ t.string :resource_title
+
+ t.string :locale, null: false
+ t.integer :refinery_resource_id, null: false
+
+ t.timestamps null: false
+ end
- def self.down
- Refinery::Resource.drop_translation_table!
+ add_index :refinery_resource_translations, :locale, name: :index_refinery_resource_translations_on_locale
+ add_index :refinery_resource_translations, [:refinery_resource_id, :locale], name: :index_35a57b749803d8437ea64c64da3fb2cb0fbf457a, unique: true
end
end
\ No newline at end of file
diff --git a/resources/lib/refinery/resources.rb b/resources/lib/refinery/resources.rb
index ed786ffbc1..200c1f8399 100644
--- a/resources/lib/refinery/resources.rb
+++ b/resources/lib/refinery/resources.rb
@@ -24,5 +24,5 @@ def factory_paths
end
ActiveSupport.on_load(:active_record) do
- require 'globalize'
+ require 'mobility'
end
diff --git a/resources/refinerycms-resources.gemspec b/resources/refinerycms-resources.gemspec
index 1640ae02fd..ebd7b22ea7 100644
--- a/resources/refinerycms-resources.gemspec
+++ b/resources/refinerycms-resources.gemspec
@@ -19,12 +19,8 @@ Gem::Specification.new do |s|
s.files = `git ls-files`.split("\n")
s.test_files = `git ls-files -- spec/*`.split("\n")
- s.add_dependency 'acts_as_indexed', '~> 0.8.0'
- s.add_dependency 'dragonfly', '~> 1.1', '>= 1.1.0'
- s.add_dependency 'globalize', ['>= 5.1.0.beta1', '< 5.2']
- s.add_dependency 'activemodel-serializers-xml', '~> 1.0', '>= 1.0.1'
- s.add_dependency 'refinerycms-core', version
- s.add_dependency 'refinerycms-dragonfly', '~> 1.0'
+ s.add_dependency 'refinerycms-core', version
+ s.add_dependency 'refinerycms-dragonfly', '~> 1.0'
s.required_ruby_version = Refinery::Version.required_ruby_version
diff --git a/resources/spec/features/refinery/admin/resources_spec.rb b/resources/spec/features/refinery/admin/resources_spec.rb
index b28f92ebab..1be532ca88 100644
--- a/resources/spec/features/refinery/admin/resources_spec.rb
+++ b/resources/spec/features/refinery/admin/resources_spec.rb
@@ -113,7 +113,7 @@ module Admin
click_button "Save"
expect(page).to have_content("'Premier fichier' was successfully updated.")
- expect(Resource.translation_class.count).to eq(1)
+ expect(Resource::Translation.count).to eq(1)
end
end
end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 5fbe47b97a..94027a612d 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -40,7 +40,7 @@
config.infer_spec_type_from_file_location!
config.before(:each) do
- ::I18n.default_locale = I18n.locale = Globalize.locale = :en
+ ::I18n.default_locale = I18n.locale = Mobility.locale = :en
end
unless ENV['FULL_BACKTRACE']