IT-Expert
  IT-Expert / Веблог / Ключевые слова / Ruby
Авторизация
Логин:
Пароль:


 
Поиск по записям:

Ключевые слова:
Записей в блоге
 за 2011 год
 за 2010 год

     за 2009 год
     за 2008 год
     за 2007 год
     за 2006 год
     за 2005 год
    RSS лента Лента новостей IT-Expert 
    Лента подкастов IT-Expert IT-Expert audiopodcasts

    Ruby

    включает:
    Rails

    Snow Leopard incompatibilities

    11:43, 31 августа 2009 ( )

    Не секрет, что после установки Snow Leopard много чего перестало работать корректно, в т.ч. и mysql gem.

    Рецепт излечения предлагаю познать из нижеследующей ссылки: http://www.icoretech.org/2009/08/install-mysql-and-mysql-ruby-gem-on-snow-leopard-64-bit/ 

     

    Scrum, Rails BDD и Cucumber приправленный Selenium

    20:28, 23 января 2009 ( )

    Попробую пояснить термины приведенные выше.

    Scrum - методология разработки основанная на agile. Если в двух словах вся разработка делится на Истории (Функционал), созданные совместно командой разработчиков и заказчиком. Заказчик излагает требования по функционалу, например, хочу редактировать статьи. Разработчики пишут три сценария для такого функционала: добавление, изменение и удаление статьи.

    Каждая история получает очки по скорости разработки, например, добавление и изменение по 10 очков, а удаление статьи 5 очков. Добавляем параметр важности. Например, важность добавления - 5, важность изменения 10 и важность удаления 15.

    Производительность команды измеряется в очках/период разработки. Например, принимаем производительность команды за период 3 недели (эти три недели будут называться Спринт) в 15 очков. Отсюда видно, что заказчик может или потребовать реализацию удаления и изменения за один Спринт, или реализацию удаления и добавления повысив важность фичи добавления.

    А в следующий Спринт будет добавлен недостающий функционал, например, добавления статьи. 

    Обязательным моментом в описании Сценариев является описание методики тестирования, например, нажми туда, смотри здесь и получишь это. 

    После каждого спринта производится этап тестирования и принятия результатов, после чего происходит очередная итерация с заказчиком - собираемся, обсуждаем, оцениваем и формализуем требования в функционал.

    Свежепоявившийся Cucumber позволяет в почти такой же манере scrum описывать функционал со сценариями и ... проводить тестирование rails приложения иногда называемое интеграционными тестами.

    Для тестирования в Cucumber может использоваться как библиотека Webrat, по сути рендерит выдачу HTML эмулируя браузер, и позволяет такие вещи, как заполнить поле формы, нажать на кнопку,открыть ссылку прямо в коде ruby и получить результат, который будет  сравнен с ожидаемым. Типично - заполнить пароль и логин в форме, и сравнить, есть ли в выдаче сообщение "добро пожаловать _пользователь_". При еще более глубоком погружении есть возможность использовать Selenium - фреймворк для тестирования прямо через вызовы браузера и использования его DOM, т.е. натурально, запускается фаерфокс, и через его DOM производится тестирование вывода страницы. Что вообще говоря позволяет вовсю тестировать Ajax плагины, работу Prototype и jQuery, что, если не ошибаюсь, Webrat  делать не умеет.

    Следует заметить, что Cucumber  это верхний уровень абстракции тестирования который заменяет традиционные интеграционные тесты, для тестов на нижнем уровне все равно прийдется использовать Test::Unit или RSpec, выбор за вами.

    Очень подробно тематика освещена здесь.

     

    Наверное не стоит говорить разработчикам, что означает в переводе на русский название Mocha

    19:28, 23 января 2009 ( )

    Между тем Mocha - прекрасный фреймворк - замена c более красивым названием mocking and stubbing для RoR.

     Выглядит примерно так:

      def test_mocking_a_class_method
    product = Product.new
    Product.expects(:find).with(1).returns(product)
    assert_equal product, Product.find(1)
    end

    def test_mocking_an_instance_method_on_a_real_object
    product = Product.new
    product.expects(:save).returns(true)
    assert product.save
    end
     

    Активно постигая BDD, Cucumber и RSpec

    20:34, 22 января 2009 ( )

    Features. Это прекрасно!

    Продолжая тему BDD следует отметить, что story runner выпочковался в отдельный фреймворк под названием Cucumber (огурец).

    Теперь истории выглядят так:

    мой реальный пример из features/admin_artices.feature

    Функционал: Админ может добавлять, удалять и изменять статьи
      Что бы админ мог управлять статьями
      Как администратор сайта
      Я должен иметь возможность удалять, добавлять и изменять статьи
      Как пользователь
      Я должен видеть отредактированные статьи

    Сценарий: добавление новой статьи
      Сначала admin is logged in as nexus
      И can view article list in admin zone
      Если I create new article title bbb
      То user should see it in the articles list /articles/my-new-article

    Сценарий: редактирование существующей статьи
      Сначала admin is logged in as nexus
      Если admin edit article foo and save content blabla
      То user should see blabla at url /articles/foo

    Сценарий: удалить существующую статью foo
      Сначала admin is logged in as nexus
      И статья с url foo доступна пользователю
      Если админ удаляет статью с урл foo
      То юзер в списке статей не видит ссылку на статью foo

      читать далее >>

    Слегка доработанный capistrano recipe для получения дампа рабочей базы локально

    13:04, 28 июля 2008 ( )

    Довольно часто данные изменяются на продакшн-сервере, и обычно хочется экспериментировать над свежей копией данных в своем rails приложении.

    Тем, кто пользуется для разворачивания приложений capistrano есть хорошая новость: сделать такую вещь весьма несложно.

    Итак, у нас в production FreeBSD 7.0, для разработки пользуемся рабочей станцией с ubuntu 8.04.

    Рецепт capistrano слегка модифицированный взят отсюда: http://programmingishard.com/code/495

    добавляем в config/deploy.rrb

     desc "Load production data into development database"
    task :load_production_data, :roles => :db, :only => { :primary => true } do
      require 'yaml'
     
      database = YAML::load_file('config/database.yml')
     
      filename = "dump.#{Time.now.strftime '%Y-%m-%d_%H:%M:%S'}.sql"
      on_rollback { delete "/tmp/#{filename}" }
     
      run "mysqldump -u #{database['production']['username']} --password=#{database['production']['password']} #{database['production']['database']} > /tmp/#{filename}" do |channel, stream, data|
        puts data
      end
      get "/tmp/#{filename}", filename
    #  exec "/tmp/#{filename}"
      exec "mysql -u #{database['development']['username']} --password=#{database['development']['password']} #{database['development']['database']} < #{filename}; rm -f #{filename}"
    end

    после чего пользуемся:

    cap load_production_data

    и вуаля, свежая копия базы с production у нас в development!

     

    +1 в сайты на ROR

    11:09, 3 ферваля 2008 ( )

    Тихо и незаметно вызрел еще один сайт на Ruby on Rails. 

    Сей сайт находится по адресу http://nxt.com.ua

    Rails 2.0, пользует плагины acts_as_tree, in_place_editing, restful_authentication, tiny_mce 

     

     

    Relative urls в tiny_mce

    17:04, 21 января 2008 ( )

    От читателя поступил вопрос, как сделать так, что бы в браузере изображений url были бы не вида ../../images, а /images ?

    Очень просто, достаточно добавить в вызов tiny_mce  в контроллере такие параметры:

    :relative_urls=>false,
    :convert_urls=>true
    и ваши url будут вида /images  и т.д.
    хотя, при правильной разработке, этого не требуется. 

    Rails: ActiveSearch plugin

    11:32, 27 декабря 2007 ( )

    Плагин ActiveSearch просто чудо какое-то, большое человеческое спасибо julik.nl за его разработку.

    Штука сия облегчает и без того легкую жизнь ;-) rails-девелопера при разработке простейшего поиска по записям базы.

    Идея сего плагина такова: используя разнообразные инексаторы исходя из планируемого объема данных вырабатываем оптимальный подход к поиску по записям базы.

    Например, мой сайт содержит весьма небольшой объем данных, и, как рекомендует Julik, при объеме до 500 записей целесообразно использовать простейший индексатор ActiveSearch::LikeIndexer.

    Для того чтобы поиск заработал необходимо:

    1. Установить плагин:

    cd project

    ruby script/plugin install http://julik.textdriven.com/svn/tools/rails_plugins/simple_search/ 

    2. Добавить поле searchable к таблицам, по которым вы собираетесь искать. Целессобразно сделать это через миграцию:

      def self.up
        add_column("products","searchable", :text)
        add_column("categories","searchable", :text)
       
     end 

    def self.down   
        remove_column("products","searchable")
        remove_column("categories","searchable")
      end

    3. В моделях Product и Category добавляем указание к индексированию:

       indexes_columns :title, :short_description, :long_description

    4.  запустить начальное индексирование:

    консоль rais:

    ruby script/console

    в консоли

    Products.indexers[0].rebuild!

    Category.indexers[0].rebuild!

    Все, теперь мы можем достаточно быстро искать по записям:


    @found_categories = Category.indexers[0].query(@query)
    @found_products = Product.indexers[0].query(@query)

     Можно искать и по Category.find_using_term("query"), как в документации указано, но, видимо такое использование предполагает использование сразу нескольких индексаторов.

     

    Таким образом плагин может быть использован с:

    1. индексом в поле searchable в каждой модели, по которой будет производиться поиск.

    2. индексом в отдельной таблице

    3. индексом через плагин ferret 

    способы индексации расположены в порядке увеличения количества данных для поиска.

    Удобно, Julik, u made my day. 

     

    Аяксовое дерево с drag-n-drop на Ruby on Rails

    10:58, 17 декабря 2007 ( )
    А вот, собственно, и ссылка на субж. http://ajaxonrails.wordpress.com/category/ajax-tree/
     
    страницы:
     1 
    2 3 4 5 6 ... >|
    © Nexus 2005-2011 Rambler Top100 О сервере