github.com/ddd1600 / simple_angelで、ファイル構造のすべてを確認できます。
「正しい方法」でルビーアプリケーション(まもなく宝石になる)を作成しようとすると、多くのエラーが発生します。ロジックをクラスと「ローダーファイル」などに完全に分割することによって。ポイントは、OOの原則に従わずに、このコードをより簡単な方法で実行する方法を知っていますが、「正しく」実行したいということです。
したがって、まず、ファイル構造は次のようになります---
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
しかし、ここにいくつかの基本があります。
これが私がターミナルからこのプログラムを実行するために呼んでいるものです(実行中のPATHは〜/ Develop / simple_angelです)
ruby -Ilib lib/simple_angel/search.rb
これが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
これが「ローダー」ファイル、lib / simple_angel.rbです(PS:この種のファイルのより正式なタイトルは何ですか?)
require 'httparty'
require 'json'
require 'simple_angel/search'
require 'simple_angel/version'
require 'simple_angel/company'
module SimpleAngel
end
最後に、(もう一度)「ruby-Ilib lib / simple_angel / search.rb」を実行すると(search.rbの「requires」がすべてコメントアウトされます(^&^)、これは私のエラーメッセージです:
[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>'
^&^-ここですべての速度が上がったので、search.rbの「requires」をそのままにしておいたときに発生したエラーを含めることもできます。
% 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>'