Beispiel #1
0
        public static Hash /*!*/ CreateSubclass(ConversionStorage <IList> /*!*/ toAry, RubyClass /*!*/ self, [NotNull] IList /*!*/ list)
        {
            Hash result    = Hash.CreateInstance(self);
            var  toArySite = toAry.GetSite(TryConvertToArrayAction.Make(toAry.Context));

            foreach (object item in list)
            {
                IList pair = toArySite.Target(toArySite, item);
                if (pair != null && pair.Count >= 1 && pair.Count <= 2)
                {
                    RubyUtils.SetHashElement(self.Context, result, pair[0], (pair.Count == 2) ? pair[1] : null);
                }
            }
            return(result);
        }
Beispiel #2
0
        public static Hash /*!*/ CreateSubclass(ConversionStorage <IDictionary <object, object> > /*!*/ toHash, ConversionStorage <IList> /*!*/ toAry,
                                                RubyClass /*!*/ self, object listOrHash)
        {
            var toHashSite = toHash.GetSite(TryConvertToHashAction.Make(toHash.Context));
            var hash       = toHashSite.Target(toHashSite, listOrHash);

            if (hash != null)
            {
                return(CreateSubclass(self, hash));
            }

            var toArySite = toAry.GetSite(TryConvertToArrayAction.Make(toAry.Context));
            var array     = toArySite.Target(toArySite, listOrHash);

            if (array != null)
            {
                return(CreateSubclass(toAry, self, array));
            }

            throw RubyExceptions.CreateArgumentError("odd number of arguments for Hash");
        }
Beispiel #3
0
        public static IList TryCastToArray(ConversionStorage <IList> /*!*/ arrayTryCast, object obj)
        {
            var site = arrayTryCast.GetSite(TryConvertToArrayAction.Make(arrayTryCast.Context));

            return(site.Target(site, obj));
        }
Beispiel #4
0
        public static IList TryConvert(ConversionStorage <IList> /*!*/ toAry, RubyClass /*!*/ self, object obj)
        {
            var site = toAry.GetSite(TryConvertToArrayAction.Make(toAry.Context));

            return(site.Target(site, obj));
        }