linguara 0.0.5 → 0.0.6
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 +1 -1
- data/lib/linguara/active_record.rb +1 -1
- data/lib/linguara/translation.rb +43 -9
- data/lib/linguara/utils.rb +4 -16
- data/lib/linguara.rb +25 -27
- data/linguara.gemspec +2 -2
- data/spec/linguara_spec.rb +6 -17
- data/spec/translation_spec.rb +4 -4
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.6
|
@@ -44,7 +44,7 @@ module Linguara
|
|
44
44
|
protected
|
45
45
|
|
46
46
|
def linguara_key_name(field, index)
|
47
|
-
"#{self.class.class_name}_#{self.id}_#{index}_#{field}"
|
47
|
+
"linguara_#{self.class.class_name}_#{self.id}_#{index}_#{field}"
|
48
48
|
end
|
49
49
|
|
50
50
|
#override this if you want to have a customised method for determining which language to use.
|
data/lib/linguara/translation.rb
CHANGED
@@ -1,22 +1,56 @@
|
|
1
1
|
class Translation
|
2
2
|
|
3
|
-
attr_accessor :translation_hash
|
3
|
+
attr_accessor :translation_hash, :element
|
4
4
|
|
5
5
|
def initialize(element,options = {})
|
6
|
-
unless options[:
|
7
|
-
options[:
|
8
|
-
options[:
|
9
|
-
options[:translation][:due_date] ||= Date.today + 1.month
|
6
|
+
unless options[:due_date]
|
7
|
+
options[:due_date] ||= Date.today + Linguara.configuration.request_valid_for.to_i.days unless Linguara.configuration.request_valid_for.blank?
|
8
|
+
options[:due_date] ||= Date.today + 1.month
|
10
9
|
end
|
11
10
|
options[:return_url] ||= Linguara.configuration.return_url
|
12
11
|
options[:source_language] ||= I18n.locale.to_s
|
13
|
-
|
14
|
-
options[:content][:plain] = Hash.new
|
15
|
-
options[:content][:plain][:paragraphs] = element.fields_to_send
|
12
|
+
self.element = element#.fields_to_send
|
16
13
|
self.translation_hash = options
|
17
14
|
end
|
18
15
|
|
19
16
|
def to_hash
|
20
|
-
|
17
|
+
ret = {}
|
18
|
+
ret[:translation] = self.translation_hash
|
19
|
+
ret
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_xml(options = {}, builder_options = {})
|
23
|
+
builder_options[:indent] ||= 2
|
24
|
+
xml = builder_options[:builder] ||= Builder::XmlMarkup.new(:indent => builder_options[:indent])
|
25
|
+
xml.instruct! unless builder_options[:skip_instruct]
|
26
|
+
xml.translation do
|
27
|
+
self.translation_hash.merge(options).each_pair do |k, v|
|
28
|
+
next if k.blank? or v.blank?
|
29
|
+
tag_element(xml, k, v)
|
30
|
+
end
|
31
|
+
xml.content :type => 'xml' do
|
32
|
+
self.element.fields_to_send.each_pair do |k, v|
|
33
|
+
xml.paragraph v, :id => k
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def to_xml_recursive(xml, object)
|
42
|
+
object.each_pair do |k, v|
|
43
|
+
tag_element(xml, k, v)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def tag_element(builder, k, v)
|
48
|
+
if v.kind_of?(Hash)
|
49
|
+
builder.tag!(k) do
|
50
|
+
to_xml_recursive(builder, v)
|
51
|
+
end
|
52
|
+
else
|
53
|
+
builder.tag!(k, v)
|
54
|
+
end
|
21
55
|
end
|
22
56
|
end
|
data/lib/linguara/utils.rb
CHANGED
@@ -1,21 +1,9 @@
|
|
1
1
|
module Linguara
|
2
2
|
module Utils
|
3
|
-
#TODO describe it, spec and move somewhere else
|
4
|
-
# http://www.keyongtech.com/5211204-nested-http-params-on-ruby
|
5
|
-
def serialize_form_data(data, path = "",serialized_params = [])
|
6
|
-
if data.kind_of? Hash
|
7
|
-
data.each_pair{|k,v| token = (path == "" ? CGI::escape(k.to_s) : "[#{CGI::escape(k.to_s)}]"); serialize_form_data(v, "#{path}#{token}",serialized_params)}
|
8
|
-
else
|
9
|
-
#end of recursion
|
10
|
-
serialized_params << "#{path}=#{CGI::escape(data.to_s)}"
|
11
|
-
end
|
12
|
-
|
13
|
-
return serialized_params.join("&") if (path == "")
|
14
|
-
end
|
15
3
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
4
|
+
def strip_blank_attributes(data)
|
5
|
+
data = data.each_pair { |k,v| v.is_a?(Hash) ? (strip_blank_attributes(v)) : (v) }
|
6
|
+
data.delete_if { |k,v| v.blank?}
|
7
|
+
end
|
20
8
|
end
|
21
9
|
end
|
data/lib/linguara.rb
CHANGED
@@ -37,36 +37,31 @@ module Linguara
|
|
37
37
|
def send_translation_request(element, options = {})
|
38
38
|
translation = Translation.new(element, options)
|
39
39
|
url= URI.parse("#{Linguara.configuration.server_path}api/translations.xml")
|
40
|
-
|
41
|
-
send_linguara_request(req, url)
|
40
|
+
send_linguara_request(url, :post, translation.to_xml(strip_blank_attributes(options).merge(authorization_options)))
|
42
41
|
end
|
43
42
|
|
44
43
|
# Sends status request
|
45
44
|
def send_status_query(translation_request_id)
|
46
45
|
url= URI.parse("#{Linguara.configuration.server_path}api/translations/#{translation_request_id}/status.xml")
|
47
|
-
|
48
|
-
send_linguara_request(req, url)
|
46
|
+
send_linguara_request(url, :post, authorization_xml)
|
49
47
|
end
|
50
48
|
|
51
49
|
# Sends languages request
|
52
50
|
def send_languages_request(options={})
|
53
51
|
url= URI.parse("#{Linguara.configuration.server_path}api/languages.xml")
|
54
|
-
|
55
|
-
send_linguara_request(req, url)
|
52
|
+
send_linguara_request(url, :get)
|
56
53
|
end
|
57
54
|
|
58
55
|
# Sends specializations request
|
59
56
|
def send_specializations_request(options = {})
|
60
57
|
url= URI.parse("#{Linguara.configuration.server_path}api/specializations.xml")
|
61
|
-
|
62
|
-
send_linguara_request(req, url)
|
58
|
+
send_linguara_request(url, :get)
|
63
59
|
end
|
64
60
|
|
65
61
|
# Sends translators request
|
66
62
|
def send_translators_request(options = {})
|
67
63
|
url= URI.parse("#{Linguara.configuration.server_path}api/translators.xml")
|
68
|
-
|
69
|
-
send_linguara_request(req, url)
|
64
|
+
send_linguara_request(url, :get)
|
70
65
|
end
|
71
66
|
|
72
67
|
def available_languages
|
@@ -102,30 +97,33 @@ module Linguara
|
|
102
97
|
end
|
103
98
|
|
104
99
|
private
|
105
|
-
|
106
|
-
def
|
107
|
-
|
108
|
-
|
100
|
+
|
101
|
+
def authorization_options
|
102
|
+
{
|
103
|
+
:site_url => Linguara.configuration.site_url,
|
104
|
+
:account_token => Linguara.configuration.api_key
|
105
|
+
}
|
106
|
+
end
|
107
|
+
|
108
|
+
def authorization_xml
|
109
|
+
"<translation><site_url>#{Linguara.configuration.site_url}</site_url><account_token>#{Linguara.configuration.api_key}</account_token></translation>"
|
110
|
+
end
|
111
|
+
|
112
|
+
def prepare_request(url, method, data)
|
113
|
+
if method == :get
|
109
114
|
req = Net::HTTP::Get.new(url.path)
|
110
|
-
data.delete(:method)
|
111
115
|
else
|
112
116
|
req = Net::HTTP::Post.new(url.path)
|
113
117
|
end
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
:site_url => Linguara.configuration.site_url,
|
118
|
-
:account_token => Linguara.configuration.api_key
|
119
|
-
}.merge(data))
|
120
|
-
else
|
121
|
-
req.body = serialize_form_data(data)
|
122
|
-
end
|
123
|
-
req.content_type = 'application/x-www-form-urlencoded'
|
118
|
+
#log("BODY ----- :\n\n #{data}")
|
119
|
+
req.body = "#{data}"
|
120
|
+
req.content_type = 'text/xml'
|
124
121
|
req.basic_auth(Linguara.configuration.user, Linguara.configuration.password)
|
125
122
|
req
|
126
123
|
end
|
127
|
-
|
128
|
-
def send_linguara_request(
|
124
|
+
|
125
|
+
def send_linguara_request(url, method, data = '' )
|
126
|
+
req = prepare_request url, method, data
|
129
127
|
#TODO handle timeout
|
130
128
|
begin
|
131
129
|
log("SENDING LINGUARA REQUEST TO #{url.path}: \n#{req.body}")
|
data/linguara.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{linguara}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Aleksander Dabrowski", "Piotr Barczuk"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-08-11}
|
13
13
|
s.description = %q{Gem to integrate with linguara api}
|
14
14
|
s.email = %q{aleks@kumulator.pl}
|
15
15
|
s.extra_rdoc_files = [
|
data/spec/linguara_spec.rb
CHANGED
@@ -76,35 +76,24 @@ describe "Linguara" do
|
|
76
76
|
describe '#prepare_request' do
|
77
77
|
before :each do
|
78
78
|
@url = URI.parse("http://www.example.com/api/translations")
|
79
|
-
@
|
79
|
+
@data = '<translation><site_url>text.com</site_url><account_token>abcdefg</account_token></translation>'
|
80
80
|
end
|
81
81
|
|
82
82
|
it 'sets :POST by deafault' do
|
83
|
-
request = Linguara.send(:prepare_request, @url, @
|
83
|
+
request = Linguara.send(:prepare_request, @url, :post, @data)
|
84
84
|
request.is_a?(Net::HTTP::Post).should be_true
|
85
85
|
request.body.include?("post").should be_false
|
86
86
|
end
|
87
87
|
|
88
88
|
it 'sets :GET when option given' do
|
89
|
-
request = Linguara.send(:prepare_request, @url,
|
89
|
+
request = Linguara.send(:prepare_request, @url, :get, @data)
|
90
90
|
request.is_a?(Net::HTTP::Get).should be_true
|
91
91
|
request.body.include?("get").should be_false
|
92
92
|
end
|
93
93
|
|
94
|
-
it '
|
95
|
-
request = Linguara.send(:prepare_request, @url,
|
96
|
-
request.
|
97
|
-
end
|
98
|
-
|
99
|
-
it 'skips blank parameters deep' do
|
100
|
-
request = Linguara.send(:prepare_request, @url, @options.merge(:blank_parent => { :blank_attribute => ""}))
|
101
|
-
request.body.include?("blank_attribute").should be_false
|
102
|
-
request.body.include?("blank_parent").should be_false
|
103
|
-
end
|
104
|
-
|
105
|
-
it 'sets content type to application/x-www-form-urlencoded' do
|
106
|
-
request = Linguara.send(:prepare_request, @url, @options)
|
107
|
-
request.content_type.should be_eql("application/x-www-form-urlencoded")
|
94
|
+
it 'sets content type to text/xml' do
|
95
|
+
request = Linguara.send(:prepare_request, @url, :get, @data)
|
96
|
+
request.content_type.should be_eql("text/xml")
|
108
97
|
end
|
109
98
|
|
110
99
|
end
|
data/spec/translation_spec.rb
CHANGED
@@ -7,18 +7,18 @@ describe Translation do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'creates default due_date on default' do
|
10
|
-
subject.
|
10
|
+
subject.to_xml.should match(Regexp.new("<due_date>#{Date.today + Linguara.configuration.request_valid_for.to_i.days}</due_date>"))
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'creates return_url on default' do
|
14
|
-
subject.
|
14
|
+
subject.to_xml.should match(Regexp.new("<return_url>#{Linguara.configuration.return_url}</return_url>"))
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'sets source language on default' do
|
18
|
-
subject.
|
18
|
+
subject.to_xml.should match(Regexp.new("<source_language>#{I18n.locale.to_s}</source_language>"))
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'creates paragraphs for model' do
|
22
|
-
subject.
|
22
|
+
subject.to_xml.should match(Regexp.new("(<paragraph id=['|\"].*['|\"]>[^<>]+</paragraph>\s*)+"))
|
23
23
|
end
|
24
24
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: linguara
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 6
|
10
|
+
version: 0.0.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Aleksander Dabrowski
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-
|
19
|
+
date: 2010-08-11 00:00:00 +02:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|