On Mar 19, 2011, at 1:03 AM, [email protected] wrote: ACK, with small inline comment bellow.
-- Michal > From: David Lutterkort <[email protected]> > > 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 >
