Module: MPatch::Object

Defined in:
lib/mpatch/object.rb

Instance Method Summary collapse

Instance Method Details

#boolean? ⇒ Boolean

Returns:

  • (Boolean)


4
5
6
# File 'lib/mpatch/object.rb', line 4

def boolean?
  !!self == self
end

#class? ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/mpatch/object.rb', line 16

def class?
  self.class == ::Class
end

#class_def(name, &blk) ⇒ Object

Defines an instance method within a class



50
51
52
# File 'lib/mpatch/object.rb', line 50

def class_def name, &blk
  class_eval { define_method name, &blk }
end

#class_exists? ⇒ Boolean

this will check that the class is defined or not in the runtime memory

Returns:

  • (Boolean)


88
89
90
91
92
93
# File 'lib/mpatch/object.rb', line 88

def class_exists?
  klass = ::Module.const_get(self)
  return klass.is_a?(::Class)
rescue ::NameError
  return false
end

#constantize ⇒ Object

constantize object



55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/mpatch/object.rb', line 55

def constantize

  camel_cased_word= self.to_s
  names = camel_cased_word.split('::')
  names.shift if names.empty? || names.first.empty?

  constant = ::Object
  names.each do |name|
    constant = constant.const_defined?(name, false) ? constant.const_get(name) : constant.const_missing(name)
  end
  constant
end

#convert_to_class(*attributes) ⇒ Object Also known as: create_attributes

This will convert a symbol or string and format to be a valid constant name and create from it a class with instance attribute accessors Best use is when you get raw data in string from external source and you want make them class objects

:hello_world.to_class(:test)
HelloWorld.to_class(:sup)
hw_var = HelloWorld.new
hw_var.sup = "Fine thanks!"
hw_var.test = 5

puts hw_var.test

#> produce 5 :Integer

you can also use this formats
:HelloWorld , "hello.world",
"hello/world", "Hello::World",
"hello:world"...


114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/mpatch/object.rb', line 114

def convert_to_class(*attributes)

  unless self.class <= ::Symbol || self.class <= ::String || self.class <= ::Class
    raise ::ArgumentError, "object must be symbol or string to make able build class to it"
  end

  class_name= self.to_s

  unless self.class <= ::Class

    class_name= class_name[0].upcase+class_name[1..class_name.length]
    %w[ _ . : / ].each do |one_sym|

      loop do
        index_nmb= class_name.index(one_sym)
        break if index_nmb.nil?
        class_name[index_nmb..index_nmb+1]= class_name[index_nmb+1].upcase
      end

    end

  end

  create_attribute = ::Proc.new do |*args|

  end

  unless class_name.class_exists?

    self.class.const_set(
        class_name,
        ::Class.new
    )

  end


  class_name.constantize.class_eval do
    attributes.each do |one_attribute|
      attr_accessor one_attribute.to_s.to_sym
    end
  end



  return true

end

#convert_to_hash ⇒ Object

convert class instance instance variables into a hash object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/mpatch/object.rb', line 69

def convert_to_hash

  unless self.class.class <= ::Class
    super
    #raise ::NoMethodError, "undefined method `to_hash' for #{self.inspect}"
  end

  tmp_hash= ::Hash.new()

  self.instance_variables.each do|var|
    tmp_hash[var.to_s.delete("@")] = self.instance_variable_get(var)
  end

  return tmp_hash

end

#false? ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
# File 'lib/mpatch/object.rb', line 12

def false?
  self == false
end

#meta_def(name, &blk) ⇒ Object

Adds methods to a metaclass



45
46
47
# File 'lib/mpatch/object.rb', line 45

def meta_def name, &blk
  meta_eval { define_method name, &blk }
end

#meta_eval(&blk) ⇒ Object

extend the metaclass with an instance eval



42
# File 'lib/mpatch/object.rb', line 42

def meta_eval &blk; metaclass.instance_eval &blk; end

#metaclass ⇒ Object

The hidden singleton lurks behind everyone



39
# File 'lib/mpatch/object.rb', line 39

def metaclass; class << self; self; end; end

#must_be(class_name) ⇒ Object

basic validations for those who fear the DUCK!



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/mpatch/object.rb', line 21

def must_be class_name
  if class_name.class == ::Class
    begin
      if self.class != class_name
        raise ::ArgumentError, "invalid parameter given: #{self}"
      end
    end
  else
    begin
      if self != class_name
        raise ::ArgumentError, "invalid parameter given: #{self}"
      end
    end
  end
  return self
end

#true? ⇒ Boolean

Returns:

  • (Boolean)


8
9
10
# File 'lib/mpatch/object.rb', line 8

def true?
  self == true
end