Skip to content

Instantly share code, notes, and snippets.

@Paprikas
Last active May 26, 2016 20:09
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Paprikas/6129932 to your computer and use it in GitHub Desktop.
Save Paprikas/6129932 to your computer and use it in GitHub Desktop.
Model for work with http://morpher.ru/ service
Usage example:
>> text = Morpher.new('Большой город')
{:Р=>"Большого города", =>"Большому городу", =>"Большой город", :Т=>"Большим городом", =>"Большом городе", :П_о=>"о Большом городе", :род=>"Мужской", :множественное=>{=>"Большие города", :Р=>"Больших городов", =>"Большим городам", =>"Большие города", :Т=>"Большими городами", =>"Больших городах", :П_о=>"о Больших городах"}, :где=>"в Большом городе", :куда=>"в Большой город", :откуда=>"из Большого города"}
>> text.singular('Д')
"Большому городу"
>> text.plural('Д')
"Большим городам"
>> text.singular('П_о')
"о Большом городе"
>> text.singular('где')
"в Большом городе"
>> text.singular('куда')
"в Большой город"
>> text.singular('откуда')
"из Большого города"
>> text.singular('род')
"Мужской"
# encoding: utf-8
class Morpher
def initialize(phrase)
client = Savon.client do |globals|
globals.wsdl 'http://morpher.ru/WebService.asmx?WSDL'
globals.soap_version 2
globals.soap_header header
end
response = client.call(:get_xml, message: {s: phrase}, :attributes => {:xmlns => 'http://morpher.ru/'})
@data = response.to_array(:get_xml_response, :get_xml_result).first
end
def singular(padeg)
@data[padeg.to_sym]
end
def plural(padeg)
@data[:множественное][padeg.to_sym]
end
private
def header
{
'Credentials' => {
'Username' => 'your_username',
'Password' => 'your_password'
},
:attributes! => {'Credentials' => {:xmlns => 'http://morpher.ru/'}}
}
end
end
@k1ife
Copy link

k1ife commented May 26, 2016

Plural можно чуть изменить, чтобы не вываливался в ошибку, если множественных не существует:
@data[:множественное] ? @data[:множественное][padeg.to_sym] : nil

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment