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

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/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: