phrase 0.2.0.beta.2 → 0.2.0.beta.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -2,6 +2,7 @@ source :rubygems
2
2
 
3
3
  gem 'json'
4
4
  gem "activesupport", :require => "active_support"
5
+ gem 'addressable'
5
6
 
6
7
  group :test do
7
8
  gem 'rspec'
data/Gemfile.lock CHANGED
@@ -25,6 +25,7 @@ PLATFORMS
25
25
 
26
26
  DEPENDENCIES
27
27
  activesupport
28
+ addressable
28
29
  i18n
29
30
  json
30
31
  rspec
@@ -1,5 +1,6 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
+ require 'addressable/uri'
3
4
  require 'net/http'
4
5
  require 'net/https'
5
6
  require 'phrase'
@@ -37,6 +38,11 @@ class Phrase::Api::Client
37
38
  keys
38
39
  end
39
40
 
41
+ def find_keys_by_name(key_names=[])
42
+ result = JSON.parse(perform_api_request("/translation_keys", :get, {:key_names => key_names}))
43
+ result
44
+ end
45
+
40
46
  def create_locale(name)
41
47
  raise "You must specify a name" if name.nil? or name.blank?
42
48
 
@@ -128,11 +134,10 @@ private
128
134
  end
129
135
 
130
136
  def get_request(endpoint, params={})
131
- query_string = "?auth_token=#{@auth_token}"
132
- params.each do |key, value|
133
- query_string << "&#{key}=#{value}"
134
- end unless params.empty?
135
- request = Net::HTTP::Get.new("#{api_path_for(endpoint)}#{query_string}")
137
+ params.merge!('auth_token' => @auth_token)
138
+ uri = Addressable::URI.new
139
+ uri.query_values = params
140
+ request = Net::HTTP::Get.new("#{api_path_for(endpoint)}?#{uri.query}")
136
141
  request
137
142
  end
138
143
 
@@ -7,16 +7,17 @@ module Phrase::Backend::Base
7
7
  def translate(*args)
8
8
  if Phrase.enabled?
9
9
  key = lookup_normalized_key(*args)
10
- phrase_delegate_for(key[:key])
10
+ phrase_delegate_for(key[:key], *args)
11
11
  else
12
12
  I18n.translate_without_phrase(*args)
13
13
  end
14
14
  end
15
15
 
16
16
  protected
17
- def phrase_delegate_for(key=nil)
18
- return nil unless key.presence
19
- Phrase::Delegate.new(key)
17
+ def phrase_delegate_for(key=nil, *args)
18
+ return nil unless key.present?
19
+ options = args[1].nil? ? {} : args[1]
20
+ Phrase::Delegate.new(key, options)
20
21
  end
21
22
 
22
23
  def lookup_normalized_key(*args)
@@ -1,10 +1,15 @@
1
1
  require 'phrase/api'
2
2
 
3
3
  class Phrase::Delegate
4
- attr_accessor :key, :api_client
4
+ attr_accessor :key, :display_key, :options, :api_client, :fallback_keys
5
5
 
6
- def initialize(key)
7
- @key = key
6
+ def initialize(key, options={})
7
+ @display_key = @key = key
8
+ @options = options
9
+ @fallback_keys = []
10
+
11
+ extract_fallback_keys
12
+ identify_key_to_display if @fallback_keys.any?
8
13
  end
9
14
 
10
15
  def to_s
@@ -12,7 +17,7 @@ class Phrase::Delegate
12
17
  end
13
18
 
14
19
  def method_missing(*args, &block)
15
- if @key.respond_to?(args.first)
20
+ if @key.respond_to?(args.first)
16
21
  to_s.send(*args)
17
22
  else
18
23
  data = translation_or_subkeys
@@ -28,8 +33,47 @@ class Phrase::Delegate
28
33
  end
29
34
 
30
35
  private
36
+ def identify_key_to_display
37
+ key_names = [@key] | @fallback_keys
38
+ available_key_names = find_keys_from_service(key_names).map { |key| key["name"] }
39
+ @display_key = @key
40
+ key_names.each do |item|
41
+ if available_key_names.include?(item)
42
+ @display_key = item
43
+ break
44
+ end
45
+ end
46
+ end
47
+
48
+ def find_keys_from_service(key_names)
49
+ api_client.find_keys_by_name(key_names)
50
+ end
51
+
52
+ def extract_fallback_keys
53
+ fallback_items = []
54
+ if @options.has_key?(:default)
55
+ if @options[:default].kind_of?(Array)
56
+ fallback_items = @options[:default]
57
+ else
58
+ fallback_items << @options[:default]
59
+ end
60
+ end
61
+ fallback_items.each do |item|
62
+ process_fallback_item(item)
63
+ end
64
+ end
65
+
66
+ def process_fallback_item(item)
67
+ if item.kind_of?(Symbol)
68
+ @fallback_keys << item.to_s
69
+ if @key == "helpers.label.#{item.to_s}" # http://apidock.com/rails/v3.1.0/ActionView/Helpers/FormHelper/label
70
+ @fallback_keys << "activerecord.attributes.#{item.to_s}"
71
+ end
72
+ end
73
+ end
74
+
31
75
  def decorated_key_name
32
- "#{Phrase.prefix}phrase_#{@key}#{Phrase.suffix}"
76
+ "#{Phrase.prefix}phrase_#{@display_key}#{Phrase.suffix}"
33
77
  end
34
78
 
35
79
  def translation_or_subkeys
data/phrase.gemspec CHANGED
@@ -4,7 +4,7 @@ $:.unshift lib unless $:.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "phrase"
7
- s.version = "0.2.0.beta.2"
7
+ s.version = "0.2.0.beta.3"
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Dynport GmbH"]
10
10
  s.email = ["info@phraseapp.com"]
@@ -18,4 +18,5 @@ Gem::Specification.new do |s|
18
18
  s.executables = %w(phrase)
19
19
  s.require_paths = ["lib"]
20
20
  s.add_dependency('activesupport', '~> 3.0')
21
+ s.add_dependency('addressable', '~> 2.2.8')
21
22
  end
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.2.0.beta.2
4
+ version: 0.2.0.beta.3
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-19 00:00:00.000000000 Z
12
+ date: 2012-06-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -27,6 +27,22 @@ dependencies:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: '3.0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: addressable
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 2.2.8
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 2.2.8
30
46
  description: phrase allows you to edit translations inline, on the page itself. More
31
47
  information at phraseapp.com
32
48
  email: