[DRE-commits] [ruby-forwardable-extended] 01/03: Import Upstream version 2.6.0

Youhei SASAKI uwabami-guest at moszumanska.debian.org
Sun Sep 3 06:43:10 UTC 2017


This is an automated email from the git hooks/post-receive script.

uwabami-guest pushed a commit to branch master
in repository ruby-forwardable-extended.

commit 6ea0a08d7713602d57619948c6847385f330aade
Author: Youhei SASAKI <uwabami at gfd-dennou.org>
Date:   Thu Aug 31 12:12:43 2017 +0900

    Import Upstream version 2.6.0
---
 Gemfile                             |  24 +++++
 LICENSE                             |  19 ++++
 Rakefile                            |  13 +++
 forwardable-extended.gemspec        |  22 ++++
 lib/forwardable/extended.rb         | 202 ++++++++++++++++++++++++++++++++++++
 lib/forwardable/extended/version.rb |   9 ++
 6 files changed, 289 insertions(+)

diff --git a/Gemfile b/Gemfile
new file mode 100644
index 0000000..ea587c7
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,24 @@
+# ----------------------------------------------------------------------------
+# Frozen-string-literal: true
+# Copyright: 2015-2016 Jordon Bedwell - MIT License
+# Encoding: utf-8
+# ----------------------------------------------------------------------------
+
+source "https://rubygems.org"
+gem "rake", :require => false
+gemspec
+
+group :test do
+  gem "rspec-helpers", :require => false
+  gem "codeclimate-test-reporter", :require => false
+  gem "luna-rspec-formatters", :require => false
+  gem "rspec", :require => false
+end
+
+group :development do
+  gem "luna-rubocop-formatters", :require => false
+  gem "rubocop", :github => "bbatsov/rubocop", :require => false
+  gem "pry", {
+    :require => false
+  }
+end
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..e603a78
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2015-2016 Jordon Bedwell
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Rakefile b/Rakefile
new file mode 100644
index 0000000..1c929e5
--- /dev/null
+++ b/Rakefile
@@ -0,0 +1,13 @@
+# ----------------------------------------------------------------------------
+# Frozen-string-literal: true
+# Copyright: 2015-2016 Jordon Bedwell - MIT License
+# Encoding: utf-8
+# ----------------------------------------------------------------------------
+
+$LOAD_PATH.unshift(File.expand_path("../lib", __FILE__))
+require "luna/rubocop/rake/task"
+require "rspec/core/rake_task"
+
+task :default => [:spec]
+RSpec::Core::RakeTask.new :spec
+task :test => :spec
diff --git a/forwardable-extended.gemspec b/forwardable-extended.gemspec
new file mode 100644
index 0000000..cd5dabc
--- /dev/null
+++ b/forwardable-extended.gemspec
@@ -0,0 +1,22 @@
+#########################################################
+# This file has been automatically generated by gem2tgz #
+#########################################################
+# -*- encoding: utf-8 -*-
+# stub: forwardable-extended 2.6.0 ruby lib
+
+Gem::Specification.new do |s|
+  s.name = "forwardable-extended".freeze
+  s.version = "2.6.0"
+
+  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
+  s.require_paths = ["lib".freeze]
+  s.authors = ["Jordon Bedwell".freeze]
+  s.date = "2016-04-06"
+  s.description = "Forwardable with hash, and instance variable extensions.".freeze
+  s.email = ["jordon at envygeeks.io".freeze]
+  s.files = ["Gemfile".freeze, "LICENSE".freeze, "Rakefile".freeze, "lib/forwardable/extended.rb".freeze, "lib/forwardable/extended/version.rb".freeze]
+  s.homepage = "http://github.com/envygeeks/forwardable-extended".freeze
+  s.licenses = ["MIT".freeze]
+  s.rubygems_version = "2.5.2".freeze
+  s.summary = "Forwardable with hash, and instance variable extensions.".freeze
+end
diff --git a/lib/forwardable/extended.rb b/lib/forwardable/extended.rb
new file mode 100644
index 0000000..fc694cf
--- /dev/null
+++ b/lib/forwardable/extended.rb
@@ -0,0 +1,202 @@
+# ----------------------------------------------------------------------------
+# Frozen-string-literal: true
+# Copyright: 2015-2016 Jordon Bedwell - MIT License
+# Encoding: utf-8
+# ----------------------------------------------------------------------------
+
+require "forwardable/extended/version"
+require "forwardable"
+
+module Forwardable
+  module Extended
+
+    # ------------------------------------------------------------------------
+    # Make our methods private on the class, there is no reason for public.
+    # ------------------------------------------------------------------------
+
+    def self.extended(klass)
+      instance_methods.each do |method|
+        klass.private_class_method(
+          method
+        )
+      end
+    end
+
+    # ------------------------------------------------------------------------
+    # Delegate using a Rails-like interface.
+    # ------------------------------------------------------------------------
+
+    def rb_delegate(method, to: nil, alias_of: method, **kwd)
+      raise ArgumentError, "to must be provided" unless to
+      def_delegator(
+        to, alias_of, method, **kwd
+      )
+    end
+
+    # ------------------------------------------------------------------------
+    # Delegate a method to a hash and key.
+    # ------------------------------------------------------------------------
+
+    def def_hash_delegator(hash, method, key: method, **kwd)
+      prefix, suffix, wrap = prepare_delegate(**kwd)
+
+      if suffix
+        method = method.to_s.gsub(
+          /\?$/, ""
+        )
+      end
+
+      class_eval delegate_debug(<<-STR), __FILE__, __LINE__ - 9
+        def #{method}#{suffix}(*args)
+          #{wrap}(
+            #{prefix}#{hash}[#{key.inspect}]
+          )
+
+        rescue Exception
+          if !Forwardable.debug && $@ && $@.respond_to?(:delete_if)
+            $@.delete_if do |source|
+              source =~ %r"#{Regexp.escape(__FILE__)}"o
+            end
+          end
+
+          raise
+        end
+      STR
+    end
+
+    # ------------------------------------------------------------------------
+    # Delegate a method to an instance variable.
+    # ------------------------------------------------------------------------
+
+    def def_ivar_delegator(ivar, alias_ = ivar, **kwd)
+      prefix, suffix, wrap = prepare_delegate(**kwd)
+
+      if suffix
+        alias_ = alias_.to_s.gsub(
+          /\?$/, ""
+        )
+      end
+
+      class_eval delegate_debug(<<-STR), __FILE__, __LINE__ - 9
+        def #{alias_.to_s.gsub(/\A@/, "")}#{suffix}
+          #{wrap}(
+            #{prefix}#{ivar}
+          )
+
+        rescue Exception
+          if !Forwardable.debug && $@ && $@.respond_to?(:delete_if)
+            $@.delete_if do |source|
+              source =~ %r"#{Regexp.escape(__FILE__)}"o
+            end
+          end
+
+          raise
+        end
+      STR
+    end
+
+    # ------------------------------------------------------------------------
+    # Like def_delegator but allows you to send args and do other stuff.
+    # ------------------------------------------------------------------------
+
+    def def_modern_delegator(accessor, method, alias_ = method, args: \
+        { :before => [], :after => [] }, **kwd)
+
+      prefix, suffix, wrap = prepare_delegate(**kwd)
+      args = { :before => args } unless args.is_a?(Hash)
+      b = [args[:before]].flatten.compact.map(&:to_s).join(", ")
+      a = [args[ :after]].flatten.compact.map(&:to_s).join(", ")
+      b = b + ", " unless args[:before].nil? || args[:before].empty?
+      a = ", " + a unless args[ :after].nil? || args[ :after].empty?
+      alias_ = alias_.to_s.gsub(/\?$/, "") if suffix
+
+      class_eval delegate_debug(<<-STR), __FILE__, __LINE__ - 10
+        def #{alias_}#{suffix}(*args, &block)
+          #{wrap}(#{prefix}#{accessor}.send(
+            #{method.inspect}, #{b}*args#{a}, &block
+          ))
+
+        rescue Exception
+          if !Forwardable.debug && $@ && $@.respond_to?(:delete_if)
+            $@.delete_if do |source|
+              source =~ %r"#{Regexp.escape(__FILE__)}"o
+            end
+          end
+
+          raise
+        end
+      STR
+    end
+
+    # ------------------------------------------------------------------------
+    # Wraps around traditional delegation and modern delegation.
+    # ------------------------------------------------------------------------
+
+    def def_delegator(accessor, method, alias_ = method, **kwd)
+      kwd, alias_ = alias_, method if alias_.is_a?(Hash) && !kwd.any?
+
+      if alias_.is_a?(Hash) || !kwd.any?
+        Forwardable.instance_method(:def_delegator).bind(self) \
+          .call(accessor, method, alias_)
+
+      elsif !kwd[:type]
+        def_modern_delegator(
+          accessor, method, alias_, **kwd
+        )
+
+      else
+        raise ArgumentError, "Alias not supported." if alias_ != method
+        send("def_#{kwd[:type]}_delegator", accessor, method, **kwd.tap do |obj|
+          obj.delete(:type)
+        end)
+      end
+    end
+
+    # ------------------------------------------------------------------------
+    # Create multiple delegates at once.
+    # ------------------------------------------------------------------------
+
+    def def_delegators(accessor, *methods)
+      kwd = methods.shift if methods.first.is_a?(Hash)
+      kwd = methods.pop   if methods. last.is_a?(Hash)
+      kwd = {} unless kwd
+
+      methods.each do |method|
+        def_delegator accessor, method, **kwd
+      end
+    end
+
+    # ------------------------------------------------------------------------
+    # Prepares a delegate and it's few arguments.
+    # ------------------------------------------------------------------------
+
+    private
+    def prepare_delegate(wrap: nil, bool: false)
+      prefix = (bool == :reverse ? "!!!" : "!!") if bool
+      wrap   = "self.class.new" if wrap.is_a?(TrueClass)
+      suffix = "?" if bool
+
+      return [
+        prefix, suffix, wrap
+      ]
+    end
+
+    # ------------------------------------------------------------------------
+
+    private
+    def delegate_debug(str)
+      if Forwardable.debug && !Forwardable.debug.is_a?(TrueClass)
+        then Forwardable.debug.debug(
+          str
+        )
+
+      elsif Forwardable.debug
+        $stdout.puts(
+          "\n# ------\n\n", str
+        )
+      end
+
+      str
+    end
+  end
+end
diff --git a/lib/forwardable/extended/version.rb b/lib/forwardable/extended/version.rb
new file mode 100644
index 0000000..0639375
--- /dev/null
+++ b/lib/forwardable/extended/version.rb
@@ -0,0 +1,9 @@
+# Frozen-string-literal: true
+# Copyright: 2015-2016 Jordon Bedwell - MIT License
+# Encoding: utf-8
+
+module Forwardable
+  module Extended
+    VERSION = "2.6.0"
+  end
+end

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/ruby-forwardable-extended.git



More information about the Pkg-ruby-extras-commits mailing list