yatran 0.0.2 → 0.1.0

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/README.md CHANGED
@@ -1,5 +1,3 @@
1
- # Yatran
2
-
3
1
  Ruby unofficial client for Yandex translation engine
4
2
 
5
3
 
@@ -54,14 +52,34 @@ Or install it yourself as:
54
52
 
55
53
  More info
56
54
 
57
- English version: http://translate.yandex.net/tr-url/en+ru.ru/api.yandex.ru/translate/ (tranlated automatically)
55
+ English version: http://translate.yandex.net/tr-url/en+ru.ru/api.yandex.ru/translate/ (translated automatically)
58
56
  Russian version: http://api.yandex.ru/translate/
59
57
 
60
58
 
61
- ## Contributing
59
+ ## CLI
60
+ /bin/yaran is a cli utility to use yandex translation API
61
+
62
+ ./yatran -h
63
+
64
+ Yandex Command line translations.
65
+ Available language directions : ru-en,ru-pl,ru-uk,ru-de,ru-fr,ru-es,ru-it,ru-tr,en-ru,en-uk,en-tr,pl-ru,uk-ru,uk-en,de-ru,fr-ru,es-ru,it-ru,tr-ru,tr-en
66
+ Usage: yatran COMMAND [OPTIONS]
67
+
68
+
69
+ Commands
70
+
71
+ d: detect text language
72
+ t: translate text
73
+
74
+ Options
75
+
76
+ -p, --phrase Phrase [OPT] Phrase to translate or detect
77
+ -s, --source FILE [OPT] File with text to translate
78
+ -o, --output FILE [OPT] File with output
79
+ -f, --from FROM_LANG [OPT] Language of phrase/text
80
+ -t, --to TO_LANG [OPT] Output language
81
+ -l, --language LANGDIR [OPT] Available language direction
82
+ -d, --debug Debug flag
83
+
84
+
62
85
 
63
- 1. Fork it
64
- 2. Create your feature branch (`git checkout -b my-new-feature`)
65
- 3. Commit your changes (`git commit -am 'Added some feature'`)
66
- 4. Push to the branch (`git push origin my-new-feature`)
67
- 5. Create new Pull Request
data/Rakefile CHANGED
@@ -2,3 +2,11 @@
2
2
  require 'bundler'
3
3
  require "bundler/gem_tasks"
4
4
  Bundler::GemHelper.install_tasks
5
+
6
+
7
+ require 'rspec/core/rake_task'
8
+
9
+ RSpec::Core::RakeTask.new('spec')
10
+
11
+ # If you want to make this the default task
12
+ task :default => :spec
data/bin/yatran ADDED
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.dirname(__FILE__) + "/../lib"
4
+
5
+ require 'rubygems'
6
+ require 'yatran'
7
+ require "yatran/cli"
8
+ require 'optparse'
9
+
10
+
11
+
12
+
13
+
14
+
15
+ tranlsator = Yatran::CLI.new
16
+ options = tranlsator.instance_variable_get(:@options)
17
+ #exit
18
+
19
+ case ARGV[0]
20
+ when "d"
21
+ puts "call detect with options #{options.inspect}" if tranlsator[:debug]
22
+ begin
23
+ tranlsator.detect!
24
+ rescue => e
25
+ puts e.message
26
+ end
27
+ when "t"
28
+ puts "call translate on options #{options.inspect}" if tranlsator[:debug]
29
+ begin
30
+ tranlsator.translate!
31
+ rescue => e
32
+ p e.message
33
+ end
34
+ else
35
+ puts "Undefined command #{ARGV[0]}"
36
+ #
37
+ exit
38
+
39
+ end
40
+
41
+
data/lib/yatran.rb CHANGED
@@ -32,6 +32,7 @@ require "yatran/languages"
32
32
  require "yatran/translatable"
33
33
  require "yatran/detectable"
34
34
 
35
+
35
36
  String.send :include, Yatran::Translatable
36
37
  String.send :include, Yatran::Detectable
37
38
 
data/lib/yatran/cli.rb ADDED
@@ -0,0 +1,130 @@
1
+ #--
2
+ # Copyright (c) 2012 Igor Fedoronchuk
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+
25
+
26
+
27
+ module Yatran
28
+
29
+ class Error < StandardError
30
+ end
31
+
32
+ class CLI
33
+
34
+ def initialize()
35
+ @options = {}
36
+ languages = Yatran::LANGUAGES_TRANSLATIONS.join(',')
37
+ OptionParser.new do |opts|
38
+ opts.banner = <<EOS
39
+ Yandex Command line translations.
40
+ Available language directions : #{languages}
41
+ Usage: yatran COMMAND [OPTIONS]
42
+
43
+ EOS
44
+ opts.separator ""
45
+ opts.separator "Commands"
46
+ opts.separator " d: detect text language"
47
+ opts.separator " t: translate text"
48
+ opts.separator ""
49
+ opts.separator "Options"
50
+ opts.on( '-p', '--phrase Phrase [OPT]', "Phrase to translate or detect" ) do |source|
51
+ @options[:text] = source
52
+ end
53
+ opts.on( '-s', '--source FILE [OPT]', "File with text to translate" ) do |source|
54
+ @options[:file] = source
55
+ end
56
+ opts.on( '-o', '--output FILE [OPT]', "File with output" ) do |output|
57
+ @options[:output] = output
58
+ end
59
+ opts.on("-f", "--from FROM_LANG [OPT]", "Language of phrase/text ") do |from|
60
+ @options[:from] = from
61
+ end
62
+ opts.on("-t", "--to TO_LANG [OPT]", "Output language ") do |to|
63
+ @options[:to] = to
64
+ end
65
+ opts.on("-l", "--language LANGDIR [OPT]", "Available language direction") do |d|
66
+ @options[:direction] = d
67
+ end
68
+ opts.on( '-d', '--debug', "Debug flag" ) do
69
+ @options[:debug] = true
70
+ end
71
+ end.parse!
72
+
73
+ end
74
+
75
+
76
+ def translate!
77
+ validate_text!
78
+ validate_direction!
79
+ result = @text.send(@direction)
80
+ if @options[:output]
81
+ raise Error.new("File #{@opts[:output]} already exists") if File.exists? @options[:output]
82
+ File.open(@options[:output], 'w') { |f| f.write(result) }
83
+ puts "check file #{@options[:output]}"
84
+
85
+ else
86
+ puts "Translated:"
87
+ puts result
88
+ end
89
+
90
+ end
91
+
92
+ def detect!
93
+ validate_text!
94
+ puts "Detected: #{@text.language}"
95
+ end
96
+
97
+ def [](index)
98
+ @options[index]
99
+ end
100
+
101
+ private
102
+
103
+ def validate_text!
104
+ @text = @options[:text]
105
+
106
+
107
+ unless @text
108
+ if @options[:source]
109
+ raise Error.new("File #{@options[:source]} doesn't exist") unless File.exists? @options[:source]
110
+ @text = IO.read @options[:source]
111
+ end
112
+ end
113
+
114
+ raise Error.new(" Text is undefined ") if @text.nil?
115
+
116
+ end
117
+
118
+ def validate_direction!
119
+ @direction = @options[:direction]
120
+ unless @direction
121
+ raise Error.new(" Undefined translation direction ") unless ( @options[:from] and @options[:to] )
122
+ @direction = "#{@options[:from]}-#{@options[:to]}"
123
+ end
124
+ @direction = @direction.to_sym
125
+ raise Error.new(" #{@direction} translation is not supported ") unless @text.respond_to?(@direction)
126
+ end
127
+
128
+ end
129
+
130
+ end
@@ -27,7 +27,7 @@ module Yatran
27
27
 
28
28
 
29
29
  def translate(translation_direction)
30
- #URI::encode(
30
+
31
31
  API.request('translate', {:lang=> translation_direction, :text=>self})['text'][0]
32
32
 
33
33
  end
@@ -58,6 +58,7 @@ module Yatran
58
58
  # @private
59
59
 
60
60
  def respond_to?(method, include_private = false)
61
+
61
62
  return true unless translation_direction(method.to_s).nil?
62
63
  super(method, include_private)
63
64
  end
@@ -66,18 +67,17 @@ module Yatran
66
67
 
67
68
  def translation_direction(method)
68
69
 
69
- case method
70
- when /^to_(.*)_from_(.*)$/
71
- method = "#{$2}-#{$1}"
72
- when /^from_(.*)_to_(.*)$/
73
- method = "#{$1}-#{$2}"
74
-
75
- else
76
- method["_"] = "-"
70
+ method = case method
71
+ when /^to_(.*)_from_(.*)$/
72
+ then "#{$2}-#{$1}"
73
+ when /^from_(.*)_to_(.*)$/
74
+ then "#{$1}-#{$2}"
75
+ when /^(.*)_(.*)$/
76
+ then "#{$1}-#{$2}"
77
77
  end
78
78
 
79
- method = nil unless LANGUAGES_TRANSLATIONS.include? method
80
- method
79
+ (LANGUAGES_TRANSLATIONS.include? method ) ? method : nil
80
+
81
81
 
82
82
  end
83
83
 
@@ -21,5 +21,5 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
  module Yatran
24
- VERSION = "0.0.2"
24
+ VERSION = "0.1.0"
25
25
  end
@@ -0,0 +1,22 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+
12
+
13
+ # Run specs in random order to surface order dependencies. If you find an
14
+ # order dependency and want to debug it, you can fix the order by providing
15
+ # the seed, which is printed after each run.
16
+ # --seed 1234
17
+ config.order = 'random'
18
+ end
19
+
20
+
21
+ require File.dirname(__FILE__) + '/../lib/yatran'
22
+ #require File.dirname(__FILE__) + '/../lib/yatran/cli'
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ string = "string"
4
+
5
+ describe string do
6
+
7
+
8
+
9
+ it { should respond_to :language }
10
+ it { should respond_to :lang }
11
+
12
+
13
+
14
+ Yatran::LANGUAGES_TRANSLATIONS.each do |lang|
15
+ pairs = lang.split "-"
16
+
17
+ it { should respond_to "from_#{pairs[0]}_to_#{pairs[1]}" }
18
+ it { should respond_to "to_#{pairs[1]}_from_#{pairs[0]}" }
19
+ it { should respond_to "#{pairs[0]}_#{pairs[1]}" }
20
+
21
+
22
+ end
23
+
24
+
25
+ end
data/yatran.gemspec CHANGED
@@ -3,14 +3,16 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
  require File.expand_path('../lib/yatran/version', __FILE__)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
- gem.authors = ["Igor"]
6
+ gem.authors = ["Igor Fedoronchuk"]
7
7
  gem.email = ["fedoronchuk@gmail.com"]
8
8
  gem.description = %q{unofficial http://api.yandex.ru/translate API Client for ruby }
9
9
  gem.summary = %q{ automatic translations and language detecting }
10
10
  gem.homepage = "https://github.com/Fivell/yatran"
11
11
 
12
12
 
13
- gem.add_dependency('json')
13
+ gem.add_dependency 'json'
14
+ gem.add_development_dependency "rspec"
15
+
14
16
 
15
17
 
16
18
  gem.files = `git ls-files`.split($\)
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yatran
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
- - Igor
8
+ - Igor Fedoronchuk
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-02 00:00:00.000000000 Z
12
+ date: 2012-09-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &70254395693740 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,16 +21,23 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
24
+ version_requirements: *70254395693740
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &70254395693200 !ruby/object:Gem::Requirement
25
28
  none: false
26
29
  requirements:
27
30
  - - ! '>='
28
31
  - !ruby/object:Gem::Version
29
32
  version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70254395693200
30
36
  description: ! 'unofficial http://api.yandex.ru/translate API Client for ruby '
31
37
  email:
32
38
  - fedoronchuk@gmail.com
33
- executables: []
39
+ executables:
40
+ - yatran
34
41
  extensions: []
35
42
  extra_rdoc_files: []
36
43
  files:
@@ -39,14 +46,18 @@ files:
39
46
  - LICENSE
40
47
  - README.md
41
48
  - Rakefile
49
+ - bin/yatran
42
50
  - lib/yatran.rb
43
51
  - lib/yatran/api.rb
52
+ - lib/yatran/cli.rb
44
53
  - lib/yatran/detectable.rb
45
54
  - lib/yatran/error.rb
46
55
  - lib/yatran/languages.rb
47
56
  - lib/yatran/translatable.rb
48
57
  - lib/yatran/url.rb
49
58
  - lib/yatran/version.rb
59
+ - spec/spec_helper.rb
60
+ - spec/string_spec.rb
50
61
  - yatran.gemspec
51
62
  homepage: https://github.com/Fivell/yatran
52
63
  licenses: []
@@ -68,8 +79,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
79
  version: '0'
69
80
  requirements: []
70
81
  rubyforge_project:
71
- rubygems_version: 1.8.24
82
+ rubygems_version: 1.8.17
72
83
  signing_key:
73
84
  specification_version: 3
74
85
  summary: automatic translations and language detecting
75
- test_files: []
86
+ test_files:
87
+ - spec/spec_helper.rb
88
+ - spec/string_spec.rb