whowish_word 0.6.5 → 1.0.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.
Files changed (69) hide show
  1. data/.gitignore +2 -2
  2. data/Gemfile +2 -4
  3. data/lib/whowish_word/action_controller/base.rb +6 -46
  4. data/lib/whowish_word/action_view/base.rb +18 -40
  5. data/lib/whowish_word/backends/defer_to_i18n.rb +18 -0
  6. data/lib/whowish_word/backends/flat_file_store.rb +75 -0
  7. data/lib/whowish_word/constant.rb +1 -3
  8. data/lib/whowish_word/initializer.rb +10 -29
  9. data/lib/whowish_word/rails/app/controllers/whowish_word_controller.rb +31 -85
  10. data/lib/whowish_word/whowish_word.rb +3 -6
  11. data/rails/Gemfile +2 -12
  12. data/rails/Gemfile.lock +30 -44
  13. data/rails/app/views/layouts/integration.html.erb +0 -1
  14. data/rails/config/application.rb +0 -17
  15. data/rails/config/boot.rb +0 -3
  16. data/rails/config/environment.rb +0 -9
  17. data/rails/config/routes.rb +0 -3
  18. data/rails/spec/controllers/whowish_word_controller_spec.rb +36 -10
  19. data/rails/spec/features/whowish_word_spec.rb +75 -0
  20. data/rails/spec/spec_helper.rb +15 -11
  21. data/rails/spec/support/browser_helper.rb +31 -0
  22. data/rails/spec/support/json_rspec_helper.rb +0 -3
  23. data/whowish_word.gemspec +4 -4
  24. metadata +24 -48
  25. data/lib/whowish_word/action_mailer/base.rb +0 -7
  26. data/lib/whowish_word/action_view/template.rb +0 -31
  27. data/lib/whowish_word/authentication.rb +0 -14
  28. data/lib/whowish_word/db_migration/active_record/whowish_word_html.rb +0 -15
  29. data/lib/whowish_word/db_migration/mongoid/whowish_word_html.rb +0 -6
  30. data/lib/whowish_word/rails/app/models/active_record/whowish_word_html.rb +0 -4
  31. data/lib/whowish_word/rails/app/models/mongoid/whowish_word_html.rb +0 -9
  32. data/lib/whowish_word/word_for.rb +0 -94
  33. data/rails/app/assets/javascripts/home2.js +0 -2
  34. data/rails/app/assets/javascripts/integration.js +0 -2
  35. data/rails/app/assets/javascripts/test_javascript.js +0 -2
  36. data/rails/app/assets/javascripts/test_word_for.js +0 -2
  37. data/rails/app/assets/stylesheets/home2.css +0 -4
  38. data/rails/app/assets/stylesheets/integration.css +0 -4
  39. data/rails/app/assets/stylesheets/test_javascript.css +0 -4
  40. data/rails/app/assets/stylesheets/test_word_for.css +0 -4
  41. data/rails/app/controllers/home2_controller.rb +0 -2
  42. data/rails/app/controllers/test_javascript_controller.rb +0 -11
  43. data/rails/app/controllers/test_word_for_controller.rb +0 -5
  44. data/rails/app/helpers/home2_helper.rb +0 -2
  45. data/rails/app/helpers/test_javascript_helper.rb +0 -2
  46. data/rails/app/helpers/test_word_for_helper.rb +0 -2
  47. data/rails/app/views/home2/index.html.erb +0 -2
  48. data/rails/app/views/home2/test.html.erb +0 -3
  49. data/rails/app/views/test_javascript/change_value.html.erb +0 -32
  50. data/rails/app/views/test_javascript/index.html.erb +0 -87
  51. data/rails/app/views/test_javascript/replace_with_html.html.erb +0 -96
  52. data/rails/app/views/test_word_for/_partial.html.erb +0 -5
  53. data/rails/app/views/test_word_for/index.html.erb +0 -9
  54. data/rails/config/database.yml +0 -25
  55. data/rails/config/mongoid.rb +0 -6
  56. data/rails/config/mongoid.yml +0 -14
  57. data/rails/db/.gitdummy +0 -0
  58. data/rails/mongo.bat +0 -5
  59. data/rails/public/jasmine/MIT.LICENSE +0 -20
  60. data/rails/public/jasmine/jasmine-html.js +0 -190
  61. data/rails/public/jasmine/jasmine.css +0 -166
  62. data/rails/public/jasmine/jasmine.js +0 -2476
  63. data/rails/public/jasmine/jasmine_favicon.png +0 -0
  64. data/rails/public/javascripts/jquery.loading_button.js +0 -72
  65. data/rails/public/sinonjs/sinonjs.js +0 -2821
  66. data/rails/public/test/jquery_version.html +0 -26
  67. data/rails/spec/integration/whowish_word_spec.rb +0 -102
  68. data/rails/spec/support/browser.rb +0 -194
  69. data/spec/spec_helper.rb +0 -19
data/.gitignore CHANGED
@@ -1,8 +1,8 @@
1
-
2
1
  /Gemfile.lock
3
2
  spec/rails/tmp/*
4
3
  *.gem
5
4
  rails/db/*.sqlite3
6
5
  rails/tmp/*
7
6
  rails/.bundle/*
8
- .bundle/*
7
+ .bundle/*
8
+ .rvmrc
data/Gemfile CHANGED
@@ -1,4 +1,2 @@
1
- source 'http://rubygems.org'
2
-
3
- gem 'rubyzip'
4
- gem 'rspec'
1
+ source 'https://rubygems.org'
2
+ gemspec
@@ -1,9 +1,9 @@
1
1
  if defined?(ActionController) and defined?(ActionController::Base)
2
2
  class ActionController::Base
3
3
  include WhowishWord::Constant
4
-
4
+
5
5
  prepend_before_filter :initialize_whowish_word
6
- helper_method :whowish_word
6
+ helper_method :whowish_word, :whowish_word_active?
7
7
  attr_accessor :whowish_word_config
8
8
 
9
9
  def initialize_whowish_word
@@ -14,48 +14,8 @@ if defined?(ActionController) and defined?(ActionController::Base)
14
14
  return @whowish_word_config
15
15
  end
16
16
 
17
- # alias_method :previous_t, :t
18
- # def t(uid, *variables)
19
- # if @whowish_word_config.edit_mode == true
20
- # s = PREFIX + \
21
- # SEPARATOR + \
22
- # scope_key_by_partial(uid.to_s) + \
23
- # SEPARATOR + \
24
- # previous_t(uid)
25
- # return "<dfn>#{s}</dfn>".html_safe
26
- # else
27
- # return previous_t(uid, *variables)
28
- # end
29
- # end
30
-
31
- # def ta(uid, *variables)
32
- # if @whowish_word_config.edit_mode == true
33
- # s = PREFIX + \
34
- # SEPARATOR + \
35
- # scope_key_by_partial(uid.to_s) + \
36
- # SEPARATOR + \
37
- # previous_t(uid)
38
- # return s.html_safe
39
- # else
40
- # return previous_t(uid, *variables)
41
- # end
42
- # end
43
-
44
- # def word_for(namespace, id, *variables)
45
- # if @whowish_word_config.edit_mode == true
46
- # return WhowishWord.word_for_in_edit_mode(namespace, id, @whowish_word_config.locale, *variables)
47
- # else
48
- # return WhowishWord.word_for(namespace, id, @whowish_word_config.locale, *variables)
49
- # end
50
- # end
51
-
52
-
53
- # def word_for_attr(namespace, id, *variables)
54
- # if @whowish_word_config.edit_mode == true
55
- # return WhowishWord.word_for_attr_in_edit_mode(namespace, id, @whowish_word_config.locale, *variables)
56
- # else
57
- # return WhowishWord.word_for_attr(namespace, id, @whowish_word_config.locale, *variables)
58
- # end
59
- # end
17
+ def whowish_word_active?
18
+ @whowish_word_config.edit_mode == true
19
+ end
60
20
  end
61
- end
21
+ end
@@ -3,8 +3,8 @@ if defined?(ActionView) and defined?(ActionView::Base)
3
3
  include WhowishWord::Constant
4
4
 
5
5
  def whowish_word_javascript_and_css(force = false)
6
- return "" if @whowish_word_config.edit_mode != true and force == false
7
-
6
+ return "" if !whowish_word_active? and force == false
7
+
8
8
  script_text = <<-HTML
9
9
  <script type="text/javascript">
10
10
  $w(function() {
@@ -12,59 +12,44 @@ if defined?(ActionView) and defined?(ActionView::Base)
12
12
  });
13
13
  </script>
14
14
  HTML
15
-
15
+
16
16
  return javascript_include_tag("/whowish_word_js").sub('.js', '').html_safe + \
17
17
  stylesheet_link_tag("/whowish_word_css").sub('.css', '').html_safe + \
18
18
  script_text.html_safe
19
19
  end
20
20
 
21
- # def global_word_for(namespace, id, *variables)
22
- # if @whowish_word_config.edit_mode == true
23
- # return WhowishWord.word_for_in_edit_mode(namespace, id, @whowish_word_config.locale, *variables)
24
- # else
25
- # return WhowishWord.word_for(namespace, id, @whowish_word_config.locale, *variables)
26
- # end
27
- # end
28
-
29
-
30
- # def global_word_for_attr(namespace, id, *variables)
31
- # if @whowish_word_config.edit_mode == true
32
- # return WhowishWord.word_for_attr_in_edit_mode(namespace, id, @whowish_word_config.locale, *variables)
33
- # else
34
- # return WhowishWord.word_for_attr(namespace, id, @whowish_word_config.locale, *variables)
35
- # end
36
- # end
21
+ alias_method :previous_t, :t
37
22
 
38
- # def word_for(id, *variables)
39
- # namespace = get_relative_view_path(@whowish_word_page)
40
- # global_word_for(namespace, id, *variables)
41
- # end
23
+ # Translations that are plain-text and outside HTML attributes
24
+ def t(uid, *variables)
25
+ return previous_t(uid, *variables) unless whowish_word_active?
42
26
 
43
- # def word_for_attr(id, *variables)
44
- # namespace = get_relative_view_path(@whowish_word_page)
45
- # global_word_for_attr(namespace, id, *variables)
46
- # end
27
+ translation = previous_t uid
47
28
 
48
- alias_method :previous_t, :t
49
- def t(uid, *variables)
50
- if @whowish_word_config.edit_mode == true
29
+ if translation.is_a?(String)
51
30
  s = PREFIX + \
52
31
  SEPARATOR + \
53
32
  scope_key_by_partial(uid.to_s) + \
54
33
  SEPARATOR + \
55
- previous_t(uid)
34
+ translation
56
35
  return "<dfn>#{s}</dfn>".html_safe
57
36
  else
58
37
  return previous_t(uid, *variables)
59
38
  end
60
39
  end
61
40
 
41
+ # Translations that may contain HTML tags and are outside HTML attributes
62
42
  def th(uid, *variables)
63
43
  return t(uid, *variables).html_safe
64
44
  end
65
45
 
46
+ # Translations that are inside HTML attributes (must be plain-text by their definitions)
66
47
  def ta(uid, *variables)
67
- if @whowish_word_config.edit_mode == true
48
+ return previous_t(uid, *variables) unless whowish_word_active?
49
+
50
+ translation = previous_t uid
51
+
52
+ if translation.is_a?(String)
68
53
  s = PREFIX + \
69
54
  SEPARATOR + \
70
55
  scope_key_by_partial(uid.to_s) + \
@@ -75,12 +60,5 @@ if defined?(ActionView) and defined?(ActionView::Base)
75
60
  return previous_t(uid, *variables)
76
61
  end
77
62
  end
78
-
79
-
80
- # private
81
- # def get_relative_view_path(full_path)
82
- # result = @whowish_word_page.match(/[\/\\](([^\/\\]+)[\/\\]([^\/\\]+))\Z/)
83
- # return result[1]
84
- # end
85
63
  end
86
- end
64
+ end
@@ -0,0 +1,18 @@
1
+ module WhowishWord
2
+ module Backends
3
+ class DeferToI18n
4
+ def initialize
5
+ end
6
+
7
+ def set(key, value)
8
+ I18n.backend.store_translations(I18n.locale,
9
+ { key => value },
10
+ :escape => false)
11
+ end
12
+
13
+ def get(*args)
14
+ I18n.t *args
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,75 @@
1
+ module WhowishWord
2
+ module Backends
3
+ class FlatFileStore
4
+ def set(key, value)
5
+ keys = key.split(".")
6
+ uid = keys.pop
7
+ filename = "#{I18n.locale}.yml"
8
+
9
+ if keys.length > 1
10
+ filename = "#{keys[1..-1].join("_")}_#{filename}"
11
+ end
12
+
13
+ paths = [ WhowishWord.config_file_dir ]
14
+ Rails.logger.debug WhowishWord.config_file_dir
15
+ paths.push(keys[0]) if keys.length > 0
16
+ paths.push(filename)
17
+
18
+ locale_file = File.join(*paths)
19
+ FileUtils.mkdir_p(File.join(*paths[0..-2]))
20
+
21
+ translation_keys = I18n.normalize_keys(I18n.locale, key, nil, ".")
22
+
23
+ file = nil
24
+ data = {}
25
+
26
+ begin
27
+ if !File.exists?(locale_file)
28
+ file = File.open(locale_file, 'w', 0777)
29
+ file.flock(File::LOCK_EX)
30
+ else
31
+ file = File.open(locale_file, 'r+', 0777)
32
+ file.flock(File::LOCK_EX)
33
+ end
34
+
35
+ begin
36
+ file.rewind
37
+ data = YAML.parse(file.read).to_ruby
38
+ rescue
39
+ data = {}
40
+ end
41
+
42
+ direct = data
43
+ translation_keys[0..-2].each { |k|
44
+ k = k.to_s
45
+ direct[k] ||= {}
46
+ direct = direct[k]
47
+ }
48
+
49
+ direct[translation_keys.last.to_s] = value
50
+
51
+ file.rewind
52
+ file.write(YAML.dump(data))
53
+ file.flush
54
+ file.truncate(file.pos)
55
+ ensure
56
+ file.flock(File::LOCK_UN)
57
+ file.close
58
+ end
59
+
60
+ direct = I18n.translations
61
+ translation_keys[0..-2].each { |k|
62
+ direct[k] ||= {}
63
+ direct = direct[k]
64
+ }
65
+ direct[translation_keys.last] = value
66
+
67
+ true
68
+ end
69
+
70
+ def get(*args)
71
+ I18n.t *args
72
+ end
73
+ end
74
+ end
75
+ end
@@ -1,9 +1,7 @@
1
1
  module WhowishWord
2
-
3
2
  module Constant
4
3
  PREFIX = "__whowishWord__"
5
4
  SEPARATOR = "_____"
6
5
  ID_VARIABLES_SEPARATOR = "|"
7
6
  end
8
-
9
- end
7
+ end
@@ -1,54 +1,35 @@
1
1
  module WhowishWord
2
-
3
2
  module Initializer
4
-
5
3
  def install_route
6
-
7
4
  Rails.application.routes.prepend do
8
- match "whowish_word/change_word", :to=>"whowish_word#change_word"
9
- match "whowish_word_css", :to=>"whowish_word#css"
10
- match "whowish_word_js", :to=>"whowish_word#js"
11
- match "whowish_word/download", :to=>"whowish_word#download"
5
+ match "whowish_word/change_word", :to => "whowish_word#change_word"
6
+ match "whowish_word_css", :to => "whowish_word#css"
7
+ match "whowish_word_js", :to => "whowish_word#js"
8
+ match "whowish_word/download", :to => "whowish_word#download"
12
9
  end
13
-
14
10
  end
15
11
 
16
- # def run_database_migration
17
-
18
- # Dir[File.expand_path("../db_migration/#{@orm_engine}/**/*.rb", __FILE__)].each {|f| require f}
19
-
20
- # end
21
-
22
-
23
-
24
12
  def install_hook
25
-
26
- Dir[File.expand_path("../action_controller/**/*.rb", __FILE__)].each {|f| require f}
27
- Dir[File.expand_path("../action_mailer/**/*.rb", __FILE__)].each {|f| require f}
28
- Dir[File.expand_path("../action_view/**/*.rb", __FILE__)].each {|f| require f}
29
-
13
+ require_all("../action_controller/**/*.rb")
14
+ require_all("../action_view/**/*.rb")
30
15
  end
31
16
 
32
-
33
17
  def load_rails
34
-
35
18
  paths = ["controllers"]
36
19
 
37
- # load all controllers, helpers, and models
38
20
  paths.each do |dir|
39
-
40
21
  path = File.join(File.dirname(__FILE__), 'rails', 'app', dir)
41
-
42
22
  $LOAD_PATH.insert(0, path)
43
23
  ActiveSupport::Dependencies.autoload_paths.insert(0, path)
44
24
  ActiveSupport::Dependencies.autoload_once_paths.delete(path)
45
-
46
25
  end
47
26
 
48
27
  ActionController::Base.append_view_path(File.join(File.dirname(__FILE__), 'rails', 'app'))
28
+ end
49
29
 
30
+ private
31
+ def require_all(path)
32
+ Dir[File.expand_path(path, __FILE__)].each { |f| require f }
50
33
  end
51
-
52
34
  end
53
-
54
35
  end
@@ -1,118 +1,64 @@
1
- # encoding: utf-8
2
-
3
1
  class WhowishWordController < ApplicationController
2
+ before_filter do
3
+ if !whowish_word_active?
4
+ render :text => 'Not found', :status => 404
5
+ end
6
+ end
7
+
4
8
  def css
5
9
  text = ""
6
-
7
- Dir[File.expand_path("../../../public/stylesheets/*.css", __FILE__)].each { |f|
10
+
11
+ Dir[File.expand_path("../../../public/stylesheets/*.css", __FILE__)].each { |f|
8
12
  text += IO.read(f)
9
13
  text += "\n\n"
10
14
  }
11
-
15
+
12
16
  response.headers["Content-Type"] = "text/css; charset=utf-8"
13
17
  render :text=>text
14
18
  end
15
-
19
+
16
20
  def js
17
21
  text = ""
18
-
22
+
19
23
  all_files = Dir[File.expand_path("../../../public/javascripts/*.js", __FILE__)]
20
24
  all_files.sort! { |a, b| a <=> b}
21
-
25
+
22
26
  all_files.each { |file|
23
27
  text += IO.read(file)
24
28
  text += "\n\n"
25
29
  }
26
-
30
+
27
31
  response.headers["Content-Type"] = "text/javascript; charset=utf-8"
28
32
  render :text=>text
29
33
  end
30
-
31
- def change_word
32
34
 
33
- keys = params[:word_id].split(".")
34
- uid = keys.pop
35
- filename = "#{I18n.locale}.yml"
35
+ def change_word
36
+ store = WhowishWord.backend.new
36
37
 
37
- if keys.length > 1
38
- filename = "#{keys[1..-1].join("_")}_#{filename}"
38
+ if store.set params[:word_id], params[:content]
39
+ render :json => { :ok => true }
40
+ else
41
+ render :json => { :ok => false }, :status => :unprocessable_entity
39
42
  end
43
+ end
40
44
 
41
- paths = [ WhowishWord.config_file_dir ]
42
- paths.push(keys[0]) if keys.length > 0
43
- paths.push(filename)
44
-
45
- locale_file = File.join(*paths)
46
- FileUtils.mkdir_p(File.join(*paths[0..-2]))
45
+ def download
46
+ raise 'Not supported'
47
47
 
48
- translation_keys = I18n.normalize_keys(I18n.locale, params[:word_id], nil, ".")
49
-
50
- file = nil
51
- data = {}
52
-
53
48
  begin
54
- if !File.exists?(locale_file)
55
- file = File.open(locale_file, 'w', 0777)
56
- file.flock(File::LOCK_EX)
57
- else
58
- file = File.open(locale_file, 'r+', 0777)
59
- file.flock(File::LOCK_EX)
60
- end
61
-
62
- begin
63
- file.rewind
64
- data = YAML.parse(file.read).to_ruby
65
- rescue
66
- data = {}
67
- end
68
-
69
- direct = data
70
- translation_keys[0..-2].each { |k|
71
- k = k.to_s
72
- direct[k] ||= {}
73
- direct = direct[k]
74
- }
75
-
76
- direct[translation_keys.last.to_s] = params[:content]
77
-
78
- file.rewind
79
- file.write(YAML.dump(data))
80
- file.flush
81
- file.truncate(file.pos)
82
- ensure
83
- file.flock(File::LOCK_UN)
84
- file.close
49
+ require 'zip'
50
+ rescue Exception => e
51
+ raise 'Please install the rubyzip gem (version 1.1.0) in order to download whowish_word.zip through the web interface #{e}'
85
52
  end
86
53
 
87
- direct = I18n.translations
88
- translation_keys[0..-2].each { |k|
89
- direct[k] ||= {}
90
- direct = direct[k]
91
- }
92
- direct[translation_keys.last] = params[:content]
93
-
94
- render :json=>{
95
- :ok => true
96
- }
97
- end
98
-
99
- def download
100
- require 'zip/zip'
101
- require 'zip/zipfilesystem'
102
-
103
- t = Tempfile.new("whowish_word.zip")
104
-
105
- Zip::ZipOutputStream.open(t.path) do |zos|
54
+ zipfile = Tempfile.new("whowish_word.zip")
55
+ Zip::File.open(zipfile.path, Zip::File::CREATE) do |zipfile|
106
56
  Dir["#{WhowishWord.config_file_dir}/**/*"].each do |file|
107
- next if File.directory?(file)
108
-
109
- zos.put_next_entry("#{file.sub(WhowishWord.config_file_dir + "/", "")}")
110
- zos.print IO.read(file)
57
+ zipfile.add(file.sub(directory, ''), file)
111
58
  end
112
59
  end
113
60
 
114
- send_file t.path, :filename => "whowish_word.zip", :content_type => "application/zip"
115
-
116
- t.close
61
+ send_file zipfile.path, :filename => "whowish_word.zip", :content_type => "application/zip"
62
+ zipfile.close
117
63
  end
118
- end
64
+ end