Module: Lazier

Defined in:
lib/lazier.rb,
lib/lazier/hash.rb,
lib/lazier/i18n.rb,
lib/lazier/math.rb,
lib/lazier/object.rb,
lib/lazier/string.rb,
lib/lazier/boolean.rb,
lib/lazier/version.rb,
lib/lazier/datetime.rb,
lib/lazier/pathname.rb,
lib/lazier/settings.rb,
lib/lazier/localizer.rb,
lib/lazier/exceptions.rb,
lib/lazier/configuration.rb

Overview

This file is part of the lazier gem. Copyright (C) 2013 and above Shogun [email protected]. Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.

Defined Under Namespace

Modules: Boolean, DateTime, Exceptions, Hash, I18n, Math, Object, Pathname, String, TimeZone, Version Classes: Configuration, Localizer, Settings

Class Method Summary collapse

Class Method Details

.benchmark(message = nil, precision = 0, &block) ⇒ Float|String

Measure the time in milliseconds required to execute the given block.

Parameters:

  • message (String|NilClass) (defaults to: nil)

    An optional message (see return value).

  • precision (Fixnum) (defaults to: 0)

    The precision for the message (see return value)..

  • block (Proc)

    The block to evaluate.

Returns:

  • (Float|String)

    If a message is provided, then the message itself plus the duration under parenthesis will be returned, otherwise the duration alone as a number.



143
144
145
146
# File 'lib/lazier.rb', line 143

def self.benchmark(message = nil, precision = 0, &block)
  rv = Benchmark.ms(&block)
  message ? ("%s (%0.#{precision}f ms)" % [message, rv]) : rv
end

.find_class(cls, scope = "::%CLASS%", only_in_scope = false) ⇒ Class

Finds a class to instantiate.

Parameters:

  • cls (Symbol|String|Object)

    If a String or a Symbol or a Class, then it will be the class to instantiate. Otherwise the class of the object will returned.

  • scope (String) (defaults to: "::%CLASS%")

    An additional scope to find the class. %CLASS%, %, $, ? and @ will be substituted with the class name.

  • only_in_scope (Boolean) (defaults to: false)

    If only try to instantiate the class in the scope.

Returns:

  • (Class)

    The found class.



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/lazier.rb', line 119

def self.find_class(cls, scope = "::%CLASS%", only_in_scope = false)
  if cls.is_a?(::String) || cls.is_a?(::Symbol) then
    rv = nil
    cls = cls.to_s.camelize

    if only_in_scope then
      cls.gsub!(/^::/, "") # Mark only search only inside scope
    else
      rv = search_class(cls) # Search outside scope
    end

    rv = search_class(scope.to_s.gsub(/%CLASS%|[@%$?]/, cls)) if !rv && cls !~ /^::/ && scope.present? # Search inside scope
    rv || raise(NameError.new("", cls))
  else
    cls.is_a?(::Class) ? cls : cls.class
  end
end

.load!(*what) ⇒ Settings

Loads the extensions.

Parameters:

  • what (Array)

    The modules to load. Valid values are:

    @option object Extensions for all objects. @option boolean Extensions for boolean values. @option string Extensions for strings. @option hash Extensions for hashs. @option hash_method_access Extensions for hash to allow method access. Not included by default. @option datetime Extensions date and time objects. @option math Extensions for Math module. @option pathname Extensions for path objects.

Returns:

  • (Settings)

    The settings for the extensions.



49
50
51
52
53
54
55
# File 'lib/lazier.rb', line 49

def self.load!(*what)
  modules = what.present? ? what.flatten.uniq.compact.map(&:to_s) : ["object", "boolean", "string", "hash", "datetime", "math", "pathname"]
  modules.each { |w| ::Lazier.send("load_#{w}") }

  yield if block_given?
  ::Lazier::Settings.instance
end

.load_booleanObject

Loads Boolean extensions.



63
64
65
66
67
68
69
70
71
72
73
# File 'lib/lazier.rb', line 63

def self.load_boolean
  ::TrueClass.class_eval do
    include ::Lazier::Object
    include ::Lazier::Boolean
  end

  ::FalseClass.class_eval do
    include ::Lazier::Object
    include ::Lazier::Boolean
  end
end

.load_datetimeObject

Loads DateTime extensions.



91
92
93
94
95
96
97
98
99
# File 'lib/lazier.rb', line 91

def self.load_datetime
  Lazier.load_object

  [::Time, ::Date, ::DateTime].each do |c|
    c.class_eval { include ::Lazier::DateTime }
  end

  ::ActiveSupport::TimeZone.class_eval { include ::Lazier::TimeZone }
end

.load_hashObject

Loads Hash extensions.



81
82
83
# File 'lib/lazier.rb', line 81

def self.load_hash
  ::Hash.class_eval { include ::Lazier::Hash }
end

.load_hash_method_accessObject

Loads Hash method access extensions.



86
87
88
# File 'lib/lazier.rb', line 86

def self.load_hash_method_access
  ::Hash.class_eval { include Hashie::Extensions::MethodAccess }
end

.load_mathObject

Loads Math extensions.



102
103
104
105
# File 'lib/lazier.rb', line 102

def self.load_math
  Lazier.load_object
  ::Math.class_eval { include ::Lazier::Math }
end

.load_objectObject

Loads Object extensions.



58
59
60
# File 'lib/lazier.rb', line 58

def self.load_object
  ::Object.class_eval { include ::Lazier::Object }
end

.load_pathnameObject

Loads Pathname extensions.



108
109
110
111
# File 'lib/lazier.rb', line 108

def self.load_pathname
  require "pathname"
  ::Pathname.class_eval { include ::Lazier::Pathname }
end

.load_stringObject

Loads String extensions.



76
77
78
# File 'lib/lazier.rb', line 76

def self.load_string
  ::String.class_eval { include ::Lazier::String }
end

.settingsSettings

Returns the settings for the extensions.

Returns:

  • (Settings)

    The settings for the extensions.



32
33
34
# File 'lib/lazier.rb', line 32

def self.settings
  ::Lazier::Settings.instance
end