radiant-globalize2-extension 0.2.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/Rakefile +136 -0
- data/app/views/admin/shared/_change_locale.html.haml +22 -0
- data/app/views/admin/shared/_change_locale_admin.html.haml +7 -0
- data/app/views/admin/shared/_globalize_td.html.haml +4 -0
- data/app/views/admin/shared/_globalize_th.html.haml +2 -0
- data/config/routes.rb +4 -0
- data/cucumber.yml +1 -0
- data/db/migrate/20090728084238_create_translation_tables.rb +23 -0
- data/db/migrate/20090728114627_populate_translations.rb +21 -0
- data/db/migrate/20090729085422_remove_translated_attributes.rb +16 -0
- data/features/globalize_layouts.feature +19 -0
- data/features/globalize_pages.feature +58 -0
- data/features/globalize_snippets.feature +19 -0
- data/features/step_definitions/admin_steps.rb +58 -0
- data/features/step_definitions/webrat_steps.rb +119 -0
- data/features/support/env.rb +30 -0
- data/features/support/paths.rb +26 -0
- data/globalize2_extension.rb +93 -0
- data/lib/globalize2/compatibility/archive/archive_page_extensions.rb +21 -0
- data/lib/globalize2/compatibility/copy_move/copy_move_model_extensions.rb +22 -0
- data/lib/globalize2/compatibility/paginate/globalize_tags.rb +19 -0
- data/lib/globalize2/compatibility/paginate/page_extensions.rb +9 -0
- data/lib/globalize2/compatibility/vhost/page_extensions.rb +9 -0
- data/lib/globalize2/form_builder_extensions.rb +21 -0
- data/lib/globalize2/globalize_tags.rb +203 -0
- data/lib/globalize2/globalized_fields_controller_extension.rb +22 -0
- data/lib/globalize2/page_extensions.rb +88 -0
- data/lib/globalize2/page_part_extensions.rb +21 -0
- data/lib/globalize2/pages_controller_extensions.rb +9 -0
- data/lib/globalize2/site_controller_extensions.rb +24 -0
- data/lib/tasks/globalize2_extension_tasks.rake +28 -0
- data/public/images/admin/ad.gif +0 -0
- data/public/images/admin/ae.gif +0 -0
- data/public/images/admin/af.gif +0 -0
- data/public/images/admin/ag.gif +0 -0
- data/public/images/admin/ai.gif +0 -0
- data/public/images/admin/al.gif +0 -0
- data/public/images/admin/am.gif +0 -0
- data/public/images/admin/an.gif +0 -0
- data/public/images/admin/ao.gif +0 -0
- data/public/images/admin/ar.gif +0 -0
- data/public/images/admin/as.gif +0 -0
- data/public/images/admin/at.gif +0 -0
- data/public/images/admin/au.gif +0 -0
- data/public/images/admin/aw.gif +0 -0
- data/public/images/admin/ax.gif +0 -0
- data/public/images/admin/az.gif +0 -0
- data/public/images/admin/ba.gif +0 -0
- data/public/images/admin/bb.gif +0 -0
- data/public/images/admin/bd.gif +0 -0
- data/public/images/admin/be.gif +0 -0
- data/public/images/admin/bf.gif +0 -0
- data/public/images/admin/bg.gif +0 -0
- data/public/images/admin/bh.gif +0 -0
- data/public/images/admin/bi.gif +0 -0
- data/public/images/admin/bj.gif +0 -0
- data/public/images/admin/bm.gif +0 -0
- data/public/images/admin/bn.gif +0 -0
- data/public/images/admin/bo.gif +0 -0
- data/public/images/admin/br.gif +0 -0
- data/public/images/admin/bs.gif +0 -0
- data/public/images/admin/bt.gif +0 -0
- data/public/images/admin/bv.gif +0 -0
- data/public/images/admin/bw.gif +0 -0
- data/public/images/admin/by.gif +0 -0
- data/public/images/admin/bz.gif +0 -0
- data/public/images/admin/ca.gif +0 -0
- data/public/images/admin/catalonia.gif +0 -0
- data/public/images/admin/cc.gif +0 -0
- data/public/images/admin/cd.gif +0 -0
- data/public/images/admin/cf.gif +0 -0
- data/public/images/admin/cg.gif +0 -0
- data/public/images/admin/ch.gif +0 -0
- data/public/images/admin/ci.gif +0 -0
- data/public/images/admin/ck.gif +0 -0
- data/public/images/admin/cl.gif +0 -0
- data/public/images/admin/cm.gif +0 -0
- data/public/images/admin/cn.gif +0 -0
- data/public/images/admin/co.gif +0 -0
- data/public/images/admin/cr.gif +0 -0
- data/public/images/admin/cs.gif +0 -0
- data/public/images/admin/cu.gif +0 -0
- data/public/images/admin/cv.gif +0 -0
- data/public/images/admin/cx.gif +0 -0
- data/public/images/admin/cy.gif +0 -0
- data/public/images/admin/cz.gif +0 -0
- data/public/images/admin/de.gif +0 -0
- data/public/images/admin/dj.gif +0 -0
- data/public/images/admin/dk.gif +0 -0
- data/public/images/admin/dm.gif +0 -0
- data/public/images/admin/do.gif +0 -0
- data/public/images/admin/dz.gif +0 -0
- data/public/images/admin/ec.gif +0 -0
- data/public/images/admin/ee.gif +0 -0
- data/public/images/admin/eg.gif +0 -0
- data/public/images/admin/eh.gif +0 -0
- data/public/images/admin/en.gif +0 -0
- data/public/images/admin/england.gif +0 -0
- data/public/images/admin/er.gif +0 -0
- data/public/images/admin/es.gif +0 -0
- data/public/images/admin/et.gif +0 -0
- data/public/images/admin/europeanunion.gif +0 -0
- data/public/images/admin/fam.gif +0 -0
- data/public/images/admin/fi.gif +0 -0
- data/public/images/admin/fj.gif +0 -0
- data/public/images/admin/fk.gif +0 -0
- data/public/images/admin/fm.gif +0 -0
- data/public/images/admin/fo.gif +0 -0
- data/public/images/admin/fr.gif +0 -0
- data/public/images/admin/ga.gif +0 -0
- data/public/images/admin/gb.gif +0 -0
- data/public/images/admin/gd.gif +0 -0
- data/public/images/admin/ge.gif +0 -0
- data/public/images/admin/gf.gif +0 -0
- data/public/images/admin/gh.gif +0 -0
- data/public/images/admin/gi.gif +0 -0
- data/public/images/admin/gl.gif +0 -0
- data/public/images/admin/gm.gif +0 -0
- data/public/images/admin/gn.gif +0 -0
- data/public/images/admin/gp.gif +0 -0
- data/public/images/admin/gq.gif +0 -0
- data/public/images/admin/gr.gif +0 -0
- data/public/images/admin/gs.gif +0 -0
- data/public/images/admin/gt.gif +0 -0
- data/public/images/admin/gu.gif +0 -0
- data/public/images/admin/gw.gif +0 -0
- data/public/images/admin/gy.gif +0 -0
- data/public/images/admin/hk.gif +0 -0
- data/public/images/admin/hm.gif +0 -0
- data/public/images/admin/hn.gif +0 -0
- data/public/images/admin/hr.gif +0 -0
- data/public/images/admin/ht.gif +0 -0
- data/public/images/admin/hu.gif +0 -0
- data/public/images/admin/id.gif +0 -0
- data/public/images/admin/ie.gif +0 -0
- data/public/images/admin/il.gif +0 -0
- data/public/images/admin/in.gif +0 -0
- data/public/images/admin/io.gif +0 -0
- data/public/images/admin/iq.gif +0 -0
- data/public/images/admin/ir.gif +0 -0
- data/public/images/admin/is.gif +0 -0
- data/public/images/admin/it.gif +0 -0
- data/public/images/admin/jm.gif +0 -0
- data/public/images/admin/jo.gif +0 -0
- data/public/images/admin/jp.gif +0 -0
- data/public/images/admin/ke.gif +0 -0
- data/public/images/admin/kg.gif +0 -0
- data/public/images/admin/kh.gif +0 -0
- data/public/images/admin/ki.gif +0 -0
- data/public/images/admin/km.gif +0 -0
- data/public/images/admin/kn.gif +0 -0
- data/public/images/admin/kp.gif +0 -0
- data/public/images/admin/kr.gif +0 -0
- data/public/images/admin/kw.gif +0 -0
- data/public/images/admin/ky.gif +0 -0
- data/public/images/admin/kz.gif +0 -0
- data/public/images/admin/la.gif +0 -0
- data/public/images/admin/lb.gif +0 -0
- data/public/images/admin/lc.gif +0 -0
- data/public/images/admin/li.gif +0 -0
- data/public/images/admin/lk.gif +0 -0
- data/public/images/admin/lr.gif +0 -0
- data/public/images/admin/ls.gif +0 -0
- data/public/images/admin/lt.gif +0 -0
- data/public/images/admin/lu.gif +0 -0
- data/public/images/admin/lv.gif +0 -0
- data/public/images/admin/ly.gif +0 -0
- data/public/images/admin/ma.gif +0 -0
- data/public/images/admin/mc.gif +0 -0
- data/public/images/admin/md.gif +0 -0
- data/public/images/admin/me.gif +0 -0
- data/public/images/admin/mg.gif +0 -0
- data/public/images/admin/mh.gif +0 -0
- data/public/images/admin/mk.gif +0 -0
- data/public/images/admin/ml.gif +0 -0
- data/public/images/admin/mm.gif +0 -0
- data/public/images/admin/mn.gif +0 -0
- data/public/images/admin/mo.gif +0 -0
- data/public/images/admin/mp.gif +0 -0
- data/public/images/admin/mq.gif +0 -0
- data/public/images/admin/mr.gif +0 -0
- data/public/images/admin/ms.gif +0 -0
- data/public/images/admin/mt.gif +0 -0
- data/public/images/admin/mu.gif +0 -0
- data/public/images/admin/mv.gif +0 -0
- data/public/images/admin/mw.gif +0 -0
- data/public/images/admin/mx.gif +0 -0
- data/public/images/admin/my.gif +0 -0
- data/public/images/admin/mz.gif +0 -0
- data/public/images/admin/na.gif +0 -0
- data/public/images/admin/nc.gif +0 -0
- data/public/images/admin/ne.gif +0 -0
- data/public/images/admin/nf.gif +0 -0
- data/public/images/admin/ng.gif +0 -0
- data/public/images/admin/ni.gif +0 -0
- data/public/images/admin/nl.gif +0 -0
- data/public/images/admin/no.gif +0 -0
- data/public/images/admin/np.gif +0 -0
- data/public/images/admin/nr.gif +0 -0
- data/public/images/admin/nu.gif +0 -0
- data/public/images/admin/nz.gif +0 -0
- data/public/images/admin/om.gif +0 -0
- data/public/images/admin/pa.gif +0 -0
- data/public/images/admin/pe.gif +0 -0
- data/public/images/admin/pf.gif +0 -0
- data/public/images/admin/pg.gif +0 -0
- data/public/images/admin/ph.gif +0 -0
- data/public/images/admin/pk.gif +0 -0
- data/public/images/admin/pl.gif +0 -0
- data/public/images/admin/pm.gif +0 -0
- data/public/images/admin/pn.gif +0 -0
- data/public/images/admin/pr.gif +0 -0
- data/public/images/admin/ps.gif +0 -0
- data/public/images/admin/pt.gif +0 -0
- data/public/images/admin/pw.gif +0 -0
- data/public/images/admin/py.gif +0 -0
- data/public/images/admin/qa.gif +0 -0
- data/public/images/admin/re.gif +0 -0
- data/public/images/admin/ro.gif +0 -0
- data/public/images/admin/rs.gif +0 -0
- data/public/images/admin/ru.gif +0 -0
- data/public/images/admin/rw.gif +0 -0
- data/public/images/admin/sa.gif +0 -0
- data/public/images/admin/sb.gif +0 -0
- data/public/images/admin/sc.gif +0 -0
- data/public/images/admin/scotland.gif +0 -0
- data/public/images/admin/sd.gif +0 -0
- data/public/images/admin/se.gif +0 -0
- data/public/images/admin/sg.gif +0 -0
- data/public/images/admin/sh.gif +0 -0
- data/public/images/admin/si.gif +0 -0
- data/public/images/admin/sj.gif +0 -0
- data/public/images/admin/sk.gif +0 -0
- data/public/images/admin/sl.gif +0 -0
- data/public/images/admin/sm.gif +0 -0
- data/public/images/admin/sn.gif +0 -0
- data/public/images/admin/so.gif +0 -0
- data/public/images/admin/sr.gif +0 -0
- data/public/images/admin/st.gif +0 -0
- data/public/images/admin/sv.gif +0 -0
- data/public/images/admin/sy.gif +0 -0
- data/public/images/admin/sz.gif +0 -0
- data/public/images/admin/tc.gif +0 -0
- data/public/images/admin/td.gif +0 -0
- data/public/images/admin/tf.gif +0 -0
- data/public/images/admin/tg.gif +0 -0
- data/public/images/admin/th.gif +0 -0
- data/public/images/admin/tj.gif +0 -0
- data/public/images/admin/tk.gif +0 -0
- data/public/images/admin/tl.gif +0 -0
- data/public/images/admin/tm.gif +0 -0
- data/public/images/admin/tn.gif +0 -0
- data/public/images/admin/to.gif +0 -0
- data/public/images/admin/tr.gif +0 -0
- data/public/images/admin/tt.gif +0 -0
- data/public/images/admin/tv.gif +0 -0
- data/public/images/admin/tw.gif +0 -0
- data/public/images/admin/tz.gif +0 -0
- data/public/images/admin/ua.gif +0 -0
- data/public/images/admin/ug.gif +0 -0
- data/public/images/admin/um.gif +0 -0
- data/public/images/admin/us.gif +0 -0
- data/public/images/admin/uy.gif +0 -0
- data/public/images/admin/uz.gif +0 -0
- data/public/images/admin/va.gif +0 -0
- data/public/images/admin/vc.gif +0 -0
- data/public/images/admin/ve.gif +0 -0
- data/public/images/admin/vg.gif +0 -0
- data/public/images/admin/vi.gif +0 -0
- data/public/images/admin/vn.gif +0 -0
- data/public/images/admin/vu.gif +0 -0
- data/public/images/admin/wales.gif +0 -0
- data/public/images/admin/wf.gif +0 -0
- data/public/images/admin/ws.gif +0 -0
- data/public/images/admin/ye.gif +0 -0
- data/public/images/admin/yt.gif +0 -0
- data/public/images/admin/za.gif +0 -0
- data/public/images/admin/zm.gif +0 -0
- data/public/images/admin/zw.gif +0 -0
- data/public/stylesheets/sass/admin/globalize2.sass +59 -0
- data/readme.md +159 -0
- data/spec/controllers/admin/pages_controller_spec.rb +22 -0
- data/spec/controllers/site_controller_spec.rb +40 -0
- data/spec/factories.rb +39 -0
- data/spec/models/globalize_tags_spec.rb +155 -0
- data/spec/models/page_spec.rb +91 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +34 -0
- data/vendor/plugins/globalize2/.gitignore +5 -0
- data/vendor/plugins/globalize2/LICENSE +21 -0
- data/vendor/plugins/globalize2/README.textile +86 -0
- data/vendor/plugins/globalize2/Rakefile +39 -0
- data/vendor/plugins/globalize2/VERSION +1 -0
- data/vendor/plugins/globalize2/generators/db_backend.rb +0 -0
- data/vendor/plugins/globalize2/generators/templates/db_backend_migration.rb +25 -0
- data/vendor/plugins/globalize2/globalize2.gemspec +81 -0
- data/vendor/plugins/globalize2/init.rb +1 -0
- data/vendor/plugins/globalize2/lib/globalize.rb +15 -0
- data/vendor/plugins/globalize2/lib/globalize/active_record.rb +215 -0
- data/vendor/plugins/globalize2/lib/globalize/active_record/adapter.rb +80 -0
- data/vendor/plugins/globalize2/lib/globalize/active_record/attributes.rb +25 -0
- data/vendor/plugins/globalize2/lib/globalize/active_record/migration.rb +44 -0
- data/vendor/plugins/globalize2/lib/i18n/missing_translations_log_handler.rb +41 -0
- data/vendor/plugins/globalize2/lib/i18n/missing_translations_raise_handler.rb +25 -0
- data/vendor/plugins/globalize2/test/active_record/fallbacks_test.rb +102 -0
- data/vendor/plugins/globalize2/test/active_record/migration_test.rb +118 -0
- data/vendor/plugins/globalize2/test/active_record/sti_translated_test.rb +61 -0
- data/vendor/plugins/globalize2/test/active_record/translates_test.rb +96 -0
- data/vendor/plugins/globalize2/test/active_record/translation_class_test.rb +30 -0
- data/vendor/plugins/globalize2/test/active_record/validation_tests.rb +75 -0
- data/vendor/plugins/globalize2/test/active_record_test.rb +467 -0
- data/vendor/plugins/globalize2/test/all.rb +2 -0
- data/vendor/plugins/globalize2/test/data/models.rb +62 -0
- data/vendor/plugins/globalize2/test/data/no_globalize_schema.rb +11 -0
- data/vendor/plugins/globalize2/test/data/schema.rb +55 -0
- data/vendor/plugins/globalize2/test/i18n/missing_translations_test.rb +36 -0
- data/vendor/plugins/globalize2/test/test_helper.rb +76 -0
- metadata +409 -0
data/Rakefile
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# I think this is the one that should be moved to the extension Rakefile template
|
|
2
|
+
|
|
3
|
+
# In rails 1.2, plugins aren't available in the path until they're loaded.
|
|
4
|
+
# Check to see if the rspec plugin is installed first and require
|
|
5
|
+
# it if it is. If not, use the gem version.
|
|
6
|
+
|
|
7
|
+
# Determine where the RSpec plugin is by loading the boot
|
|
8
|
+
unless defined? RADIANT_ROOT
|
|
9
|
+
ENV["RAILS_ENV"] = "test"
|
|
10
|
+
case
|
|
11
|
+
when ENV["RADIANT_ENV_FILE"]
|
|
12
|
+
require File.dirname(ENV["RADIANT_ENV_FILE"]) + "/boot"
|
|
13
|
+
when File.dirname(__FILE__) =~ %r{vendor/radiant/vendor/extensions}
|
|
14
|
+
require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../../")}/config/boot"
|
|
15
|
+
else
|
|
16
|
+
require "#{File.expand_path(File.dirname(__FILE__) + "/../../../")}/config/boot"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
require 'rake'
|
|
21
|
+
require 'rake/rdoctask'
|
|
22
|
+
require 'rake/testtask'
|
|
23
|
+
|
|
24
|
+
rspec_base = File.expand_path(RADIANT_ROOT + '/vendor/plugins/rspec/lib')
|
|
25
|
+
$LOAD_PATH.unshift(rspec_base) if File.exist?(rspec_base)
|
|
26
|
+
require 'spec/rake/spectask'
|
|
27
|
+
# require 'spec/translator'
|
|
28
|
+
|
|
29
|
+
# Cleanup the RADIANT_ROOT constant so specs will load the environment
|
|
30
|
+
Object.send(:remove_const, :RADIANT_ROOT)
|
|
31
|
+
|
|
32
|
+
extension_root = File.expand_path(File.dirname(__FILE__))
|
|
33
|
+
|
|
34
|
+
task :default => :spec
|
|
35
|
+
task :stats => "spec:statsetup"
|
|
36
|
+
|
|
37
|
+
desc "Run all specs in spec directory"
|
|
38
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
|
39
|
+
t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
|
|
40
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
namespace :spec do
|
|
44
|
+
desc "Run all specs in spec directory with RCov"
|
|
45
|
+
Spec::Rake::SpecTask.new(:rcov) do |t|
|
|
46
|
+
t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
|
|
47
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
|
48
|
+
t.rcov = true
|
|
49
|
+
t.rcov_opts = ['--exclude', 'spec', '--rails']
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
desc "Print Specdoc for all specs"
|
|
53
|
+
Spec::Rake::SpecTask.new(:doc) do |t|
|
|
54
|
+
t.spec_opts = ["--format", "specdoc", "--dry-run"]
|
|
55
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
[:models, :controllers, :views, :helpers].each do |sub|
|
|
59
|
+
desc "Run the specs under spec/#{sub}"
|
|
60
|
+
Spec::Rake::SpecTask.new(sub) do |t|
|
|
61
|
+
t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
|
|
62
|
+
t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"]
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Hopefully no one has written their extensions in pre-0.9 style
|
|
67
|
+
# desc "Translate specs from pre-0.9 to 0.9 style"
|
|
68
|
+
# task :translate do
|
|
69
|
+
# translator = ::Spec::Translator.new
|
|
70
|
+
# dir = RAILS_ROOT + '/spec'
|
|
71
|
+
# translator.translate(dir, dir)
|
|
72
|
+
# end
|
|
73
|
+
|
|
74
|
+
# Setup specs for stats
|
|
75
|
+
task :statsetup do
|
|
76
|
+
require 'code_statistics'
|
|
77
|
+
::STATS_DIRECTORIES << %w(Model\ specs spec/models)
|
|
78
|
+
::STATS_DIRECTORIES << %w(View\ specs spec/views)
|
|
79
|
+
::STATS_DIRECTORIES << %w(Controller\ specs spec/controllers)
|
|
80
|
+
::STATS_DIRECTORIES << %w(Helper\ specs spec/views)
|
|
81
|
+
::CodeStatistics::TEST_TYPES << "Model specs"
|
|
82
|
+
::CodeStatistics::TEST_TYPES << "View specs"
|
|
83
|
+
::CodeStatistics::TEST_TYPES << "Controller specs"
|
|
84
|
+
::CodeStatistics::TEST_TYPES << "Helper specs"
|
|
85
|
+
::STATS_DIRECTORIES.delete_if {|a| a[0] =~ /test/}
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
namespace :db do
|
|
89
|
+
namespace :fixtures do
|
|
90
|
+
desc "Load fixtures (from spec/fixtures) into the current environment's database. Load specific fixtures using FIXTURES=x,y"
|
|
91
|
+
task :load => :environment do
|
|
92
|
+
require 'active_record/fixtures'
|
|
93
|
+
ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
|
|
94
|
+
(ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(RAILS_ROOT, 'spec', 'fixtures', '*.{yml,csv}'))).each do |fixture_file|
|
|
95
|
+
Fixtures.create_fixtures('spec/fixtures', File.basename(fixture_file, '.*'))
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
desc 'Generate documentation for the globalize2 extension.'
|
|
103
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
104
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
105
|
+
rdoc.title = 'Globalize2Extension'
|
|
106
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
|
107
|
+
rdoc.rdoc_files.include('README')
|
|
108
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# For extensions that are in transition
|
|
112
|
+
desc 'Test the globalize2 extension.'
|
|
113
|
+
Rake::TestTask.new(:test) do |t|
|
|
114
|
+
t.libs << 'lib'
|
|
115
|
+
t.pattern = 'test/**/*_test.rb'
|
|
116
|
+
t.verbose = true
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Load any custom rakefiles for extension
|
|
120
|
+
Dir[File.dirname(__FILE__) + '/tasks/*.rake'].sort.each { |f| require f }
|
|
121
|
+
|
|
122
|
+
begin
|
|
123
|
+
require 'jeweler'
|
|
124
|
+
Jeweler::Tasks.new do |gem|
|
|
125
|
+
gem.name = "radiant-globalize2-extension"
|
|
126
|
+
gem.summary = %Q{Globalize2 extension for Radiant CMS}
|
|
127
|
+
gem.description = %Q{This extension allows you to translate your Radiant content}
|
|
128
|
+
gem.email = "benny@gorilla-webdesign.be"
|
|
129
|
+
gem.homepage = "https://github.com/jomz/radiant-globalize2-extension"
|
|
130
|
+
gem.authors = ["Cristi Duma", "Istvan Hoka", "Edmund Haselwanter", "Benny Degezelle", "Jerrod Blavos", "Simo Niemelä", "Jan De Poorter"]
|
|
131
|
+
gem.add_dependency 'radiant', ">=0.9.1"
|
|
132
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
|
133
|
+
end
|
|
134
|
+
rescue LoadError
|
|
135
|
+
puts "Jeweler (or a dependency) not available. This is only required if you plan to package copy_move as a gem."
|
|
136
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
- @stylesheets << 'admin/globalize2'
|
|
2
|
+
|
|
3
|
+
#globalize
|
|
4
|
+
%input{:type => "hidden", :name => "locale", :value => I18n.locale.to_s }
|
|
5
|
+
.edit
|
|
6
|
+
%span
|
|
7
|
+
- Globalize2Extension.locales.map do |locale|
|
|
8
|
+
|
|
9
|
+
= link_to_unless(Globalize2Extension.content_locale == locale, "<img src='/images/admin/#{locale.downcase}.gif' alt='#{locale.upcase}' />", params.merge(:content_locale => locale))
|
|
10
|
+
- if !@page.nil? && Globalize2Extension.content_locale == locale
|
|
11
|
+
- if Globalize2Extension.content_locale != Globalize2Extension.default_language
|
|
12
|
+
- if @page.translated_locales.include?(locale.to_sym)
|
|
13
|
+
%span.translated
|
|
14
|
+
%label{:for => "reset_translations"}
|
|
15
|
+
%input{:type => "checkbox", :value => "true", :name => "page[reset_translations]", :id => "reset_translations"}
|
|
16
|
+
Delete
|
|
17
|
+
=Globalize2Extension.content_locale.to_s.upcase
|
|
18
|
+
translation
|
|
19
|
+
- else
|
|
20
|
+
%span.not-translated (not translated)
|
|
21
|
+
- else
|
|
22
|
+
%span (default)
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
- @stylesheets << 'admin/globalize2'
|
|
2
|
+
|
|
3
|
+
#globalize.clearfix
|
|
4
|
+
.index
|
|
5
|
+
%span
|
|
6
|
+
- Globalize2Extension.locales.map do |locale|
|
|
7
|
+
= link_to_unless(Globalize2Extension.content_locale == locale, "<img src='/images/admin/#{locale.downcase}.gif' alt='#{locale.upcase}' />", params.merge(:content_locale => locale))
|
data/config/routes.rb
ADDED
data/cucumber.yml
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
default: -r ./features features
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class CreateTranslationTables < ActiveRecord::Migration
|
|
2
|
+
|
|
3
|
+
def self.globalizable_content
|
|
4
|
+
Globalize2Extension::GLOBALIZABLE_CONTENT
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def self.up
|
|
8
|
+
globalizable_content.each do |model, columns|
|
|
9
|
+
globalize_columns = {}
|
|
10
|
+
columns.each do |column|
|
|
11
|
+
base_column = model.columns.detect { |col| col.name == column.to_s }
|
|
12
|
+
globalize_columns[column] = base_column.type
|
|
13
|
+
end
|
|
14
|
+
model.create_translation_table! globalize_columns
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.down
|
|
19
|
+
globalizable_content.each do |model, columns|
|
|
20
|
+
model.drop_translation_table!
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
class PopulateTranslations < ActiveRecord::Migration
|
|
2
|
+
|
|
3
|
+
def self.globalizable_content
|
|
4
|
+
Globalize2Extension::GLOBALIZABLE_CONTENT
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def self.up
|
|
8
|
+
globalizable_content.each do |model, columns|
|
|
9
|
+
model.send(:all).each do |item|
|
|
10
|
+
translation = item.translations.find_or_initialize_by_locale(Globalize2Extension.default_language.to_s)
|
|
11
|
+
columns.each do |column|
|
|
12
|
+
translation[column] = item[column]
|
|
13
|
+
end
|
|
14
|
+
translation.save
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.down
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class RemoveTranslatedAttributes < ActiveRecord::Migration
|
|
2
|
+
def self.globalizable_content
|
|
3
|
+
Globalize2Extension::GLOBALIZABLE_CONTENT
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def self.up
|
|
7
|
+
globalizable_content.each do |model, columns|
|
|
8
|
+
columns.each do |column|
|
|
9
|
+
remove_column model.table_name, column
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.down
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Feature: Globalize 2
|
|
2
|
+
In order to take advantage of the many languages I speak
|
|
3
|
+
As an admin
|
|
4
|
+
I want to be able to globalize my layouts
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given I am logged in as an admin
|
|
8
|
+
|
|
9
|
+
Scenario: Translating a layout
|
|
10
|
+
Given a layout "Cool Layout" exists
|
|
11
|
+
And I am on the layouts index page
|
|
12
|
+
And I follow "Cool Layout"
|
|
13
|
+
And I follow "RO"
|
|
14
|
+
And I fill in "layout_content" with "continut romanesc"
|
|
15
|
+
And I press "Save Changes"
|
|
16
|
+
Then the "Cool Layout" layout should be saved for "ro" locale
|
|
17
|
+
And the "Cool Layout" layout should contain "continut romanesc" for "ro" locale
|
|
18
|
+
And the "Cool Layout" layout should be saved for "en" locale
|
|
19
|
+
And the "Cool Layout" layout should contain "english content" for "en" locale
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
Feature: Globalize 2
|
|
2
|
+
In order to take advantage of the many languages I speak
|
|
3
|
+
As an admin
|
|
4
|
+
I want to be able to globalize my pages
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given I am logged in as an admin
|
|
8
|
+
|
|
9
|
+
Scenario: Changing locale
|
|
10
|
+
Given a page "Cool Page" exists translated to "Pagina cool"
|
|
11
|
+
And I am on the pages index page
|
|
12
|
+
When I follow "RO"
|
|
13
|
+
Then I should see "Pagina cool"
|
|
14
|
+
When I follow "EN"
|
|
15
|
+
Then I should see "Cool Page"
|
|
16
|
+
|
|
17
|
+
Scenario: Translating a page
|
|
18
|
+
Given a page "Cool Page" exists
|
|
19
|
+
And I am on the pages index page
|
|
20
|
+
When I follow "Cool Page"
|
|
21
|
+
And I follow "RO"
|
|
22
|
+
And I fill in "Page Title" with "Pagina cool"
|
|
23
|
+
And I press "Save Changes"
|
|
24
|
+
Then I should be on the pages index page
|
|
25
|
+
And I should see "Pagina cool"
|
|
26
|
+
When I follow "EN"
|
|
27
|
+
Then I should see "Cool Page"
|
|
28
|
+
|
|
29
|
+
Scenario: Translating content for a page
|
|
30
|
+
Given a page "Cool Page" exists with a "body" page part
|
|
31
|
+
And I am on the pages index page
|
|
32
|
+
When I follow "Cool Page"
|
|
33
|
+
And I follow "RO"
|
|
34
|
+
And I fill in "part_body_content" with "continut romanesc"
|
|
35
|
+
And I press "Save Changes"
|
|
36
|
+
Then the "Cool Page" page should contain "continut romanesc" for "ro" locale
|
|
37
|
+
And the "Cool Page" page should contain "english content" for "en" locale
|
|
38
|
+
|
|
39
|
+
Scenario: Deleting a translation
|
|
40
|
+
Given a page "Cool Page" exists translated to "Pagina cool"
|
|
41
|
+
And I am on the pages index page
|
|
42
|
+
When I follow "Cool Page"
|
|
43
|
+
And I follow "RO"
|
|
44
|
+
And I check "Delete RO translation"
|
|
45
|
+
And I press "Save Changes"
|
|
46
|
+
Then I should be on the pages index page
|
|
47
|
+
And I should not see "Pagina cool"
|
|
48
|
+
When I follow "EN"
|
|
49
|
+
Then I should see "Cool Page"
|
|
50
|
+
|
|
51
|
+
Scenario: The locale is changed to default when creating a new page
|
|
52
|
+
Given a page "HomePage" exists
|
|
53
|
+
And I am on the pages index page
|
|
54
|
+
And I follow "RO"
|
|
55
|
+
When I follow "add child"
|
|
56
|
+
Then I should see "The locale has been changed to default."
|
|
57
|
+
And I should see "(default)"
|
|
58
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Feature: Globalize 2
|
|
2
|
+
In order to take advantage of the many languages I speak
|
|
3
|
+
As an admin
|
|
4
|
+
I want to be able to globalize my snippet
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given I am logged in as an admin
|
|
8
|
+
|
|
9
|
+
Scenario: Translating a layout
|
|
10
|
+
Given a snippet "Cool_Snippet" exists
|
|
11
|
+
And I am on the snippets index page
|
|
12
|
+
And I follow "Cool_Snippet"
|
|
13
|
+
And I follow "RO"
|
|
14
|
+
And I fill in "snippet_content" with "continut romanesc"
|
|
15
|
+
And I press "Save Changes"
|
|
16
|
+
Then the "Cool_Snippet" snippet should be saved for "ro" locale
|
|
17
|
+
And the "Cool_Snippet" snippet should contain "continut romanesc" for "ro" locale
|
|
18
|
+
And the "Cool_Snippet" snippet should be saved for "en" locale
|
|
19
|
+
And the "Cool_Snippet" snippet should contain "english content" for "en" locale
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
Given /^I am logged in as an admin$/ do
|
|
2
|
+
User.create!(:login => 'admin',
|
|
3
|
+
:password => 'secret',
|
|
4
|
+
:password_confirmation => 'secret',
|
|
5
|
+
:name => 'Administrator',
|
|
6
|
+
:admin => true)
|
|
7
|
+
Given "I go to to \"the welcome page\""
|
|
8
|
+
When "I fill in \"Username\" with \"admin\""
|
|
9
|
+
When "I fill in \"Password\" with \"secret\""
|
|
10
|
+
When "I press \"Login\""
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Given /^a page "([^\"]*)" exists$/ do |title|
|
|
14
|
+
Factory.create(:page, :title => title)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
Given /^a page "([^\"]*)" exists with a "([^\"]*)" page part$/ do |title, part|
|
|
18
|
+
page = Factory.create(:page, :title => title)
|
|
19
|
+
Factory.create(:page_part, :name => part, :page => page)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
Given /^a page "([^\"]*)" exists translated to "([^\"]*)"$/ do |title, translated_title|
|
|
23
|
+
page = Factory.create(:page, :title => title)
|
|
24
|
+
Factory.create(:romanian_page_translation, :page => page, :title => translated_title)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
Then /^the "([^\"]*)" page should contain "([^\"]*)" for "([^\"]*)" locale$/ do |title, content, locale|
|
|
28
|
+
page = Page.find_by_title(title)
|
|
29
|
+
page.parts.first.translations.find_by_locale(locale).content.should == content
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
Given /^a layout "([^\"]*)" exists$/ do |name|
|
|
33
|
+
Factory.create(:layout, :name => name)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
Then /^the "([^\"]*)" layout should be saved for "([^\"]*)" locale$/ do |name, locale|
|
|
37
|
+
layout = Layout.find_by_name(name)
|
|
38
|
+
layout.translated_locales.should include(locale.to_sym)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
Then /^the "([^\"]*)" layout should contain "([^\"]*)" for "([^\"]*)" locale$/ do |name, content, locale|
|
|
42
|
+
layout = Layout.find_by_name(name)
|
|
43
|
+
layout.translations.find_by_locale(locale).content.should == content
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
Given /^a snippet "([^\"]*)" exists$/ do |name|
|
|
47
|
+
Factory.create(:snippet, :name => name)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
Then /^the "([^\"]*)" snippet should be saved for "([^\"]*)" locale$/ do |name, locale|
|
|
51
|
+
snippet = Snippet.find_by_name(name)
|
|
52
|
+
snippet.translated_locales.should include(locale.to_sym)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
Then /^the "([^\"]*)" snippet should contain "([^\"]*)" for "([^\"]*)" locale$/ do |name, content, locale|
|
|
56
|
+
snippet = Snippet.find_by_name(name)
|
|
57
|
+
snippet.translations.find_by_locale(locale).content.should == content
|
|
58
|
+
end
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
|
|
2
|
+
|
|
3
|
+
# Commonly used webrat steps
|
|
4
|
+
# http://github.com/brynary/webrat
|
|
5
|
+
|
|
6
|
+
Given /^I am on (.+)$/ do |page_name|
|
|
7
|
+
visit path_to(page_name)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
When /^I go to (.+)$/ do |page_name|
|
|
11
|
+
visit path_to(page_name)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
When /^I press "([^\"]*)"$/ do |button|
|
|
15
|
+
click_button(button)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
When /^I follow "([^\"]*)"$/ do |link|
|
|
19
|
+
click_link(link)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
When /^I fill in "([^\"]*)" with "([^\"]*)"$/ do |field, value|
|
|
23
|
+
fill_in(field, :with => value)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
When /^I select "([^\"]*)" from "([^\"]*)"$/ do |value, field|
|
|
27
|
+
select(value, :from => field)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Use this step in conjunction with Rail's datetime_select helper. For example:
|
|
31
|
+
# When I select "December 25, 2008 10:00" as the date and time
|
|
32
|
+
When /^I select "([^\"]*)" as the date and time$/ do |time|
|
|
33
|
+
select_datetime(time)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Use this step when using multiple datetime_select helpers on a page or
|
|
37
|
+
# you want to specify which datetime to select. Given the following view:
|
|
38
|
+
# <%= f.label :preferred %><br />
|
|
39
|
+
# <%= f.datetime_select :preferred %>
|
|
40
|
+
# <%= f.label :alternative %><br />
|
|
41
|
+
# <%= f.datetime_select :alternative %>
|
|
42
|
+
# The following steps would fill out the form:
|
|
43
|
+
# When I select "November 23, 2004 11:20" as the "Preferred" date and time
|
|
44
|
+
# And I select "November 25, 2004 10:30" as the "Alternative" date and time
|
|
45
|
+
When /^I select "([^\"]*)" as the "([^\"]*)" date and time$/ do |datetime, datetime_label|
|
|
46
|
+
select_datetime(datetime, :from => datetime_label)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Use this step in conjunction with Rail's time_select helper. For example:
|
|
50
|
+
# When I select "2:20PM" as the time
|
|
51
|
+
# Note: Rail's default time helper provides 24-hour time-- not 12 hour time. Webrat
|
|
52
|
+
# will convert the 2:20PM to 14:20 and then select it.
|
|
53
|
+
When /^I select "([^\"]*)" as the time$/ do |time|
|
|
54
|
+
select_time(time)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Use this step when using multiple time_select helpers on a page or you want to
|
|
58
|
+
# specify the name of the time on the form. For example:
|
|
59
|
+
# When I select "7:30AM" as the "Gym" time
|
|
60
|
+
When /^I select "([^\"]*)" as the "([^\"]*)" time$/ do |time, time_label|
|
|
61
|
+
select_time(time, :from => time_label)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Use this step in conjunction with Rail's date_select helper. For example:
|
|
65
|
+
# When I select "February 20, 1981" as the date
|
|
66
|
+
When /^I select "([^\"]*)" as the date$/ do |date|
|
|
67
|
+
select_date(date)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Use this step when using multiple date_select helpers on one page or
|
|
71
|
+
# you want to specify the name of the date on the form. For example:
|
|
72
|
+
# When I select "April 26, 1982" as the "Date of Birth" date
|
|
73
|
+
When /^I select "([^\"]*)" as the "([^\"]*)" date$/ do |date, date_label|
|
|
74
|
+
select_date(date, :from => date_label)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
When /^I check "([^\"]*)"$/ do |field|
|
|
78
|
+
check(field)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
When /^I uncheck "([^\"]*)"$/ do |field|
|
|
82
|
+
uncheck(field)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
When /^I choose "([^\"]*)"$/ do |field|
|
|
86
|
+
choose(field)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
When /^I attach the file at "([^\"]*)" to "([^\"]*)"$/ do |path, field|
|
|
90
|
+
attach_file(field, path)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
Then /^I should see "([^\"]*)"$/ do |text|
|
|
94
|
+
response.should contain(text)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
Then /^I should not see "([^\"]*)"$/ do |text|
|
|
98
|
+
response.should_not contain(text)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
Then /^the "([^\"]*)" field should contain "([^\"]*)"$/ do |field, value|
|
|
102
|
+
field_labeled(field).value.should =~ /#{value}/
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
Then /^the "([^\"]*)" field should not contain "([^\"]*)"$/ do |field, value|
|
|
106
|
+
field_labeled(field).value.should_not =~ /#{value}/
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
Then /^the "([^\"]*)" checkbox should be checked$/ do |label|
|
|
110
|
+
field_labeled(label).should be_checked
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
Then /^the "([^\"]*)" checkbox should not be checked$/ do |label|
|
|
114
|
+
field_labeled(label).should_not be_checked
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
Then /^I should be on (.+)$/ do |page_name|
|
|
118
|
+
URI.parse(current_url).path.should == path_to(page_name)
|
|
119
|
+
end
|