Difference between revisions of "Ruby"
From Wiki2
Line 155: | Line 155: | ||
>> p :name # Same as 'puts :name.inspect' | >> p :name # Same as 'puts :name.inspect' | ||
:name | :name | ||
# Parentheses on function calls are optional. | |||
stylesheet_link_tag('blueprint/screen', :media => 'screen') | |||
stylesheet_link_tag 'blueprint/screen', :media => 'screen' | |||
Let’s make a Word class with a palindrome? method that returns true if the word is the same spelled forward and backward: | |||
>> class Word | |||
>> def palindrome?(string) | |||
>> string == string.reverse | |||
>> end | |||
>> end | |||
=> nil | |||
We can use it as follows: | |||
>> w = Word.new # Make a new Word object. | |||
=> #<Word:0x22d0b20> | |||
>> w.palindrome?("foobar") | |||
=> false | |||
>> w.palindrome?("level") | |||
=> true | |||
</pre> | </pre> |
Revision as of 17:41, 4 November 2011
goto /users/tim/code/ruby
- rails new appname
- sets up directory system
- bundle install
- installs gems
- .gitignore
- installed with rails new
- git init
- starts new repository
- git add .
- git status; tells you what branch you are on and if you have stuff to commit
- git commit
- commits change locally
- git log
- of commits
on github
- new repository
back on local machine
- git remote add origin git@github.com
- mckennatim/rubyapp2.git: this line is given in github
- git push -u origin master
- get checkout -b modify-README
- creates a new branch
- mate README
- now in new branch
- git mv README README.markdown
- mate README.markdown
- git commit -am "improve readme"
- commit locally all, message
- git checkout master
- moves back to master branch
- git merge modify-README
- bringes changes of the modify-README branch into the master branch
- git push
- all you need to push it back to github
to use hosting site
- heroku
- heroku keys:add
- heroku create
- git push heroku master
- git mergetool
- to resolve conflicts
- heroku wouldn't work with ror3
- fixed config/application.rb to read..
require File.expand_path('../boot', __FILE__) # Pick the frameworks you want: #require "active_record/railtie" require "action_controller/railtie" require "action_mailer/railtie" require "active_resource/railtie" require "sprockets/railtie" # require "rails/test_unit/railtie" if defined?(Bundler) # If you precompile assets before deploying to production, use this line Bundler.require(*Rails.groups(:assets => %w(development test))) # If you want your assets lazily compiled in production, use this line # Bundler.require(:default, :assets, Rails.env) end require "active_record"
- kill rail server; lsof -wni tcp
- 3000, kill -9 PID
ruby syntax
>> nil.empty? NoMethodError: You have a nil object when you didn't expect it! You might have expected an instance of Array. The error occurred while evaluating nil.empty? >> nil.to_s.empty? # Message chaining => true It’s worth noting that the nil object is special, in that it is the only Ruby object that is false in a boolean context, apart from false itself: >> if nil >> true >> else >> false # nil is false >> end => false # 0 (and everything other than nil and false itself) is true >> "foo bar baz".split # Split a string into a three-element array => ["foo", "bar", "baz"] >> "fooxbarxbazx".split('x') => ["foo", "bar", "baz"] >> a.sort => [8, 17, 42] >> a.reverse => [17, 8, 42] >> a.shuffle => [17, 42, 8] >> a.push(6) # Pushing 6 onto an array => [42, 8, 17, 6] >> a << 7 # Pushing 7 onto an array => [42, 8, 17, 6, 7] >> a << "foo" << "bar" # Chaining array pushes => [42, 8, 17, 6, 7, "foo", "bar"] >> a => [42, 8, 17, 7, "foo", "bar"] >> a.join # Join on nothing => "428177foobar" >> a.join(', ') # Join on comma-space => "42, 8, 17, 7, foo, bar" Closely related to arrays are ranges, which can probably most easily be understood by converting them to arrays using the to_a method: >> 0..9 => 0..9 >> 0..9.to_a # Oops, call to_a on 9 NoMethodError: undefined method `to_a' for 9:Fixnum >> (0..9).to_a # Use parentheses to call to_a on the range => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >> a = %w[foo bar baz quux] # Use %w to make a string array. => ["foo", "bar", "baz", "quux"] >> a[0..2] => ["foo", "bar", "baz"] Ranges also work with characters: >> ('a'..'e').to_a => ["a", "b", "c", "d", "e"] >> 3.times { puts "Betelgeuse!" } # 3.times takes a block with no variables. "Betelgeuse!" "Betelgeuse!" "Betelgeuse!" => 3 >> (1..5).map { |i| i**2 } # The ** notation is for 'power'. => [1, 4, 9, 16, 25] >> %w[a b c] # Recall that %w makes string arrays. => ["a", "b", "c"] >> %w[a b c].map { |char| char.upcase } => ["A", "B", "C"] >> ('a'..'z').to_a.shuffle[0..7] # Pull out the first eight elements. => ["f", "w", "i", "a", "h", "p", "c", "x"] >> ('a'..'z').to_a.shuffle[0..7].join # Join them together to make one string. => "mznpybuj" irb(main):012:0> ('a'..'z').to_a[0..7] => ["a", "b", "c", "d", "e", "f", "g", "h"] >> params[:user] = { :name => "Michael Hartl", :email => "mhartl@example.com" } => {:name=>"Michael Hartl", :email=>"mhartl@example.com"} >> params => {:user=>{:name=>"Michael Hartl", :email=>"mhartl@example.com"}} >> params[:user][:email] => "mhartl@example.com" >> flash = { :success => "It worked!", :error => "It failed. :-(" } => {:success=>"It worked!", :error=>"It failed. :-("} >> flash.each do |key, value| ?> puts "Key #{key.inspect} has value #{value.inspect}" >> end Key :success has value "It worked!" Key :error has value "It failed. :-(" >> p :name # Same as 'puts :name.inspect' :name # Parentheses on function calls are optional. stylesheet_link_tag('blueprint/screen', :media => 'screen') stylesheet_link_tag 'blueprint/screen', :media => 'screen' Let’s make a Word class with a palindrome? method that returns true if the word is the same spelled forward and backward: >> class Word >> def palindrome?(string) >> string == string.reverse >> end >> end => nil We can use it as follows: >> w = Word.new # Make a new Word object. => #<Word:0x22d0b20> >> w.palindrome?("foobar") => false >> w.palindrome?("level") => true