nakajima-elementor 0.0.3 → 0.0.4
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/lib/elementor/element_set.rb +38 -2
- data/lib/elementor/result.rb +10 -3
- data/lib/elementor/spec.rb +7 -1
- metadata +1 -1
@@ -1,11 +1,47 @@
|
|
1
1
|
module Elementor
|
2
2
|
class ElementSet < Array
|
3
|
-
|
4
|
-
|
3
|
+
attr_accessor :result, :selector
|
4
|
+
|
5
|
+
def with_text(matcher)
|
6
|
+
filter do |item|
|
7
|
+
case matcher
|
8
|
+
when Regexp then item.text =~ matcher
|
9
|
+
when String then item.text.include?(matcher)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def with_attrs(options={})
|
15
|
+
filter do |item|
|
16
|
+
options.all? do |key, value|
|
17
|
+
case value
|
18
|
+
when Regexp then item[key.to_s] =~ value
|
19
|
+
when String then item[key.to_s] == value
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
5
23
|
end
|
6
24
|
|
7
25
|
def inspect
|
8
26
|
map(&:text).inspect
|
9
27
|
end
|
28
|
+
|
29
|
+
def method_missing(sym, *args, &block)
|
30
|
+
result.try(sym, doc, *args) || super
|
31
|
+
end
|
32
|
+
|
33
|
+
def respond_to?(sym)
|
34
|
+
result.respond_to?(sym) || super
|
35
|
+
end
|
36
|
+
|
37
|
+
def doc
|
38
|
+
result.doc.search(selector)
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def filter(&block)
|
44
|
+
replace(select(&block)) ; return self
|
45
|
+
end
|
10
46
|
end
|
11
47
|
end
|
data/lib/elementor/result.rb
CHANGED
@@ -33,13 +33,20 @@ module Elementor
|
|
33
33
|
|
34
34
|
def define_elements!
|
35
35
|
element_names.each do |name, selector|
|
36
|
-
meta_def(name) do |*
|
37
|
-
set = ElementSet.new(
|
38
|
-
|
36
|
+
meta_def(name) do |*filters|
|
37
|
+
set = ElementSet.new scope(filters).search(selector)
|
38
|
+
set.result = self
|
39
|
+
set.selector = selector
|
40
|
+
filters.empty? ? set : filters.inject(set) { |result, fn| fn[result] }
|
39
41
|
end
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
45
|
+
def scope(filters)
|
46
|
+
scope = filters.first.is_a?(Proc) ? nil : filters.shift
|
47
|
+
scope || doc
|
48
|
+
end
|
49
|
+
|
43
50
|
def element_names
|
44
51
|
@element_names ||= { }
|
45
52
|
end
|
data/lib/elementor/spec.rb
CHANGED
@@ -2,10 +2,16 @@ module Spec
|
|
2
2
|
module Matchers
|
3
3
|
class Have
|
4
4
|
def with_text(*args)
|
5
|
-
@args
|
5
|
+
@args ||= []
|
6
6
|
@args << proc { |set| set.with_text(*args) }
|
7
7
|
self
|
8
8
|
end
|
9
|
+
|
10
|
+
def with_attrs(options={})
|
11
|
+
@args ||= []
|
12
|
+
@args << proc { |set| set.with_attrs(options) }
|
13
|
+
self
|
14
|
+
end
|
9
15
|
end
|
10
16
|
end
|
11
17
|
end
|