Ruby 문법, Snippet
Mar 11, 2017
Jekyll에서 관련 포스트 기능이 이상하게 동작해서 해당 플러그인을 수정할 필요가 있었다. 플러그인이 Ruby라서 관련 문법을 정리해서 다음에 수정할 때 참고해야겠다.
디버깅 관련 :
puts variable.inspect
puts variable.methods.sort
puts variable.to_yaml
문자열 관련 :
# concat
STR1 = "A"
STR2 = "B"
source = "#{STR1}/#{STR2}/App.config"
# replace
'AAA BBB'.gsub('AAA', 'CCC')
배열 관련 :
# 배열 생성
arr = []
# 배열에 원소 추가
arr << el
# 배열 갯수
arr.length
# 배열 루프
arr.each do |row|
puts "row: #{row}"
end
# mixed list
site.pages.each {|row| puts "#{row.title}"}
# 배열 모두 제거. arr을 전체 원소에 remove 액션 실행
arr.map(&:remove)
클래스 관련 :
# 클래스 선언
class ClassName
end
# 새로운 인스턴스 만들기
instance = ClassName.new
# 모듈 - ModuleName.rb로 저장
module ModuleName
def ModuleName.methodName()
return 'return value'
end
end
# 모듈 사용 - return value를 출력
require './ModuleName.rb'
puts ModuleName.methodName()
모듈 확장하는 방법:
# 모듈 정의
module ModuleName
def ModuleMethodName
puts "return value"
end
end
# 인스턴스 메소드로 사용 가능
class ClassName1
include ModuleName
end
ClassName1.new.ModuleMethodName # return value
# 클래스 메소드로 사용 가능
class ClassName2
extend ModuleName
end
ClassName2.ModuleMethodName # return value
self.included를 사용한 모듈 확장
# 확장 모듈
module ModuleName
# ClassModule을 클래스 메소드로 사용하기 위해 확장하는 역할
def self.included(klass)
klass.extend(ClassModule)
end
# 클래스 메소드 정의 모듈 정의
module ClassModule
def ClassMethodName
return "return class"
end
end
# 인스턴스 메소드
def InstanceMethodName
puts "return instance"
end
end
# ModuleName을 확장한 클래스 정의
class ClassName
include ModuleName
end
# 클래스 사용
ClassName.ClassMethodName # return class
ClassName.new.InstanceMethodName # return instance
이슈
ERROR: Could not find a valid gem
gem을 설치하는데, 다음 에러가 발생했다.
λ gem install mdl
ERROR: Could not find a valid gem 'mdl' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
SHA-1 개인 키 서명이 취약해지면서 브라우저가 변하는 것을 대비하려고, 웹서버들이 SHA-2(특히, SHA256 이상)로 업그레이드하게 된 것이 원인이다.
해결 방법은 최신 RubyGems을 내려받고 설치하는 것이다.
gem install rubygems-update-2.6.11.gem
update_rubygems