ruby_motion_query 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,15 +1,24 @@
1
1
  module RubyMotionQuery
2
2
  class RMQ
3
3
 
4
+ # Do not use
4
5
  def selectors=(value)
5
6
  @selected_dirty = true
6
7
  normalize_selectors(value)
7
8
  @_selectors = value
8
9
  end
10
+
11
+ # @return [Array] The selectors, which is what you used for the query
12
+ # @example
13
+ # (main)> rmq(UILabel, UIImageView).selectors
14
+ # => [UILabel, UIImageView]
9
15
  def selectors
10
16
  @_selectors
11
17
  end
12
18
 
19
+
20
+ protected
21
+
13
22
  def match_context(new_selectors)
14
23
  match(context_or_context_view, new_selectors)
15
24
  end
@@ -1,5 +1,7 @@
1
1
  module RubyMotionQuery
2
2
  class RMQ
3
+
4
+ # @return [RMQ]
3
5
  def stylesheet=(value)
4
6
  controller = view_controller
5
7
  unless value.is_a?(RubyMotionQuery::Stylesheet)
@@ -8,12 +10,15 @@ module RubyMotionQuery
8
10
  controller.rmq_data.stylesheet = value
9
11
  self
10
12
  end
13
+
14
+ # @return [String]
11
15
  def stylesheet
12
16
  @_stylesheet ||= begin
13
17
  self.view_controller.rmq_data.stylesheet if self.view_controller
14
18
  end
15
19
  end
16
20
 
21
+ # @return [RMQ]
17
22
  def apply_style(style_name)
18
23
  selected.each do |selected_view|
19
24
  apply_style_to_view selected_view, style_name
@@ -21,6 +26,7 @@ module RubyMotionQuery
21
26
  self
22
27
  end
23
28
 
29
+ # @return [RMQ]
24
30
  def style()
25
31
  selected.each do |view|
26
32
  yield(styler_for(view))
@@ -28,12 +34,14 @@ module RubyMotionQuery
28
34
  self
29
35
  end
30
36
 
37
+ # @return [RMQ]
31
38
  def reapply_styles
32
39
  selected.each do |selected_view|
33
40
  if style_name = selected_view.rmq_data.style_name
34
41
  apply_style_to_view selected_view, style_name
35
42
  end
36
43
  end
44
+ self
37
45
  end
38
46
 
39
47
  def styler_for(view)
@@ -41,7 +49,6 @@ module RubyMotionQuery
41
49
  # memoize this, however if you do that, make sure the dev doesn't retain them in a var
42
50
  custom_stylers(view) || begin
43
51
  case view
44
- # TODO, rename all the stylers to Styler::UILabel, etc
45
52
  when UILabel then Stylers::UILabelStyler.new(view)
46
53
  when UIButton then Stylers::UIButtonStyler.new(view)
47
54
  when UIImageView then Stylers::UIImageViewStyler.new(view)
@@ -2,13 +2,16 @@
2
2
  module RubyMotionQuery
3
3
  class RMQ
4
4
 
5
+ # @return [RMQ]
5
6
  def remove
6
7
  selected.each { |view| view.removeFromSuperview }
7
8
  self
8
9
  end
9
10
 
10
- def append(view_or_constant, style = nil)
11
+ # @return [RMQ]
12
+ def add_subview(view_or_constant, opts={})
11
13
  subviews_added = []
14
+ style = opts[:style]
12
15
  selected.each do |selected_view|
13
16
  if view_or_constant.is_a?(UIView)
14
17
  new_view = view_or_constant
@@ -17,7 +20,13 @@ module RubyMotionQuery
17
20
  end
18
21
 
19
22
  subviews_added << new_view
20
- selected_view.addSubview(new_view)
23
+ if at_index = opts[:at_index]
24
+ selected_view.insertSubview(new_view, atIndex: at_index)
25
+ elsif below_view = opts[:below_view]
26
+ selected_view.insertSubview(new_view, belowSubview: below_view)
27
+ else
28
+ selected_view.addSubview(new_view)
29
+ end
21
30
 
22
31
  if self.stylesheet
23
32
  apply_style_to_view(new_view, style) if style
@@ -26,10 +35,16 @@ module RubyMotionQuery
26
35
 
27
36
  RMQ.create_with_array_and_selectors(subviews_added, selectors, @context)
28
37
  end
29
- alias :add_subview :append
38
+ alias :insert :add_subview
39
+
40
+ # @return [RMQ]
41
+ def append(view_or_constant, style=nil)
42
+ add_subview(view_or_constant, style: style)
43
+ end
30
44
 
31
- def insert(view, at_index, style = nil)
32
- # TODO
45
+ # @return [RMQ]
46
+ def unshift(view_or_constant, style = nil)
47
+ add_subview view_or_constant, style: style, at_index: 0
33
48
  end
34
49
 
35
50
  protected
@@ -1,6 +1,7 @@
1
1
  module RubyMotionQuery
2
2
  class RMQ
3
3
 
4
+ # @return [RMQ]
4
5
  def tag(*tag_or_tags)
5
6
  selected.each do |view|
6
7
  view.rmq_data.tag(tag_or_tags)
@@ -1,7 +1,15 @@
1
1
  module RubyMotionQuery
2
2
  class RMQ
3
3
 
4
- # Most everthing uses filter to do its work
4
+ # Most everything uses filter to do its work. This is mostly used internally
5
+ # but you can use it too. Just pass a block that returns views, it will be
6
+ # called for every view that is *selected*
7
+ #
8
+ # @param return_array returns array not rmq: return_array: true
9
+ # @param uniq removes duplicate views: uniq: true
10
+ # @param limit limits the number of views *per selected view*: limit: true
11
+ #
12
+ # @return [RMQ]
5
13
  def filter(opts = {}, &block)
6
14
  out = []
7
15
  limit = opts[:limit]
@@ -25,10 +33,20 @@ module RubyMotionQuery
25
33
  end
26
34
  end
27
35
 
36
+ # @return [RMQ] All selected views
37
+ #
38
+ # @example
39
+ # rmq.all.log
28
40
  def all
29
41
  self.view_controller.rmq.find
30
42
  end
31
43
 
44
+ # @return [RMQ] A new rmq instance reducing selected views to those that match selectors provided
45
+ #
46
+ # @param selectors your selector
47
+ #
48
+ # @example
49
+ # rmq(UIImage).and(:some_tag).attr(image: nil)
32
50
  def and(*working_selectors)
33
51
  return self unless working_selectors
34
52
  normalize_selectors(working_selectors)
@@ -38,6 +56,13 @@ module RubyMotionQuery
38
56
  end
39
57
  end
40
58
 
59
+ # @return [RMQ] A new rmq instance removing selected views that match selectors provided
60
+ #
61
+ # @param selectors
62
+ #
63
+ # @example
64
+ # # Entire family of labels from siblings on down
65
+ # rmq(my_label).parent.find(UILabel).not(my_label).move(left: 10)
41
66
  def not(*working_selectors)
42
67
  return self unless working_selectors
43
68
  normalize_selectors(working_selectors)
@@ -47,10 +72,10 @@ module RubyMotionQuery
47
72
  end
48
73
  end
49
74
 
50
- # Return any selected that has a child that matches the selectors
51
- #def has
52
- #end
53
-
75
+ # @return [RMQ] A new rmq instance adding the context to the selected views
76
+ #
77
+ # @example
78
+ # rmq(my_view).children.and_self
54
79
  def and_self
55
80
  if @parent_rmq
56
81
  out = @parent_rmq.selected.dup
@@ -63,15 +88,30 @@ module RubyMotionQuery
63
88
  end
64
89
  alias :add_self :and_self
65
90
 
91
+ # @return [RMQ] The parent rmq instance
92
+ #
93
+ # @example
94
+ # rmq(test_view).find(UIImageView).tag(:foo).end.find(UILabel).tag(:bar)
66
95
  def end
67
96
  @parent_rmq || self
68
97
  end
69
98
 
99
+ # @return [RMQ] rmq instance selecting the parent of the selected view(s)
100
+ #
101
+ # @example
102
+ # rmq(my_view).parent.find(:delete_button).toggle_enabled
70
103
  def parent
71
104
  closest(UIView)
72
105
  end
73
106
  alias :superview :parent
74
107
 
108
+ # @return [RMQ] Instance selecting the parents, grandparents, etc, all the way up the tree
109
+ # of the selected view(s)
110
+ #
111
+ # @param selectors
112
+ #
113
+ # @example
114
+ # rmq(my_view).parents.log
75
115
  def parents(*working_selectors)
76
116
  normalize_selectors(working_selectors)
77
117
 
@@ -90,6 +130,14 @@ module RubyMotionQuery
90
130
  end
91
131
  alias :superviews :parents
92
132
 
133
+ # Get the descendants of each view in the current set of selected views, filtered by a selector(s)
134
+ #
135
+ # @return [RMQ] Instance selecting the children, grandchildren, etc of the selected view(s)
136
+ #
137
+ # @param selectors
138
+ #
139
+ # @example
140
+ # rmq(my_view).find(UIButton).show
93
141
  def find(*working_selectors)
94
142
  normalize_selectors(working_selectors)
95
143
 
@@ -107,6 +155,12 @@ module RubyMotionQuery
107
155
  end
108
156
  end
109
157
 
158
+ # @return [RMQ] Instance selecting the children of the selected view(s)
159
+ #
160
+ # @param selectors
161
+ #
162
+ # @example
163
+ # rmq(my_view).children.show
110
164
  def children(*working_selectors)
111
165
  normalize_selectors(working_selectors)
112
166
 
@@ -125,19 +179,65 @@ module RubyMotionQuery
125
179
  end
126
180
  alias :subviews :children
127
181
 
182
+
183
+ # @return [RMQ] Siblings of the selected view(s)
184
+ #
185
+ # @param selectors
186
+ #
187
+ # @example
188
+ # rmq(my_view).siblings.send(:poke)
128
189
  def siblings(*working_selectors)
129
190
  normalize_selectors(working_selectors)
130
191
 
131
192
  self.parent.children.not(selected)
132
193
  end
133
194
 
134
- # TODO
135
- #def next(*working_selectors)
136
- #end
137
- #def prev(*working_selectors)
138
- #end
195
+
196
+ # @return [RMQ] Sibling above to the selected view(s)
139
197
  #
198
+ # @param selectors
199
+ #
200
+ # @example
201
+ # rmq(my_view).next(UITextField).focus
202
+ def next(*working_selectors)
203
+ normalize_selectors(working_selectors)
204
+
205
+ filter do |view|
206
+ subs = view.superview.subviews
207
+ location = subs.index(view)
208
+ if location < subs.length - 1
209
+ subs[location + 1]
210
+ end
211
+ end
212
+ end
213
+
214
+ # @return [RMQ] Sibling below to the selected view(s)
215
+ #
216
+ # @param selectors
217
+ #
218
+ # @example
219
+ # rmq(my_view).prev(UITextField).focus
220
+ def prev(*working_selectors)
221
+ normalize_selectors(working_selectors)
140
222
 
223
+ filter do |view|
224
+ subs = view.superview.subviews
225
+ location = subs.index(view)
226
+ if location > 0
227
+ subs[location - 1]
228
+ end
229
+ end
230
+ end
231
+
232
+ # For each selected view, get the first view that matches the selector(s) by testing the view's parent and
233
+ # traversing up through its ancestors in the tree
234
+ #
235
+ # @return [RMQ] Instance selecting the first parent or grandparent or ancestor up the tree of the selected view(s)
236
+ #
237
+ # @param selectors
238
+ #
239
+ # @example
240
+ # rmq.closest(UIScrollView).get.setContentOffset([0,0])
141
241
  def closest(*working_selectors)
142
242
  normalize_selectors(working_selectors)
143
243
 
@@ -146,6 +246,10 @@ module RubyMotionQuery
146
246
  end
147
247
  end
148
248
 
249
+ # @return [UIViewController] Controller of this rmq instance
250
+ #
251
+ # @example
252
+ # rmq.view_controller
149
253
  def view_controller
150
254
  @_view_controller ||= begin
151
255
  if @context.is_a?(UIViewController)
@@ -156,6 +260,10 @@ module RubyMotionQuery
156
260
  end
157
261
  end
158
262
 
263
+ # @return [UIView] Root view of this rmq instance's controller
264
+ #
265
+ # @example
266
+ # rmq.root_view
159
267
  def root_view
160
268
  vc = self.view_controller
161
269
  if RMQ.is_blank?(vc)
@@ -2,6 +2,7 @@ module RubyMotionQuery
2
2
  class RMQ
3
3
 
4
4
  class << self
5
+ # @return [Boolean]
5
6
  def is_class?(o)
6
7
  # This line fails in spec, causes exit without message. It works fine in production
7
8
  #(o.class == Class) && (defined?(o) == 'constant')
@@ -12,6 +13,8 @@ module RubyMotionQuery
12
13
 
13
14
  # This is purposely not blank? as to not conflict with many libraries that
14
15
  # add .blank? to Object
16
+ #
17
+ # @return [Boolean]
15
18
  def is_blank?(o)
16
19
  if o.is_a?(RubyMotionQuery::RMQ)
17
20
  RubyMotionQuery::RMQ.is_blank?(o.to_a)
@@ -20,9 +23,8 @@ module RubyMotionQuery
20
23
  end
21
24
  end
22
25
 
23
-
24
- # Given a UIView, returns the UIViewController it is sitting in, or nil if it's not
25
- # sitting anywhere in particular
26
+ # @param view
27
+ # @return [UIViewController] The controller the view it is sitting in, or nil if it's not sitting anywhere in particular
26
28
  def controller_for_view(view)
27
29
  # Non-recursive for speed
28
30
  while view
@@ -38,6 +40,8 @@ module RubyMotionQuery
38
40
  end
39
41
 
40
42
  # Mainly used for console and logging
43
+ #
44
+ # @return [String]
41
45
  def view_to_s(view)
42
46
  out = "\n"
43
47
  out << " VIEW class:o #{view.class.name} object_id: #{view.object_id}\n"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_motion_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todd Werth
@@ -9,8 +9,36 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-30 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2013-08-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bacon
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ! '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ! '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
14
42
  description: RubyMotionQuery - RMQ - A light, nonpolluting, jQuery-like library for
15
43
  RubyMotion
16
44
  email: todd@infinitered.com
@@ -87,3 +115,4 @@ signing_key:
87
115
  specification_version: 4
88
116
  summary: RubyMotionQuery - RMQ
89
117
  test_files: []
118
+ has_rdoc: