Module: Gettc

Defined in:
lib/version.rb,
lib/gettc/parse.rb,
lib/gettc/print.rb,
lib/gettc/types.rb,
lib/gettc/account.rb,
lib/gettc/problem.rb,
lib/gettc/download.rb,
lib/gettc/generate.rb,
lib/gettc/signature.rb

Defined Under Namespace

Classes: Account, AuthTokenError, BadResponseError, CannotParseSignature, Case, CookieError, DownloadError, Downloader, Generator, HttpError, IDNotAvailable, Image, InvalidVariableName, Parser, Problem, ProblemDirExists, ProxyError, Signature, SignatureError, SourceDirNotExist, TArray, TargetDirNotExist, TemplateError, Type, UnsupportedType

Constant Summary collapse

VERSION =
"2.1"
TypeError =
Class.new(StandardError)
TBoolean =
Type.new(false)
TInt =
Type.new(false)
TLong =
Type.new(false)
TFloat =
Type.new(false)
TDouble =
Type.new(false)
TChar =
Type.new(false)
TString =
Type.new(true)
GenerateError =
Class.new StandardError

Instance Method Summary collapse

Instance Method Details

#parse_method_signature(str) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/gettc/signature.rb', line 47

def parse_method_signature(str)
  str.strip!

  sigs = []

  parts = str.split("(")
  raise CannotParseSignature.new(str) unless parts.size == 2
  sigs << parse_signature(parts[0])

  str = parts[1]
  raise CannotParseSignature.new(str) unless str[-1] == ")"

  str.chop.split(",").each { |sig| sigs << parse_signature(sig) }

  sigs
end

#parse_signature(str) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/gettc/signature.rb', line 34

def parse_signature(str)
  str.strip!

  parts = str.split
  raise CannotParseSignature.new(str) unless parts.size == 2

  type = parse_type(parts[0])
  name = parts[1]

  raise InvalidVariableName.new(name) unless name =~ /^[a-zA-Z_]\w*$/
  Signature.new(type, name)
end

#parse_type(str) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/gettc/types.rb', line 71

def parse_type(str)
  return TArray.new(parse_type(str[0 .. -3])) if str[-2 .. -1] == "[]"

  case str
  when "boolean"
    TBoolean
  when "int"
    TInt
  when "long"
    TLong
  when "float"
    TFloat
  when "double"
    TDouble
  when "char"
    TChar
  when "String"
    TString
  else
    raise UnsupportedType.new(str)
  end
end