incubator-deltacloud-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michal Fojtik ...@mifo.sk>
Subject Re: [PATCH 1/4] core_ext: move String enhancements out of rabbit; add Integer.ordinalize
Date Sat, 19 Mar 2011 13:17:28 GMT
On Mar 19, 2011, at 1:03 AM, lutter@redhat.com wrote:

ACK, with small inline comment bellow.

  -- Michal


> From: David Lutterkort <lutter@redhat.com>
> 
> It is much cleaner to keep monkey patches to stock Ruby classes in a
> separate place. That place is lib/deltacloud/core_ext
> ---
> server/deltacloud.rb                      |    2 +
> server/lib/deltacloud/core_ext.rb         |   20 +++++++++++
> server/lib/deltacloud/core_ext/integer.rb |   33 ++++++++++++++++++
> server/lib/deltacloud/core_ext/string.rb  |   52 +++++++++++++++++++++++++++++
> server/lib/sinatra/rabbit.rb              |   35 -------------------
> 5 files changed, 107 insertions(+), 35 deletions(-)
> create mode 100644 server/lib/deltacloud/core_ext.rb
> create mode 100644 server/lib/deltacloud/core_ext/integer.rb
> create mode 100644 server/lib/deltacloud/core_ext/string.rb
> 
> diff --git a/server/deltacloud.rb b/server/deltacloud.rb
> index 83f7cfb..cd310ef 100644
> --- a/server/deltacloud.rb
> +++ b/server/deltacloud.rb
> @@ -20,6 +20,8 @@ $:.unshift File.join(File.dirname(__FILE__), 'lib')
> 
> require 'drivers'
> 
> +require 'deltacloud/core_ext'
> +
> require 'deltacloud/base_driver'
> require 'deltacloud/hardware_profile'
> require 'deltacloud/state_machine'
> diff --git a/server/lib/deltacloud/core_ext.rb b/server/lib/deltacloud/core_ext.rb
> new file mode 100644
> index 0000000..e3822f2
> --- /dev/null
> +++ b/server/lib/deltacloud/core_ext.rb
> @@ -0,0 +1,20 @@
> +#
> +# Copyright (C) 2011 David Lutterkort
> +#
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you under the Apache License, Version 2.0 (the
> +# "License"); you may not use this file except in compliance with the
> +# License.  You may obtain a copy of the License at
> +#
> +#       http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
> +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
> +# License for the specific language governing permissions and limitations
> +# under the License.
> +
> +require 'deltacloud/core_ext/string'
> +require 'deltacloud/core_ext/integer'
> diff --git a/server/lib/deltacloud/core_ext/integer.rb b/server/lib/deltacloud/core_ext/integer.rb
> new file mode 100644
> index 0000000..60b6f68
> --- /dev/null
> +++ b/server/lib/deltacloud/core_ext/integer.rb
> @@ -0,0 +1,33 @@
> +#
> +# Copyright (C) 2011 David Lutterkort
> +#
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you under the Apache License, Version 2.0 (the
> +# "License"); you may not use this file except in compliance with the
> +# License.  You may obtain a copy of the License at
> +#
> +#       http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
> +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
> +# License for the specific language governing permissions and limitations
> +# under the License.
> +
> +class Integer
> +  # Turn integers into strings +1st+, +2nd+, +3rd+ etc.
> +  def ordinalize
> +    if (11..13).include?(self % 100)
> +      "#{self}th"
> +    else
> +      case self % 10
> +      when 1; "#{self}st"
> +      when 2; "#{self}nd"
> +      when 3; "#{self}rd"
> +      else    "#{self}th"
> +      end
> +    end
> +  end
> +end
> diff --git a/server/lib/deltacloud/core_ext/string.rb b/server/lib/deltacloud/core_ext/string.rb
> new file mode 100644
> index 0000000..2beba00
> --- /dev/null
> +++ b/server/lib/deltacloud/core_ext/string.rb
> @@ -0,0 +1,52 @@
> +#
> +# Copyright (C) 2011 David Lutterkort
> +#
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you under the Apache License, Version 2.0 (the
> +# "License"); you may not use this file except in compliance with the
> +# License.  You may obtain a copy of the License at
> +#
> +#       http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
> +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
> +# License for the specific language governing permissions and limitations
> +# under the License.
> +
> +class String
> +  # Rails defines this for a number of other classes, including Object
> +  # see activesupport/lib/active_support/core_ext/object/blank.rb
> +  def blank?
> +      self !~ /\S/
> +  end
> +
> +  # Title case.
> +  #
> +  #   "this is a string".titlecase
> +  #   => "This Is A String"
> +  #
> +  # CREDIT: Eliazar Parra
> +  # Copied from facets
> +  def titlecase
> +    gsub(/\b\w/){ $`[-1,1] == "'" ? $& : $&.upcase }
> +  end
> +
> +  def pluralize
> +    self + "s"
> +  end
> +
> +  def singularize
> +    self.gsub(/s$/, '')
> +  end

There was some special cases when this pluralization/singularization methods
doesn't work. Collections like 'addresses', etc.

> +
> +  def underscore
> +      gsub(/::/, '/').
> +          gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
> +          gsub(/([a-z\d])([A-Z])/,'\1_\2').
> +          tr("-", "_").
> +          downcase
> +  end
> +end
> diff --git a/server/lib/sinatra/rabbit.rb b/server/lib/sinatra/rabbit.rb
> index b736b7a..f8d9e3d 100644
> --- a/server/lib/sinatra/rabbit.rb
> +++ b/server/lib/sinatra/rabbit.rb
> @@ -312,41 +312,6 @@ module Sinatra
>   helpers RabbitHelper
> end
> 
> -class String
> -  # Rails defines this for a number of other classes, including Object
> -  # see activesupport/lib/active_support/core_ext/object/blank.rb
> -  def blank?
> -      self !~ /\S/
> -  end
> -
> -  # Title case.
> -  #
> -  #   "this is a string".titlecase
> -  #   => "This Is A String"
> -  #
> -  # CREDIT: Eliazar Parra
> -  # Copied from facets
> -  def titlecase
> -    gsub(/\b\w/){ $`[-1,1] == "'" ? $& : $&.upcase }
> -  end
> -
> -  def pluralize
> -    self + "s"
> -  end
> -
> -  def singularize
> -    self.gsub(/s$/, '')
> -  end
> -
> -  def underscore
> -      gsub(/::/, '/').
> -          gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
> -          gsub(/([a-z\d])([A-Z])/,'\1_\2').
> -          tr("-", "_").
> -          downcase
> -  end
> -end
> -
> configure do
>   class << Sinatra::Base
>     def options(path, opts={}, &block)
> -- 
> 1.7.4
> 


Mime
View raw message