linguara 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -19,3 +19,4 @@ rdoc
19
19
  pkg
20
20
 
21
21
  ## PROJECT::SPECIFIC
22
+ stats
data/README.rdoc CHANGED
@@ -1,6 +1,6 @@
1
1
  = linguara
2
2
 
3
- Description goes here.
3
+ This gem allows integratation with Linguara WebAPI.
4
4
 
5
5
  == Note on Patches/Pull Requests
6
6
 
@@ -16,4 +16,4 @@ Description goes here.
16
16
 
17
17
  Copyright (c) 2010 Aleksander Dabrowski. See LICENSE for details.
18
18
 
19
- Thanks to: Piotr Barczuk. Additional thanks to Łukasz Adamczak, and Jurek Prokop, who was starring at me when I was programming hard parts.
19
+ Thanks to: Piotr Barczuk. Additional thanks to Łukasz Adamczak, and Jurek Prokop, who were starring at mine screen while I was programming hard parts.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
data/lib/linguara.rb CHANGED
@@ -1,14 +1,16 @@
1
1
  require 'net/http'
2
2
  require 'uri'
3
3
  require 'linguara/configuration'
4
+ require 'linguara/utils'
4
5
 
5
6
  module Linguara
7
+ extend Linguara::Utils
6
8
  autoload :ActiveRecord, 'linguara/active_record'
7
9
 
8
10
  class << self
9
11
  attr_accessor :configuration
10
12
 
11
- def configure(silent = false)
13
+ def configure
12
14
  self.configuration ||= Configuration.new
13
15
  yield(configuration)
14
16
  end
@@ -16,7 +18,7 @@ module Linguara
16
18
  def accept_translation(translation)
17
19
  target_language = translation[:target_language]
18
20
  translation[:paragraph].each do |key,value|
19
- class_name,id,field_name = value[:id].split('_')
21
+ class_name,id,order,field_name = value[:id].split('_')
20
22
  content = value[:content]
21
23
  original_locale = I18n.locale
22
24
  element = class_name.constantize.find(id)
@@ -27,6 +29,33 @@ module Linguara
27
29
  I18n.locale = original_locale
28
30
  end
29
31
  end
32
+
33
+ def send_request(element)
34
+ url= URI.parse(Linguara.configuration.server_path)
35
+ req = Net::HTTP::Post.new(url.path)
36
+ req.body = serialize_form_data({
37
+ :translation => {
38
+ :return_url => Linguara.configuration.return_url,
39
+ :due_date => '27-06-2010',
40
+ :source_language =>"pl",
41
+ :target_language =>"en",
42
+ :paragraph => element.fields_to_send,
43
+ :account_token => Linguara.configuration.api_key}})
44
+ req.content_type = 'application/x-www-form-urlencoded'
45
+ req.basic_auth Linguara.configuration.user, Linguara.configuration.password
46
+ #TODO handle timeout
47
+ begin
48
+ res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
49
+ rescue Errno::ETIMEDOUT
50
+ handle_request_error
51
+ end
52
+ end
53
+
54
+ # ovverride this method if you want to perform some action when connection
55
+ # with linguara cannot be established e.g. log request or redo the send
56
+ def handle_request_error
57
+ end
58
+
30
59
  end
31
60
  end
32
61
 
@@ -11,67 +11,31 @@ module Linguara
11
11
  class_inheritable_accessor :linguara_translation_attribute_names
12
12
 
13
13
  self.linguara_translation_attribute_names = attr_names.map(&:to_sym)
14
-
15
- after_create :send_to_linguara
14
+
15
+ before_save :send_to_linguara
16
16
  end
17
17
  end
18
18
 
19
19
  module InstanceMethods
20
- protected
21
-
22
- #TODO describe it, spec and move somewhere else
23
- # http://www.keyongtech.com/5211204-nested-http-params-on-ruby
24
- def serialize_form_data(data, path = "",serialized_params = [])
25
- if data.kind_of? Hash
26
- data.each_pair{|k,v| token = (path == "" ? url_encode(k) : "[#{url_encode(k)}]"); serialize_form_data(v, "#{path}#{token}",serialized_params)}
27
- elsif data.kind_of? Array
28
- data.each{|v| serialize_form_data(v, "#{path}[]", serialized_params) }
29
- else
30
- #end of recursion
31
- serialized_params << "#{path}=#{url_encode(data)}"
32
- end
33
-
34
- return serialized_params.join("&") if (path == "")
35
- end
36
-
37
- def linguara_key_name(field)
38
- "#{self.class.class_name}_#{self.id}_#{field}"
39
- end
40
20
 
41
21
  def fields_to_send
42
22
  prepared_fields = {}
43
- linguara_translation_attribute_names.each do |name|
44
- prepared_fields[linguara_key_name(name)] = { :id => linguara_key_name(name), :content => self.send(name) }
23
+ linguara_translation_attribute_names.each_with_index do |name, index|
24
+ key_name = linguara_key_name(name, index)
25
+ prepared_fields[key_name] = { :id => key_name, :content => self.send(name) }
45
26
  end
46
27
  prepared_fields
47
28
  end
29
+
30
+ protected
31
+
32
+ def linguara_key_name(field, index)
33
+ "#{self.class.class_name}_#{self.id}_#{index}_#{field}"
34
+ end
48
35
 
49
36
  def send_to_linguara
50
- url = URI.parse(Linguara.configuration.server_path)
51
- req = Net::HTTP::Post.new(url.path)
52
- req.body = serialize_form_data({
53
- :translation => {
54
- :return_url => Linguara.configuration.return_url,
55
- :due_date => '27-06-2010',
56
- :source_language =>"pl",
57
- :target_language =>"en",
58
- :paragraph => fields_to_send,
59
- :account_token => Linguara.configuration.api_key}})
60
- req.content_type = 'application/x-www-form-urlencoded'
61
- req.basic_auth Linguara.configuration.user, Linguara.configuration.password
62
-
63
- logger.info(req.method)
64
- logger.info(req.path)
65
- logger.info(req.body)
66
- logger.info(req.body_stream)
67
-
68
- res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
69
-
70
- logger.info(res.code)
71
- logger.info(res.message)
72
- logger.info(res.body)
73
- end
74
-
37
+ Linguara.send_request(self)
38
+ end
75
39
 
76
40
  end
77
41
  end
@@ -1,7 +1,5 @@
1
1
  module Linguara
2
2
  class Configuration
3
- OPTIONS = [:api_key, :server_path]
4
-
5
3
  attr_accessor :api_key, :server_path, :return_url, :user, :password
6
4
 
7
5
  def initialize
@@ -0,0 +1,18 @@
1
+ module Linguara
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 == "" ? url_encode(k) : "[#{url_encode(k)}]"); serialize_form_data(v, "#{path}#{token}",serialized_params)}
8
+ elsif data.kind_of? Array
9
+ data.each{|v| serialize_form_data(v, "#{path}[]", serialized_params) }
10
+ else
11
+ #end of recursion
12
+ serialized_params << "#{path}=#{url_encode(data)}"
13
+ end
14
+
15
+ return serialized_params.join("&") if (path == "")
16
+ end
17
+ end
18
+ end
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.1"
8
+ s.version = "0.0.2"
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"]
12
- s.date = %q{2010-05-28}
12
+ s.date = %q{2010-06-05}
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 = [
@@ -26,7 +26,11 @@ Gem::Specification.new do |s|
26
26
  "lib/linguara.rb",
27
27
  "lib/linguara/active_record.rb",
28
28
  "lib/linguara/configuration.rb",
29
+ "lib/linguara/utils.rb",
29
30
  "linguara.gemspec",
31
+ "spec/data/schema.rb",
32
+ "spec/helper_model/blog_post.rb",
33
+ "spec/helper_model/database_mock.rb",
30
34
  "spec/linguara_spec.rb",
31
35
  "spec/spec.opts",
32
36
  "spec/spec_helper.rb"
@@ -37,7 +41,10 @@ Gem::Specification.new do |s|
37
41
  s.rubygems_version = %q{1.3.7}
38
42
  s.summary = %q{Gem to integrate with linguara api}
39
43
  s.test_files = [
40
- "spec/linguara_spec.rb",
44
+ "spec/data/schema.rb",
45
+ "spec/helper_model/blog_post.rb",
46
+ "spec/helper_model/database_mock.rb",
47
+ "spec/linguara_spec.rb",
41
48
  "spec/spec_helper.rb"
42
49
  ]
43
50
 
@@ -0,0 +1,6 @@
1
+ ActiveRecord::Schema.define do
2
+ create_table :blog_posts, :force => true do |t|
3
+ t.string :title
4
+ t.text :body
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ class BlogPost < ActiveRecord::Base
2
+ translates_with_linguara :title, :body
3
+ end
@@ -0,0 +1,7 @@
1
+ def prepare_database
2
+ config = { :adapter => 'sqlite3', :database => ':memory:' }
3
+ ActiveRecord::Base.establish_connection(config)
4
+ schema_path ||= File.expand_path(File.dirname(__FILE__) + '/../data/schema.rb')
5
+ ActiveRecord::Migration.verbose = false
6
+ ActiveRecord::Base.silence { load(schema_path) }
7
+ end
@@ -1,7 +1,45 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "Linguara" do
4
- it "fails" do
5
- fail "hey buddy, you should probably rename this file and start specing for real"
4
+
5
+ it "should sent message to linguara for translatable classes" do
6
+ FakeWeb.register_uri(:post, 'http://www.example.com/', :exception => Net::HTTPError)
7
+ blog_post = BlogPost.new( :title => "Title text", :body => "Body text")
8
+ lambda {
9
+ blog_post.save
10
+ }.should raise_error(Net::HTTPError)
11
+ end
12
+
13
+ it 'should accept correct translation' do
14
+ FakeWeb.register_uri(:post, 'http://www.example.com/', :body => 'response_for_linguara', :status => 200)
15
+ blog_post = BlogPost.new( :title => "Old title", :body => "Old body")
16
+ blog_post.save
17
+ id = blog_post.id
18
+ lambda {
19
+ Linguara.accept_translation(
20
+ :paragraph => {
21
+ "BlogPost_#{id}_0_title"=> { :id =>"BlogPost_#{id}_0_title", :content =>"Hello World!"},
22
+ "BlogPost_#{id}_1_body"=> { :id =>"BlogPost_#{id}_1_body", :content =>"Today is great weather, and I am going to EuRuKo."}
23
+ },
24
+ :source_language =>"pl",
25
+ :target_language =>"en"
26
+ )
27
+ }.should change(BlogPost, :count).by(0)
28
+ translation = BlogPost.last
29
+ translation.title.should eql("Hello World!")
30
+ translation.body.should eql("Today is great weather, and I am going to EuRuKo.")
31
+ end
32
+
33
+ end
34
+
35
+ describe 'Linguara::ActiveRecord' do
36
+ it "should prepare fields to translation" do
37
+ blog_post = BlogPost.new( :title => "Title text", :body => "Body text")
38
+ fields_to_send = blog_post.fields_to_send.to_a.sort { |a,b| a[0] <=> b[0] }
39
+ fields_to_send.size.should eql(2)
40
+ # It's complicated becouse linguara API is complicated. It will be much simplier in future
41
+ fields_to_send.first[1][:content].should eql("Title text")
42
+ fields_to_send.last[1][:content].should eql("Body text")
6
43
  end
7
44
  end
45
+
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,27 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+
4
+ require 'rubygems'
5
+ require 'active_record'
6
+ require 'active_support'
7
+ require 'helper_model/database_mock'
3
8
  require 'linguara'
9
+ require 'helper_model/blog_post'
10
+ require "erb"
11
+ include ERB::Util
4
12
  require 'spec'
5
13
  require 'spec/autorun'
14
+ require 'fakeweb'
15
+
16
+ prepare_database
17
+
18
+ Linguara.configure do |config|
19
+ config.api_key = 'api_keu'
20
+ config.server_path = 'http://www.example.com/'
21
+ config.return_url = 'http://maverick.kumulator.com:82/linguara'
22
+ end
6
23
 
7
24
  Spec::Runner.configure do |config|
8
25
 
9
26
  end
27
+
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: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Aleksander Dabrowski
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-05-28 00:00:00 +02:00
18
+ date: 2010-06-05 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -53,7 +53,11 @@ files:
53
53
  - lib/linguara.rb
54
54
  - lib/linguara/active_record.rb
55
55
  - lib/linguara/configuration.rb
56
+ - lib/linguara/utils.rb
56
57
  - linguara.gemspec
58
+ - spec/data/schema.rb
59
+ - spec/helper_model/blog_post.rb
60
+ - spec/helper_model/database_mock.rb
57
61
  - spec/linguara_spec.rb
58
62
  - spec/spec.opts
59
63
  - spec/spec_helper.rb
@@ -92,5 +96,8 @@ signing_key:
92
96
  specification_version: 3
93
97
  summary: Gem to integrate with linguara api
94
98
  test_files:
99
+ - spec/data/schema.rb
100
+ - spec/helper_model/blog_post.rb
101
+ - spec/helper_model/database_mock.rb
95
102
  - spec/linguara_spec.rb
96
103
  - spec/spec_helper.rb