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
>