You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by lu...@redhat.com on 2011/03/19 01:03:11 UTC

[PATCH 1/4] core_ext: move String enhancements out of rabbit; add Integer.ordinalize

From: David Lutterkort <lu...@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
+
+  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


Re: [PATCH 1/4] core_ext: move String enhancements out of rabbit; add Integer.ordinalize

Posted by David Lutterkort <lu...@redhat.com>.
On Sat, 2011-03-19 at 14:17 +0100, Michal Fojtik wrote:
> On Mar 19, 2011, at 1:03 AM, lutter@redhat.com wrote:
> 
> ACK, with small inline comment bellow.
>
> > From: David Lutterkort <lu...@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
> > 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 @@
> > +
> > +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.

Yes, thre are - but they were not addressed in this code. The above is a
straight cut&paste from rabbit.rb; I'll commit as-is, if the lack of
rules is causing problems, we need to address that separately.

David



Re: [PATCH 1/4] core_ext: move String enhancements out of rabbit; add Integer.ordinalize

Posted by Michal Fojtik <mi...@mifo.sk>.
On Mar 19, 2011, at 1:03 AM, lutter@redhat.com wrote:

ACK, with small inline comment bellow.

  -- Michal


> From: David Lutterkort <lu...@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
>