klepto 0.7.2 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,24 @@
1
1
  module Klepto
2
2
  class Bot
3
- attr_reader :config
3
+ attr_reader :config, :vars
4
+
5
+ def set(hash)
6
+ @vars = vars.merge(hash)
7
+ end
8
+
9
+ def get(key)
10
+ val = vars[key]
11
+
12
+ if val.is_a? Proc
13
+ val = val.call(@browser.page)
14
+ set(key => val)
15
+ end
16
+ val
17
+ end
4
18
 
5
19
  def initialize(url=nil, &block)
6
20
  @config = Klepto::Config.new
21
+ @vars = {}
7
22
  @config.url url
8
23
  @queue = []
9
24
  @browser = Klepto::Browser.new
@@ -92,6 +107,7 @@ EOS
92
107
 
93
108
  def __structure(context)
94
109
  structure = Structure.new(context)
110
+ structure._bot = self
95
111
 
96
112
  # A queue of DSL instructions
97
113
  queue.each do |instruction|
@@ -9,6 +9,7 @@ module Klepto
9
9
  attr_reader :_parent
10
10
  attr_reader :_hash
11
11
  attr_reader :_context
12
+ attr_accessor :_bot
12
13
 
13
14
  def initialize(_context=nil, _parent=nil)
14
15
  Klepto.logger.debug("\tnew Structure (#{_parent}) -> (#{_context})")
@@ -32,6 +33,10 @@ module Klepto
32
33
  options[:parser] ||= nil
33
34
  selector = args.shift
34
35
 
36
+ if selector.is_a?(Proc)
37
+ selector = selector.call(_bot)
38
+ end
39
+
35
40
  if !block_given? && options[:parser]
36
41
  block = options[:parser].new
37
42
  end
@@ -1,3 +1,3 @@
1
1
  module Klepto
2
- VERSION = "0.7.2"
2
+ VERSION = "0.7.3"
3
3
  end
@@ -2,6 +2,48 @@ require 'spec_helper'
2
2
 
3
3
  describe Klepto::Bot do
4
4
  describe 'Klepto::Bot.new' do
5
+ describe 'vars' do
6
+ describe 'structuring with a variable' do
7
+ before(:each) do
8
+ @bot = Klepto::Bot.new("https://www.twitter.com/justinbieber"){
9
+ name 'h1.fullname'
10
+ set :status_id => lambda{|doc|
11
+ doc.first('.stream-items li.stream-item')['data-item-id'].to_i
12
+ }
13
+
14
+ got_the_node(lambda{|bot| "[data-item-id='#{bot.get(:status_id)}']"}) do |node|
15
+ true
16
+ end
17
+ get_the_id 'a' do |node|
18
+ get(:status_id)
19
+ end
20
+ }
21
+ end
22
+
23
+ it 'should have the variables' do
24
+ @bot.get(:status_id).should be_kind_of(Integer)
25
+ @bot.get(:status_id).should_not be(0)
26
+ end
27
+
28
+ it 'should be able to structure with the variable' do
29
+ @bot.structure[:get_the_id].should be @bot.get(:status_id)
30
+ @bot.structure[:got_the_node].should be true
31
+ end
32
+ end
33
+ describe 'setting a variable' do
34
+ before(:each) do
35
+ @bot = Klepto::Bot.new("https://www.twitter.com/justinbieber"){
36
+ name 'h1.fullname'
37
+ set :cool => 'chickens'
38
+ }
39
+ end
40
+
41
+ it 'should have the variables' do
42
+ @bot.get(:cool).should eq 'chickens'
43
+ end
44
+ end
45
+ end
46
+
5
47
  describe 'create a bot with a redirect' do
6
48
  describe 'that aborts on redirect' do
7
49
  before(:each) do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: klepto
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.7.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-15 00:00:00.000000000 Z
12
+ date: 2013-07-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: poltergeist