コード例 #1
0
        public static object DeleteIf(RubyContext /*!*/ context, BlockParam block, object /*!*/ self)
        {
            PlatformAdaptationLayer pal       = context.DomainManager.Platform;
            IDictionary             variables = pal.GetEnvironmentVariables();

            if (variables.Count > 0 && block == null)
            {
                throw RubyExceptions.NoBlockGiven();
            }

            foreach (DictionaryEntry entry in variables)
            {
                MutableString key   = FrozenString(context, entry.Key);
                MutableString value = FrozenString(context, entry.Value);
                object        result;
                if (block.Yield(key, value, out result))
                {
                    return(result);
                }

                if (RubyOps.IsTrue(result))
                {
                    SetVariable(context, self, key, null);
                }
            }
            return(self);
        }
コード例 #2
0
        public static Hash /*!*/ ToHash(RubyContext /*!*/ context, object /*!*/ self)
        {
            PlatformAdaptationLayer pal = context.DomainManager.Platform;
            Hash result = new Hash(context);

            foreach (DictionaryEntry entry in pal.GetEnvironmentVariables())
            {
                result.Add(MutableString.Create(entry.Key.ToString()).Freeze(), MutableString.Create(entry.Value.ToString()).Freeze());
            }
            return(result);
        }
コード例 #3
0
        public static object Shift(RubyContext /*!*/ context, object /*!*/ self)
        {
            PlatformAdaptationLayer pal       = context.DomainManager.Platform;
            IDictionary             variables = pal.GetEnvironmentVariables();

            if (variables.Count == 0)
            {
                return(null);
            }
            RubyArray result = new RubyArray(2);

            foreach (DictionaryEntry entry in pal.GetEnvironmentVariables())
            {
                string key = entry.Key.ToString();
                result.Add(MutableString.Create(key).Freeze());
                result.Add(MutableString.Create(entry.Value.ToString()).Freeze());
                pal.SetEnvironmentVariable(key, null);
                break;
            }
            return(result);
        }
コード例 #4
0
        public static RubyArray /*!*/ Keys(RubyContext /*!*/ context, object /*!*/ self)
        {
            PlatformAdaptationLayer pal       = context.DomainManager.Platform;
            IDictionary             variables = pal.GetEnvironmentVariables();
            RubyArray result = new RubyArray(variables.Count);

            foreach (DictionaryEntry entry in variables)
            {
                result.Add(MutableString.Create(entry.Key.ToString()).Freeze());
            }
            return(result);
        }
コード例 #5
0
        public static MutableString Index(RubyContext /*!*/ context, object /*!*/ self, [DefaultProtocol, NotNull] MutableString /*!*/ value)
        {
            string strValue             = value.ConvertToString();
            PlatformAdaptationLayer pal = context.DomainManager.Platform;

            foreach (DictionaryEntry entry in pal.GetEnvironmentVariables())
            {
                if (strValue.Equals(entry.Value))
                {
                    return(FrozenString(context, entry.Key));
                }
            }
            return(null);
        }
コード例 #6
0
        public static object EachKey(RubyContext /*!*/ context, BlockParam block, object /*!*/ self)
        {
            PlatformAdaptationLayer pal       = context.DomainManager.Platform;
            IDictionary             variables = pal.GetEnvironmentVariables();

            if (variables.Count > 0 && block == null)
            {
                throw RubyExceptions.NoBlockGiven();
            }

            foreach (DictionaryEntry entry in variables)
            {
                MutableString name = FrozenString(context, entry.Key);
                object        result;
                if (block.Yield(name, out result))
                {
                    return(result);
                }
            }
            return(self);
        }
コード例 #7
0
        public static object EachValue(RubyContext /*!*/ context, BlockParam block, object /*!*/ self)
        {
            PlatformAdaptationLayer pal       = context.DomainManager.Platform;
            IDictionary             variables = pal.GetEnvironmentVariables();

            if (variables.Count > 0 && block == null)
            {
                throw RubyExceptions.NoBlockGiven();
            }

            foreach (DictionaryEntry entry in variables)
            {
                MutableString value = MutableString.Create(entry.Value.ToString()).Freeze();
                object        result;
                if (block.Yield(value, out result))
                {
                    return(result);
                }
            }
            return(self);
        }
コード例 #8
0
        public static bool HasValue(RubyContext /*!*/ context, object /*!*/ self, object value)
        {
            // MRI doesn't use CastToString conversion here:
            var strValue = value as MutableString;

            if (value == null)
            {
                return(false);
            }

            var clrStrValue             = strValue.ConvertToString();
            PlatformAdaptationLayer pal = context.DomainManager.Platform;

            foreach (DictionaryEntry entry in pal.GetEnvironmentVariables())
            {
                if (clrStrValue.Equals(entry.Value))
                {
                    return(true);
                }
            }
            return(false);
        }
コード例 #9
0
        public static object Each(RubyContext /*!*/ context, BlockParam block, object /*!*/ self)
        {
            PlatformAdaptationLayer pal = context.DomainManager.Platform;
            var variables = pal.GetEnvironmentVariables();

            if (variables.Count > 0 && block == null)
            {
                throw RubyExceptions.NoBlockGiven();
            }

            foreach (var entry in variables)
            {
                RubyArray array = new RubyArray(2);
                array.Add(FrozenString(context, entry.Key));
                array.Add(FrozenString(context, entry.Value));
                object result;
                if (block.Yield(array, out result))
                {
                    return(result);
                }
            }
            return(self);
        }
コード例 #10
0
        public static int Length(RubyContext /*!*/ context, object /*!*/ self)
        {
            PlatformAdaptationLayer pal = context.DomainManager.Platform;

            return(pal.GetEnvironmentVariables().Count);
        }