Постове 6 - 10 от 11 с таг rails

Aug 15

Едно от основните неща който се налага да има в едно приложение е качване на файлове. И докато за PHP работата с прикачени файлове се учи и прави твърде лесно. При Rails е малко по-трудно, но пък за това има множество плъгини, които улесняват този процес. Най-много ми допада Paperclip, на Thoughtbot. На Thoughtbot използвам и още две техни неща Factory Girl и Shoulda, както и наблюдавам и развитието на Clearance.

Исках и да тествам дали Paperclip е наместен както трябва в моето приложение. Което е доста лесно. Проблемът е, че липсва каквато и да е документация по въпроса. Но съм малко ровене в ruby кода и опити успях да разбера как става това. И тъй като може и на други хора да им трябва подобно нещо реших да споделя наученото.

За тестване използвам RSpec с малко помощ от Shoulda. А Paperclip го използвам като plugin, а не като gem (което за този пост мисля, че няма голямо значение).

Така, по същество. От Thoughtbot са сложили в самия Paperclip четири валидиращи метода (намират се в lib/paperclip/matchers.rb):

  1. have_attached_file
  2. validate_attachment_presence
  3. validate_attachment_size
  4. validate_attachment_content_type

Лошото е че в документацията на Paperclip, няма много(да не кажа никаква) информация за тях, като начин на ползване и как да се добавят в тестовете.

Добавяне на matcher-ите в RSpec тестовете

Това се оказа по-лесно от колкото предполагах просто във вашия spec_helper.rb добавяте следното:

require 'paperclip/matchers'

Spec::Runner.configure do |config|
 config.include Paperclip::Shoulda::Matchers
end

И воала вече може да използвате горе споменатите matcher-и. Обаче с малко засрамено ще кажа, че ми отне доста време да стигна до тези редове. Много ми помогна този урок от Railscasts – RSpec Matchers & Macros.

Същинското тестване

Тук нещата не са толкова трудни, но много зависи от съответните изисквания за вашето приложение.

class Product < ActiveRecord::Base
  has_attached_file :picture,
                     :path   => ":rails_root/public/files/:class/:id/:style.:extension",
                     :styles => {:original => "800x600>", :small => "102x76" }
end

describe Product do
  it { Product.should have_attached_file(:picture) }
  it { Product.should validate_attachment_presence(:picture) }
  it { Product.should validate_attachment_size(:picture).in(1..1.megabytes) }
  it { Product.should validate_attachment_content_type(:picture).
                        allowing(%w(image/png image/jpeg)).
                        rejecting(%w(audio/mp3 application/octet-stream)) }
end

Според мен този код говори сам за себе си.

PaperClip

Неща които трябва да се отбележат. Първото, за разлика от повечето Shoulda matcherи не може да се ползва само “should”, а трябва да се пише името на модела, който се тества “Product.should”. Другото нещо което ми отне малко повече време да го разбера. А именно, че validate_attachment_content_type когато се вика трябва задължително да има allowing и rejecting, който описват типовете който може да се ползват за дадения файл.

Лично за мен беше доста полезно да видя как работят Paperclip matcherи от вътре.

Надявам се да съм бил полезен на някого с този пост и да съм му спестил време в ровене и търсене :) Ако някой има идеи и предложение ще се радвам да ги чуя.

May 01

p2p

На 25-26 този месец (т.е. вече стана миналия месец :) ) имах удоволствието да присъствам на  p2p конференцията във Велико Търново. Пиша този пози пост около седмица след събитието, отчасти защото исках да мине малко време от него и отчасти защото времето е дефицит в IT света.

Първия ден малко закъсняхме, защото с колегите от Pixeldepo тръгнахме от Добрич рано сутринта, затова малко изтървахме началото на лекциите. Групата ни се раздели на две – едните на WebTech частта, а другите на БлогКампа. Аз естествено избрах WebTech. Бях изпуснал първите две лекции, но бях дошъл точно на време за най-интересната – Защо Ruby on Rails, представена от Стефан Кънев (с който се запознах на другия ден). Просто страхотно представи Ruby on Rails и дано да е успял да убеди повече хора да пробват Rails. Аз лично за мен съм си решил, много преди p2p, че това лято ще мина изцяло на Rails. Тук има връзка към слайдовете и няколко полезни връзки от блога на Стефан Кънев. Жалко, че няма видео на лекцията. Малко лошо впечатление ми направи, че в цялата зала само 5 – 10 човека бяхме чували за github и други известни приложения. Следващите две лекции лично аз малко ги проспах, защото бях спал само 2-3 часа през нощта. В блога на Калоян Цветков (с който за малко се разминахме да се запознаем на живо) има доста повече информация за първия ден.

БлогКамп

БлогКамп-а доколкото ми разказаха е бил доста по активен и са се дискутирали много интересни неща. Лошото е било, че времето малко не стигнало, но както споменах по-горе времето винаги не стига. :)
След края на лекциите с колегите се настанихме във “Възрожденска къща, в подножието на Царевец” и се срещнах с няколко стари познати от ученическите ми години (малко как го казах написах, като че ли не са били преди 3 години, а преди 30 :-p ). Заради тези срещи и заради краткото Звук и Светлина, бях за съвсем малко на after party-то в клуб Jack и изтървах да се видя с Любомир Петров, с който от 4 години не се бяхме виждали ( добре, че поне на другия ден, се видяхме).

Втори ден

Втория ден бях изправен пред дилемата на кой поток да отида – на WebTech или Web 2.0/3.0. Беше много тежък избор, много исках да видя Щастливият програмист, на който Стефан Кънев пак е разказал играта на присъстващите. А и Сигурност на уеб-приложенията и Software Design Patterns също звучаха добре. Но все пак предпочетох Web 2.0 и мисля, че не сбърках.

Web2.0/3.0

Web2.0/3.0 започнаха с раздаването на ozone наградите, които очаквано бяха спечелени от “никому непознатите” svejo.net. На второ място остана client.bg, който спечели и наградата на публиката, каса бира, която така великодушно раздадоха (даже и аз успях да се уредя). Лекцията “Пътят на блогъра от соушъл буукмаркинг системи към изграждане на собствени общества”, която бях подценил се оказа доста силна, даже почти ме убедиха да ползвам favit.bg. Беше една от тези eye-opening лекции, за която знаеш много неща, но когато ти го систематизират, кажат на куп и ти го поднесат по интересен начин, ти светва лампичката в главата. :)

Как да съсипем сайта си за 3 минути

След това дойде и “Как да съсипем сайта си за 3 минути”, която продължи малко повече от 3 минути и беше за SEO, представена от Огнян Младенов, който както винаги беше на ниво. Взех си няколко бележки за блога и за проектите ми като цяло. Въпреки, че Pixeldepo, не предлагаме SEO като услуга (май сме едни от малкото, както каза и самия Огнян Младенов) ние правим нещо, което аз обичам да наричам SEO Driven Development, т.е. правим сайта максимално SEO достъпен и след това когато истински SEO специалист започне да си върши работа по сайта да е максимално улеснен.

Мислех да пиша за 1-2 неща, които не ми харесаха, но реших да си го спестя, защото стига с тези критики и негативизъм. Всичко беше на шест. Едно браво на организаторите.

Това са ми основните впечатления, много се радвам, че можах да присъствам на p2p, от която научих много полезни неща и си прекарах страхотно. Така че нямам търпение за следващата подобна конференция (примерно p3p). :)

п.п. Даже много ми се иска на следващата конференция и аз да водя някоя лекция. :)

Dec 24

По Коледа наистина стават чудеса! Преди минути прочетох това в официалния блог на RubyOnRails:

Merb gets merged into Rails 3!

В първия момент си помислих: май наистина съм страшно много настинал, че чак ми се  привиждат някакви странни неща.
После пак погледнах и този път погледнах и датата да не е случайно дошъл вече първи Април. :)

Но май няма лъжа. няма измама Merb влиза в Rails от версия 3та. Страхотна и супер не очаквана новина.

Малко подробности по въпроса: като за начало към края на Януари се чака  Rails 2.3 и след това се започва Rails 3.0.  През това време за Merb ще се правят bugfixoве и release-и,  и естесвено няма да се оставят на произвола на съдбата сегашние Merb поребители. Като ще се гледа да може лесно да се мигрира от Rails 2.x и Merb1.x (мисля че са 1 нещо) към Rails 3.0. Като Yehuda Katz вече е в the Rails core team.

Фокусите какви ще са:

  • Ефективност, скорост и scalability
  • Да бъде по свободен самия framework в смисъл да може да се заменя ActiveRecord с DataMapper или друг, да се ползва друг UnitTest framework и т.н. Като пак ще се запазят подразбиранията.
  • По “взискателно” API

За повече подробности може да прочетете самата новина в поста, както и в блога на Yehuda Katz.

Не съм видял още много коментари по случая но, най-вероятно Rails хората ще са супер доволни, докато върлите Merbисти не толкова, но скоро и те ще разберат положителните страни :)

Просто Ruby общността непрестанно ме изненадва в добия смисъл на думата. Някакси не виждам как може CodeIgniter и CakePHP да се обединят.  Но това е да си воден единствено от желанието да правиш нещо възможно най-добре и най-качествено. :)

п.п. Не съм сигурен, но май аз съм първия в България, който пише за това :)

Oct 01

Warehouse вече е с open source! :) Ето го и официалното съобщение за това - Warehouse is now open source и ето връзка към source кода – http://github.com/entp/warehouse/tree/master.

Warehouse e (май, трябваше с това да започна) е web базиран браузър за преглед на Subversion или git repositories. За по детайлна информация за самия продукт – http://warehouseapp.com/

warehouse

Голям фен съм на Warehouse, даже си мисля в скоро време да започнем да го ползваме в PixelDepo. То и другия продукт на entpLighthouse, е още по добър.

Но, защо такъв продукт направен от толкова добри и креативни хора, минава open source, защото за някои хора това е поражение ( въпреки че според мен, това не е така). Официялната версия е, че вече всичко всичко живо минава на git и започва да използва GitHub (или поне повечето от техните клиенти). А и в момента entp нямат достатъчно време да го развиват и от доста време нямаше много активност около Warehouse. Така ще чест прави на entp, че вместо да “дръпнат шалтера” на проекта, решиха да го отворя. Но е същото така е вярно, че като се изключи GitHub, за git и даже за Subversion няма много читави клиенти, или поне аз не съм попадал на такива. Така, че Warehouse има бъдеще :)

Sep 19

Microsoft най-сетне решиха да отвърнат на удара на Mac vs Pc ads, които Apple правят от години, с това:

Не знам, нещо не ми харесва. Дали защото съм фен на Apple. А и само като се сетя за Windows мизериите, ми се иска да си сипя едни “успокояващ чай”, и явно не само аз искам това:

A и гледам, че има нови 2-3 епизода от серията “Mac vs PC” – https://www.apple.com/getamac/ads/.

п.п. Чесно казано най-добрата реклама, която Apple имат се вижда тук (само забележете колко хора са MacBookPro и колко са с нещо друго). А и самата конференция е била доста интересна, и тия дни смятам да я прегледам.