phrase 0.3.4 → 0.3.5

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/lib/ext/all.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'ext/object'
2
+ require 'ext/try'
3
+ require 'ext/hash'
data/lib/ext/hash.rb ADDED
@@ -0,0 +1,8 @@
1
+ class Hash
2
+ def symbolize_keys!
3
+ keys.each do |key|
4
+ self[(key.to_sym rescue key) || key] = delete(key)
5
+ end
6
+ self
7
+ end
8
+ end
data/lib/ext/object.rb ADDED
@@ -0,0 +1,130 @@
1
+ # encoding: utf-8
2
+
3
+ class Object
4
+ # An object is blank if it's false, empty, or a whitespace string.
5
+ # For example, "", " ", +nil+, [], and {} are all blank.
6
+ #
7
+ # This simplifies:
8
+ #
9
+ # if address.nil? || address.empty?
10
+ #
11
+ # ...to:
12
+ #
13
+ # if address.blank?
14
+ def blank?
15
+ respond_to?(:empty?) ? empty? : !self
16
+ end
17
+
18
+ # An object is present if it's not <tt>blank?</tt>.
19
+ def present?
20
+ !blank?
21
+ end
22
+
23
+ # Returns object if it's <tt>present?</tt> otherwise returns +nil+.
24
+ # <tt>object.presence</tt> is equivalent to <tt>object.present? ? object : nil</tt>.
25
+ #
26
+ # This is handy for any representation of objects where blank is the same
27
+ # as not present at all. For example, this simplifies a common check for
28
+ # HTTP POST/query parameters:
29
+ #
30
+ # state = params[:state] if params[:state].present?
31
+ # country = params[:country] if params[:country].present?
32
+ # region = state || country || 'US'
33
+ #
34
+ # ...becomes:
35
+ #
36
+ # region = params[:state].presence || params[:country].presence || 'US'
37
+ def presence
38
+ self if present?
39
+ end
40
+ end
41
+
42
+ class NilClass
43
+ # +nil+ is blank:
44
+ #
45
+ # nil.blank? # => true
46
+ #
47
+ def blank?
48
+ true
49
+ end
50
+ end
51
+
52
+ class FalseClass
53
+ # +false+ is blank:
54
+ #
55
+ # false.blank? # => true
56
+ #
57
+ def blank?
58
+ true
59
+ end
60
+ end
61
+
62
+ class TrueClass
63
+ # +true+ is not blank:
64
+ #
65
+ # true.blank? # => false
66
+ #
67
+ def blank?
68
+ false
69
+ end
70
+ end
71
+
72
+ class Array
73
+ # An array is blank if it's empty:
74
+ #
75
+ # [].blank? # => true
76
+ # [1,2,3].blank? # => false
77
+ #
78
+ alias_method :blank?, :empty?
79
+ end
80
+
81
+ class Hash
82
+ # A hash is blank if it's empty:
83
+ #
84
+ # {}.blank? # => true
85
+ # {:key => 'value'}.blank? # => false
86
+ #
87
+ alias_method :blank?, :empty?
88
+ end
89
+
90
+ class String
91
+ if defined?(Encoding) && "".respond_to?(:encode)
92
+ def encoding_aware?
93
+ true
94
+ end
95
+ else
96
+ def encoding_aware?
97
+ false
98
+ end
99
+ end
100
+
101
+ # 0x3000: fullwidth whitespace
102
+ NON_WHITESPACE_REGEXP = %r![^\s#{[0x3000].pack("U")}]!
103
+
104
+ # A string is blank if it's empty or contains whitespaces only:
105
+ #
106
+ # "".blank? # => true
107
+ # " ".blank? # => true
108
+ # " ".blank? # => true
109
+ # " something here ".blank? # => false
110
+ #
111
+ def blank?
112
+ # 1.8 does not takes [:space:] properly
113
+ if encoding_aware?
114
+ self !~ /[^[:space:]]/
115
+ else
116
+ self !~ NON_WHITESPACE_REGEXP
117
+ end
118
+ end
119
+ end
120
+
121
+ class Numeric #:nodoc:
122
+ # No number is blank:
123
+ #
124
+ # 1.blank? # => false
125
+ # 0.blank? # => false
126
+ #
127
+ def blank?
128
+ false
129
+ end
130
+ end
data/lib/ext/try.rb ADDED
@@ -0,0 +1,57 @@
1
+ class Object
2
+ # Invokes the method identified by the symbol +method+, passing it any arguments
3
+ # and/or the block specified, just like the regular Ruby <tt>Object#send</tt> does.
4
+ #
5
+ # *Unlike* that method however, a +NoMethodError+ exception will *not* be raised
6
+ # and +nil+ will be returned instead, if the receiving object is a +nil+ object or NilClass.
7
+ #
8
+ # If try is called without a method to call, it will yield any given block with the object.
9
+ #
10
+ # Please also note that +try+ is defined on +Object+, therefore it won't work with
11
+ # subclasses of +BasicObject+. For example, using try with +SimpleDelegator+ will
12
+ # delegate +try+ to target instead of calling it on delegator itself.
13
+ #
14
+ # ==== Examples
15
+ #
16
+ # Without +try+
17
+ # @person && @person.name
18
+ # or
19
+ # @person ? @person.name : nil
20
+ #
21
+ # With +try+
22
+ # @person.try(:name)
23
+ #
24
+ # +try+ also accepts arguments and/or a block, for the method it is trying
25
+ # Person.try(:find, 1)
26
+ # @people.try(:collect) {|p| p.name}
27
+ #
28
+ # Without a method argument try will yield to the block unless the receiver is nil.
29
+ # @person.try { |p| "#{p.first_name} #{p.last_name}" }
30
+ #--
31
+ # +try+ behaves like +Object#send+, unless called on +NilClass+.
32
+ def try(*a, &b)
33
+ if a.empty? && block_given?
34
+ yield self
35
+ else
36
+ __send__(*a, &b)
37
+ end
38
+ end
39
+ end
40
+
41
+ class NilClass
42
+ # Calling +try+ on +nil+ always returns +nil+.
43
+ # It becomes specially helpful when navigating through associations that may return +nil+.
44
+ #
45
+ # === Examples
46
+ #
47
+ # nil.try(:name) # => nil
48
+ #
49
+ # Without +try+
50
+ # @person && !@person.children.blank? && @person.children.first.name
51
+ #
52
+ # With +try+
53
+ # @person.try(:children).try(:first).try(:name)
54
+ def try(*args)
55
+ nil
56
+ end
57
+ end
data/lib/phrase.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
-
3
- require 'active_support/all'
2
+ require 'ext/all'
4
3
  require 'colorize'
5
4
 
6
5
  module Phrase
@@ -7,16 +7,19 @@ module FastGettext
7
7
  def __with_phrase(*args)
8
8
  Phrase::Delegate::FastGettext.new(:_, *args)
9
9
  end
10
- alias_method_chain :_, :phrase
10
+ alias_method :__without_phrase, :_
11
+ alias_method :_, :__with_phrase
11
12
 
12
13
  def n__with_phrase(*args)
13
14
  Phrase::Delegate::FastGettext.new(:n_, *args)
14
15
  end
15
- alias_method_chain :n_, :phrase
16
+ alias_method :n__without_phrase, :n_
17
+ alias_method :n_, :n__with_phrase
16
18
 
17
19
  def s__with_phrase(*args)
18
20
  Phrase::Delegate::FastGettext.new(:s_, *args)
19
21
  end
20
- alias_method_chain :s_, :phrase
22
+ alias_method :s__without_phrase, :s_
23
+ alias_method :s_, :s__with_phrase
21
24
  end
22
25
  end if defined? FastGettext::Translation
@@ -5,7 +5,8 @@ module I18n
5
5
  def translate_with_phrase(*args)
6
6
  Phrase.backend.translate(*args)
7
7
  end
8
- alias_method_chain :translate, :phrase
8
+ alias_method :translate_without_phrase, :translate
9
+ alias_method :translate, :translate_with_phrase
9
10
  alias_method :t, :translate
10
11
  end
11
12
  end if defined?(I18n)
@@ -1,6 +1,7 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  require 'cgi'
4
+ require 'json'
4
5
  require 'net/http'
5
6
  require 'net/https'
6
7
  require 'phrase'
@@ -191,7 +192,7 @@ private
191
192
  client = Net::HTTP.new(Phrase::Api::Config.api_host, Phrase::Api::Config.api_port)
192
193
  client.use_ssl = true if Phrase::Api::Config.api_use_ssl?
193
194
  client.verify_mode = OpenSSL::SSL::VERIFY_NONE
194
- client.ca_file = File.join(File.dirname(__FILE__), "..", "..", "cacert.pem")
195
+ client.ca_file = File.join(File.dirname(__FILE__), "..", "..", "..", "cacert.pem")
195
196
  client
196
197
  end
197
198
 
@@ -68,7 +68,6 @@ protected
68
68
  transform_args_based_on_caller(duped_args)
69
69
  end
70
70
 
71
-
72
71
  def normalized_key(duped_args)
73
72
  splitted_args = split_args(duped_args)
74
73
  key = I18n::Backend::Flatten.normalize_flat_keys(*splitted_args)
@@ -15,7 +15,7 @@ private
15
15
  when :_
16
16
  {msgid: args.first}
17
17
  when :n_
18
- {msgid: args.first, msgid_plural: args.second, count: args.last}
18
+ {msgid: args.first, msgid_plural: args[1], count: args.last}
19
19
  when :s_
20
20
  {msgid: args.first}
21
21
  else
@@ -24,4 +24,4 @@ private
24
24
  end
25
25
  params
26
26
  end
27
- end
27
+ end
@@ -112,6 +112,10 @@ private
112
112
  if @key == "helpers.label.#{entry}" # http://apidock.com/rails/v3.1.0/ActionView/Helpers/FormHelper/label
113
113
  @fallback_keys << "activerecord.attributes.#{entry}"
114
114
  end
115
+
116
+ if @key.start_with?("simple_form.") # special treatment for simple form
117
+ @fallback_keys << "activerecord.attributes.#{item.to_s}"
118
+ end
115
119
  end
116
120
  end
117
121
 
@@ -156,4 +160,4 @@ private
156
160
  end unless (data.is_a?(String) || data.nil?)
157
161
  key_names
158
162
  end
159
- end
163
+ end
@@ -1,3 +1,3 @@
1
1
  module Phrase
2
- VERSION = "0.3.4"
2
+ VERSION = "0.3.5"
3
3
  end
@@ -1,5 +1,4 @@
1
1
  module Phrase::ViewHelpers
2
-
3
2
  def phrase_javascript(auth_token=nil)
4
3
  return "" unless Phrase.enabled?
5
4
 
@@ -15,6 +14,6 @@ module Phrase::ViewHelpers
15
14
  })();
16
15
  //]]>
17
16
  </script>}
18
- js.html_safe
17
+ js.respond_to?(:html_safe) ? js.html_safe : js
19
18
  end
20
- end
19
+ end
data/phrase.gemspec CHANGED
@@ -19,8 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.files = git_files
20
20
  s.test_files = s.files.grep(%r{^(spec)/})
21
21
  s.executables = %w(phrase)
22
- s.require_paths = ["lib"]
23
- s.add_dependency('activesupport', '~> 3.0')
22
+ s.require_paths = ["lib"]
24
23
  s.add_dependency('colorize')
25
24
  s.add_dependency('json')
26
25
  s.add_development_dependency('rake')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phrase
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,33 +9,27 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-25 00:00:00.000000000 Z
12
+ date: 2013-03-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: activesupport
16
- requirement: &70288255847780 !ruby/object:Gem::Requirement
15
+ name: colorize
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ~>
19
+ - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: '3.0'
21
+ version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70288255847780
25
- - !ruby/object:Gem::Dependency
26
- name: colorize
27
- requirement: &70288255847400 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
28
25
  none: false
29
26
  requirements:
30
27
  - - ! '>='
31
28
  - !ruby/object:Gem::Version
32
29
  version: '0'
33
- type: :runtime
34
- prerelease: false
35
- version_requirements: *70288255847400
36
30
  - !ruby/object:Gem::Dependency
37
31
  name: json
38
- requirement: &70288255846940 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
39
33
  none: false
40
34
  requirements:
41
35
  - - ! '>='
@@ -43,10 +37,15 @@ dependencies:
43
37
  version: '0'
44
38
  type: :runtime
45
39
  prerelease: false
46
- version_requirements: *70288255846940
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
47
46
  - !ruby/object:Gem::Dependency
48
47
  name: rake
49
- requirement: &70288255846520 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
50
49
  none: false
51
50
  requirements:
52
51
  - - ! '>='
@@ -54,10 +53,15 @@ dependencies:
54
53
  version: '0'
55
54
  type: :development
56
55
  prerelease: false
57
- version_requirements: *70288255846520
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
58
62
  - !ruby/object:Gem::Dependency
59
63
  name: rspec
60
- requirement: &70288255846100 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
61
65
  none: false
62
66
  requirements:
63
67
  - - ! '>='
@@ -65,10 +69,15 @@ dependencies:
65
69
  version: '0'
66
70
  type: :development
67
71
  prerelease: false
68
- version_requirements: *70288255846100
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: i18n
71
- requirement: &70288255845680 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
72
81
  none: false
73
82
  requirements:
74
83
  - - ! '>='
@@ -76,10 +85,15 @@ dependencies:
76
85
  version: '0'
77
86
  type: :development
78
87
  prerelease: false
79
- version_requirements: *70288255845680
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
80
94
  - !ruby/object:Gem::Dependency
81
95
  name: webmock
82
- requirement: &70288255845260 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
83
97
  none: false
84
98
  requirements:
85
99
  - - ! '>='
@@ -87,10 +101,15 @@ dependencies:
87
101
  version: '0'
88
102
  type: :development
89
103
  prerelease: false
90
- version_requirements: *70288255845260
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
91
110
  - !ruby/object:Gem::Dependency
92
111
  name: vcr
93
- requirement: &70288255844840 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
94
113
  none: false
95
114
  requirements:
96
115
  - - ! '>='
@@ -98,10 +117,15 @@ dependencies:
98
117
  version: '0'
99
118
  type: :development
100
119
  prerelease: false
101
- version_requirements: *70288255844840
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
102
126
  - !ruby/object:Gem::Dependency
103
127
  name: timecop
104
- requirement: &70288255844420 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
105
129
  none: false
106
130
  requirements:
107
131
  - - ! '>='
@@ -109,7 +133,12 @@ dependencies:
109
133
  version: '0'
110
134
  type: :development
111
135
  prerelease: false
112
- version_requirements: *70288255844420
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
113
142
  description: phrase allows you to edit translations in-place on the page itself. More
114
143
  information at phraseapp.com
115
144
  email:
@@ -129,6 +158,10 @@ files:
129
158
  - Rakefile
130
159
  - bin/phrase
131
160
  - cacert.pem
161
+ - lib/ext/all.rb
162
+ - lib/ext/hash.rb
163
+ - lib/ext/object.rb
164
+ - lib/ext/try.rb
132
165
  - lib/phrase.rb
133
166
  - lib/phrase/adapters/fast_gettext.rb
134
167
  - lib/phrase/adapters/i18n.rb
@@ -200,7 +233,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
233
  version: 1.3.6
201
234
  requirements: []
202
235
  rubyforge_project: phrase
203
- rubygems_version: 1.8.10
236
+ rubygems_version: 1.8.24
204
237
  signing_key:
205
238
  specification_version: 3
206
239
  summary: The best way to manage i18n.