Обновить
16K+

Ruby *

Динамический высокоуровневый язык программирования

3,2
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Как я использовал gem gon в Групоне

Время на прочтение4 мин
Охват и читатели6.4K
На днях я зарелизил новую версию своего gem Gon – 4.0.0 и решил привести пару примеров его возможностей и использования. Данная библиотека служит для упрощения работы с данными в MVC архитектуре. Она позволяет работать с данными контроллера из JS пропуская шаги перекидывания этих данных через вью. На сегодняшний день существуют реализации гона для RoR приложений, sinatra-like приложений (sinatra, padrino, etc.) и для .Net MVC.

Карта в админке

Передо мной стояла задача — реализовать разделение предложений в Групоне по территориальным областям, которые бы мог редактировать администратор. Предложения из областей показываются людям которые живут в этих областях с большим приоритетом нежели предложения из других областей.

Читать дальше →

Автоматическая сборка javascript/coffeescript проекта

Время на прочтение8 мин
Охват и читатели6.1K
При разработке хоть сколько-нибудь большого javascript проекта сразу понимаешь, что писать весь код в одном-единственном файле нельзя. После этого код разносится по нескольким файлам и директориям и пишется простой скрипт для того, чтобы все эти файлы можно было легко объединить в один большой production файл. Спустя какое-то время начинаешь замечать, что чем дальше, тем труднее становится следить за зависимостями между файлами, да и весь разработанный механизм больше похож на костыль. И тут приходить озарение, что неплохо было бы посмотреть, какие существуют решения этой проблемы.

К системе управления сборкой проекта выдвигаются следующие требования:
  1. Компиляция из coffescript в javascript. Если в файле coffeescript содержится ошибка, то в консоли должны отобразиться название файла и сообщение об ошибке.
  2. Сборка проекта в один javascript файл должна производится с учетом зависимостей.
  3. Возможность собрать все приложение целиком в один файл в нескольких видах (с комментариями, минимизированный). При этом само приложение может состоять из нескольких модулей.
  4. Сборка тестовых файлов и их выполнение в консоли (да, разрабатываем для веба, при этом не притрагиваемся к мышке и вообще не вылазим из любимого vim'a).
  5. Конечно же все это должно быть удобно в использовании.

В данной статье я не буду затрагивать вопрос тестирования, а рассмотрю вариант системы управления сборкой javascript/coffescript проекта (и саму структуру проекта) с использованием rake и Rake::Pipeline (git).
Читать дальше →

Занимательное функциональное программирование в Ruby

Время на прочтение13 мин
Охват и читатели10K

Эта статья посвящена бесцельному путешествию по вырожденной форме Ruby в попытках узнать больше о функциональном программировании, простоте и дизайне программных интерфейсов.

Предположим, что единственный способ представления кода — лямбда-выражение, а единственная доступная структура данных — массив:

square = ->(x) { x * x }
square.(4) # => 16

person = ["Dave",:male]
print_person = ->((name,gender)) {
  puts "#{name} is a #{gender}"
}
print_person.(person)

Это самые основы функционального программирования: функции — единственное, что у нас есть. Давайте попробуем написать что-то более похожее на реальный код в таком же стиле. Посмотрим, как далеко мы сможем зайти без особых мучений.
Читать дальше →

Релиз RubyMine 4.5

Время на прочтение1 мин
Охват и читатели8.6K
RubyMine 4.5 Just ReleasedКомпания JetBrains рада сообщить о выходе RubyMine 4.5 — новой версии интеллектуальной интегрированной среды разработки для Ruby on Rails, которую можно загрузить с нашего сайта

Мы искренне верим, что для создания хорошего продукта в первую очередь необходимо прислушиваться к сообществу разработчиков. В этой версии RubyMine мы постарались реализовать как можно больше нового функционала с учетом оставленных вами комментариев и отданных голосов.
Читать дальше →

Интеграция Robokassa в ActiveMerchant

Время на прочтение3 мин
Охват и читатели10K
Прим. переводчика — пост про интеграцию Robokassa и Rails уже был, но способ, предоставленый там, полагаю, многих не устроит.

Когда у вас есть приложение, написанное на Ruby on Rails и вы планируете добавить какую-нибудь платежную систему (например PayPal, Moneybookers или Robokassa, как в нашем случае), то первый гем о котором вы должны подумать — это active_merchant от Shopify.

ActiveMerchant — простая абстрактная платежная библиотека используемая и спонсируемая компанией Shopify.

Поэтому когда мне понадобилось добавить платежи через Robokassa в наш проект, я открыл список поддержеваемых платежных систем и был немного разачарован, потому что Robokassa туда не входила. Чуть позже я нашел форк, который добавлял её поддержку, но он уже устарел, поэтому некоторые тесты падали ec801d3d4f8. Таким образом я решил глянуть на этот код и исправить его, а не писать всё с чистого листа.
Читать дальше →

Немного Rails трюков

Время на прочтение3 мин
Охват и читатели11K

Хочу поделиться в вами несколькими трюками, которые помогут сделать работу с Ruby on Rails лучше, быстрее, а также позволят вам много зарабатывать и более лучше одеваться.
Читать дальше →

Ruby NoName Podcast S04E12

Время на прочтение1 мин
Охват и читатели1.3K

Подкаст

http://ruby.rpod.ru/278465.html

Новости


Читать дальше →

CoffeeScript: Классы

Время на прочтение16 мин
Охват и читатели22K
CoffeeScript: Classes

В ECMAScript пока отсутствует понятие «класс», в классическом понимании этого термина, однако, в CoffeeScript такое понятие есть, поэтому сегодня мы рассмотрим этот вопрос очень подробно.


Содержание:

1. Основные понятия
2. Члены класса
   2.1. Метод constructor
   2.2. Открытые члены класса
   2.3. Закрытые члены класса
   2.4. Защищенные члены класса
   2.5. Статические члены класса
   2.6. Оператор => (fat arrow)
3. Наследование
4. Дополнительная литература

Читать дальше →

Установка ruby в Ubuntu с помощью rbenv-installer

Время на прочтение3 мин
Охват и читатели13K
На хабре уже есть несколько статей о rbenv (раз, два, три), но ни в одной не упомянут очень удобный инструмент rbenv-installer. Этой статьёй я и заполню этот пробел.

Прежде чем начну описывать установку, хочу сказать чем меня порадовал rbenv и почему я перешёл на него с RVM.

В одном из моих проектов мне понадобилось периодически запускать задачи (rake tasks) с помощью cron. Задачи для cron-а я формировал и записывал в crontab с помощью гема whenewer. Тогда я ещё пользовался RVM и cron в лог писал что-то вроде:
bundle: command not found

Искал решение с помощью гугла и нашёл в issues whenewer-а упоминание о такой же проблеме. Тикет был закрытым и упоминалось что в rbenv всё работает. Установил я rbenv и без каких-либо дополнительных настроек мои cron-задачи стали работать так как я и хотел. С того дня в новых проектах я только rbenv использую.
Читать дальше →

Ruby NoName Podcast S04E11

Время на прочтение1 мин
Охват и читатели911

Подкаст


http://ruby.rpod.ru/277590.html

Новости




Читать дальше →

Padrino для frontend разработчика

Время на прочтение3 мин
Охват и читатели4.8K
Видимо, только второй пост на хабре с участием Padrino за 2 года ;)



Используйте HAML для генерации HTML



Используйте SASS для генерации CSS



Используйте Coffee Script для генерации JS



Скачайте шаблонное приложение, установите инструментарий и начните разработку немедленно.

10 минут и все работает даже под Windows.

Ага! Вот чем я займусь в выходные!

Ruby NoName Podcast S04E10

Время на прочтение2 мин
Охват и читатели785

Ближайшие события

Red Hat усиливает PaaS OpenShift разработчиками JRuby

Время на прочтение2 мин
Охват и читатели1.4K
В начале месяца появились новости о том, что Red Hat открыла код своей PaaS OpenShift. Те, кто следит за развитием этого проекта, наверное уже заметили, что в Red Hat уделяют OpenShift очень большое внимание. Помимо добавление нового функционала (из недавнего — поддержка Node.js) постоянно происходит и улучшение уже существующего. К последнему можно отнести и новость о переходе в Red Hat двух ключевых разработчиков JRuby.
Читать дальше →

Пишем REST приложение на Sinatra и прикручиваем Redactor. Часть 2

Время на прочтение5 мин
Охват и читатели2.9K
В первой части статьи мы написали REST приложение и на 1/3 настроили Redactor.js. Сегодня мы закончим наше изобретение, написав интерфейс управления загруженными изображениями, и обеспечим загрузку файлов. При загрузке файлов мы не будем использовать CarrierWave, а пойдем обычным путем Ruby.
Читать дальше →

Пишем REST приложение на Sinatra и прикручиваем Redactor. Часть 1

Время на прочтение9 мин
Охват и читатели8.4K
Данная статья рассчитана первым делом на новичков, которые только начинают изучать Ruby. После 3 недель изучения этого замечательного языка, накопились некоторые знания, которыми хочется поделиться.

Sinatra — бесплатный и открытый программный каркас написанный на языке Ruby, предназначенный для разработки веб-приложений. (ru.wikipedia.org)

Redactor — достаточно мощный и в тоже время простой и красивый в использовании wysiwyg редактор (ссылка на хабре)
Читать дальше →

Переводим Rails–приложение на Ruby 1.9

Время на прочтение3 мин
Охват и читатели2.7K
Итак, у нас есть существующее приложение Ruby on Rails, работающее под ruby 1.8.7. Казалось бы, “работает — не трогай”! Однако, переход на ruby 1.9.x для приложения, которое мы планируем развивать и поддерживать в будущем, неизбежен
Читать дальше →

Массовая уязвимость в проектах на Ruby

Время на прочтение1 мин
Охват и читатели2.7K
Опубликовано сообщение о массовой уязвимости в проектах на Ruby. Речь идёт об использовании ^ в начале строки и $ в конце строки регулярных выражений вместо \A и \z.

Дело в том, что ^ и $ в таких случаях воспринимается Ruby как новые строки (\n), что открывает двери для инъекций.
Читать дальше →

Вникаем в метаклассы Ruby

Время на прочтение6 мин
Охват и читатели55K

Примечание переводчика: данный пост является логическим развитием, а точнее «предысторией» поста Вникаем в include и extend и был подсказан в комментариях к нему пользователем murr, за что ему большое спасибо.

Классы и объекты в Ruby связаны между собой достаточно затейливо и не сразу можно понять что к чему. Из-за особого назначения классов очень легко потерять из вида тот факт, что классы — это тоже объекты Ruby. От «обычных» объектов их отличает два вещи: они служат образцом для создания новых объектов и они являются частью иерархии классов. Все верно, классы могут иметь экземпляры себя (объекты), суперклассы (родителей) и подклассы (детей).

Если классы — это объекты, то у них должен быть свой собственный класс. Классом всех классов (как объектов) в Ruby является класс Class:

# один из способов создать новый класс
Dog = Class.new
    
# общепринятый способ создания класса
class Dog
    # какая-то реализация собачьего поведения
end

Dog.class
=> Class

Читать дальше →

Ruby NoName Podcast S04E09

Время на прочтение1 мин
Охват и читатели828

Подкаст


ruby.rpod.ru/275445.html

Новости




Читать дальше →