Skip to content

Instantly share code, notes, and snippets.

@ageldama
Last active December 11, 2015 02:08
Show Gist options
  • Select an option

  • Save ageldama/4528250 to your computer and use it in GitHub Desktop.

Select an option

Save ageldama/4528250 to your computer and use it in GitHub Desktop.
rails example code snippets
-# -*- mode: haml; coding: utf-8; -*-
!!! html
%html
%head
%title= @page_title || '기업인'
= stylesheet_link_tag "application"
= javascript_include_tag "application"
= csrf_meta_tags
%meta{'http-equiv' => "Content-Type", 'content' => "text/html; charset=UTF-8"}/
%body
.site_menu
- if SessionHelper::signed_in? session then
- member = SessionHelper::signed_member(session)
%span.member_signature
-# = render :partial => 'member_profile_photo/inline'
%a{:href => profile_path(member.member_username)}
%strong #{member.member_username}
회원님 세션 :
%a{:href => url_for(:controller => 'member', :action => 'sign_out')} [로그아웃]
%a{:href => url_for(:controller => 'member', :action => 'change_password')} [비밀번호 변경]
%a{:href => edit_profile_path(member.member_username)} [프로필 변경]
- else
%a{:href => url_for(:controller => 'member', :action => 'sign_in')} [로그인]
%a{:href => url_for(:controller => 'member', :action => 'sign_up')} [회원가입]
%a{:href => url_for(:controller => 'member', :action => 'find_member_username')} [아이디 찾기]
%a{:href => url_for(:controller => 'member', :action => 'find_password')} [비밀번호 찾기]
= render :partial => 'shared/flash_area'
= yield
# -*- coding: utf-8; mode: ruby; -*-
class ApplicationController < ActionController::Base
protect_from_forgery
def validate_and_transact(form_id, form_klass, before_validation_cb=nil, &trx_blk)
if params[form_id] then
@form = form_klass.new(params[form_id])
if not before_validation_cb.nil? then
self.send(before_validation_cb)
end
if @form.valid? then
return trx_blk.call(@form)
end
else
@form = form_klass.new
end
render
end
def member_login_auth
# 요게 인증용 before-filter
unless SessionHelper::signed_in? session then
redirect_to "/", :alert => '로그인 후 이용해주세요.' and return
end
end
end
require 'members/consts'
class Member
include MongoMapper::Document
key :member_username, String, :required => true
key :email, String, :require => true
key :password, String, :required => false
key :activated, Boolean, :default => false
many :posts
many :votes
one :member_profile
ensure_index [[:member_username, 1]], :unique => true
ensure_index [[:email, 1]], :unique => true
validates_presence_of :member_username, :email, :password
validate :validate_unique_member_username
validate :validate_unique_email
def validate_unique_member_username
unless MemberHelper::unique_member_username? @member_username then
errors.add(:member_username,
MemberModelConsts::MEMBER_USERNAME_ALREADY_REGISTERED_MSG)
end
end
def validate_unique_email
unless MemberHelper::unique_email? @email then
errors.add(:email, MemberModelConsts::EMAIL_ALREADY_REGISTERED_MSG)
end
end
timestamps!
end
# -*- mode: ruby; coding: utf-8; -*-
class MemberProfile
include MongoMapper::Document
plugin Joint
belongs_to :member
key :member_username, String
# initial
key :initiation, Boolean, :default => true
# 회원 사진
attachment :photo
# 회원 이름 (대표자 이름)
key :real_name, String
# 업태, 업종
key :business_section, String # 업종
key :business_type, String # 업태
# 개인, 법인 구분
INDIVIDUAL = 'individual'
CORPORATE = 'corporate'
key :enterpreneur_type, String
# 사업체명
key :enterpreneur_name, String
# 개업년월일
key :enterpreneur_starting_date, Date
## NOTE: 주민번호, 법인번호를 한 필드로 묶어버릴까...
# 주민등록번호
key :individual_registration_no, String
# 법인등록번호
key :corporate_registration_no, String
# 사업자등록번호
key :enterpreneur_registration_no, String
# 본점주소
key :centre_branch_post_code, String
key :centre_branch_address1, String
key :centre_branch_address2, String
# 대표 전화번호
key :phone_no, String
timestamps!
end
#MemberProfile.ensure_index [[:member_id, 1]], :unique => true
MemberProfile.ensure_index [[:member_username, 1]]#, :unique => true
MemberProfile.ensure_index [[:enterpreneur_registration_no, 1],
[:individual_registration_no, 1],
[:corporate_registration_no, 1]]
# -*- coding: utf-8 -*-
class MemberProfilePhotoController < ApplicationController
before_filter :member_login_auth, :only => [:delete, :edit, :update]
def delete
member_username = params[:member_username]
@member = Member.where(:member_username => member_username).first
if @member.nil? then
raise :invalid_member_username
end
if @member.member_username != member_username then
raise :not_authorized_user
end
#
if params[:sure].present? then
mp = @member.member_profile
mp.photo = nil
mp.save
# invalidate member-profile-photo-cache
MemberProfilePhotoHelper.invalidate_member_photo(@member)
# TODO: redirect?
#render :text => %q|삭제하였습니다.|
redirect_to edit_profile_photo_path(@member.member_username), :notice => '프로필 사진 삭제. 기본 프로필 사진을 사용합니다.'
else
render
end
end
def edit
member_username = params[:member_username] || params[:id]
@member = Member.where(:member_username => member_username).first
if @member.nil? then
raise :invalid_member_username
end
if @member.member_username != member_username then
raise :not_authorized_user
end
#
render
end
def update
member_username = params[:member_username] || params[:id]
@member = Member.where(:member_username => member_username).first
if @member.nil? then
raise :invalid_member_username
end
if @member.member_username != member_username then
raise :not_authorized_user
end
#
mp = @member.member_profile
mp.photo = params[:profile_photo_form][:photo]
mp.save
#
redirect_to edit_profile_photo_path(@member.member_username), :notice => '프로필 사진 업데이트 완료!'
end
def show
member_username = params[:member_username] || params[:id]
@member = Member.where(:member_username => member_username).first
if @member.nil? then
raise :invalid_member_username
end
MemberProfilePhotoHelper.send_member_photo(self, @member)
end
end
# -*- coding: utf-8; mode: ruby; -*-
module PostCodeHelper
def PostCodeHelper::parse_search_result(xml)
require 'rexml/document'
doc = REXML::Document.new xml
path = 'post/itemlist/item'
a = []
doc.elements.each(path) do |e|
addr = e.elements['address'].text
postcd = e.elements['postcd'].text
a << {:address => addr, :postcd => postcd}
end
return a
end
def PostCodeHelper::search_via_openapi(region_name)
require 'net/http'
base_url = "http://biz.epost.go.kr/KpostPortal/openapied"
regkey = "79134655fc4477bdc1325677351426"
uri = URI(base_url)
params = {:regkey => regkey,
:target => 'post',
:query => region_name.force_encoding('utf-8').encode('euc-kr')}
uri.query = URI.encode_www_form(params)
req = Net::HTTP::Get.new(uri.request_uri)
req["Accept-language"] = "ko"
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
end
if res.is_a?(Net::HTTPSuccess) then
body = res.body.force_encoding('cp949')
begin
return self.parse_search_result(body)
rescue
#Rails.logger.debug("POST-CODE XML PARSE FAIL!! (#{region_name})")
return []
end
else
Rails.logger.warn("POST-CODE API SERVER FAIL!! (#{region_name}, #{res.code} -- #{res.msg})")
return []
end
end
def PostCodeHelper::search(region_name)
cache_key = "PostCodeHelper--#{region_name}"
if Rails.cache.exist? cache_key then
return Rails.cache.read(cache_key)
else
val = self.search_via_openapi(region_name)
Rails.cache.write(cache_key, val, {:expire_in => 1.week})
return val
end
end
def PostCodeHelper::split(post_code)
if post_code.present? and post_code.index("-").nil? and post_code.length > 3 then
return [post_code.slice(0..2), post_code.slice(3..-1)]
end
return [post_code]
end
def PostCodeHelper::format(post_code, j="-")
PostCodeHelper::split(post_code).join(j)
end
end
-# -*- mode: haml; coding: utf-8; -*-
- @page_title = "#{@member.member_username} 회원 프로필"
-# TODO: 항목들 양식 좀 더 예쁘게?
-# TODO: 로그인 && 자기꺼면 --> 프로필 수정 보이기?
- member_profile = @member.member_profile
%h1= @page_title
%div
%fieldset
%legend #{@member.member_username} 회원
.field
%label{:for => 'member_username'} 회원ID
%span#member_username= @member.member_username
= render :partial => 'member_profile_photo/inline', :locals => {:member_profile => member_profile}
.field
%label{:for => 'real_name'} 대표자 성명
%span#real_name= member_profile.real_name
.field
%label{:for => 'phone_no'} 대표 전화번호
%span#phone_no= member_profile.phone_no
%fieldset
%legend 업종, 업태
.field
%label{:for => 'business_section'} 업종
%span#business_section
%a{:href => "/category/show/#{member_profile.business_section}"}
#{BusinessSectionHelper.name_of(member_profile.business_section)}
.field
%label{:for => 'business_type'} 업태
%span#business_type
%a{:href => "/category/show/#{member_profile.business_section}/#{member_profile.business_type}"}
#{BusinessTypeHelper.name_of(member_profile.business_section, member_profile.business_type)}
%fieldset
%legend 사업체
.field
%label{:for => 'enterpreneur_name'} 사업체명
%span#enterpreneur_name #{member_profile.enterpreneur_name}
.field
%label{:for => 'enterpreneur_starting_date'} 개업년월일
%span#enterpreneur_starting_date #{member_profile.enterpreneur_starting_date}
.field
%label{:for => 'enterpreneur_type'} 개인/법인 구분
%span#enterpreneur_type
- case member_profile.enterpreneur_type
- when MemberProfile::INDIVIDUAL then
개인
- when MemberProfile::CORPORATE then
법인
- else
???
.field
%label{:for => 'centre_branch'} 본점 주소
%span#centre_branch_addresses
#{member_profile.centre_branch_address1}
%br/
#{member_profile.centre_branch_address2}
%span#centre_branch_post_code
%br/
#{member_profile.centre_branch_post_code}
- if SessionHelper::signed_and_same_user? session, member_profile.member_username then
%a{:href => edit_profile_path(member_profile.member_username)} [수정]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment