Module: EvalHelper
- Included in:
- Object
- Defined in:
- lib/eval_helper.rb,
lib/eval_helper/if_code.rb,
lib/eval_helper/times_code.rb,
lib/eval_helper/unless_code.rb,
lib/eval_helper/each_do_code.rb,
lib/eval_helper/require_code.rb,
lib/eval_helper/if_code_after.rb,
lib/eval_helper/each_brace_code.rb,
lib/eval_helper/ternary_operator.rb,
lib/eval_helper/set_variable_code.rb,
lib/eval_helper/unless_code_after.rb,
lib/eval_helper/set_variables_code.rb,
lib/eval_helper/attr_init_class_code.rb,
lib/eval_helper/require_relative_code.rb,
lib/eval_helper/attr_accessor_init_code.rb,
lib/eval_helper/each_with_index_do_code.rb,
lib/eval_helper/each_with_index_brace_code.rb
Instance Method Summary collapse
-
#attr_accessor_init_code(attribute) ⇒ Object
create attr_accessor + initialize code, for eval.
-
#attr_init_class_code(class_name, fields) ⇒ Object
create attr_accessor + initialize code, for eval.
-
#each_brace_code(target, proc) ⇒ Object
create each brace single line code, for eval.
-
#each_do_code(target, proc) ⇒ Object
create each do code, for eval.
-
#each_with_index_brace_code(target, proc) ⇒ Object
create each with index brace single line code, for eval.
-
#each_with_index_do_code(target, proc) ⇒ Object
create each with index do single line code, for eval.
-
#if_code(condition, if_proc, else_proc) ⇒ Object
create if strings, for eval.
-
#if_code_after(condition, if_proc) ⇒ Object
create if strings, for eval.
-
#require_code(*args) ⇒ Object
create require strings, for eval.
-
#require_relative_code(*args) ⇒ Object
create require_relative strings, for eval.
-
#set_variable_code(name, value) ⇒ Object
create set variable logic strings, for eval.
-
#set_variables_code(variables) ⇒ Object
create set variables logic strings, for eval.
-
#ternary_operator(condition, true_case, false_case, ret = nil) ⇒ Object
create unless strings, for eval.
-
#times_code(number, proc) ⇒ Object
create times logic strings, for eval.
-
#unless_code(condition, unless_proc, else_proc) ⇒ Object
create unless strings, for eval.
-
#unless_code_after(condition, unless_proc) ⇒ Object
create unless strings, for eval.
Instance Method Details
#attr_accessor_init_code(attribute) ⇒ Object
create attr_accessor + initialize code, for eval
Examples
single case
class EvalHelperAttrAccessorInitTest
include EvalHelper
def hoge(args)
attr_accessor_init_code(args)
end
end
EvalHelperAttrAccessorInitTest.new.hoge('atr1')
result
attr_accessor :atr1
def initialize(atr1)
@atr1 = atr1
end
multi case
class EvalHelperAttrAccessorInitTest
include EvalHelper
def hoge(args)
attr_accessor_init_code(args)
end
end
EvalHelperAttrAccessorInitTest.new.hoge(['atr1', 'atr2'])
result
attr_accessor :atr1, :atr2
def initialize(atr1, atr2)
@atr1 = atr1
@atr2 = atr2
end
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/eval_helper/attr_accessor_init_code.rb', line 49 def attr_accessor_init_code(attribute) return '' unless [String, Array].include? attribute.class atrs = [] if attribute.is_a? String atrs << attribute elsif attribute.is_a? Array atrs = attribute end accessors = atrs.reduce([]) { |ret, v|ret << ":#{v}" }.join(', ') init_variables = atrs.reduce([]) { |ret, v|ret << "#{v}" }.join(', ') set_variables = atrs.reduce([]) { |ret, v|ret << " @#{v} = #{v}" }.join("\n") ret_code = <<-EOS attr_accessor #{accessors} def initialize(#{init_variables}) #{set_variables} end EOS end |
#attr_init_class_code(class_name, fields) ⇒ Object
create attr_accessor + initialize code, for eval
Examples
class EvalHelperAttrInitTest
include EvalHelper
def hoge(hash)
attr_init_class_code(hash[:class_name], hash[:fields])
end
end
hash = {
class_name: "Hoge",
fields: [:hoge1, :hoge2, :hoge3],
}
EvalHelperAttrInitTest.new.hoge(hash)
result
require 'attributes_initializable'
class Hoge
include AttributesInitializable
attr_accessor_init :hoge1, :hoge2, :hoge3
end
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/eval_helper/attr_init_class_code.rb', line 31 def attr_init_class_code(class_name, fields) tmp_fields = fields.map { |v|":#{v}" }.join(', ') <<-EOS require 'attributes_initializable' class #{class_name} include AttributesInitializable attr_accessor_init #{tmp_fields} end EOS end |
#each_brace_code(target, proc) ⇒ Object
create each brace single line code, for eval
Examples
class EvalHelperEachBraceTest
include EvalHelper
def hoge(hash)
each_brace_code(hash[:target], hash[:proc])
end
end
hash = {
target: '[:a, :b]',
proc: 'puts v',
}
EvalHelperEachBraceTest.new.hoge(hash) # => return '[:a, :b].each { |v|puts v }'
22 23 24 |
# File 'lib/eval_helper/each_brace_code.rb', line 22 def each_brace_code(target, proc) "#{target}.each { |v|#{proc} }" end |
#each_do_code(target, proc) ⇒ Object
create each do code, for eval
Examples
class EvalHelperEacjBraceTest
include EvalHelper
def hoge(hash)
each_do_code(hash[:target], hash[:proc])
end
end
hash = {
target: '[:a, :b]',
proc: "puts \"\#{v}1\"\nputs \"\#{v}2\"\n",
}
EvalHelperEacjBraceTest.new.hoge(hash) # => return "[:a, :b].each do |v|\n puts \"\#{v}1\"\n puts \"\#{v}2\"\nend"
22 23 24 25 |
# File 'lib/eval_helper/each_do_code.rb', line 22 def each_do_code(target, proc) indented = proc.split("\n").reduce([]) { |ret, v|ret << " #{v}" ; ret }.join("\n") "#{target}.each do |v|\n#{indented}\nend" end |
#each_with_index_brace_code(target, proc) ⇒ Object
create each with index brace single line code, for eval
Examples
class EvalHelperEachWithIndexBraceTest
include EvalHelper
def hoge(hash)
each_with_index_brace_code(hash[:target], hash[:proc])
end
end
hash = {
target: '[:a, :b]',
proc: 'puts "#{i}:#{v}"',
}
EvalHelperEachWithIndexBraceTest.new.hoge(hash) # => return '[:a, :b].each { |v, i|puts "#{i}:#{v}" }'
22 23 24 |
# File 'lib/eval_helper/each_with_index_brace_code.rb', line 22 def each_with_index_brace_code(target, proc) "#{target}.each_with_index { |v, i|#{proc} }" end |
#each_with_index_do_code(target, proc) ⇒ Object
create each with index do single line code, for eval
Examples
class EvalHelperEachWithIndexDoTest
include EvalHelper
def hoge(hash)
each_with_index_do_code(hash[:target], hash[:proc])
end
end
hash = {
target: '[:a, :b]',
proc: "puts \"\#{i}:\#{v}1\"\nputs \"\#{i}:\#{v}2\"\n",
}
EvalHelperEachWithIndexDoTest.new.hoge(hash) # => return "[:a, :b].each_with_index do |v, i|\n puts \"\#{i}:\#{v}1\"\n puts \"\#{i}:\#{v}2\"\nend"
22 23 24 25 |
# File 'lib/eval_helper/each_with_index_do_code.rb', line 22 def each_with_index_do_code(target, proc) indented = proc.split("\n").reduce([]) { |ret, v|ret << " #{v}" ; ret }.join("\n") "#{target}.each_with_index do |v, i|\n#{indented}\nend" end |
#if_code(condition, if_proc, else_proc) ⇒ Object
create if strings, for eval
Examples
if case
class EvalHelperTest
include EvalHelper
def hoge(hash)
msg = hash[:input]
code = if_code(hash[:if_cond], hash[:if_proc], hash[:else_proc])
instance_eval code
end
end
hash = {
input: "test",
if_cond: "msg == 'test'",
if_proc: "true",
else_proc: "false",
}
EvalHelperTest.new.hoge(hash) # => return true
else case
class EvalHelperTest
include EvalHelper
def hoge(hash)
msg = hash[:input]
code = if_code(hash[:if_cond], hash[:if_proc], hash[:else_proc])
instance_eval code
end
end
hash = {
input: "not_test",
if_cond: "msg == 'test'",
if_proc: "true",
else_proc: "false",
}
EvalHelperTest.new.hoge(hash) # => return false
48 49 50 51 52 53 54 55 56 |
# File 'lib/eval_helper/if_code.rb', line 48 def if_code(condition, if_proc, else_proc) <<-EOS if #{condition} #{if_proc} else #{else_proc} end EOS end |
#if_code_after(condition, if_proc) ⇒ Object
create if strings, for eval
Examples
if case
class EvalHelperTest
include EvalHelper
def hoge(hash)
msg = hash[:input]
code = if_code_after(hash[:if_cond], hash[:if_proc])
ret = 'dafault'
instance_eval code
ret
end
end
hash = {
input: "test",
if_cond: "msg == 'test'",
if_proc: "ret = "true"",
}
EvalHelperTest.new.hoge(hash) # => return 'true'
else case
class EvalHelperTest
include EvalHelper
def hoge(hash)
msg = hash[:input]
code = if_code_after(hash[:if_cond], hash[:if_proc])
ret = 'ret = "true"'
instance_eval code
ret
end
end
hash = {
input: "not_test",
if_cond: "msg == 'test'",
if_proc: "ret = "true"",
}
EvalHelperTest.new.hoge(hash) # => return 'default'
50 51 52 |
# File 'lib/eval_helper/if_code_after.rb', line 50 def if_code_after(condition, if_proc) "#{if_proc} if #{condition}" end |
#require_code(*args) ⇒ Object
create require strings, for eval
Examples
single require case
class EvalHelperRequireTest
include EvalHelper
def hoge(*args)
require_code(args)
end
end
args = 'tbpgr_utils'
EvalHelperRequireTest.new.hoge(args) # => return "require 'tbpgr_utils'\n"
muiti require case
class EvalHelperRequireTest
include EvalHelper
def hoge(*args)
require_code(args)
end
end
args = ['tbpgr_utils', 'eval_helper']
EvalHelperRequireTest.new.hoge(args) # => return "require 'tbpgr_utils'\nrequire 'eval_helper'\n"
34 35 36 37 |
# File 'lib/eval_helper/require_code.rb', line 34 def require_code(*args) args = args.is_a?(Array) ? args.flatten : [args] args.reduce([]) { |ret, v|ret << "require '#{v}'\n" }.join end |
#require_relative_code(*args) ⇒ Object
create require_relative strings, for eval
Examples
single require_relative case
class EvalHelperRequireRelativeTest
include EvalHelper
def hoge(*args)
require_relative_code(args)
end
end
args = 'tbpgr_utils'
EvalHelperRequireRelativeTest.new.hoge(args) # => return "require_relative 'tbpgr_utils'\n"
muiti require_relative case
class EvalHelperRequireRelativeTest
include EvalHelper
def hoge(*args)
require_relative_code(args)
end
end
args = ['tbpgr_utils', 'eval_helper']
EvalHelperRequireRelativeTest.new.hoge(args) # => return "require_relative 'tbpgr_utils'\nrequire_relative 'eval_helper'\n"
34 35 36 37 |
# File 'lib/eval_helper/require_relative_code.rb', line 34 def require_relative_code(*args) args = args.is_a?(Array) ? args.flatten : [args] args.reduce([]) { |ret, v|ret << "require_relative '#{v}'\n" }.join end |
#set_variable_code(name, value) ⇒ Object
create set variable logic strings, for eval
Examples
set string variable case
class EvalHelperSetVariableTest
include EvalHelper
def hoge(name, value)
set_variable_code(name, value)
end
end
hash = {
name: 'hoge',
value: '"hoge"',
}
EvalHelperSetVariableTest.new.hoge(hash[:name], hash[:value])
return
hoge = "hoge"
set numeric variable case
class EvalHelperSetVariableTest
include EvalHelper
def hoge(name, value)
set_variable_code(name, value)
end
end
hash = {
name: 'hoge_num',
value: '1',
}
EvalHelperSetVariableTest.new.hoge(hash[:name], hash[:value])
return
hoge_num = 1
48 49 50 |
# File 'lib/eval_helper/set_variable_code.rb', line 48 def set_variable_code(name, value) "#{name} = #{value}" end |
#set_variables_code(variables) ⇒ Object
create set variables logic strings, for eval
Examples
set string variables case
class EvalHelperSetVariablesTest
include EvalHelper
def hoge(variables)
set_variables_code(variables)
end
end
variables = [
{
name: 'name1',
value: '"value1"',
},
{
name: 'name2',
value: '"value2"',
},
]
EvalHelperSetVariablesTest.new.hoge(variables)
return
name1 = "value1"
name2 = "value2"
35 36 37 38 39 40 41 42 43 44 |
# File 'lib/eval_helper/set_variables_code.rb', line 35 def set_variables_code(variables) fail TypeError, "invalid type #{variables.class}. you have to use Array" unless variables.is_a? Array variables.reduce([]) do |ret, variable| fail TypeError, "invalid type #{variable.class}. you have to use Hash" unless variable.is_a? Hash fail TypeError, 'invalid hash. you have to set Hash[:name]' if variable[:name].nil? fail TypeError, 'invalid hash. you have to set Hash[:value]' if variable[:value].nil? ret << "#{variable[:name]} = #{variable[:value]}" ret end.join("\n") end |
#ternary_operator(condition, true_case, false_case, ret = nil) ⇒ Object
create unless strings, for eval
Examples
true case
class EvalHelperTernaryTest
include EvalHelper
def hoge(hash)
msg = hash[:input]
code = \
if hash[:ret]
ternary_operator(hash[:cond], hash[:true_case], hash[:false_case], hash[:ret])
else
ternary_operator(hash[:cond], hash[:true_case], hash[:false_case])
end
instance_eval code
end
end
hash = {
input: "test",
cond: "msg == 'test'",
true_case: "true",
false_case: "false",
ret: "ret",
}
EvalHelperTernaryTest.new.hoge(hash) # => return 'true'
false case
class EvalHelperTernaryTest
include EvalHelper
def hoge(hash)
msg = hash[:input]
code = \
if hash[:ret]
ternary_operator(hash[:cond], hash[:true_case], hash[:false_case], hash[:ret])
else
ternary_operator(hash[:cond], hash[:true_case], hash[:false_case])
end
instance_eval code
end
end
hash = {
input: "not_test",
cond: "msg == 'test'",
true_case: "true",
false_case: "false",
ret: "ret",
}
EvalHelperTernaryTest.new.hoge(hash) # => return 'false'
60 61 62 63 |
# File 'lib/eval_helper/ternary_operator.rb', line 60 def ternary_operator(condition, true_case, false_case, ret = nil) ret = ret.nil? ? '' : "#{ret} = " "#{ret}#{condition} ? #{true_case} : #{false_case}" end |
#times_code(number, proc) ⇒ Object
create times logic strings, for eval
Examples
single_line_proc case
class EvalHelperTimesTest
include EvalHelper
def hoge(number, proc)
times_code(number, proc)
end
end
hash = {
number: 2,
proc: 'puts "#{i}times"',
}
EvalHelperTimesTest.new.hoge(hash[:number], hash[:proc])
return
2.times { |i| puts "#{i}times" }
multi_line_proc case
class EvalHelperTimesTest
include EvalHelper
def hoge(number, proc)
times_code(number, proc)
end
end
hash = {
number: 3,
proc: 'puts "#{i}times"\nputs "#{i*2}times"',
}
EvalHelperTimesTest.new.hoge(hash[:number], hash[:proc])
return
3.times do |i|
puts "#{i}times"
puts "#{i*2}times"
end
51 52 53 54 55 56 57 58 59 |
# File 'lib/eval_helper/times_code.rb', line 51 def times_code(number, proc) return "#{number}.times { |i| #{proc} }" if proc.count('\n') == 0 indented = proc.split('\n').reduce([]) { |ret, v|ret << " #{v}" ; ret }.join("\n") <<-EOS #{number}.times do |i| #{indented} end EOS end |
#unless_code(condition, unless_proc, else_proc) ⇒ Object
create unless strings, for eval
Examples
unless case
class EvalHelperTest
include EvalHelper
def hoge(hash)
msg = hash[:input]
code = unless_code(hash[:unless_cond], hash[:unless_proc], hash[:else_proc])
instance_eval code
end
end
hash = {
input: "not_test",
unless_cond: "msg == 'test'",
unless_proc: "true",
else_proc: "false",
}
EvalHelperTest.new.hoge(hash) # => return true
else case
class EvalHelperTest
include EvalHelper
def hoge(hash)
msg = hash[:input]
code = unless_code(hash[:unless_cond], hash[:unless_proc], hash[:else_proc])
instance_eval code
end
end
hash = {
input: "test",
unless_cond: "msg == 'test'",
unless_proc: "true",
else_proc: "false",
}
EvalHelperTest.new.hoge(hash) # => return false
48 49 50 51 52 53 54 55 56 |
# File 'lib/eval_helper/unless_code.rb', line 48 def unless_code(condition, unless_proc, else_proc) <<-EOS unless #{condition} #{unless_proc} else #{else_proc} end EOS end |
#unless_code_after(condition, unless_proc) ⇒ Object
create unless strings, for eval
Examples
unless case
class EvalHelperTest
include EvalHelper
def hoge(hash)
msg = hash[:input]
code = unless_code_after(hash[:unless_cond], hash[:unless_proc])
ret = 'dafault'
instance_eval code
ret
end
end
hash = {
input: "not_test",
unless_cond: "msg == 'test'",
unless_proc: "ret = "true"",
}
EvalHelperTest.new.hoge(hash) # => return 'true'
else case
class EvalHelperTest
include EvalHelper
def hoge(hash)
msg = hash[:input]
code = unless_code_after(hash[:unless_cond], hash[:unless_proc])
ret = 'ret = "true"'
instance_eval code
ret
end
end
hash = {
input: "test",
unless_cond: "msg == 'test'",
unless_proc: "ret = "true"",
}
EvalHelperTest.new.hoge(hash) # => return 'default'
50 51 52 |
# File 'lib/eval_helper/unless_code_after.rb', line 50 def unless_code_after(condition, unless_proc) "#{unless_proc} unless #{condition}" end |