How to run Ruby programs in MAC OS Terminal [duplicate] - ruby-on-rails

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
How to run ruby files?
I am starting to learn Ruby and having a hard time running the Ruby classes in the Terminal.
I created a class in the Sublime Text editor, just "hello world". I can compile using ruby hello.rb,
but how do I execute it?
I went to the terminal in my root directory and typed rails c which gave me a console. Could some one please tell me how to create an instance? Which console do I use?

Ruby is interpreted, so you don't need to worry about a separate compile step. ruby hello.rb is the execution command.
The standard interactive shell (REPL) is irb.

I think, this is very simple task.
Paste in terminal ruby <your script name>.rb
This is all. Ruby is interpreted lang. Compiler doesn`t exist at all. Only interpreter.
I use Ruby only few times, but I think, you must run your method hello.
Your code only create the class and nothing else.
You should firstly learn Ruby and then RoR.

As others have pointed out, running ruby hello.rb does run the script; there is no compilation involved (except behind the scenes in the Ruby virtual machine, but you don't need to concern yourself with that).
Based on the code of the file which you gave in a comment (I've put in line breaks and indentation):
class Hello
def say
puts "hello World"
end
end
... the reason your script doesn't seem to do anything is that it only defines a class and a method but doesn't instantiate the class or call the method. You had the right idea (in another comment) to call h = Hello.new(); after that you can put h.say and it will say "hello World".
(Parentheses are usually not required, including in these two method calls; but sometimes they are important. There are varying conventions, but most Rubyists skip them when calling methods without any arguments, like new and say here.)
EDIT:
rails c is for Ruby on Rails, which is a separate entity from the Ruby language (although it's written in Ruby).

Related

Add a basic UI layer to existing ruby app

First, I am fairly new to Ruby/RoR and so you'll have to forgive me for any wrong terminology, but hopefully I'll get my point across.
I built an ruby app that I am needing to add an extremely simple UI layer using rails. Read up on a previous post of mine that explains the project thoroughly to give you good an idea of what it does. Specifically take a look at the tree outline that I pasted in so you see the existing file structure for the project.
What I need to know, is how to convert this existing project into a rails app? My experience in building something with rails has always started out with rails new app_name, but never anything like this. Any tips would be appreciated.
I saw your parser script, and it is not a daemon (a program that keeps running indefinitely in the background), right?
If I'm right, then you have several options:
The easiest option
Just build a rails application using rails new app_name, and inside some controller action, make a system call to run your script
class SomeController
def some_action
succeeded = system(:ruby, '/path/to/main.rb', '/path/to/some.txt')
# Do some rendering stuff here based on the result of the system call
end
end
This approach is somehow nasty for me, and it's not performant because each system call reads your ruby script and compiles or interprets it then runs it.
The harder option
Refactor your script so that it's features can be wrapped into a gem.
Then you install that gem, require it in your rails app, and use it.
I saw your original ruby script is almost there, it shouldn't be that hard to make it become a gem.
Rails is just "something" on top of Ruby. Especially, you can use any plain ruby objects inside of Rails, anywhere, and this is nothing unusual (google "PORO").
In your case, I would make a simple Rails app in the way you have mentioned yourself with rails new. Then trivially refactor your existing code until you have a simple, standalone class that does what you need to be done but takes its input/output from simple ruby data structures (i.e., method arguments, return values, no global state, no file operations). Then you can use that class from inside your Rails controller (taking input from a HTML form, rendering output to HTML), and also from inside your script (reading input from a file or STDIN, rendering output to STDOUT).
Where you put that class is up to you. In the MVC paradigm, it is not "C" or "V", and one could argue about whether it's "M". So put it into app/models/ or lib/, whatever you like more.
These were great answers and I'm sure they would have worked perfectly. However, they were a little bit more complex than what I was looking for.
What I ultimately ended up doing was just cd into the directory above where the ruby app was located and then just simply ran rails new app_name. Rails will ask if you'd like to overwrite any files that exist already. From there I just integrated my script into the controller actions and created the views.

Does every ruby on rails app need to be written on the console terminal?

I don't like using the console terminal. Is it possible to use a text editor like bracket *(MY FAVORITE) to write ruby code? I've seen ruby files. Are those written on an editor? Or is it the case that all these schools teach you the basics through the console and later you can write code on an editor?
Ruby do not have to be written in the terminal.
I myself do most of my coding in sublime and do run some commands in the terminal to run tests and generate some files. (Rails generators are quite awesome by the way)
I have a colleague who uses Ruby mine and from what I understand you can use that to do rails development without using the console.
Yes obviously you can use text editors.
You can write code in editor save it as file_name.rb and run from console as ruby file_name.rb
And this is just a start with Ruby. Just give your 20 minutes and you will get to know
https://www.ruby-lang.org/en/documentation/quickstart/
When you will get familiar with all the great things about ruby
You can start with Rails, as it's name suggests it actually get you started
http://guides.rubyonrails.org/getting_started.html
Just go on and you get fell in love with Ruby on Rails what it is called.
It's a lot convenient to use text editors and write codes instead of giving yourself a hard time coding using the console.
Sublime Text is one of the widely used editors, very easy to use and free. I've always used this.
You could also check out some of the best editors here 5 Best editors - Lifehacker
You can use any text editor and save the codes with the .rb extension <file-name>.rb and run it through terminal like this: ruby filename.rb

Ruby on Rails - Can I call a Controller:Method from a batch routine in windows?

I'm relatively new to RoR working on Windows. I built a simple app in Rails that sends email using ActionMailer. I'd like to add a task to my windows scheduler to run a batch routine that calls my email method inside of my controller. The web app will not be running when I do this, so I can't do a CURL or something similar. Is there a way to run Ruby.exe with some args to launch a rails app (similar to irb) and call a controller:method?
Update: I took the advice in the answer I marked correct, but I thought I'd elaborate in case a RoR newbie like myself needs a bit more guidance.
I created a folder app\classes and I created a .rb file for my class
I had to create an initialize method to handle some setup
Created a few methods that simple return variables
I made sure I could run the steps in rails console
Created a file in lib\tasks with the code below
Ran this in DOS in the project folder - rake runMe --trace
task :runMe => :environment do
#s = ScrapeTools.new
#bears = #s.getBears
#bulls = #s.getBulls
UserMailer.stock_email(#bears,#bulls).deliver
end
Please let me know if you see any errors
There is. rails runner <path to script> will run the given script under your Rails app. Have some docs
This is a good example of why you don't want to put logic in your controller. Much better than putting that functionality in a controller method, refactor it to a method in a module or class. Then you call that method from your controller as well as from a rake task that is straight-forward to execute in your batch routine.

How to integrate an already-existing .rb file in Rails?

I am still learning Ruby on Rails, but have a general question about using a link on a Rails view to trigger a ruby program to run. In other words, rather than type "ruby filename.rb" at the command prompt, I want a link in my Rails view to execute the code in filename.rb, when it's clicked.
I know this is a bit of hack, but I'm trying to learn one step at a time...
If you're using Ruby 1.9.x you can use Process.spawn;
Process.spawn("ruby #{Rails.root}/my_ruby_file.rb")
Copy that file in the lib directory and use require "already-existing.rb" in your rails view helper and call the methods from that file in your view .

Any TextMate trick/bundle to lookup Rails documentation?

I know this is common in 'full featured' IDE's and not text editors but TextMate walks a unique line with its many bundles... I'm wondering if there is an easy way to, say, click on a Ruby or Rails class or method and have TextMate (or shell) take me to the definition or some documentation?
There's one built into the rails bundle (^h) which uses api dock.
Another pretty nice way of doing it is using the rails os x dictionary, but it has a few downsides and I'm not sure what version of rails it's using (I'm pretty sure it's not rails 3, but I haven't checked).
Ctrl-H is an excellent option to learn about Ruby or Rails API.
But this doesn't work for any other methods or class that may be defined or included in your project. For those I've written a TextMate Bundle command (you can easily assign it to Ctrl+] for example) that lookup for the definition of the class or method under the caret and displays it in a tooltip, along with the file name and the line where it was find.
Check it out: Add a shortcut to TextMate to lookup a class or method definition in a tooltip
Hope you'll find it useful ;)

Resources