Module: TingYun::Support::LanguageSupport
- Extended by:
- LanguageSupport
- Included in:
- LanguageSupport
- Defined in:
- lib/ting_yun/support/language_support.rb
Constant Summary collapse
- @@forkable =
nil
Instance Method Summary collapse
- #broken_gc? ⇒ Boolean
- #bundled_gem?(gem_name) ⇒ Boolean
- #can_fork? ⇒ Boolean
- #constantize(const_name) ⇒ Object
- #gc_profiler_enabled? ⇒ Boolean
- #gc_profiler_usable? ⇒ Boolean
- #jruby? ⇒ Boolean
-
#needs_syck? ⇒ Boolean
need to use syck rather than psych when possible.
- #object_space_usable? ⇒ Boolean
- #ree? ⇒ Boolean
- #rubinius? ⇒ Boolean
- #supports_string_encodings? ⇒ Boolean
- #test_forkability ⇒ Object
- #using_engine?(engine) ⇒ Boolean
- #using_version?(version) ⇒ Boolean
- #with_cautious_gc ⇒ Object
- #with_disabled_gc ⇒ Object
Instance Method Details
#broken_gc? ⇒ Boolean
39 40 41 42 43 44 |
# File 'lib/ting_yun/support/language_support.rb', line 39 def broken_gc? LanguageSupport.using_version?('1.8.7') && RUBY_PATCHLEVEL < 348 && !LanguageSupport.using_engine?('jruby') && !LanguageSupport.using_engine?('rbx') end |
#bundled_gem?(gem_name) ⇒ Boolean
147 148 149 150 151 152 |
# File 'lib/ting_yun/support/language_support.rb', line 147 def bundled_gem?(gem_name) defined?(Bundler) && Bundler.rubygems.all_specs.map(&:name).include?(gem_name) rescue => e ::TingYun::Agent.logger.info("Could not determine if third party #{gem_name} gem is installed", e) false end |
#can_fork? ⇒ Boolean
17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/ting_yun/support/language_support.rb', line 17 def can_fork? # this is expensive to check, so we should only check once return @@forkable if @@forkable != nil if Process.respond_to?(:fork) # if this is not 1.9.2 or higher, we have to make sure @@forkable = ::RUBY_VERSION < '1.9.2' ? test_forkability : true else @@forkable = false end @@forkable end |
#constantize(const_name) ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/ting_yun/support/language_support.rb', line 116 def constantize(const_name) const_name.to_s.sub(/\A::/, '').split('::').inject(Object) do |namespace, name| begin result = namespace.const_get(name) # const_get looks up the inheritence chain, so if it's a class # in the constant make sure we found the one in our namespace. # # Can't help if the constant isn't a class... if result.is_a?(Module) expected_name = "#{namespace}::#{name}".gsub(/^Object::/, "") return unless expected_name == result.to_s end result rescue NameError nil end end end |
#gc_profiler_enabled? ⇒ Boolean
77 78 79 80 81 82 83 |
# File 'lib/ting_yun/support/language_support.rb', line 77 def gc_profiler_enabled? if gc_profiler_usable? && ::GC::Profiler.enabled? && !::TingYun::Agent.config[:disable_gc_profiler] true else false end end |
#gc_profiler_usable? ⇒ Boolean
69 70 71 72 73 74 75 |
# File 'lib/ting_yun/support/language_support.rb', line 69 def gc_profiler_usable? if defined?(::GC::Profiler) && !jruby? true else false end end |
#jruby? ⇒ Boolean
95 96 97 |
# File 'lib/ting_yun/support/language_support.rb', line 95 def jruby? defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby' end |
#needs_syck? ⇒ Boolean
need to use syck rather than psych when possible
10 11 12 13 |
# File 'lib/ting_yun/support/language_support.rb', line 10 def needs_syck? !LanguageSupport.using_engine?('jruby') && LanguageSupport.using_version?('1.9.2') end |
#object_space_usable? ⇒ Boolean
85 86 87 88 89 90 91 92 93 |
# File 'lib/ting_yun/support/language_support.rb', line 85 def object_space_usable? if defined?(::JRuby) && JRuby.respond_to?(:runtime) JRuby.runtime.is_object_space_enabled elsif defined?(::ObjectSpace) && !rubinius? true else false end end |
#ree? ⇒ Boolean
103 104 105 |
# File 'lib/ting_yun/support/language_support.rb', line 103 def ree? defined?(RUBY_DESCRIPTION) && RUBY_DESCRIPTION =~ /Ruby Enterprise Edition/ end |
#rubinius? ⇒ Boolean
99 100 101 |
# File 'lib/ting_yun/support/language_support.rb', line 99 def rubinius? defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx' end |
#supports_string_encodings? ⇒ Boolean
112 113 114 |
# File 'lib/ting_yun/support/language_support.rb', line 112 def supports_string_encodings? RUBY_VERSION >= '1.9.0' end |
#test_forkability ⇒ Object
137 138 139 140 141 142 143 144 145 |
# File 'lib/ting_yun/support/language_support.rb', line 137 def test_forkability child = Process.fork { exit! } # calling wait here doesn't seem like it should necessary, but it seems to # resolve some weird edge cases with resque forking. Process.wait child true rescue NotImplementedError false end |
#using_engine?(engine) ⇒ Boolean
31 32 33 34 35 36 37 |
# File 'lib/ting_yun/support/language_support.rb', line 31 def using_engine?(engine) if defined?(::RUBY_ENGINE) ::RUBY_ENGINE == engine else engine == 'ruby' end end |
#using_version?(version) ⇒ Boolean
107 108 109 110 |
# File 'lib/ting_yun/support/language_support.rb', line 107 def using_version?(version) numbers = version.split('.') numbers == ::RUBY_VERSION.split('.')[0, numbers.size] end |
#with_cautious_gc ⇒ Object
61 62 63 64 65 66 67 |
# File 'lib/ting_yun/support/language_support.rb', line 61 def with_cautious_gc if broken_gc? with_disabled_gc { yield } else yield end end |
#with_disabled_gc ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/ting_yun/support/language_support.rb', line 46 def with_disabled_gc if defined?(::GC) && ::GC.respond_to?(:disable) val = nil begin ::GC.disable val = yield ensure ::GC.enable end val else yield end end |