class Calabash::Cucumber::UsageTracker

@!visibility private

Constants

CALABASH_ANDROID

@!visibility private

CALABASH_IOS

@!visibility private

DATA_VERSION

@!visibility private

OSX

@!visibility private

ROUTE

@!visibility private

WINDOWS

@!visibility private

Public Class Methods

disable_usage_tracking() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 21
def self.disable_usage_tracking
  @@track_usage = false
end
enable_usage_tracking() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 16
def self.enable_usage_tracking
  @@track_usage = true
end

Private Class Methods

track_usage?() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 79
def self.track_usage?
  @@track_usage && !self.xtc?
end
xtc?() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 84
def self.xtc?
  ENV["XAMARIN_TEST_CLOUD"] == "1"
end

Public Instance Methods

post_usage() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 26
def post_usage
  if Calabash::Cucumber::UsageTracker.track_usage? &&
      info_we_are_allowed_to_track != "none"
    begin
      HTTPClient.post(ROUTE, info)
    rescue => e
      message = %Q{ERROR: Could not post usage tracking information:#{$-0}#{e}}
      Calabash::Cucumber::log_to_file(message)
    end
  end
end
post_usage_async() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 39
def post_usage_async
  t = Thread.new do
    post_usage
  end

  m = Thread.current

  Thread.new do
    loop do
      unless t.alive?
        break
      end

      unless m.alive?
        t.kill
        break
      end
    end
  end
  nil
end

Private Instance Methods

host_os() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 107
def host_os
  @host_os ||= lambda do
    if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
      WINDOWS
    else
      `uname -s`.chomp
    end
  end.call
end
host_os_version() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 118
def host_os_version
  @host_os_version ||= lambda do
    if host_os == WINDOWS
      `ver`.chomp
    elsif host_os == OSX
      `sw_vers -productVersion`.chomp
    else
      `uname -r`.chomp
    end
  end.call
end
info() click to toggle source

@!visibility private

Collect a hash of usage info.

# File lib/calabash-cucumber/usage_tracker.rb, line 153
def info

  allowed = info_we_are_allowed_to_track

  if allowed == "none"
    raise RuntimeError,
      "This method should not be called if the user does not want to be tracked."
  end

  # Events only
  hash = {
    :event_name => "session",
    :data_version => DATA_VERSION,
    :distinct_id => user_id
  }

  if allowed == "system_info"
    hash.merge!(
      {
        :platform => CALABASH_IOS,
        :host_os => host_os,
        :host_os_version => host_os_version,
        :irb => irb?,
        :ruby_version => ruby_version,
        :used_bundle_exec => used_bundle_exec?,
        :used_cucumber => used_cucumber?,

        :version => Calabash::Cucumber::VERSION,
        :run_loop_version => RunLoop::VERSION,

        :xcode_version => RunLoop::Xcode.new.version,

        :ci => RunLoop::Environment.ci?,
        :jenkins => RunLoop::Environment.jenkins?,
        :travis => RunLoop::Environment.travis?,
        :circle_ci => RunLoop::Environment.circle_ci?,
        :teamcity => RunLoop::Environment.teamcity?,
        :gitlab => RunLoop::Environment.gitlab?
      }
    )
  end

  hash
end
info_we_are_allowed_to_track() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 74
def info_we_are_allowed_to_track
  preferences.usage_tracking
end
irb?() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 131
def irb?
  $0 == "irb"
end
preferences() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 64
def preferences
  Calabash::Cucumber::Preferences.new
end
ruby_version() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 136
def ruby_version
  @ruby_version ||= `#{RbConfig.ruby} -v`.chomp
end
used_bundle_exec?() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 141
def used_bundle_exec?
  Object.const_defined?(:Bundler)
end
used_cucumber?() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 146
def used_cucumber?
  Object.const_defined?(:Cucumber)
end
user_id() click to toggle source

@!visibility private

# File lib/calabash-cucumber/usage_tracker.rb, line 69
def user_id
  preferences.user_id
end