Class: Typograf::Client
- Inherits:
-
Object
- Object
- Typograf::Client
- Defined in:
- lib/typograf/client.rb
Constant Summary collapse
- URL =
'http://www.typograf.ru/webservice/'
- DEFAULT_PREFERENCES =
{ :tags => 1, # 0 — не расставлять; 1 — расставлять :tags_delete => 0, # 0 — не удалять; 1 — удалять до типографирования; 2 — удалять после типографирования :paragraph => { :insert => 1, # 1 — ставить; 0 — не ставить # теги задают внешний вид обрамления параграфа, начальные и конечные теги соответственно (могут быть пустыми) :start => '<p>', :end => '</p>' }, :newline => { :tag => '<br />', # теги перевода строки. :insert => 1 # перевод строки: 1 — ставить; 0 — не ставить }, :cms_new_line => 0, # Переводы строк <p> </p> :dos_text => 0, # удаляет одинарные переводы строк и переносы: 0 — не удалять; 1 — удалять :nowraped => { :insert => 1, # 1 — ставить; 0 — не ставить :nonbsp => 0, # 0 — не использовать неразрывные конструкции вместо (неразрывного пробела); 1 — наоборот :length => 0, # не объединять в неразрывные конструкции слова, написанные через дефис, с общей длинной больше N знаков. Если 0 то не используется :start => '<nobr>', :end => '</nobr>' }, :hanging_punct => 0, # висячая пунктуация: 1 — использовать; 0 — не использовать :hanging_line => 0, # висячие строки: 1 — удалять; 0 — не удалять :minus_sign => '–', # указывает какой символ использовать вместо знака минус: — – или − :hyphen => { :insert => 0, :length => 0 }, :acronym => 1, # выделять сокращения: 1 — выделять; 0 — не выделять :symbols => 0, # как выводить типографированный текст: 0 — буквенными символами ( ); 1 — числовыми ( ) # добавляет дополнительные атрибуты к ссылкам :link => { :target => '', :class => '' } }
Instance Method Summary collapse
- #deep_merge(first, second) ⇒ Object
- #form_xml(options) ⇒ Object
-
#initialize(options = {}) ⇒ Client
constructor
A new instance of Client.
-
#send_request(text) ⇒ Object
Process text with remote web-service.
Constructor Details
#initialize(options = {}) ⇒ Client
Returns a new instance of Client.
108 109 110 111 112 113 114 115 |
# File 'lib/typograf/client.rb', line 108 def initialize( = {}) @url = URI.parse(.delete(:url) || URL) # @chr = options.delete(:chr) || 'UTF-8' @options = @xml = if .keys.length > 0 form_xml( deep_merge(DEFAULT_PREFERENCES, ) ) end end |
Instance Method Details
#deep_merge(first, second) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/typograf/client.rb', line 94 def deep_merge(first, second) target = first.dup second.keys.each do |key| if second[key].is_a?(Hash) && target[key].is_a?(Hash) target[key] = deep_merge(target[key], second[key]) next elsif second[key].is_a?(Hash) or target[key].is_a?(Hash) raise ArgumentError, "Can't merge hashes" end target[key] = second[key] end target end |
#form_xml(options) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/typograf/client.rb', line 53 def form_xml() o = .dup o[:symbols] = 1 if o[:symbols] == 2 xml = <<-XML_TEMPLATE <?xml version="1.0" encoding="windows-1251" ?> <preferences> <tags delete="#{o[:]}">#{o[:]}</tags> <paragraph insert="#{o[:paragraph][:insert]}"> <start><![CDATA[#{o[:paragraph][:start]}]]></start> <end><![CDATA[#{o[:paragraph][:end]}]]></end> </paragraph> <newline insert="#{o[:newline][:insert]}"><![CDATA[#{o[:newline][:tag]}]]></newline> <cmsNewLine valid="#{o[:cms_new_line]}" /> <dos-text delete="#{o[:dos_text]}" /> XML_TEMPLATE if o[:nowraped][:nonbsp] != 0 xml = xml.chomp(" \n") + <<-XML_TEMPLATE <nowraped insert="#{o[:nowraped][:insert]}" nonbsp="#{o[:nowraped][:nobsp]}" length="#{o[:nowraped][:length]}"> <start><![CDATA[#{o[:nowraped][:start]}]]></start> <end><![CDATA[#{o[:nowraped][:end]}]]></end> </nowraped> XML_TEMPLATE end xml = xml.chomp(" \n") + <<-XML_TEMPLATE <hanging-punct insert="#{o[:hanging_punct]}" /> <hanging-line delete="#{o[:hanging_line]}" /> <minus-sign><![CDATA[#{o[:minus_sign]}]]></minus-sign> <hyphen insert="#{o[:hyphen][:insert]}" length="#{o[:hyphen][:length]}" /> <acronym insert="#{o[:acronym]}"></acronym> <symbols type="#{o[:symbols]}" /> <link target="#{o[:link][:target]}" class="#{o[:link][:class]}" /> </preferences> XML_TEMPLATE xml.gsub(/^\s|\s$/, '') end |
#send_request(text) ⇒ Object
Process text with remote web-service
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/typograf/client.rb', line 118 def send_request(text) params = { 'text' => text.encode("cp1251"), } params['xml'] = @xml if @xml request = Net::HTTP::Post.new(@url.path) request.set_form_data(params) begin response = Net::HTTP.new(@url.host, @url.port).start do |http| http.request(request) end rescue StandardError => exception raise NetworkError.new(exception., exception.backtrace) end if !response.is_a?(Net::HTTPOK) raise NetworkError, "#{response.code}: #{response.}" end body = response.body.force_encoding("cp1251").encode("utf-8") # error = "\xCE\xF8\xE8\xE1\xEA\xE0: \xE2\xFB \xE7\xE0\xE1\xFB\xEB\xE8 \xEF\xE5\xF0\xE5\xE4\xE0\xF2\xFC \xF2\xE5\xEA\xF1\xF2" # error.force_encoding("ASCII-8BIT") if error.respond_to?(:force_encoding) if body == "Ошибка: вы забыли передать текст" raise NetworkError, "Ошибка: вы забыли передать текст" end if @options[:symbols] == 2 HTMLEntities.new.decode(body.chomp) else body.chomp end end |