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
See Also