phrase 0.3.4 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
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.