[Ruby] - Задай вопрос, получи ответ

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Sharky, 24 Aug 2009.

  1. xciss

    xciss New Member

    Joined:
    1 Jun 2010
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    там вот в чем фигня, есть так называемые области видимости. (контексты)

    PHP:
    class Base    
    puts 
    "#{self.class.name}"  
    end
    выведет Class, потому что описание класса тоже является объектом ( а мы знаем, что в руби ВСЁ является объектом )

    Раз self в теле описания класса является объектом 'Class' (всё кроме объявления методов экземпляров класса)
    то мы можем вот что сделать:

    PHP:
    class Base
        def self
    .test(string)
           
    puts "#{string} from #{self.class.name}"
        
    end
    end
    def self -> объявляем метод в контексте класса Class, то есть создаём метод для объекта этого класса.

    Теперь мы сможем сделать следующее:

    PHP:
    // для наглядности унаследуем новый класс от класса Base
    // все методы, в том числе и методы класса Class тоже унаследуются

    class Core Base
      test 
    "This is test str"
    end
    этот код напишет:
    This is test str from Class

    В общем то на этом принципе основано море программ (например Rails)

    PHP:
    class User
      named_scope 
    :not_activated, :conditions => ["active = ?"0]
    end
    и затем где угодно в Rails-app:

    PHP:
    users_to_clear User.not_activated()
    users_to_clear.each do |user|
      
    user.destroy()
    end
    :)
     
    #101 xciss, 2 Jun 2010
    Last edited: 2 Jun 2010
  2. TikTik

    TikTik Member

    Joined:
    20 Feb 2009
    Messages:
    241
    Likes Received:
    12
    Reputations:
    2
    Xочу написать что то типо авторегалке на сайте есть несколько вопросов приложение будет GUI wxRuby.
    Уже 2ю книгу читаю а писать так нечего и не начал устал зубрить надо практиковатся

    мне надо парсить свою страницу сайта, узнать какие HTML теги отвечают за поле регистрация, найти ссылку которая введёт туда и каким то образом жмакнуть
    так понял мне нужно это Net::HTTP но как заставить перейти по ссылке ??, иммею ввиду программно жмакнуть по кнопке регистрация не открывая браузер
    Может другие методы есть и вообщем поправьте, правильно ли я себе всё это представляю или это совсем не так делается ??
     
  3. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    402
    Likes Received:
    118
    Reputations:
    23
    Code:
    require 'net/http'
    
    #Получение страницы с регистрационной формой методом GET
    http = Net::HTTP.new('site.with.regform.ru', 80)
    path="/path/to/register.php"
    resp, data = http.get(path, nil)
    
    #Отсылка регистрационных данных методом POST
    cookie = resp.response['set-cookie']
    path="/path/to/check/regform.php"
    data="login=examplelogin&pass=examplepass"
    headers = {
      'Cookie' => cookie,
      'Content-Type' => 'application/x-www-form-urlencoded'}
    resp, data = http.post(path, data, headers)
    
    #Вывод всех результатов и ответов
    puts 'Code = ' + resp.code
    puts 'Message = ' + resp.message
    resp.each {|key, val| puts key + ' = ' + val}
    puts data
    
     
    3 people like this.
  4. TikTik

    TikTik Member

    Joined:
    20 Feb 2009
    Messages:
    241
    Likes Received:
    12
    Reputations:
    2
    Cпасибо пол дня блин ответ искал :( все форумы по Ruby вымершие какието :( мало людей юзают Ruby чтоли, а если и юзают то Рельсы и даже не понимают такие вопросы зачем вобще а мне просто интересно епрст :)
    Cпасибо буду копать дальше

    только не понял зачем

    Code:
    cookie = resp.response['set-cookie']
    объясните новичку

    И ещё вопросик вот такой установил NetBeas при воде кода к примеру

    Code:
    puts = 'привет мир' 
    [​IMG]
    вот такие вот какозябры как лечить помню давно пробовал что то в настройках исправил и всё норма стало сейчас не получается :(
     
    #104 TikTik, 24 Jul 2010
    Last edited: 24 Jul 2010
    1 person likes this.
  5. Yetisports

    Yetisports Banned

    Joined:
    11 Jul 2010
    Messages:
    147
    Likes Received:
    12
    Reputations:
    17
    Решил попробывать себя в изучение языка....Где тут ошибка)
    $tokens = gets.scan( /\)|\(|-?\d+/ )
    def parse
    if tokens.first =~ /-?\d+/
    $tokens.shift.to_f
    else
    $tokens.shift
    r = (parse + parse)/2.0
    $tokens.shift
    r
    end
    end
    puts parse
     
  6. TikTik

    TikTik Member

    Joined:
    20 Feb 2009
    Messages:
    241
    Likes Received:
    12
    Reputations:
    2
    delit
     
    #106 TikTik, 25 Jul 2010
    Last edited: 25 Jul 2010
  7. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    402
    Likes Received:
    118
    Reputations:
    23
    ну это типа, ко второму запросу т.е. отсылки данных регистрации методом POST, в хедер прибавятся кукисы, которые сайт тебе дал при первом запросе. Это может и не пригодится, но обычно так всегда бывает.

    кодировку исправь. По умолчанию в винде cp1251, а ruby больше любит UTF-8. Так вот можешь либо в коде скрипта ставить кодировку:
    Code:
    $KCODE="<символ(обозначение) cp1251>" #для UTF-8 - "u"
    либо менять кодировку при выводе, например так:
    Code:
    require 'iconv'
    converter=Iconv.new('CP1251','UTF-8') #конвертит из UTF-8 в cp1251
    puts converter.iconv("very st\range string")
    
    либо как ты говориш делал, изменить кодировку в настройках
     
  8. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    402
    Likes Received:
    118
    Reputations:
    23
    забыл символ бакса в if'е
    Я не знаю, что это за методы(first и shift(по-мойму что-то с потоками)), но ты уверен что все будет гладко, если учесть что scan возврщает массив строк удовлетворяющих регулярке.
    И еще у тебя тут в случае если
    Code:
    [B]tokens.first[/B] =~ /-?\d+/
    не верно, то метод parse ничего не вернет, однако в твоей рекурсии от него все равно будет требоватся значение в выражении:
    Code:
    r = (parse + parse)/2.0
     
  9. TikTik

    TikTik Member

    Joined:
    20 Feb 2009
    Messages:
    241
    Likes Received:
    12
    Reputations:
    2
    скрипт загруженный на хостинг качает файлик .rar к себе же на хостинг в папку dowland, к примеру с depositfile, там как известно ограничение по времени около 60 секнд скрипт ждёт потом начинает закачку.
    Возможно такое ?
    какие библиотеки использовать ?
    если можно прмерчик где почитать может кто делал подобное.....
     
  10. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    402
    Likes Received:
    118
    Reputations:
    23
    Code:
    require 'net/http'
    
    class  Net::HTTP
    alias old_get get
      def get(path,headers)
          puts "my code"
          return self.old_get(path,headers)
      end
    end
    http=Net::HTTP.new('mail.ru', 80)
    puts http.get('/','')
    так чисто для себя помечаю, а то часто забываю про alias
     
  11. Frinst

    Frinst New Member

    Joined:
    10 Nov 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Ребят подскажите мне новичку какие программы нужны для работы с Ruby?Я никак не могу понять куда вставлять файл,как устанавливатьего на винду и т.д. В общем,можете сделать небольшой faq по руби?Как вывести данные из файла в свет?( То есть если брать в пример PHP то сохраняешь файл в Php и через браузер заходишь,а как быть с руби?) В общем помогите ребят,без этого толку нету мне учить дальше.Оч оч оч прошу
     
  12. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    402
    Likes Received:
    118
    Reputations:
    23
    если ты хочешь использовать Ruby как PHP т.е. а-ля сценарии веб-сервера, то нужно копать в сторону ROR, mod_ruby в апаче или cgi/fcgi с ruby. CGI, кстати, это обычный класс и работа с ним не представляет никакого гемора, и установок особых тоже никаких не требуется.
    Инструкция же по самому ruby, т.е. как запустить, можешь прочитать тут - http://blog.lukmus.ru/?p=57.
    Там ничего сложного нет:
    Code:
    ruby test.rb 
     
  13. Frinst

    Frinst New Member

    Joined:
    10 Nov 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Эм...я не знаю что именно я изучаю,то есть в какую сторону "копаю".Учусь ВОТ по этой книге.
     
  14. Frinst

    Frinst New Member

    Joined:
    10 Nov 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Слушай в cmd при обращению к файлу *.rb выдает следующее:

    ruby: No such file or directory -- ex.rb <LoadError>

    что не так объясни прошу
     
  15. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    402
    Likes Received:
    118
    Reputations:
    23
    у тебя ошибка гласит в переводе с английского:
    не найден файл или директория.
    я думаю это все объясняет

    напиши полностью что выполняешь, типа:
    Code:
    dir // показать список файлов
    ruby <имя файла>.rb
    
     
  16. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    402
    Likes Received:
    118
    Reputations:
    23
    ты изучаешь руби в целом, я по этой книге тоже учился, она шикарная. если осилишь всю и потом попрактикуешься месяцок, то вскоре будешь разговаривать на ruby и недопонимать этот доисторический php и прочую телегу
     
  17. Frinst

    Frinst New Member

    Joined:
    10 Nov 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    о сейчас смог через cmd зайти в нужную папку(только странно что если я прописываю путь cd E:\example выходит вот такое чудо:
    [​IMG]

    Но если это все закинуть в C: то норм заходит

    Ах да и ещё при запуске файла появились вот такие вот каракули

    [​IMG]

    Прошу твоей помощи :)
     
    #117 Frinst, 15 Nov 2010
    Last edited: 15 Nov 2010
  18. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    402
    Likes Received:
    118
    Reputations:
    23
    ex.rb выложи

    это говорит о том что кодировка в файле не cp1251
     
  19. Frinst

    Frinst New Member

    Joined:
    10 Nov 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    print "Введите температуру и шкалу" (C or F):"
    str = gets
    exit if str.nil? or str.empty?
    str.chomp!
    temp, scale = str.split(" ")

    abort "#{temp} недпустимое число." if temp !~ /-?\d+/

    temp = temp.to_f
    case scale
    when "C", "c"
    f = 1.8*temp + 32
    when "F", "f"
    с = (5.0/9.0) * (temp -32)
    else
    abort "Необходимо задать C или F."
    end
    if f.nil?
    print "#{c} градусов C\n"
    else
    print "#{f} градусов F\n"
    end

    А как быть с каракулями?
     
  20. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    402
    Likes Received:
    118
    Reputations:
    23
    Code:
    #!/usr/bin/ruby
    
    print "Введите температуру и шкалу (C or F):"
    str = gets
    exit if str.nil? or str.empty?
    str.chomp!
    temp, scale = str.split(" ")
    
    abort "#{temp} недпустимое число." if temp !~ /-?\d+/
    
    temp = temp.to_f
    case scale
    	when "C", "c"	
    		f = 1.8*temp + 32
    	when "F", "f" 
    		[COLOR=Red][SIZE=6]c[/SIZE][/COLOR]=(5/9)*(temp-32)
    	else 
    		abort "Необходимо задать C или F."
    end
    if f.nil?
    	print "#{c} градусов C\n"
    else
    	print "#{f} градусов F\n"
    end
    
    выделенный символ ты написал в русской раскладке
    По поводу каракуль - попробуй посохранять файл в разных кодировках:
    cp1251 - родная для винды
    utf-8 - родная для ruby