From codesite-noreply at google.com Mon Dec 22 09:38:51 2008 From: codesite-noreply at google.com (codesite-noreply at google.com) Date: Mon, 22 Dec 2008 14:38:51 +0000 Subject: [Ruby-activeldap-commit] [ruby-activeldap commit] r783 - in trunk: lib lib/active_ldap test Message-ID: <0016e645b8f60dfd29045ea39ecf@google.com> Author: koutou Date: Mon Dec 22 06:38:05 2008 New Revision: 783 Modified: trunk/lib/active_ldap.rb trunk/lib/active_ldap/base.rb trunk/lib/active_ldap/get_text.rb trunk/lib/active_ldap/validations.rb trunk/test/test_validation.rb Log: * don't use gettext/active_record for ActiveRecord >= 2.2.0. Modified: trunk/lib/active_ldap.rb ============================================================================== --- trunk/lib/active_ldap.rb (original) +++ trunk/lib/active_ldap.rb Mon Dec 22 06:38:05 2008 @@ -939,7 +939,7 @@ require_gem_if_need.call("active_record", "activerecord") begin - require_gem_if_need.call("gettext/active_record", "gettext") + require_gem_if_need.call("gettext", "gettext") rescue LoadError end require 'active_ldap/get_text' Modified: trunk/lib/active_ldap/base.rb ============================================================================== --- trunk/lib/active_ldap/base.rb (original) +++ trunk/lib/active_ldap/base.rb Mon Dec 22 06:38:05 2008 @@ -439,6 +439,8 @@ def inspect if self == Base super + elsif abstract_class? + "#{super}(abstract)" else class_names = [] must = [] @@ -453,6 +455,56 @@ "may:<#{inspect_attributes(may)}>"].join(", ") "#{super}(#{detail})" end + end + + def base_class + if self == Base + self + else + class_of_active_ldap_descendant(self) + end + end + + attr_accessor :abstract_class + def abstract_class? + defined?(@abstract_class) && @abstract_class + end + + def class_of_active_ldap_descendant(klass) + if klass.superclass == Base or klass.superclass.abstract_class? + klass + elsif klass.superclass.nil? + raise Error, _("%s doesn't belong in a hierarchy descending " \ + "from ActiveLdap") % (name || to_s) + else + class_of_active_ldap_descendant(klass.superclass) + end + end + + def self_and_descendents_from_active_ldap + klass = self + classes = [klass] + while klass != klass.base_class + classes << klass = klass.superclass + end + classes + rescue + [self] + end + alias_method(:self_and_descendents_from_active_record, + :self_and_descendents_from_active_ldap) + + def human_name(options={}) + defaults = self_and_descendents_from_active_ldap.collect do |klass| + if klass.name.blank? + nil + else + :"#{klass.name.underscore}" + end + end + defaults << name.humanize + defaults = defaults.compact + defaults.first || name || to_s end private Modified: trunk/lib/active_ldap/get_text.rb ============================================================================== --- trunk/lib/active_ldap/get_text.rb (original) +++ trunk/lib/active_ldap/get_text.rb Mon Dec 22 06:38:05 2008 @@ -1,5 +1,11 @@ begin - require "gettext/active_record" + require 'active_record/version' + active_record_version = [ActiveRecord::VERSION::MAJOR, + ActiveRecord::VERSION::MINOR, + ActiveRecord::VERSION::TINY] + if (active_record_version <=> [2, 2, 0]) < 0 + require "gettext/active_record" + end ActiveLdap.const_set("GetText", GetText) rescue LoadError require 'active_ldap/get_text_fallback' Modified: trunk/lib/active_ldap/validations.rb ============================================================================== --- trunk/lib/active_ldap/validations.rb (original) +++ trunk/lib/active_ldap/validations.rb Mon Dec 22 06:38:05 2008 @@ -77,11 +77,7 @@ private def validate_duplicated_dn_creation if id and exist? - if ActiveLdap.get_text_supported? - format = _("%{fn} is duplicated: %s") - else - format = _("is duplicated: %s") - end + format = _("is duplicated: %s") errors.add("dn", format % dn) end end @@ -101,17 +97,9 @@ names = unexpected_classes.collect do |object_class| self.class.human_object_class_name(object_class) end - if ActiveLdap.get_text_supported? - format = n_("%{fn} has excluded value: %s", - "%{fn} has excluded values: %s", - names.size) - else - if names.size == 1 - format = "has excluded value: %s" - else - format = "has excluded values: %s" - end - end + format = n_("has excluded value: %s", + "has excluded values: %s", + names.size) errors.add("objectClass", format % names.join(", ")) end @@ -139,20 +127,12 @@ self.class.human_attribute_name(name) end args = [self.class.human_object_class_name(object_class)] - if ActiveLdap.get_text_supported? - if aliases.empty? - format = _("%{fn} is required attribute by objectClass '%s'") - else - format = _("%{fn} is required attribute by objectClass " \ - "'%s': aliases: %s") - args << aliases.join(', ') - end + if aliases.empty? + format = _("is required attribute by objectClass '%s'") else - format = "is required attribute by objectClass '%s'" - unless aliases.empty? - format << ": aliases: %s" - args << aliases.join(', ') - end + format = _("is required attribute by objectClass " \ + "'%s': aliases: %s") + args << aliases.join(', ') end errors.add(real_name, format % args) end @@ -173,19 +153,10 @@ params = [self.class.human_readable_format(value), self.class.human_syntax_description(attribute.syntax), failed_reason] - if ActiveLdap.get_text_supported? - if option - format = - _("%{fn} (%s) has invalid format: %s: required syntax: %s: %s") - else - format = _("%{fn} has invalid format: %s: required syntax: %s: %s") - end + if option + format = _("(%s) has invalid format: %s: required syntax: %s: %s") else - if option - format = _("(%s) has invalid format: %s: required syntax: %s: %s") - else - format = _("has invalid format: %s: required syntax: %s: %s") - end + format = _("has invalid format: %s: required syntax: %s: %s") end params.unshift(option) if option errors.add(name, format % params) Modified: trunk/test/test_validation.rb ============================================================================== --- trunk/test/test_validation.rb (original) +++ trunk/test/test_validation.rb Mon Dec 22 06:38:05 2008 @@ -11,14 +11,8 @@ assert(user.valid?) user.uid_number = "" assert(!user.valid?) - if ActiveLdap.get_text_supported? - format = _("%{fn} is required attribute by objectClass '%s'") - format = format % {:fn => la_("uidNumber")} - blank_message = format % loc_("posixAccount") - else - blank_message = "objectClass is required attribute by " + - "objectClass 'posixAccount'" - end + format = _("is required attribute by objectClass '%s'") + blank_message = la_("uidNumber") + ' ' + (format % loc_("posixAccount")) assert_equal([blank_message], user.errors.full_messages) end end @@ -31,14 +25,10 @@ assert(user.save) user.class.excluded_classes = ['person'] assert(!user.save) - if ActiveLdap.get_text_supported? - format = n_("%{fn} has excluded value: %s", - "%{fn} has excluded values: %s", - 1) % {:fn => la_("objectClass")} - message = format % loc_("person") - else - message = "objectClass has excluded value: person" - end + format = n_("has excluded value: %s", + "has excluded values: %s", + 1) + message = la_("objectClass") + ' ' + (format % loc_("person")) assert_equal([message], user.errors.full_messages) end end @@ -106,12 +96,8 @@ assert(ou_class.new("YYY").save) ou = ou_class.new("YYY") assert(!ou.save) - if ActiveLdap.get_text_supported? - format = _("%{fn} is duplicated: %s") % {:fn => la_("DN")} - else - format = "Dn " + _("is duplicated: %s") - end - assert_equal([format % ou.dn], ou.errors.full_messages) + message = la_("DN") + ' ' + (_("is duplicated: %s") % ou.dn) + assert_equal([message], ou.errors.full_messages) end def test_save! @@ -123,6 +109,9 @@ end @group_class.validates_presence_of(:description) + def @group_class.name + "Group" + end assert_raises(ActiveLdap::EntryInvalid) do group.save! end @@ -138,6 +127,9 @@ assert_equal([], group.errors.to_a) @group_class.validates_presence_of(:description) + def @group_class.name + "Group" + end assert(!group.valid?) assert(group.errors.invalid?(:description)) assert_equal(1, group.errors.size) @@ -150,22 +142,13 @@ assert_not_nil(syntax_description) params = [formatted_value, syntax_description, reason] params.unshift(option) if option - if ActiveLdap.get_text_supported? - if option - format = _("%{fn} (%s) has invalid format: %s: required syntax: %s: %s") - else - format = _("%{fn} has invalid format: %s: required syntax: %s: %s") - end - format = format % {:fn => la_(name)} - assert_equal([format % params], model.errors.full_messages) + if option + format = _("(%s) has invalid format: %s: required syntax: %s: %s") else - if option - format = _("(%s) has invalid format: %s: required syntax: %s: %s") - else - format = _("has invalid format: %s: required syntax: %s: %s") - end - assert_equal(["#{name} #{format % params}"], model.errors.full_messages) + format = _("has invalid format: %s: required syntax: %s: %s") end + message = la_(name) + ' ' + (format % params) + assert_equal([message], model.errors.full_messages) end def assert_invalid_see_also_value(invalid_value, value, option=nil) From codesite-noreply at google.com Mon Dec 22 20:47:38 2008 From: codesite-noreply at google.com (codesite-noreply at google.com) Date: Tue, 23 Dec 2008 01:47:38 +0000 Subject: [Ruby-activeldap-commit] [ruby-activeldap commit] r784 - in trunk/lib: . active_ldap Message-ID: <001636164aa7d0decf045eacf59a@google.com> Author: koutou Date: Mon Dec 22 17:40:25 2008 New Revision: 784 Modified: trunk/lib/active_ldap.rb trunk/lib/active_ldap/base.rb trunk/lib/active_ldap/get_text.rb Log: * make GetText support strictly. Modified: trunk/lib/active_ldap.rb ============================================================================== --- trunk/lib/active_ldap.rb (original) +++ trunk/lib/active_ldap.rb Mon Dec 22 17:40:25 2008 @@ -905,12 +905,12 @@ # package, and I'd like to see it prove helpful to more people than just myself. # -require_gem_if_need = Proc.new do |library_name, gem_name| +require_gem_if_need = Proc.new do |library_name, gem_name, *gem_args| begin require library_name rescue LoadError require 'rubygems' - gem gem_name + gem gem_name, *gem_args require library_name end end @@ -939,7 +939,8 @@ require_gem_if_need.call("active_record", "activerecord") begin - require_gem_if_need.call("gettext", "gettext") + require_gem_if_need.call("locale") + require_gem_if_need.call("gettext", "gettext", ">= 1.94") rescue LoadError end require 'active_ldap/get_text' Modified: trunk/lib/active_ldap/base.rb ============================================================================== --- trunk/lib/active_ldap/base.rb (original) +++ trunk/lib/active_ldap/base.rb Mon Dec 22 17:40:25 2008 @@ -457,14 +457,6 @@ end end - def base_class - if self == Base - self - else - class_of_active_ldap_descendant(self) - end - end - attr_accessor :abstract_class def abstract_class? defined?(@abstract_class) && @abstract_class Modified: trunk/lib/active_ldap/get_text.rb ============================================================================== --- trunk/lib/active_ldap/get_text.rb (original) +++ trunk/lib/active_ldap/get_text.rb Mon Dec 22 17:40:25 2008 @@ -1,13 +1,15 @@ -begin - require 'active_record/version' - active_record_version = [ActiveRecord::VERSION::MAJOR, - ActiveRecord::VERSION::MINOR, - ActiveRecord::VERSION::TINY] - if (active_record_version <=> [2, 2, 0]) < 0 - require "gettext/active_record" +if Object.const_defined?(:GetText) + begin + require 'active_record/version' + active_record_version = [ActiveRecord::VERSION::MAJOR, + ActiveRecord::VERSION::MINOR, + ActiveRecord::VERSION::TINY] + if (active_record_version <=> [2, 2, 0]) < 0 + require "gettext/active_record" + end + ActiveLdap.const_set("GetText", GetText) end - ActiveLdap.const_set("GetText", GetText) -rescue LoadError +else require 'active_ldap/get_text_fallback' end From codesite-noreply at google.com Mon Dec 22 21:07:42 2008 From: codesite-noreply at google.com (codesite-noreply at google.com) Date: Tue, 23 Dec 2008 02:07:42 +0000 Subject: [Ruby-activeldap-commit] [ruby-activeldap commit] r785 - trunk/lib Message-ID: <000e0cd6ae248fe63b045ead3d18@google.com> Author: koutou Date: Mon Dec 22 17:48:44 2008 New Revision: 785 Modified: trunk/lib/active_ldap.rb Log: * make rubygems check strictly. Modified: trunk/lib/active_ldap.rb ============================================================================== --- trunk/lib/active_ldap.rb (original) +++ trunk/lib/active_ldap.rb Mon Dec 22 17:48:44 2008 @@ -907,6 +907,9 @@ require_gem_if_need = Proc.new do |library_name, gem_name, *gem_args| begin + if !gem_args.empty? and Kernel.private_method_defined?(:gem) + gem gem_name, *gem_args + end require library_name rescue LoadError require 'rubygems' From codesite-noreply at google.com Tue Dec 23 02:51:15 2008 From: codesite-noreply at google.com (codesite-noreply at google.com) Date: Tue, 23 Dec 2008 07:51:15 +0000 Subject: [Ruby-activeldap-commit] [ruby-activeldap commit] r786 - in trunk: rails rails/plugin/active_ldap rails/plugin/active_ldap/generators rails_generators Message-ID: <000e0cd3070a338028045eb20a1f@google.com> Author: koutou Date: Mon Dec 22 23:42:41 2008 New Revision: 786 Added: trunk/rails/README (props changed) - copied unchanged from r782, /trunk/rails/plugin/active_ldap/README trunk/rails/init.rb (props changed) - copied unchanged from r782, /trunk/rails/plugin/active_ldap/init.rb trunk/rails/plugin/active_ldap/generators/README (contents, props changed) trunk/rails_generators/ (props changed) - copied from r782, /trunk/rails/plugin/active_ldap/generators/ Modified: trunk/rails/plugin/active_ldap/init.rb Log: * use Rails standard naming rules: * rails/generators/ -> rails_generators/. * rails/plugin/active_ldap/init.rb -> rails/init.rb Added: trunk/rails/plugin/active_ldap/generators/README ============================================================================== --- (empty file) +++ trunk/rails/plugin/active_ldap/generators/README Mon Dec 22 23:42:41 2008 @@ -0,0 +1,2 @@ +This directory is deprecated. Use generators in rails_generators/. +This directory will be removed after ActiveLdap 1.0.2 is released. Modified: trunk/rails/plugin/active_ldap/init.rb ============================================================================== --- trunk/rails/plugin/active_ldap/init.rb (original) +++ trunk/rails/plugin/active_ldap/init.rb Mon Dec 22 23:42:41 2008 @@ -1,3 +1,6 @@ +# deprecated. Use rails/init.rb. +# This will be removed after ActiveLdap 1.0.2 is released. + require_library_or_gem 'active_ldap' ActiveLdap::Base.logger ||= RAILS_DEFAULT_LOGGER From codesite-noreply at google.com Tue Dec 23 04:32:41 2008 From: codesite-noreply at google.com (codesite-noreply at google.com) Date: Tue, 23 Dec 2008 09:32:41 +0000 Subject: [Ruby-activeldap-commit] [ruby-activeldap commit] r787 - trunk/lib/active_ldap/adapter Message-ID: <0015174ff61efd15cf045eb374e0@google.com> Author: koutou Date: Tue Dec 23 01:13:42 2008 New Revision: 787 Modified: trunk/lib/active_ldap/adapter/base.rb Log: * log runtime in milliseconds. Modified: trunk/lib/active_ldap/adapter/base.rb ============================================================================== --- trunk/lib/active_ldap/adapter/base.rb (original) +++ trunk/lib/active_ldap/adapter/base.rb Tue Dec 23 01:13:42 2008 @@ -213,10 +213,10 @@ end end - def log_info(name, runtime, info=nil) + def log_info(name, runtime_in_seconds, info=nil) return unless @logger return unless @logger.debug? - message = "LDAP: #{name} (#{'%f' % runtime})" + message = "LDAP: #{name} (#{'%.1f' % (runtime_in_seconds * 1000)}ms)" @logger.debug(format_log_entry(message, info)) end From codesite-noreply at google.com Tue Dec 23 04:36:42 2008 From: codesite-noreply at google.com (codesite-noreply at google.com) Date: Tue, 23 Dec 2008 09:36:42 +0000 Subject: [Ruby-activeldap-commit] [ruby-activeldap commit] r788 - trunk/lib/active_ldap/action_controller Message-ID: <000e0cd487ba547f24045eb383b0@google.com> Author: koutou Date: Tue Dec 23 01:14:05 2008 New Revision: 788 Modified: trunk/lib/active_ldap/action_controller/ldap_benchmarking.rb Log: * support Rails 2.2.2. Modified: trunk/lib/active_ldap/action_controller/ldap_benchmarking.rb ============================================================================== --- trunk/lib/active_ldap/action_controller/ldap_benchmarking.rb (original) +++ trunk/lib/active_ldap/action_controller/ldap_benchmarking.rb Tue Dec 23 01:14:05 2008 @@ -3,22 +3,32 @@ module LdapBenchmarking def self.included(base) base.class_eval do - alias_method_chain :render, :active_ldap_benchmark - alias_method_chain :rendering_runtime, :active_ldap + alias_method_chain :render_with_benchmark, :active_ldap_benchmark + if private_method_defined?(:view_runtime) + alias_method_chain :view_runtime, :active_ldap + else + alias_method_chain :rendering_runtime, :active_ldap + end end end protected - def render_with_active_ldap_benchmark(*args, &block) + def render_with_benchmark_with_active_ldap_benchmark(*args, &block) if logger - @ldap_runtime_before_render = ActiveLdap::Base.reset_runtime - result = render_without_active_ldap_benchmark(*args, &block) + ldap_runtime_before_render = ActiveLdap::Base.reset_runtime + end + result = render_with_benchmark_without_active_ldap_benchmark(*args, + &block) + if logger + @ldap_runtime_before_render = ldap_runtime_before_render @ldap_runtime_after_render = ActiveLdap::Base.reset_runtime - @rendering_runtime -= @ldap_runtime_after_render - result - else - render_without_active_ldap_benchmark(*args, &block) + if defined?(@rendering_runtime) + @rendering_runtime -= @ldap_runtime_after_render + else + @view_runtime -= @ldap_runtime_after_render + end end + result end private @@ -29,6 +39,16 @@ ldap_runtime += @ldap_runtime_after_render || 0 ldap_percentage = ldap_runtime * 100 / runtime result + (" | LDAP: %.5f (%d%%)" % [ldap_runtime, ldap_percentage]) + end + + def view_runtime_with_active_ldap + result = view_runtime_without_active_ldap + ldap_runtime = ActiveLdap::Base.reset_runtime + @ldap_runtime_before_render ||= 0 + @ldap_runtime_after_render ||= 0 + ldap_runtime += @ldap_runtime_before_render + ldap_runtime += @ldap_runtime_after_render + result + (", LDAP: %.0f" % (ldap_runtime * 1000)) end end end From codesite-noreply at google.com Tue Dec 23 05:13:47 2008 From: codesite-noreply at google.com (codesite-noreply at google.com) Date: Tue, 23 Dec 2008 10:13:47 +0000 Subject: [Ruby-activeldap-commit] [ruby-activeldap commit] r790 - trunk/lib/active_ldap/action_controller Message-ID: <0016368e1e05f8764b045eb4079c@google.com> Author: koutou Date: Tue Dec 23 02:12:34 2008 New Revision: 790 Modified: trunk/lib/active_ldap/action_controller/ldap_benchmarking.rb Log: * improve name. Modified: trunk/lib/active_ldap/action_controller/ldap_benchmarking.rb ============================================================================== --- trunk/lib/active_ldap/action_controller/ldap_benchmarking.rb (original) +++ trunk/lib/active_ldap/action_controller/ldap_benchmarking.rb Tue Dec 23 02:12:34 2008 @@ -3,7 +3,7 @@ module LdapBenchmarking def self.included(base) base.class_eval do - alias_method_chain :render_with_benchmark, :active_ldap_benchmark + alias_method_chain :render_with_benchmark, :active_ldap if private_method_defined?(:view_runtime) alias_method_chain :view_runtime, :active_ldap else @@ -13,12 +13,11 @@ end protected - def render_with_benchmark_with_active_ldap_benchmark(*args, &block) + def render_with_benchmark_with_active_ldap(*args, &block) if logger ldap_runtime_before_render = ActiveLdap::Base.reset_runtime end - result = render_with_benchmark_without_active_ldap_benchmark(*args, - &block) + result = render_with_benchmark_without_active_ldap(*args, &block) if logger @ldap_runtime_before_render = ldap_runtime_before_render @ldap_runtime_after_render = ActiveLdap::Base.reset_runtime From codesite-noreply at google.com Tue Dec 23 07:15:02 2008 From: codesite-noreply at google.com (codesite-noreply at google.com) Date: Tue, 23 Dec 2008 12:15:02 +0000 Subject: [Ruby-activeldap-commit] [ruby-activeldap commit] r792 - trunk/examples/al-admin/app/views/layouts Message-ID: <000e0cd3107490b9f6045eb5b914@google.com> Author: koutou Date: Tue Dec 23 03:01:33 2008 New Revision: 792 Modified: trunk/examples/al-admin/app/views/layouts/_footer.html.erb Log: * show Rails version. Modified: trunk/examples/al-admin/app/views/layouts/_footer.html.erb ============================================================================== --- trunk/examples/al-admin/app/views/layouts/_footer.html.erb (original) +++ trunk/examples/al-admin/app/views/layouts/_footer.html.erb Tue Dec 23 03:01:33 2008 @@ -5,5 +5,7 @@ <%= link_to("Ruby/ActiveLdap", "http://rubyforge.org/projects/ruby-activeldap") %> <%= ActiveLdap::VERSION %> + and + Ruby on Rails <%= Rails::VERSION::STRING %> From codesite-noreply at google.com Tue Dec 23 07:22:12 2008 From: codesite-noreply at google.com (codesite-noreply at google.com) Date: Tue, 23 Dec 2008 12:22:12 +0000 Subject: [Ruby-activeldap-commit] [ruby-activeldap commit] r793 - in trunk/lib: . active_ldap Message-ID: <0016e64084b23569aa045eb5d377@google.com> Author: koutou Date: Tue Dec 23 03:59:08 2008 New Revision: 793 Modified: trunk/lib/active_ldap.rb trunk/lib/active_ldap/get_text.rb Log: * improve GetText detection. Modified: trunk/lib/active_ldap.rb ============================================================================== --- trunk/lib/active_ldap.rb (original) +++ trunk/lib/active_ldap.rb Tue Dec 23 03:59:08 2008 @@ -907,7 +907,7 @@ require_gem_if_need = Proc.new do |library_name, gem_name, *gem_args| begin - if !gem_args.empty? and Kernel.private_method_defined?(:gem) + if !gem_args.empty? and Object.const_defined?(:Gem) gem gem_name, *gem_args end require library_name Modified: trunk/lib/active_ldap/get_text.rb ============================================================================== --- trunk/lib/active_ldap/get_text.rb (original) +++ trunk/lib/active_ldap/get_text.rb Tue Dec 23 03:59:08 2008 @@ -1,15 +1,15 @@ if Object.const_defined?(:GetText) - begin - require 'active_record/version' - active_record_version = [ActiveRecord::VERSION::MAJOR, - ActiveRecord::VERSION::MINOR, - ActiveRecord::VERSION::TINY] - if (active_record_version <=> [2, 2, 0]) < 0 - require "gettext/active_record" - end - ActiveLdap.const_set("GetText", GetText) + require 'active_record/version' + active_record_version = [ActiveRecord::VERSION::MAJOR, + ActiveRecord::VERSION::MINOR, + ActiveRecord::VERSION::TINY] + if (active_record_version <=> [2, 2, 0]) < 0 + require "gettext/active_record" end -else + ActiveLdap.const_set("GetText", GetText) +end + +unless ActiveLdap.const_defined?(:GetText) require 'active_ldap/get_text_fallback' end From codesite-noreply at google.com Tue Dec 23 07:36:16 2008 From: codesite-noreply at google.com (codesite-noreply at google.com) Date: Tue, 23 Dec 2008 12:36:16 +0000 Subject: [Ruby-activeldap-commit] [ruby-activeldap commit] r791 - trunk/lib/active_ldap/adapter Message-ID: <0016e6434aea830932045eb605fe@google.com> Author: koutou Date: Tue Dec 23 02:56:46 2008 New Revision: 791 Modified: trunk/lib/active_ldap/adapter/base.rb Log: * always measure runtime. Modified: trunk/lib/active_ldap/adapter/base.rb ============================================================================== --- trunk/lib/active_ldap/adapter/base.rb (original) +++ trunk/lib/active_ldap/adapter/base.rb Tue Dec 23 02:56:46 2008 @@ -601,17 +601,13 @@ def log(name, info=nil) if block_given? - if @logger and @logger.debug? - result = nil - runtime = Benchmark.realtime {result = yield} - @runtime += runtime - log_info(name, runtime, info) - result - else - yield - end + result = nil + seconds = Benchmark.realtime {result = yield} + @runtime += seconds + log_info(name, seconds, info) + result else - log_info(name, info, 0) + log_info(name, 0, info) nil end rescue Exception From codesite-noreply at google.com Mon Dec 29 03:24:47 2008 From: codesite-noreply at google.com (codesite-noreply at google.com) Date: Mon, 29 Dec 2008 08:24:47 +0000 Subject: [Ruby-activeldap-commit] [ruby-activeldap commit] r795 - in trunk: . lib/active_ldap test Message-ID: <0016362835a637d509045f2b3597@google.com> Author: koutou Date: Sun Dec 28 23:25:51 2008 New Revision: 795 Modified: trunk/README trunk/lib/active_ldap/base.rb trunk/test/test_base.rb Log: * don't add needless ',' at the end of DN. [#10] Reported by michael.j.konopka. Thanks!!! Modified: trunk/README ============================================================================== --- trunk/README (original) +++ trunk/README Sun Dec 28 23:25:51 2008 @@ -117,3 +117,4 @@ * ???????: A suggesetion. * Ted Lepich: A suggestion. * danger1986: A suggestion. +* michael.j.konopka: A bug report. Modified: trunk/lib/active_ldap/base.rb ============================================================================== --- trunk/lib/active_ldap/base.rb (original) +++ trunk/lib/active_ldap/base.rb Sun Dec 28 23:25:51 2008 @@ -966,7 +966,9 @@ alias_method :base_of_class, :base def base ensure_update_dn - [@base, base_of_class].compact.join(",") + [@base, base_of_class].find_all do |component| + not component.blank? + end.join(",") end undef_method :base= @@ -1276,7 +1278,7 @@ end dn_value = DN.escape_value(dn_value) if escape_dn_value _base = base - _base = nil if _base.empty? + _base = nil if _base.blank? ["#{dn_attribute}=#{dn_value}", _base].compact.join(",") end Modified: trunk/test/test_base.rb ============================================================================== --- trunk/test/test_base.rb (original) +++ trunk/test/test_base.rb Sun Dec 28 23:25:51 2008 @@ -6,6 +6,16 @@ include AlTestUtils priority :must + def test_empty_base_of_class + make_temporary_user do |user,| + user.class.prefix = "" + user.class.base = "" + user.base = "dc=net" + assert_equal("dc=net", user.base) + end + end + + priority :normal def test_search_value_with_no_dn_attribute make_temporary_user do |user1,| make_temporary_user do |user2,| @@ -22,7 +32,6 @@ end end - priority :normal def test_to_s make_temporary_group do |group,| assert_equal(group.to_s, group.to_ldif) From codesite-noreply at google.com Mon Dec 29 03:28:48 2008 From: codesite-noreply at google.com (codesite-noreply at google.com) Date: Mon, 29 Dec 2008 08:28:48 +0000 Subject: [Ruby-activeldap-commit] [ruby-activeldap commit] r794 - in trunk: . lib/active_ldap test Message-ID: <0016e64084b293615e045f2b4383@google.com> Author: koutou Date: Sun Dec 28 23:02:52 2008 New Revision: 794 Modified: trunk/README trunk/lib/active_ldap/base.rb trunk/lib/active_ldap/validations.rb trunk/test/test_validation.rb Log: * delay DN validation until valid?. [#9] Suggested by danger1986. Thanks!!! Modified: trunk/README ============================================================================== --- trunk/README (original) +++ trunk/README Sun Dec 28 23:02:52 2008 @@ -116,3 +116,4 @@ * Grzegorz Marsza?ek: A bug report. * ???????: A suggesetion. * Ted Lepich: A suggestion. +* danger1986: A suggestion. Modified: trunk/lib/active_ldap/base.rb ============================================================================== --- trunk/lib/active_ldap/base.rb (original) +++ trunk/lib/active_ldap/base.rb Sun Dec 28 23:02:52 2008 @@ -708,6 +708,7 @@ alias_method(:dn_attribute_of_class, :dn_attribute) def dn_attribute + ensure_update_dn _dn_attribute = @dn_attribute || dn_attribute_of_class to_real_attribute_name(_dn_attribute) || _dn_attribute end @@ -964,6 +965,7 @@ alias_method :base_of_class, :base def base + ensure_update_dn [@base, base_of_class].compact.join(",") end @@ -1101,6 +1103,8 @@ @base = nil @scope = nil @dn = nil + @dn_is_base = false + @dn_split_value = nil @connection ||= nil clear_connection_based_cache end @@ -1161,35 +1165,54 @@ # # Set the value of the attribute called by method_missing? def set_attribute(name, value) - attr = to_real_attribute_name(name) - attr, value = update_dn(attr, value) if attr == dn_attribute - raise UnknownAttribute.new(name) if attr.nil? + real_name = to_real_attribute_name(name) + if real_name == dn_attribute + real_name, value = register_new_dn_attribute(real_name, value) + end + raise UnknownAttribute.new(name) if real_name.nil? - @data[attr] = value + @data[real_name] = value end - def update_dn(attr, value) + def register_new_dn_attribute(name, value) @dn = nil @dn_is_base = false - return [attr, nil] if value.blank? + if value.blank? + @dn_split_value = nil + [name, nil] + else + new_name, new_value, raw_new_value, new_bases = split_dn_value(value) + @dn_split_value = [new_name, new_value, new_bases] + if new_name.nil? and new_value.nil? + new_bases[0].to_a[0] + else + [new_name || name, raw_new_value || value] + end + end + end - new_dn_attribute, new_value, bases = split_dn_value(value) - if new_dn_attribute.nil? and new_value.nil? + def update_dn(new_name, new_value, bases) + if new_name.nil? and new_value.nil? @dn_is_base = true @base = nil attr, value = bases[0].to_a[0] @dn_attribute = attr else - new_dn_attribute = to_real_attribute_name(new_dn_attribute) - if new_dn_attribute - value = new_value - @base = bases.empty? ? nil : DN.new(*bases).to_s - if dn_attribute != new_dn_attribute - @dn_attribute = attr = new_dn_attribute - end + new_name ||= @dn_attribute || dn_attribute_of_class + new_name = to_real_attribute_name(new_name) + if new_name.nil? + new_name = @dn_attribute || dn_attribute_of_class + new_name = to_real_attribute_name(new_name) end + new_bases = bases.empty? ? nil : DN.new(*bases).to_s + dn_components = ["#{new_name}=#{new_value}", + new_bases, + base_of_class] + dn_components = dn_components.find_all {| component| !component.blank?} + DN.parse(dn_components.join(',')) + @base = new_bases + @dn_attribute = new_name end - [attr, value] end def split_dn_value(value) @@ -1198,9 +1221,14 @@ dn_value = value if value.is_a?(DN) dn_value ||= DN.parse(value) rescue DistinguishedNameInvalid - dn_value = DN.parse("#{dn_attribute}=#{value}") + begin + dn_value = DN.parse("#{dn_attribute}=#{value}") + rescue DistinguishedNameInvalid + return [nil, value, value, []] + end end + val = bases = nil begin relative_dn_value = dn_value - self.class.parsed_base if relative_dn_value.rdns.empty? @@ -1214,16 +1242,37 @@ end dn_attribute_name, dn_attribute_value = val.to_a[0] - [dn_attribute_name, dn_attribute_value, bases] + escaped_dn_attribute_value = nil + unless dn_attribute_value.nil? + escaped_dn_attribute_value = DN.escape_value(dn_attribute_value) + end + [dn_attribute_name, escaped_dn_attribute_value, + dn_attribute_value, bases] + end + + def need_update_dn? + not @dn_split_value.nil? + end + + def ensure_update_dn + return unless need_update_dn? + @mutex.synchronize do + if @dn_split_value + update_dn(*@dn_split_value) + @dn_split_value = nil + end + end end def compute_dn(escape_dn_value=false) return base if @dn_is_base + ensure_update_dn dn_value = id if dn_value.nil? - raise DistinguishedNameNotSetError.new, - _("%s's DN attribute (%s) isn't set") % [self, dn_attribute] + format =_("%s's DN attribute (%s) isn't set") + message = format % [self.inspect, dn_attribute] + raise DistinguishedNameNotSetError.new, message end dn_value = DN.escape_value(dn_value) if escape_dn_value _base = base Modified: trunk/lib/active_ldap/validations.rb ============================================================================== --- trunk/lib/active_ldap/validations.rb (original) +++ trunk/lib/active_ldap/validations.rb Sun Dec 28 23:02:52 2008 @@ -34,6 +34,7 @@ end validate_on_create :validate_duplicated_dn_creation + validate :validate_dn validate :validate_excluded_classes validate :validate_required_ldap_values validate :validate_ldap_values @@ -80,6 +81,12 @@ format = _("is duplicated: %s") errors.add("dn", format % dn) end + end + + def validate_dn + dn + rescue DistinguishedNameInvalid + errors.add("dn", _("is invalid: %s") % $!.message) end def validate_excluded_classes Modified: trunk/test/test_validation.rb ============================================================================== --- trunk/test/test_validation.rb (original) +++ trunk/test/test_validation.rb Sun Dec 28 23:02:52 2008 @@ -6,6 +6,20 @@ include ActiveLdap::Helper priority :must + def test_dn_validate + make_temporary_user do |user,| + user.uid = "=" + assert(!user.valid?) + reason = _("attribute value is missing") + invalid_format = _("%s is invalid distinguished name (DN): %s") + invalid_message = invalid_format % ["uid==,#{user.class.base}", reason] + message = _("is invalid: %s") % invalid_message + message = "Dn" + " " + message + assert_equal([message], user.errors.full_messages) + end + end + + priority :normal def test_not_validate_empty_string make_temporary_user do |user,| assert(user.valid?) @@ -17,7 +31,6 @@ end end - priority :normal def test_validate_excluded_classes make_temporary_user do |user,| user.save From codesite-noreply at google.com Mon Dec 29 03:32:49 2008 From: codesite-noreply at google.com (codesite-noreply at google.com) Date: Mon, 29 Dec 2008 08:32:49 +0000 Subject: [Ruby-activeldap-commit] [ruby-activeldap commit] r796 - trunk Message-ID: <000e0cd487baeb7b8a045f2b5133@google.com> Author: koutou Date: Sun Dec 28 23:27:57 2008 New Revision: 796 Modified: trunk/TODO Log: * TODO: add: Add parsing position to DistinguishedNameInvalid error like @. Modified: trunk/TODO ============================================================================== --- trunk/TODO (original) +++ trunk/TODO Sun Dec 28 23:27:57 2008 @@ -1,3 +1,5 @@ +- Add parsing position to DistinguishedNameInvalid error like + @. - Support TLS optioins (e.g. CA certification file and so on) - Provide FormHelper for LDAP entry's attribute to handle multiple values (["foo", "bar", ...]) and option value ({"binary" => "..."},