Class: Girbot::StepFoundation

Inherits:
Object
  • Object
show all
Defined in:
lib/girbot/step_foundation.rb

Direct Known Subclasses

Step

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(browser_holder) ⇒ StepFoundation

Returns a new instance of StepFoundation.



5
6
7
# File 'lib/girbot/step_foundation.rb', line 5

def initialize browser_holder
  @browser_holder = browser_holder
end

Instance Attribute Details

#browser_holderObject

Returns the value of attribute browser_holder.



3
4
5
# File 'lib/girbot/step_foundation.rb', line 3

def browser_holder
  @browser_holder
end

Class Method Details

.read(path) ⇒ Object



73
74
75
# File 'lib/girbot/step_foundation.rb', line 73

def self.read(path)
  JSON.parse(File.read(path), symbolize_names: true)
end

.run(options = {}) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/girbot/step_foundation.rb', line 77

def self.run(options={})
  options[:browser] = BrowserHolder.new if options[:browser].nil?
  options[:headless] = true if options[:headless].nil?
  options[:openBrowser] = true if options[:openBrowser].nil?
  options[:closeBrowser] = true if options[:closeBrowser].nil?
  options[:maximize] = false if options[:maximize].nil?

  step = self.new(options[:browser])
  if options[:headless]
    Headless.ly do
      step.take_whole_action(options, options[:openBrowser], options[:closeBrowser])
    end
  else
    step.take_whole_action(options, options[:openBrowser], options[:closeBrowser])
  end
end

Instance Method Details

#take_whole_action(options, openBrowser, closeBrowser) ⇒ Object



9
10
11
12
13
14
15
# File 'lib/girbot/step_foundation.rb', line 9

def take_whole_action options, openBrowser, closeBrowser
  @browser_holder.init if openBrowser
  maximize if options[:maximize]
  validate_browser_presence
  action(options)
  close if closeBrowser
end

#validate_auth(options) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/girbot/step_foundation.rb', line 49

def validate_auth(options)
  raise 'invalid options[:details]' unless options[:details].is_a?(Hash)
  raise 'invalid options[:details][:auth]' unless options[:details][:auth].is_a?(Hash)
  raise 'invalid options[:details][:auth][:user]' unless options[:details][:auth][:user].is_a?(String)
  raise 'invalid options[:details][:auth][:pass]' unless options[:details][:auth][:pass].is_a?(String)
  options[:details][:auth]
end

#validate_browser_presenceObject



17
18
19
# File 'lib/girbot/step_foundation.rb', line 17

def validate_browser_presence
  throw 'browser not set' if browser.nil?
end

#validate_card(options) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/girbot/step_foundation.rb', line 57

def validate_card(options)
  raise 'invalid options[:details]' unless options[:details].is_a?(Hash)
  raise 'invalid options[:details][:card]' unless options[:details][:card].is_a?(Hash)
  raise 'invalid options[:details][:card][:number]' unless options[:details][:card][:number].is_a?(String)
  raise 'invalid options[:details][:card][:name]' unless options[:details][:card][:name].is_a?(String)
  raise 'invalid options[:details][:card][:expYear]' unless options[:details][:card][:expYear].is_a?(String)
  raise 'invalid options[:details][:card][:expMonth]' unless options[:details][:card][:expMonth].is_a?(String)
  raise 'invalid options[:details][:card][:ccv]' unless options[:details][:card][:ccv].is_a?(String)
  # TODO: deeper validation
  # * number is only digits and correct length
  # * expYear is a year
  # * expMonth is a month
  # * ccv is only digits
  options[:details][:card]
end

#wait_for_smsObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/girbot/step_foundation.rb', line 21

def wait_for_sms
  auth_code = nil
  server = TCPServer.new('0.0.0.0', 4125)
  puts 'Listenting on 0.0.0.0:4125'
  loop do
    socket = server.accept

    request = socket.gets

    response = "{}\n"
    socket.print "HTTP/1.1 200 OK\r\n" +
      "Content-Type: text/plain\r\n" +
      "Content-Length: #{response.bytesize}\r\n" +
      "Connection: close\r\n"

      socket.print "\r\n"
      socket.print response
      socket.close

      if request.start_with?('GET /sms?authCode=')
        STDERR.puts request
        auth_code = request.split('=').last.split(' ').first
        break
      end
  end
  auth_code
end