Class: Supermarket::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/supermarket/session.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSession

Returns a new instance of Session.



22
23
24
25
# File 'lib/supermarket/session.rb', line 22

def initialize
  @_session = MarketSession.new
  @_session.(config['login'], config['password'])
end

Instance Attribute Details

#_sessionObject (readonly)

Returns the value of attribute _session.



20
21
22
# File 'lib/supermarket/session.rb', line 20

def _session
  @_session
end

Instance Method Details

#all_comments(app_id, c = []) ⇒ Object

fetch all available comments



68
69
70
71
72
73
74
75
76
# File 'lib/supermarket/session.rb', line 68

def all_comments(app_id, c=[])
  comments_resp = comments(app_id, c.size, 10)
  c += comments_resp.comments_list.to_a
  if comments_resp.entriesCount == c.size
    c
  else
    all_comments(app_id, c)
  end
end

#comments(app_id, start = 0, count = 10) ⇒ Object

Raises:

  • (ArgumentError)


52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/supermarket/session.rb', line 52

def comments(app_id, start=0, count=10)
  raise ArgumentError, "need app id" unless app_id

  request = Market::CommentsRequest.newBuilder().
    setAppId(app_id).
    setStartIndex(start).
    setEntriesCount(count).build()

  if resp = execute(request)
    resp
  else
    raise ArgumentError, "request returned nil"
  end
end

#configObject



31
32
33
34
35
36
37
38
39
# File 'lib/supermarket/session.rb', line 31

def config
  @config ||= begin
    unless File.exists?(config_file)
      File.open(config_file, 'w') { |f| f << YAML.dump('login'=>'[email protected]', 'password'=>'secr3t') }
      raise "Android market config file not found. Please edit #{config_file}"
    end
    YAML.load_file(config_file)
  end
end

#config_fileObject



27
28
29
# File 'lib/supermarket/session.rb', line 27

def config_file
  File.join(ENV['HOME'], '.supermarket.yml')
end

#image(app_id, usage = Market::GetImageRequest::AppImageUsage::SCREENSHOT, image_id = '1') ⇒ Object



78
79
80
81
82
83
84
85
# File 'lib/supermarket/session.rb', line 78

def image(app_id, usage=Market::GetImageRequest::AppImageUsage::SCREENSHOT, image_id='1')
    request = Market::GetImageRequest.newBuilder().
      setAppId(pkg_to_app_id(app_id)).
      setImageUsage(usage).
      setImageId(image_id).build()

    execute(request)
end

#image_data(app_id, usage = Market::GetImageRequest::AppImageUsage::SCREENSHOT, image_id = '1') ⇒ Object



87
88
89
90
91
92
93
# File 'lib/supermarket/session.rb', line 87

def image_data(app_id, usage=Market::GetImageRequest::AppImageUsage::SCREENSHOT, image_id='1')
   if resp = image(app_id, usage, image_id)
   String.from_java_bytes(resp.getImageData().toByteArray())
  else
    []
   end
end

#pkg_to_app_id(package) ⇒ Object

Resolves a package name to a package id



96
97
98
99
100
101
102
103
104
# File 'lib/supermarket/session.rb', line 96

def pkg_to_app_id(package)
  return package if package =~ /\A-?\d+\Z/

  if app = search(package).getAppList().to_a.find { |app| app.packageName == package }
    app.getId()
  else
    raise ArgumentError, "could not resolve package #{package}"
  end
end

#search(query, extended = true, start = 0, count = 10) ⇒ Object



42
43
44
45
46
47
48
49
# File 'lib/supermarket/session.rb', line 42

def search(query, extended=true, start=0, count=10)
  request = Market::AppsRequest.newBuilder().
    setQuery(query).
    setStartIndex(start).
    setEntriesCount(count).
    setWithExtendedInfo(extended).build()
  execute(request)
end