klepto 0.2.8 → 0.2.9

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.
data/README.md CHANGED
@@ -183,8 +183,8 @@ end
183
183
  * Add after(:all)
184
184
  * :if, :unless for as: (:collection|:resource) to. context should be captured node that block is run against
185
185
  * Access to hash from within a block (for bulk assignment of other attributes) ?
186
- * :default => value|Proc should be an option
187
186
  * config.allow_rescue_in_block #should exceptions in blocks be auto rescued with nil as the return value
187
+ * :default should be able to take a proc
188
188
 
189
189
  Async
190
190
  --------
@@ -26,46 +26,59 @@ module Klepto
26
26
  options[:syntax] ||= :css
27
27
  options[:match] ||= :first
28
28
  options[:attr] ||= nil
29
+ options[:default] ||= nil
29
30
  options[:limit] ||= nil
30
31
  selector = args.shift
31
32
 
32
33
  if options[:as] == :collection
34
+
33
35
  @_hash[meth] = []
34
36
  result = _context.all( options[:syntax], selector )
35
37
  options[:limit] ||= result.length
36
38
  result[0, options[:limit]].each do |ele|
37
39
  @_hash[meth].push Structure.build(ele, self, &block)
38
40
  end
41
+
39
42
  elsif options[:as] == :resource
43
+
40
44
  result = _context.first( options[:syntax], selector )
41
45
  @_hash[meth] = Structure.build(result, self, &block)
46
+
42
47
  elsif block
48
+
43
49
  result = selector ?
44
50
  _context.send( options[:match], options[:syntax], selector ) : _context
45
51
 
46
52
  if options[:match] == :all
53
+
47
54
  @_hash[meth] = []
48
55
  options[:limit] ||= result.length
49
56
  result[0, options[:limit]].each do |node|
50
57
  @_hash[meth] << block.call( node )
51
58
  end
59
+
52
60
  else
61
+
53
62
  begin
54
63
  @_hash[meth] = block.call( result )
55
64
  rescue Exception => ex
56
- @_hash[meth] = nil
65
+ @_hash[meth] = options[:default]
57
66
  end
58
67
  end
68
+
59
69
  else
60
70
  result = _context.send( options[:match], options[:syntax], selector )
71
+
61
72
  if options[:match] == :all
62
73
  @_hash[meth] = []
63
74
  options[:limit] ||= result.length
64
75
  result[0, options[:limit]].each do |node|
65
76
  @_hash[meth] << (node[options[:attr]] || node.try(:text))
66
77
  end
67
- else
78
+ elsif result
68
79
  @_hash[meth] = (result[options[:attr]] || result.try(:text))
80
+ else
81
+ @_hash[meth] = options[:default]
69
82
  end
70
83
  end
71
84
  end
@@ -1,3 +1,3 @@
1
1
  module Klepto
2
- VERSION = "0.2.8"
2
+ VERSION = "0.2.9"
3
3
  end
@@ -201,6 +201,19 @@ describe Klepto::Bot do
201
201
  end
202
202
  end
203
203
 
204
+ describe 'a page missing a selector' do
205
+ before(:each) do
206
+ @bot = Klepto::Bot.new("https://twitter.com/justinbieber"){
207
+ name 'h1.fullname'
208
+ username "span.screen-NOPE", default: "CHICKENS"
209
+ }
210
+ @structure = @bot.resources
211
+ end
212
+
213
+ it 'should have a sensible default for the structure' do
214
+ @structure.first[:username].should eq('CHICKENS')
215
+ end
216
+ end
204
217
 
205
218
  describe 'creating a bot with a node limit' do
206
219
  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.2.8
4
+ version: 0.2.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2013-04-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: poltergeist
16
- requirement: &70119515079920 !ruby/object:Gem::Requirement
16
+ requirement: &70208580722140 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - =
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.1.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70119515079920
24
+ version_requirements: *70208580722140
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: capybara
27
- requirement: &70119515077020 !ruby/object:Gem::Requirement
27
+ requirement: &70208580720340 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - =
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 2.0.2
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70119515077020
35
+ version_requirements: *70208580720340
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: nokogiri
38
- requirement: &70119515074920 !ruby/object:Gem::Requirement
38
+ requirement: &70208580719740 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.5.6
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70119515074920
46
+ version_requirements: *70208580719740
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activesupport
49
- requirement: &70119515073060 !ruby/object:Gem::Requirement
49
+ requirement: &70208580719040 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70119515073060
57
+ version_requirements: *70208580719040
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: multi_json
60
- requirement: &70119515069000 !ruby/object:Gem::Requirement
60
+ requirement: &70208580716800 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '1.0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70119515069000
68
+ version_requirements: *70208580716800
69
69
  description: Tearing up web pages into ActiveRecord resources
70
70
  email:
71
71
  - github@coryodaniel.com