You can see everything in the file structure at github.com/ddd1600/simple_angel
I’m getting alot of errors while trying to create a ruby application (soon to be a gem) “the correct way”, viz. by thoroughly dividing the logic into classes and “loader files” and all of that. Point is, I know how to do this code the simpler way, without obeying OO principles, but I want to do it “correctly”.
So, first of all, the file structure is as follows—
root folder = ~/Develop/simple_angel
inside /simple_angel
- /lib
- Gemfile
- Rakefile
- simple_angel.gemspec
inside /lib
- simple_angel.rb
- /simple_angel
inside /lib/simple_angel
- company.rb
- search.rb
- version.rb
But, here are some basics.
Here is what I’m calling to run this program from the terminal (PATH when running is ~/Develop/simple_angel)
ruby -Ilib lib/simple_angel/search.rb
Here is search.rb
#these 'requires' are supposed to be loaded in lib/simple_angel.rb, so here I show
#them commented out
#
#require 'rubygems'
#require 'httparty'
#require 'json'
#require 'company'
module SimpleAngel
class Search
SEARCH_URL = "http://api.angel.co/1/startups"
def search(user_input)
response = HTTParty.get("#{SEARCH_URL}/#{user_input}")
parsed_response = JSON.parse(response.body)
Company.new(parsed_response)
end
end
s = SimpleAngel::Search.new
s = Search.new
x = s.search(6702)
p x
end
Here is the “loader” file, lib/simple_angel.rb (PS: what is a more formal title for this sort of file?)
require 'httparty'
require 'json'
require 'simple_angel/search'
require 'simple_angel/version'
require 'simple_angel/company'
module SimpleAngel
end
Lastly, when I (again), run “ruby -Ilib lib/simple_angel/search.rb” (with all of search.rb’s ‘requires’ commented out (^&^), this is my error message:
[ddouglas@coders:~/Develop/simple_angel on master]
% ruby -Ilib lib/simple_angel/search.rb
lib/simple_angel/search.rb:15:in `search': uninitialized constant SimpleAngel::Search::HTTParty (NameError)
from lib/simple_angel/search.rb:24:in `<module:SimpleAngel>'
from lib/simple_angel/search.rb:8:in `<main>'
^&^ – now that we’re all up to speed here, I might as well include the error that happened when I left search.rb’s “requires” in place
% ruby -Ilib lib/simple_angel/search.rb ✹
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- company (LoadError)
from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from lib/simple_angel/search.rb:6:in `<main>'
I can’t say I understand the point the class is trying to make regarding splitting up your files.
The first error (
uninitialized constant SimpleAngel::Search::HTTParty) is because from withinSimpleAngel::Search, you callHTTParty. Try changing that to::HTTPartyto specify the root namespace.