rubyのみでtweet投稿機能とuser登録機能の実装

Railsを使わず、rubyのみでtweet投稿機能とuser登録機能らしきものを実装してみました。

以下はgithubリポジトリのリンクです。

github.com

 

 

 

ファイル構成

ruby_pictweet

              |------tweet.rb

              |------user.rb

 

 

各ファイルの中身

tweet.rb

require "./user"

class Tweet
  @@tweets =
  def initialize(image, text)
    @image = image
    @text = text
  end

  def image
    @image
  end

  def text
    @text
  end

  def image=(val)
    @image = val
  end

  def text=(val)
    @text = val
  end

  def self.write_tweet
    puts "imageのurlを記入してね"
    image = gets.chomp
    puts "textを記入してね"
    text = gets.chomp
    tweet = Tweet.new(image, text)
    @@tweets << tweet
  end

  def self.show_tweets
    @@tweets.each do |tweet|
    puts "イメージurl:#{tweet.image}"
    puts "テキスト:#{tweet.text}"
    puts "----------------------------"
    end
  end
end

@@users =
while true do
  if @@users.length != 0
    while true do
      puts "[0]tweetを書く"
      puts "[1]tweet一覧を見る"
      puts "[2]pictweetを終了する"
      input = gets.to_i

      if input == 0
        Tweet.write_tweet
      elsif input == 1
        Tweet.show_tweets
      elsif input == 2
        exit
      else
        puts "入力された値は無効な値です"
      end
    end
  else
    puts "アカウント登録をしてください"
    User.create_account
  end
end

 user.rb

class User
  def initialize(email, password)
    @email = email
    @password = password
  end

  def email
    @email
  end

  def password
    @password
  end

  def self.create_account
    puts "メールアドレスを入力してください"
    email = gets.chomp
    puts "パスワードを入力してください"
    password = gets.chomp
    user = User.new(email, password)
    @@users << user
  end
end

 

 

完成したコードについての解説

TweetとUserの2つのクラスに分けて実装しました。

Tweetはimageとtextと言う属性を持ち、write_tweetメソッド、show_tweetsメソッドを持ちます。

Userはemailとpasswordと言う属性を持ち、create_accountメソッドを持ちます。

それぞれ独立した別のオブジェクトであるため、クラスを分けて実装しました。

もし、このプログラムをクラスを作らずに実装したら、tweetに関するメソッドもuserに関するメソッドも同じページに並んでしまうこととなり、何に関するメソッドがどこに書かれているか見通しが悪くなってしまいます。

クラスごとに枠組みを作ることで、見通しも良くなり、修正などもしやすくなります。