class FakeData::Method
Constants
- ARGUMENT_SPLIT_MATCHER
TODO: better argument splitting does not works with arrays, hash etc method(1, [1, 2])
- LEFT_BRACKET_MATCHER
- METHOD_MATCHER
TODO: problem with parsing “test()” => method = test; arguments = [“()”]
- RIGHT_BRACKET_MATCHER
Attributes
arguments[R]
klass[R]
method[R]
raw[R]
Public Class Methods
new(raw)
click to toggle source
# File lib/fake_data/method.rb, line 16 def initialize raw @raw = raw @klass, @method, @arguments = parse(@raw) end
Public Instance Methods
call()
click to toggle source
# File lib/fake_data/method.rb, line 25 def call eval(source) end
source()
click to toggle source
# File lib/fake_data/method.rb, line 21 def source make_call(klass, method, arguments) end
to_s()
click to toggle source
# File lib/fake_data/method.rb, line 29 def to_s source end
Private Instance Methods
camelize(str)
click to toggle source
Helpers
# File lib/fake_data/method.rb, line 119 def camelize(str) str.split('_').map {|w| w.capitalize}.join end
make_call(klass, method, arguments = [])
click to toggle source
# File lib/fake_data/method.rb, line 127 def make_call klass, method, arguments = [] call = klass ? "#{klass}.#{method}" : method "#{call}(#{arguments.join(", ")})" end
parse(raw)
click to toggle source
# File lib/fake_data/method.rb, line 35 def parse raw match = resolve(raw) klass = resolve_klass(match["klass"]) method = resolve_method(klass, match["method"]) arguments = resolve_arguments(klass, method, match["args1"] || match["args2"]) return [klass, method, arguments] end
parse_arguments(klass, method, arguments_string)
click to toggle source
# File lib/fake_data/method.rb, line 106 def parse_arguments klass, method, arguments_string if arguments_string arguments_string. strip. gsub(LEFT_BRACKET_MATCHER, ''). gsub(RIGHT_BRACKET_MATCHER, ''). split(ARGUMENT_SPLIT_MATCHER) else [] end end
parse_klass(klass_string)
click to toggle source
Parsers
# File lib/fake_data/method.rb, line 95 def parse_klass klass_string return nil unless klass_string parts = klass_string.split("::").map {|s| s.split(".")}.flatten "::#{parts.map {|s| camelize(s)}.join("::")}" end
parse_method(klass, method_string)
click to toggle source
# File lib/fake_data/method.rb, line 101 def parse_method klass, method_string # TODO make some validations method_string end
raise_custom(error, reason)
click to toggle source
# File lib/fake_data/method.rb, line 123 def raise_custom error, reason raise error, "FakeData: can't parse '#{raw}'. Reason: #{reason}." end
resolve(raw)
click to toggle source
Resolvers
# File lib/fake_data/method.rb, line 45 def resolve raw match = raw.match(METHOD_MATCHER) raise_custom NoMethodError, "missing method" unless match match end
resolve_arguments(klass, method, arguments_string)
click to toggle source
# File lib/fake_data/method.rb, line 80 def resolve_arguments klass, method, arguments_string arguments = parse_arguments(klass, method, arguments_string) call = make_call(klass, method, arguments) begin eval(call) rescue ArgumentError raise_custom ArgumentError, "'#{call}' has #{ex.message}" rescue end arguments end
resolve_klass(klass_string)
click to toggle source
# File lib/fake_data/method.rb, line 51 def resolve_klass klass_string if klass = parse_klass(klass_string) begin eval(klass) rescue NameError raise_custom NameError, "'#{klass}' is not valid class" rescue end klass end end
resolve_method(klass, method_string)
click to toggle source
# File lib/fake_data/method.rb, line 64 def resolve_method klass, method_string raise_custom NoMethodError, "missing method" unless method_string method = parse_method(klass, method_string) call = make_call(klass, method) begin eval(call) rescue NameError, NoMethodError raise_custom NoMethodError, "'#{call}' is not valid method" rescue end method_string end