top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_818

Ruby:◇ブログシステムを創る:基本のシステム ・・・ 【Ruby:29歩目】

 2009-03-31
 久しぶりの「Ruby」。
 またまた、時間を空けて仕舞った。
 老化に向かう脳には、ちと長すぎた。

 前回の作業は
 「Rubyブログシステム の
  プロトタイプ作成」だったな。

 ・Ruby:◇ブログシステムを創る:プロトタイプ ・・・ 【Ruby:28歩目】

 ◆基本構成◆
 ・data  ・・・ 日記の原稿を置くディレクトリ
 ・views ・・・ テンプレートとなる、eRubyスクリプト を格納
 ・html  ・・・ 生成された、HTMLファイルが配置されるところ

  こんな感じのディレクトリ構成を用意し、

  ・data フォルダに
   ・2009-03-12.txt などの名前で、テキストファイルを用意
  ・作業用 フォルダ(これら3つの 親ディレクトリ) に
   ・blog0.rb というRubyファイルを作成
  ・コマンドラインで、Ruby blog0.rb を実行すると
   ・html フォルダに
    ・dataフォルダの中のテキストファイルを組み込んで
    ・index.html が作成される

  ここまで、作成しその方法を学んだわけだ。
  さて、今回はこの前提学習を基に、
  基本のシステム作成 を学ぶ・・・

  追記に ▼

※この連載は、はじめて「Ruby」に取り組んだmetaboyが、
 PHPなどとの違いを考慮しつつ、ゆっくりと
 良書「はじめてのRubyプログラミング」を基に
 学んでゆく、詳細な記録です。
                      (本日の参照:265頁


FC2ブログランキングにほんブログ村 IT技術ブログ Webサイト構築へブログ王ランキング人気ブログランキング人気ホームページランキングへ


more  ◇ブログシステムを創る:基本のシステム
  さて、前回の「プロトタイプ」を
  使えるシステムに改造してゆくわけだ。

 ◆原稿選択を動的に行う
  ・ソースに静的記述していた、原稿の読込を
   ・ファイルの存在を動的に行い、
    自動的に読み込む部分

  ・前回までの Blogクラスは、
class Blog
def generate
@entries = []
@entries << Entry.new('data/2007-04-01.txt')
@entries << Entry.new('data/2007-04-02.txt')
@entries << Entry.new('data/2007-04-21.txt')
@entries << Entry.new('data/2009-03-12.txt')

rhtml = File.read('views/list.html.erb')
html = ERB.new(rhtml).result(binding)
File.open('html/index.html', 'w') {|f| f.write(html) }
end
end
 ・・・だったが、これにメソッドを追加

  ・存在するファイルを走査し、組み込む
  ●read_entries メソッド を追加
  def read_entries
@all_entries = [] # 配列用意して
Dir.glob('data/*.txt').each do |filename|
if File.basename(filename) = ~/\A\d{4}-\d{2}-\d{2}/
@all_entries << Entry.new(filename)
end
end
end
 ・・・.txt のファイルを配列に組み込む
 ・ファイル名のチェックで、正規表現を利用
 ・正しいファイル名だった場合、
  @all_entries という配列に オブジェクトとして格納

  ・スクリプトが最初に行う行動を記述する
  ●initialize メソッド を追加
  def initialize
read_entries
end
 ・・・read_entries メソッド を呼び出す

  ●generate メソッド を(変更)修正
  def generate
# @entries = []
@entries = @all_entries
# @entries << Entry.new('data/2007-04-01.txt')
# @entries << Entry.new('data/2007-04-02.txt')
# @entries << Entry.new('data/2007-04-21.txt')
# @entries << Entry.new('data/2009-03-12.txt')

rhtml = File.read('views/list.html.erb')
html = ERB.new(rhtml).result(binding)
File.open('html/index.html', 'w') {|f| f.write(html) }
end

   read_entries メソッド で
   自動的に組み込まれたファイルに対して自動実行
   するように変更


 ◆利用するテンプレートを変更できるように
  ・generate メソッド の中で、、
    ERB.new として、HTMLを生成しているけれども
    ここで引数に設定している
    'views/list.html.erb' を
    変更し、自動的に変えられるようにする

  ●render_view メソッド を追加
 def render_view(template)
rhtml = File.read("views/#{template}.html.erb")
html = ERB.new(rhtml).result(binding)
end
 ・・・template に与えられる引数で変化


 ◆生成させる部分も独立させる
  ・generate メソッド の中で、、
    最終的に生成させている部分も独立させ
    どのファイルを生成するか なども
    動的変更できるようにする

  ●write_html メソッド を追加
 def write_html(name,template = name)
html = render_view(template)
File.open('html/#{name}.html', 'w') {|f| f.write(html) }
end
 ・・・name に与えられるファイルを生成

  以上総合して、もう一度
  ●generate メソッド を(変更)修正
class Blog
def initialize # 最初に実行される
read_entries # テキスト読込のメソッドを実行
end

def generate # 生成基本メソッド
# 用意された原稿オブジェクトが格納されている配列を代入
@entries = @all_entries
write_html('index','list') # 最終的に書き込むメソッドを実行
end

def read_entries # 原稿読込メソッド
@all_entries = [] # 配列用意して
Dir.glob('data/*.txt').each do |filename| # .txtファイルだけを探してループ
if File.basename(filename) =~ /\A\d{4}-\d{2}-\d{2}/ #ファイル名の記述をチェック
@all_entries << Entry.new(filename) # 該当対象ファイルを配列に組み込む
end
end
end

def render_view(template) # テンプレートを利用して生成するメソッド
rhtml = File.read("views/#{template}.html.erb") # テンプレートの指定
html = ERB.new(rhtml).result(binding) # オブジェクトとして生成
end
def write_html(name,template = name) # HTMLファイルの出力メソッド
html = render_view(template) # テンプレートの組込みを行い
File.open('html/#{name}.html', 'w') {|f| f.write(html) } # HTMLファイルとして書き出す
end
end

 ※復習 を兼ねて
  コメントを付加しておく

 次回は、「ブログ用の 完全なHTMLフアイル」を
 生成するところまで行う。

 ※次回は、できるだけ早くやろう・・・
commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/818-5173bf09
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。