hobo 1.3.0.pre20 → 1.3.0.pre21

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/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.0.pre20
1
+ 1.3.0.pre21
@@ -151,7 +151,7 @@ EOI
151
151
  :invite_only => @invite_only,
152
152
  :activation_email => @activation_email,
153
153
  :admin_subsite_name => @admin_subsite_name
154
-
154
+ return unless @invite_only
155
155
  say "Installing admin subsite..."
156
156
  invoke 'hobo:admin_subsite', [@admin_subsite_name],
157
157
  :user_resource_name => @user_resource_name,
@@ -42,7 +42,7 @@ private
42
42
  end
43
43
 
44
44
  def setup_rspec
45
- gem 'rspec-rails', '>= 2.0.0.beta.10', :group => :test
45
+ gem 'rspec-rails', '>= 2.0.0', :group => [:test, :development]
46
46
  @should_update = true
47
47
  return unless options[:update]
48
48
  @finalize_hooks << lambda {say "Finalizing rspec installation..."; invoke 'rspec:install'}
@@ -590,7 +590,7 @@ module Hobo
590
590
 
591
591
  def update_response(in_place_edit_field=nil, options={}, &b)
592
592
 
593
- flash_notice (ht(:"#{@this.class.name.to_s.underscore}.messages.update.success", :default=>["Changes to the #{@this.class.model_name.human} were saved"])) if valid?
593
+ flash_notice (ht(:"#{@this.class.to_s.underscore}.messages.update.success", :default=>["Changes to the #{@this.class.model_name.human} were saved"])) if valid?
594
594
 
595
595
  response_block(&b) or
596
596
  if valid?
@@ -1,18 +1,25 @@
1
1
  ActionView::Helpers::TranslationHelper.module_eval do
2
2
 
3
- # we need to remove the <span> tag because it will mess up
4
- # the dryml tags when ht is used in some place
5
- # we redefine the method since we cannot catch the rescued exception
6
- # although the only difference is the rescue block
7
- def translate(key, options = {})
3
+ include Hobo::Helper::Translations::Normalizer
4
+
5
+ # simple wrapper around the translate helper
6
+ # it implements a dryml <translate> and a <t> tag
7
+ # Improved security: interpolated variables are escaped
8
+ # Improved management: when it returns a string it is always html_safe
9
+ # It assumes the base translation string is html_safe
10
+ # It removes the <span> tag when the key is missing, because it would mess up
11
+ # the dryml tags when ht or t is used in some place
12
+
13
+ def translate(key, options={})
14
+ key, options = normalize_args(key, options)
8
15
  translation = I18n.translate(scope_key_by_partial(key), options.merge!(:raise => true))
9
- if html_safe_translation_key?(key) && translation.respond_to?(:html_safe)
16
+ if translation.respond_to?(:html_safe)
10
17
  translation.html_safe
11
18
  else
12
19
  translation
13
20
  end
14
21
  rescue I18n::MissingTranslationData => e
15
- keys = I18n.normalize_keys(I18n.locale, key, options[:scope]).join('.')
22
+ keys = I18n.normalize_keys(e.locale, e.key, e.options[:scope]).join('.')
16
23
  "[MISSING: #{keys}]"
17
24
  end
18
25
  alias_method :t, :translate
@@ -2,14 +2,7 @@ module Hobo
2
2
  module Helper
3
3
  module Translations
4
4
 
5
- # simple wrapper around the translate helper
6
- # it implements a dryml <translate> and a <t> tag
7
-
8
- def translate(*args)
9
- key, options = normalize_args(*args)
10
- super key.to_sym, options
11
- end
12
- alias_method :t, :translate
5
+ include Normalizer
13
6
 
14
7
  =begin
15
8
 
@@ -46,7 +39,7 @@ en:
46
39
  model_name = keys.shift
47
40
  model_class = begin model_name.camelize.constantize; rescue; end
48
41
  unless model_class && model_class < ActiveRecord::Base
49
- raise Hobo::I18nError, %(wrong model name: "#{model_name}" (extracted from translation key). You might want to use the translate/t tag/method instead.)
42
+ raise Hobo::I18nError, %(wrong model name: "#{model_name}" (extracted from translation key: "#{key}"). You might want to use the translate/t tag/method instead.)
50
43
  end
51
44
  options[:default].unshift("hobo.#{keys.join(".")}".to_sym)
52
45
  options[:model] = model_class.model_name.human(:count=>options[:count]||1)
@@ -54,22 +47,7 @@ en:
54
47
  end
55
48
  alias_method :ht, :hobo_translate
56
49
 
57
- private
58
-
59
- def normalize_args(key, options={})
60
- if (key.class == Hash) # called as a tag
61
- if key.has_key?(:default) && !key[:default].blank?
62
- Rails.logger.warn "hobo-i18n: 'default' should not be used as an attribute on *translate tags. If used, then you need to make sure that the tags inner-contents are not used. These are normally treated as defaults automatically, but if there is a default attribute then that inner-content will be hidden from this method - and will not be replaced with the translation found."
63
- end
64
- defaults = options[:default]
65
- options = key
66
- key = options.delete(:key)
67
- # Set options[:default] to complete the tag-argument-conversion process.
68
- options[:default] = defaults.call(options) if defaults.class == Proc
69
- end
70
- options[:default] = Array.wrap options[:default]
71
- [key, options]
72
- end
50
+
73
51
 
74
52
  end
75
53
  end
@@ -0,0 +1,39 @@
1
+ require 'active_support/core_ext/string/output_safety'
2
+ module Hobo
3
+ module Helper
4
+ module Translations
5
+ module Normalizer
6
+
7
+ private
8
+
9
+ def normalize_args(key, options={})
10
+ if (key.class == Hash) # called as a tag
11
+ if key.has_key?(:default) && !key[:default].blank?
12
+ Rails.logger.warn "hobo-i18n: 'default' should not be used as an attribute on *translate tags. If used, then you need to make sure that the tags inner-contents are not used. These are normally treated as defaults automatically, but if there is a default attribute then that inner-content will be hidden from this method - and will not be replaced with the translation found."
13
+ end
14
+ defaults = options[:default]
15
+ options = key
16
+ key = options.delete(:key)
17
+ # Set options[:default] to complete the tag-argument-conversion process.
18
+ options[:default] = defaults.call(options) if defaults.class == Proc
19
+ end
20
+ escape_options(options)
21
+ options[:default] = Array.wrap options[:default]
22
+ [key, options]
23
+ end
24
+
25
+ def escape_options(options)
26
+ options.each_pair do |k,v|
27
+ options[k] = case v
28
+ when Array
29
+ v.map {|i| i.respond_to?(:html_safe) ? ERB::Util.html_escape(i) : i}
30
+ else
31
+ v.respond_to?(:html_safe) ? ERB::Util.html_escape(v) : v
32
+ end
33
+ end
34
+ end
35
+
36
+ end
37
+ end
38
+ end
39
+ end
@@ -653,7 +653,7 @@ For situations where there are too many target records to practically include in
653
653
  -->
654
654
  <def tag="select-one" attrs="include-none, blank-message, options, sort, limit, text-method"><%
655
655
  raise Hobo::PermissionDeniedError.new("Not allowed to edit #{this_field}") if !attributes[:disabled] && !can_edit?
656
- blank_message ||= ht("#{this_type.name.tableize}.message.no", :default=>"(No #{this_type.model_name.human})")
656
+ blank_message ||= ht("#{this_type.name.underscore}.message.no", :default=>"(No #{this_type.model_name.human})")
657
657
  limit ||= 100
658
658
 
659
659
  options ||= begin
@@ -89,7 +89,7 @@ This is a simple tag - just look at the source if you need to know more detail.
89
89
  <ul class="navigation account-nav" param>
90
90
  <li if="&Rails.env.development?" param="dev-user-changer"><dev-user-changer/></li>
91
91
  <if test="&logged_in?">
92
- <li class='nav-item' param="logged-in-as"><a to="&current_user"><t key="hobo.actions.logged_in_as_html" name="&name">Logged in as <name/></t></a></li>
92
+ <li class='nav-item' param="logged-in-as"><a to="&current_user"><t key="hobo.actions.logged_in_as" name="&name">Logged in as <name/></t></a></li>
93
93
  <li class='nav-item' param="account"><a action="account"><t key="hobo.actions.account">Account</t></a></li>
94
94
  <li class='nav-item' param="log-out"><a href="&logout_url"><t key="hobo.actions.logout">Log out</t></a></li>
95
95
  </if>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hobo
3
3
  version: !ruby/object:Gem::Version
4
- hash: -1637108442
4
+ hash: -1637108441
5
5
  prerelease: true
6
6
  segments:
7
7
  - 1
8
8
  - 3
9
9
  - 0
10
- - pre20
11
- version: 1.3.0.pre20
10
+ - pre21
11
+ version: 1.3.0.pre21
12
12
  platform: ruby
13
13
  authors:
14
14
  - Tom Locke
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-11-22 00:00:00 -04:00
19
+ date: 2010-11-24 00:00:00 -04:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -59,13 +59,13 @@ dependencies:
59
59
  requirements:
60
60
  - - "="
61
61
  - !ruby/object:Gem::Version
62
- hash: -1637108442
62
+ hash: -1637108441
63
63
  segments:
64
64
  - 1
65
65
  - 3
66
66
  - 0
67
- - pre20
68
- version: 1.3.0.pre20
67
+ - pre21
68
+ version: 1.3.0.pre21
69
69
  type: :runtime
70
70
  version_requirements: *id003
71
71
  - !ruby/object:Gem::Dependency
@@ -76,13 +76,13 @@ dependencies:
76
76
  requirements:
77
77
  - - "="
78
78
  - !ruby/object:Gem::Version
79
- hash: -1637108442
79
+ hash: -1637108441
80
80
  segments:
81
81
  - 1
82
82
  - 3
83
83
  - 0
84
- - pre20
85
- version: 1.3.0.pre20
84
+ - pre21
85
+ version: 1.3.0.pre21
86
86
  type: :runtime
87
87
  version_requirements: *id004
88
88
  - !ruby/object:Gem::Dependency
@@ -93,13 +93,13 @@ dependencies:
93
93
  requirements:
94
94
  - - "="
95
95
  - !ruby/object:Gem::Version
96
- hash: -1637108442
96
+ hash: -1637108441
97
97
  segments:
98
98
  - 1
99
99
  - 3
100
100
  - 0
101
- - pre20
102
- version: 1.3.0.pre20
101
+ - pre21
102
+ version: 1.3.0.pre21
103
103
  type: :runtime
104
104
  version_requirements: *id005
105
105
  - !ruby/object:Gem::Dependency
@@ -278,6 +278,7 @@ files:
278
278
  - lib/hobo/extensions/i18n.rb
279
279
  - lib/hobo/helper.rb
280
280
  - lib/hobo/helper/translations.rb
281
+ - lib/hobo/helper/translations/normalizer.rb
281
282
  - lib/hobo/model.rb
282
283
  - lib/hobo/model/accessible_associations.rb
283
284
  - lib/hobo/model/find_for.rb