2013年7月9日火曜日

Rails4でRSpec(4) ヘ(^o^)ノ

前回のテストケースをDRY

spec/models/user_spec.rb
require 'spec_helper'

describe User do
  describe '#validate' do
    before :all do
      @user = FactoryGirl.build(:user)
    end

    it "正常に保存できる" do
      expect(@user.save).to be true
    end

    context 'login_name' do
      it '数字のみ' do
        @user.login_name = '11111'
      end

      it '英字のみ' do
        @user.login_name = 'ssss'
      end

      it '最初の文字は英字' do
        @user.login_name = '111aaa'
      end

      it '必須' do
        @user.login_name = ''
      end

      after :each do
        expect(@user.save).to be false
      end
    end

    after :all do
      User.delete_all
    end
  end
end

( ̄(エ) ̄)彡☆

Rails4でRSpec(3) ヘ(^o^)ノ

前回のはテストになってないwww

specファイルを修正

spec/models/user_spec.rb
require 'spec_helper'

describe User do
  describe '#validate' do 
    before :all do 
      @user = FactoryGirl.build(:user, password: 'murajun1978')
    end

    it "正常に保存できる" do
      expect(@user.save).to be true
    end

    context 'login_name' do
      it "login_nameは数字のみは不可" do
        @user.login_name = "111"
        expect(@user.save).to be false
      end

      it "login_nameは英字のみは不可" do
        @user.login_name = "eee"
        expect(@user.save).to be false
      end

      it "login_nameの先頭は必ず英字" do
        @user.login_name = "111aaa"
        expect(@user.save).to be false
      end

      it "login_nameは必須" do
        @user.login_name = ""
        expect(@user.save).to be false
      end

      it "login_nameは重複不可" do
        @user = FactoryGirl.build(:user, login_name: 'user_name_1')
        expect(@user.save).to be false
      end
    end

    after :all do
      User.delete_all
    end
  end
end

正常に保存できる条件でテストしないと意味ない(;・∀・)

( ̄(エ) ̄)彡☆

2013年7月8日月曜日

Rails4でRSpec(2) ヘ(^o^)ノ

昨日のBlogで少しきになるところがあったのでリファクタリング

spec/factories/users.rb
FactoryGirl.define do
  factory :user, :password, class: User do |f|
    sequence(f.login_name) { |n| "user_name_#{n}" } 
    f.password_confirmation { |u| u.password }
    f.admin true
  end
end

spec/models/user_spec.rb
require 'spec_helper'

describe User do
  describe '#validate' do 

    it "正常に保存できる" do
      @user = FactoryGirl.build(:user, password: 'murajun1978')
      expect(@user.save).to be true
    end

    context 'login_name' do
      before :all do
        @user = FactoryGirl.build(:user)
      end

      it "login_nameは数字のみは不可" do
        @user.login_name = "111"
        expect(@user.save).to be false
      end

      it "login_nameは英字のみは不可" do
        @user.login_name = "eee"
        expect(@user.save).to be false
      end

      it "login_nameの先頭は必ず英字" do
        @user.login_name = "111aaa"
        expect(@user.save).to be false
      end

      it "login_nameは必須" do
        @user.login_name = ""
        expect(@user.save).to be false
      end

      it "login_nameは重複不可" do
        @user = FactoryGirl.build(:user, login_name: 'user_name_1')
        expect(@user.save).to be false
      end
    end

    after :all do
      User.delete_all
    end
  end
end

Factory_Girlを少しシンプルにしてみましたヘ(^o^)ノ

login_nameは連番(user_name_1..user_name_2.. みたいな)

いい感じになったかな?

( ̄(エ) ̄)彡☆

2013年7月7日日曜日

Rails4でRSpec ヘ(^o^)ノ

Rails3からRails4へアップグレードしてみましたヘ(^o^)ノ

TurnipとCucumberについても近々書こう

Gemfile
source 'https://rubygems.org'

gem 'rails', '4.0.0'

group :development do 
  gem 'sqlite3'
  gem 'better_errors'
  gem 'binding_of_caller'
end

group :test do
  gem 'rspec-rails'
  gem 'spring'
  gem 'turnip'

  gem 'guard-rspec'
  gem 'guard-spring'

  gem 'growl'
  gem 'rb-fsevent'

  gem 'factory_girl_rails'
  gem 'database_cleaner'
end 

group :production do
  gem 'thin'
  gem 'pg'
end

gem 'sass-rails', '~> 4.0.0'

gem 'uglifier', '>= 1.3.0'

gem 'coffee-rails', '~> 4.0.0'

gem 'jquery-rails'

gem 'turbolinks'

gem 'jbuilder', '~> 1.2'

group :doc do
  gem 'sdoc', require: false
end

gem 'bcrypt-ruby', '~> 3.0.0'

Guardfile
guard :rspec, spring: true, turnip: true do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { "spec" }

  # Rails example
  watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^app/(.*)(\.erb|\.haml)$})                 { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
  watch(%r{^spec/support/(.+)\.rb$})                  { "spec" }
  watch('config/routes.rb')                           { "spec/routing" }
  watch('app/controllers/application_controller.rb')  { "spec/controllers" }

#  # Capybara features specs
#  watch(%r{^app/views/(.+)/.*\.(erb|haml)$})          { |m| "spec/features/#{m[1]}_spec.rb" }

  # Turnip features and steps
  watch(%r{^spec/acceptance/(.+)\.feature$})
  watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$})   { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
end

app/models/user.rb
class User < ActiveRecord::Base
  has_secure_password

  validates :login_name, uniqueness: true
  validates_presence_of :login_name, :admin
  validates_format_of :login_name, with: /\A[a-z][a-z0-9]*[0-9]\Z/
end

spec/models/user_spec.rb
require 'spec_helper'

describe User do
  describe '#validate' do 
    before :all do
      @user = FactoryGirl.create(:user)
    end
    
    it "正常に保存できる" do
      expect(@user.save).to be true
    end

    context 'login_name' do
      it "login_nameは数字のみは不可" do
        @user.login_name = "111"
        expect(@user.save).to be false
      end

      it "login_nameは英字のみは不可" do
        @user.login_name = "eee"
        expect(@user.save).to be false
      end

      it "login_nameの先頭は必ず英字" do
        @user.login_name = "111aaa"
        expect(@user.save).to be false
      end

      it "login_nameは必須" do
        @user.login_name = ""
        expect(@user.save).to be false
      end

      it "login_nameは重複不可" do
        @user2 = FactoryGirl.build(:user2)
        expect(@user2.save).to be false
      end
    end

    after :all do
      User.delete_all
    end
  end
end

spec/factories/users.rb
FactoryGirl.define do
  factory :user, class: User do |f|
    f.login_name 'murajun1978'
    f.password 'murajun1978'
    f.password_confirmation { |u| u.password }
    f.admin true
  end

  factory :user2, class: User do |f|
    f.login_name 'murajun1978'
    f.password 'sss'
    f.password_confirmation { |u| u.password }
    f.admin true
  end
end

.rspec
--color
--format d

実行結果
User
  #validate
    正常に保存できる
    login_name
      login_nameは数字のみは不可
      login_nameの先頭は必ず英字
      login_nameは重複不可
      login_nameは英字のみは不可
      login_nameは必須

Finished in 0.10709 seconds
6 examples, 0 failures

validateの正規表現で^や$が使えなくなってたねー

( ̄(エ) ̄)彡☆

2013年7月6日土曜日

第2回 RubyMotion もくもく会 Osakaに参加してきたーヘ(^o^)ノ #rubymotionosaka

前回は参加できなかったので…

今日こそは!!!

少し遅れましたが参加できましたヘ(^o^)ノ

場所は前回と同じ1×1株式会社さんです(前回参加してませんが…)

勉強会の場所を提供してくれるのは本当にありがたいですー

あ(・∀・)り(・∀・)が(・∀・)と(・∀・)う!

Apple TVでコードレビューもすーいすい

僕が本日試したのはProMotion

naoyaさんのブログで紹介されていて興味津々だったので試してみました

GitHubにはTutorialもあるのでよい

もくもく会の最後にProMotionを使ったコードと使わなかったコードを比べてみました

みなさんの反応も上々www

帰宅してもう少し調べてみるとTeacupにも対応しているみたい

期待大ヘ(^o^)ノ

現地ではbundle installでpath指定すると動かなかったのですが…

帰宅しチャレンジするとすんなり動きました(;・∀・)

よくわからない…

rakeするとGemがないとメッセージはでるもののちゃんと動いています

楽しかったー

次回も参加するぞーヘ(^o^)ノ

( ̄(エ) ̄)彡☆

2013年6月2日日曜日

Heroku Postgresのデータをローカルにリストアしてみたヘ(^o^)ノ

環境
Mac OS X 10.8.3
Postgres.app

Heroku

PG Backupsアドオンを追加
$ heroku addons:add pgbackups --app アプリ名

Heroku Postgresのデータをバックアップ
$ heroku pgbackups:capture --app アプリ名

Heroku Postgresへログインしてバックアップファイルをダウンロード



バックアップファイルをPostgres.appへリストア
$ pg_restore --verbose --clean --no-acl --no-owner -h localhost \
         -d データベース名 バックアップファイル名(パス)

Postgres.appはとても便利で簡単にPostgreSQLを利用できますよ

( ̄(エ) ̄)彡☆

iPhoneさんさようなら、Androidさんこんにちわヘ(^o^)ノ

iPhone 4sからGalaxy S4へ

ウキウキ触ってると…















なんとminiなるものが…Σ(゚д゚lll)

miniの方が良かったなー

Simフリー版を買うかー?w

Android Studioで趣味アプリでも作りますか。

資格に興味が無かった私ですが、Ruby Association Certified Ruby Programmer Silverをパスしました。







普段使わないRubyの基礎を学ぶいい機会になりました。

今月中にRuby Association Certified Ruby Programmer Goldにチャレンジします。

受験料がちょっと高いwww

( ̄(エ) ̄)彡☆