redpotion 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3679810174cad62212f3453c6cbe5f7611db602c
4
- data.tar.gz: 59c97b1182042a1bf47fc6b6ecb4736466ee6469
3
+ metadata.gz: d02a5ebf83ee813131955bcb138df65d3c0d46df
4
+ data.tar.gz: 14409d48ae7de7f9a20cdd14205f0e3acc84f5bc
5
5
  SHA512:
6
- metadata.gz: ac377c93f8b763bef9dbabf3e4de8f2b3ad6a7611246316e2d824ad515a2e8b857e4546ad09d16766cc64b4fcc6d5416c0b8ab93d446ed4c5c1d3d20d2e3b8e0
7
- data.tar.gz: fd9d7aa314eb3a8470385d3db426ffe7168d07eb68063016a3406d62b01ff4714fdcfdfcd5d1891685e664b1743bafb7d7e6b032036eed0bd06bc0a122051308
6
+ metadata.gz: bdd6442f259a64cdc1a948dab9039d31378b0a264aaf532c663eddd9545ae869ba9ee8e95393bdf4263dad7244ef5fe05fa02e1ddf97b245cfae224237a1e487
7
+ data.tar.gz: 3e8249d43d27b7af83dab08bcd0941f4f5aacb925d12fa73f54eb5cb5522146dc2a34e3b6d804103585686d7378a37fe36faa4015e27a6c43fae130a677f8ac8
data/README.md CHANGED
@@ -60,17 +60,6 @@ add it to your `Gemfile`:
60
60
 
61
61
  - `gem 'redpotion'`
62
62
 
63
-
64
- ## Contributing
65
-
66
- 0. Create an issue in GitHub to make sure your PR will be accepted.
67
- 1. Fork it
68
- 2. Create your feature branch (`git checkout -b my-new-feature`)
69
- 3. Commit your changes (`git commit -am 'Add some feature'`)
70
- 4. Push to the branch (`git push origin my-new-feature`)
71
- 5. Create new Pull Request
72
-
73
-
74
63
  <br />
75
64
 
76
65
  ## Read the documentation at [docs.redpotion.org](http://docs.redpotion.org)
data/bin/potion CHANGED
@@ -3,32 +3,31 @@
3
3
  require "erb"
4
4
  require "rubygems"
5
5
  require 'open-uri'
6
-
7
- $:.unshift(File.join(File.dirname(__FILE__), "/../lib/project"))
8
- require "version"
6
+ require_relative "../lib/project/version"
9
7
 
10
8
  class PotionCommandLine
11
9
  HELP_TEXT = %{ potion version #{RedPotion::VERSION}
12
10
 
13
11
  Some things you can do with the potion command:
14
12
 
15
- > potion create my_new_app
16
- > potion create my_new_app --skip-cdq # Setup application without CDQ
13
+ > potion new my_new_app
14
+ > potion new my_new_app --skip-cdq # Setup application without CDQ
15
+ > potion new my_new_app --skip-afmotion # Setup application without afmotion
17
16
 
18
- > potion create model foo
19
- > potion create screen foo
20
- > potion create table_screen foo
21
- > potion create table_screen_cell bar_cell
22
- > potion create metal_table_screen foo
23
- > potion create collection_view_screen
24
- > potion create view bar
25
- > potion create shared some_class_used_app_wide
26
- > potion create lib some_class_used_by_multiple_apps
17
+ > potion g model foo
18
+ > potion g screen foo
19
+ > potion g table_screen foo
20
+ > potion g table_screen_cell bar_cell
21
+ > potion g metal_table_screen foo
22
+ > potion g collection_view_screen
23
+ > potion g view bar
24
+ > potion g shared some_class_used_app_wide
25
+ > potion g lib some_class_used_by_multiple_apps
27
26
 
28
27
  You can still create controllers, but you should create screens instead
29
- > potion create controller foos
30
- > potion create collection_view_controller foos
31
- > potion create table_view_controller bars
28
+ > potion g controller foos
29
+ > potion g collection_view_controller foos
30
+ > potion g table_view_controller bars
32
31
 
33
32
  You can remove CDQ or afmotion if your project does not use it
34
33
  > potion remove cdq
@@ -59,50 +58,53 @@ class PotionCommandLine
59
58
  :table_view_controller
60
59
  ]
61
60
 
62
-
63
- def create(template_or_app_name, *options)
64
- if template_or_app_name.nil?
65
- puts "potion - Invalid command, try adding an application name or template name."
61
+ def new(app_name, *options)
62
+ if app_name.nil?
63
+ puts "potion - Invalid command, try adding an application name. (ex: potion new my_app)\n"
66
64
  return
67
65
  end
68
66
 
69
67
  options.compact!
68
+ #ensure_template_dir
69
+ create_app(app_name, options)
70
+ end
71
+
72
+ def generate(template, *options)
73
+ name = options.slice!(0)
74
+ if VALID_CREATE_TYPES.include?(template.to_sym)
75
+ insert_from_template(template, name)
76
+ else
77
+ puts "potion - Invalid command, do something like this: potion g controller my_controller\n"
78
+ end
79
+ end
80
+
81
+ def create(template_or_app_name, *options)
70
82
  # Dry Run option - TODO - change this to --dry_run to streamline
71
83
  if options.first == 'dry_run'
72
84
  @dry_run = true
73
85
  options.slice!(0)
74
86
  end
75
87
 
76
- if options.count > 0
77
- unless options.first.include?('--')
78
- name = options.slice!(0)
79
- unless VALID_CREATE_TYPES.include?(template_or_app_name.to_sym)
80
- puts "potion - Invalid command, do something like this: potion create controller my_controller\n"
81
- return
82
- end
83
- end
84
- end
85
-
86
- if name
87
- insert_from_template(template_or_app_name, name)
88
+ if options.first && options.first.include?('--')
89
+ new(template_or_app_name, *options)
88
90
  else
89
- #ensure_template_dir
90
- create_app(template_or_app_name)
91
- options.each do |option|
92
- if SKIP_FLAGS.include?(option)
93
- Dir.chdir("./#{template_or_app_name}")
94
- remove(option.split('-').last, true)
95
- Dir.chdir('..')
96
- end
97
- end
91
+ generate(template_or_app_name, *options)
98
92
  end
99
93
  end
100
94
 
101
- def create_app(app_name)
95
+ def create_app(app_name, options)
102
96
  puts ' Creating app'
103
97
 
104
98
  `motion create --template=https://github.com/infinitered/redpotion-template.git #{app_name}`
105
99
 
100
+ options.each do |option|
101
+ if SKIP_FLAGS.include?(option)
102
+ Dir.chdir("./#{app_name}")
103
+ remove(option.split('-').last, true)
104
+ Dir.chdir('..')
105
+ end
106
+ end
107
+
106
108
  ["bundle", "rake pod:install"].each do |command|
107
109
  puts "Running #{command}..."
108
110
 
@@ -230,6 +232,7 @@ class PotionCommandLine
230
232
  remove_lines('Rakefile', /schema:build/, show_output)
231
233
  File.delete('schemas/0001_initial.rb') if File.exists?('schemas/0001_initial.rb')
232
234
  File.delete('resources/cdq.yml') if File.exists?('resources/cdq.yml')
235
+ File.delete('spec/helpers/cdq.rb') if File.exists?('spec/helpers/cdq.rb')
233
236
  Dir.delete('schemas') if Dir.exists?('schemas')
234
237
  when 'afmotion'
235
238
  remove_lines('Gemfile', /gem ('|")afmotion('|")/, show_output)
@@ -269,7 +272,12 @@ action = ARGV[0]
269
272
  query = ARGV[1]
270
273
 
271
274
  case action
275
+ when 'new'
276
+ PotionCommandLine.new(ARGV[1], ARGV[2], ARGV[3])
277
+ when 'g', 'generate'
278
+ PotionCommandLine.generate(ARGV[1], ARGV[2], ARGV[3])
272
279
  when 'create'
280
+ # create provided as an alias for backwards compatibility
273
281
  PotionCommandLine.create(ARGV[1], ARGV[2], ARGV[3])
274
282
  when 'rmq_docs'
275
283
  if query
@@ -7,6 +7,10 @@ class Object
7
7
  rmq.device
8
8
  end
9
9
 
10
+ def blank?
11
+ self.respond_to?(:empty?) ? self.empty? : !self
12
+ end
13
+
10
14
  def find(*args) # Do not alias this, strange bugs happen where classes don't have methods
11
15
  rmq(*args)
12
16
  end
@@ -0,0 +1,17 @@
1
+ class UICollectionViewCell
2
+ # You can use either rmq_build or on_load, not both. If you have both, on_load will be ignored,
3
+ # you can however call it from rmq_build. They are the same, on_load follows the ProMotion style
4
+ # and is recommended.
5
+ def rmq_build
6
+ self.on_load
7
+ end
8
+
9
+ def reused
10
+ @reused
11
+ end
12
+
13
+ def prepareForReuse
14
+ super
15
+ @reused = true
16
+ end
17
+ end
@@ -1,13 +1,9 @@
1
1
  class UIColor
2
2
  def with(options)
3
- begin
4
- r, g, b, a = Pointer.new('d'), Pointer.new('d'), Pointer.new('d'), Pointer.new('d')
5
- self.getRed(r, green: g, blue: b, alpha: a)
6
- rescue
7
- r, g, b, a = Pointer.new('f'), Pointer.new('f'), Pointer.new('f'), Pointer.new('f')
8
- self.getRed(r, green: g, blue: b, alpha: a)
9
- end
10
-
3
+ type = CGSize.type[/(f|d)/]
4
+ r, g, b, a = Pointer.new(type), Pointer.new(type), Pointer.new(type), Pointer.new(type)
5
+ self.getRed(r, green: g, blue: b, alpha: a)
6
+
11
7
  r = options[:r] || options[:red] || r.value
12
8
  g = options[:g] || options[:green] || g.value
13
9
  b = options[:b] || options[:blue] || b.value
@@ -0,0 +1,8 @@
1
+ class UITableViewCell
2
+ # You can use either rmq_build or on_load, not both. If you have both, on_load will be ignored,
3
+ # you can however call it from rmq_build. They are the same, on_load follows the ProMotion style
4
+ # and is recommended.
5
+ def rmq_build
6
+ self.on_load
7
+ end
8
+ end
@@ -0,0 +1,193 @@
1
+ module ProMotion
2
+ module DataTable
3
+ include TableClassMethods
4
+ include ProMotion::Styling
5
+ include ProMotion::Table
6
+ include ProMotion::TableBuilder
7
+ include ProMotion::TableDataBuilder
8
+ include ProMotion::Table::Utils
9
+
10
+ include ProMotion::Table::Searchable
11
+ include ProMotion::Table::Refreshable
12
+ include ProMotion::Table::Indexable
13
+ include ProMotion::Table::Longpressable
14
+
15
+ def table_view
16
+ self.view
17
+ end
18
+
19
+ # This has to be defined in order to inherit everything from TableScreen
20
+ def table_data
21
+ [{cells:[]}]
22
+ end
23
+
24
+ def screen_setup
25
+ set_up_fetch_controller
26
+
27
+ set_up_header_footer_views
28
+ set_up_searchable
29
+ set_up_refreshable
30
+ set_up_longpressable
31
+ set_up_row_height
32
+ end
33
+
34
+ def set_up_fetch_controller
35
+ error_ptr = Pointer.new(:object)
36
+ fetch_controller.delegate = self
37
+
38
+ unless fetch_controller.performFetch(error_ptr)
39
+ raise "Error performing fetch: #{error_ptr[2].description}"
40
+ end
41
+ end
42
+
43
+ def update_table_data(notification = nil)
44
+ if notification.nil?
45
+ table_view.reloadData
46
+ else
47
+ Dispatch::Queue.main.async do
48
+ fetch_controller.managedObjectContext.mergeChangesFromContextDidSaveNotification(notification)
49
+ end
50
+ end
51
+ end
52
+
53
+ def fetch_scope
54
+ @_fetch_scope ||= begin
55
+ if respond_to?(:model_query)
56
+ data_with_scope = model_query
57
+ else
58
+ data_with_scope = data_model.send(data_scope)
59
+ end
60
+
61
+ if data_with_scope.sort_descriptors.empty?
62
+ # Try to be smart about how we sort things if a sort descriptor doesn't exist
63
+ attributes = data_model.send(:attribute_names)
64
+ sort_attribute = nil
65
+ [:updated_at, :created_at, :id].each do |att|
66
+ sort_attribute ||= att if attributes.include?(att.to_s)
67
+ end
68
+
69
+ if sort_attribute
70
+ mp "The `#{data_model}` model scope `#{data_scope}` needs a sort descriptor. Add sort_by(:property) to your scope. Currently sorting by :#{sort_attribute}.", force_color: :yellow
71
+ data_model.send(data_scope).sort_by(sort_attribute)
72
+ else
73
+ # This is where the application says goodbye and dies in a fiery crash.
74
+ mp "The `#{data_model}` model scope `#{data_scope}` needs a sort descriptor. Add sort_by(:property) to your scope.", force_color: :yellow
75
+ end
76
+ else
77
+ data_with_scope
78
+ end
79
+ end
80
+ end
81
+
82
+ def fetch_controller
83
+ if searching?
84
+ search_fetch_controller
85
+ else
86
+ @fetch_controller ||= NSFetchedResultsController.alloc.initWithFetchRequest(
87
+ fetch_scope.fetch_request,
88
+ managedObjectContext: fetch_scope.context,
89
+ sectionNameKeyPath: nil,
90
+ cacheName: nil
91
+ )
92
+ end
93
+ end
94
+
95
+ def on_cell_created(cell, data)
96
+ # Do not call super here
97
+ self.rmq.build(cell)
98
+ end
99
+
100
+ def cell_at(args = {})
101
+ index_path = args.is_a?(Hash) ? args[:index_path] : args
102
+ c = object_at_index(index_path).cell
103
+ set_data_cell_defaults(c)
104
+ end
105
+
106
+ def object_at_index(i)
107
+ fetch_controller.objectAtIndexPath(i)
108
+ end
109
+
110
+ def data_model
111
+ self.class.data_model
112
+ end
113
+
114
+ def data_scope
115
+ self.class.data_scope
116
+ end
117
+
118
+ def searching?
119
+ @_data_table_searching || false
120
+ end
121
+
122
+ def search_string
123
+ @_data_table_search_string
124
+ end
125
+
126
+ def original_search_string
127
+ search_string
128
+ end
129
+
130
+ def self.included(base)
131
+ base.extend(TableClassMethods)
132
+ end
133
+
134
+ # UITableViewDelegate methods
135
+ def numberOfSectionsInTableView(_)
136
+ fetch_controller.sections.count
137
+ end
138
+
139
+ def tableView(table_view, numberOfRowsInSection: section)
140
+ fetch_controller.sections[section].numberOfObjects
141
+ end
142
+
143
+ def tableView(table_view, didSelectRowAtIndexPath: index_path)
144
+ data_cell = cell_at(index_path: index_path)
145
+ table_view.deselectRowAtIndexPath(index_path, animated: true) unless data_cell[:keep_selection] == true
146
+ trigger_action(data_cell[:action], data_cell[:arguments], index_path) if data_cell[:action]
147
+ end
148
+
149
+ def tableView(_, cellForRowAtIndexPath: index_path)
150
+ params = index_path_to_section_index(index_path: index_path)
151
+ data_cell = cell_at(index_path: index_path)
152
+ return self.rmq.create(UITableViewCell) unless data_cell
153
+
154
+ create_table_cell(data_cell)
155
+ end
156
+
157
+ def tableView(_, willDisplayCell: table_cell, forRowAtIndexPath: index_path)
158
+ data_cell = cell_at(index_path: index_path)
159
+ table_cell.send(:will_display) if table_cell.respond_to?(:will_display)
160
+ table_cell.send(:restyle!) if table_cell.respond_to?(:restyle!) # Teacup compatibility
161
+ end
162
+
163
+ def tableView(table_view, heightForRowAtIndexPath: index_path)
164
+ (object_at_index(index_path).cell[:height] || table_view.rowHeight).to_f
165
+ end
166
+
167
+ def controllerWillChangeContent(controller)
168
+ # TODO - we should update the search results table when a new record is added
169
+ # or deleted or changed. For now, when the data changes, the search doesn't
170
+ # update. Closing the search will update the data and then searching again
171
+ # will show the new or changed content.
172
+ table_view.beginUpdates unless searching?
173
+ end
174
+
175
+ def controller(controller, didChangeObject: task, atIndexPath: index_path, forChangeType: change_type, newIndexPath: new_index_path)
176
+ unless searching?
177
+ case change_type
178
+ when NSFetchedResultsChangeInsert
179
+ table_view.insertRowsAtIndexPaths([new_index_path], withRowAnimation: UITableViewRowAnimationAutomatic)
180
+ when NSFetchedResultsChangeDelete
181
+ table_view.deleteRowsAtIndexPaths([index_path], withRowAnimation: UITableViewRowAnimationAutomatic)
182
+ when NSFetchedResultsChangeUpdate
183
+ table_view.reloadRowsAtIndexPaths([index_path], withRowAnimation: UITableViewRowAnimationAutomatic)
184
+ end
185
+ end
186
+ end
187
+
188
+ def controllerDidChangeContent(controller)
189
+ table_view.endUpdates unless searching?
190
+ end
191
+
192
+ end
193
+ end
@@ -1,39 +1,28 @@
1
1
  module ProMotion
2
- class DataTableScreen < TableScreen
2
+ class DataTableScreen < TableViewController
3
+ include ProMotion::ScreenModule
4
+ include ProMotion::DataTable
5
+
3
6
  class << self
4
- def model(value, scope=nil)
7
+ def model(value, opts = {})
5
8
  if value.method_defined?(:cell)
6
- @data_model = value
7
- @data_scope = scope || :all
9
+ @opts = {
10
+ model: value,
11
+ scope: :all,
12
+ }.merge(opts)
8
13
  else
9
14
  raise "#{value} must define the cell method"
10
15
  end
11
16
  end
12
17
 
13
- def data_model; @data_model; end
14
- def data_scope; @data_scope; end
15
- end
16
-
17
- def table_data
18
- [{
19
- cells: cell_data
20
- }]
21
- end
22
-
23
- def cell_data
24
- return [] if data_model.nil?
25
-
26
- data_model.send(data_scope).collect(&:cell)
27
- end
28
-
29
- private
18
+ def data_model
19
+ @opts[:model]
20
+ end
30
21
 
31
- def data_model
32
- self.class.data_model
22
+ def data_scope
23
+ @opts[:scope]
24
+ end
33
25
  end
34
26
 
35
- def data_scope
36
- self.class.data_scope
37
- end
38
27
  end
39
28
  end
@@ -0,0 +1,15 @@
1
+ class DataTableSeachDelegate
2
+ attr_accessor :parent
3
+
4
+ def searchDisplayController(controller, shouldReloadTableForSearchString:search_string)
5
+ parent.dt_searchDisplayController(controller, shouldReloadTableForSearchString:search_string)
6
+ end
7
+
8
+ def searchDisplayControllerWillEndSearch(controller)
9
+ parent.dt_searchDisplayControllerWillEndSearch(controller)
10
+ end
11
+
12
+ def searchDisplayControllerWillBeginSearch(controller)
13
+ parent.dt_searchDisplayControllerWillBeginSearch(controller)
14
+ end
15
+ end
@@ -0,0 +1,89 @@
1
+ module ProMotion
2
+ module Table
3
+ module Searchable
4
+
5
+ # Replace this method so that we can gather the predicate fields for DataTableScreen searchable
6
+ alias_method :old_set_searchable_param_defaults, :set_searchable_param_defaults
7
+ def set_searchable_param_defaults(params)
8
+ all_params = old_set_searchable_param_defaults(params)
9
+
10
+ if self.is_a?(ProMotion::DataTableScreen)
11
+ if params[:search_bar][:fields].nil?
12
+ raise "ERROR: You must specify fields:[:example] for your searchable DataTableScreen. It should be an array of fields you want searched in CDQ."
13
+ else
14
+ @data_table_predicate_fields = all_params[:search_bar][:fields]
15
+ end
16
+ end
17
+
18
+ all_params[:delegate] = search_delegate
19
+ all_params
20
+ end
21
+
22
+ def search_fetch_controller
23
+ @_search_fetch_controller ||= new_frc_with_search(search_string)
24
+ end
25
+
26
+ def new_frc_with_search(search_string)
27
+ # Create the predicate from the predetermined fetch scope.
28
+ where = @data_table_predicate_fields.map{|f| "#{f} CONTAINS[cd] \"#{search_string}\"" }.join(" OR ")
29
+ search_scope = fetch_scope.where(where)
30
+
31
+ # Create the search FRC with the predicate and set delegate
32
+ search = NSFetchedResultsController.alloc.initWithFetchRequest(
33
+ search_scope.fetch_request,
34
+ managedObjectContext: search_scope.context,
35
+ sectionNameKeyPath: nil,
36
+ cacheName: nil
37
+ )
38
+ search.delegate = search_delegate
39
+
40
+ # Perform the fetch
41
+ error_ptr = Pointer.new(:object)
42
+ unless search.performFetch(error_ptr)
43
+ raise "Error performing fetch: #{error_ptr[2].description}"
44
+ end
45
+
46
+ search
47
+ end
48
+
49
+ def reset_search_frc
50
+ # Update the filter, in this case just blow away the FRC and let
51
+ # lazy evaluation create another with the relevant search info
52
+ @_search_fetch_controller.delegate = nil unless @_search_fetch_controller.nil?
53
+ @_search_fetch_controller = nil
54
+ end
55
+
56
+ def search_delegate
57
+ @_search_delegate ||= begin
58
+ d = DataTableSeachDelegate.new
59
+ d.parent = WeakRef.new(self)
60
+ d
61
+ end
62
+ end
63
+
64
+ ######### iOS methods, headless camel case #######
65
+
66
+ def dt_searchDisplayController(controller, shouldReloadTableForSearchString:search_string)
67
+ @_data_table_search_string = search_string
68
+ reset_search_frc
69
+ true
70
+ end
71
+
72
+ def dt_searchDisplayControllerWillEndSearch(controller)
73
+ @_data_table_searching = false
74
+ @_search_fetch_controller.delegate = nil unless @_search_fetch_controller.nil?
75
+ @_search_fetch_controller = nil
76
+ @_data_table_search_string = nil
77
+ self.table_view.setScrollEnabled true
78
+ @table_search_display_controller.delegate.will_end_search if @table_search_display_controller.delegate.respond_to? "will_end_search"
79
+ update_table_data
80
+ end
81
+
82
+ def dt_searchDisplayControllerWillBeginSearch(controller)
83
+ @_data_table_searching = true
84
+ self.table_view.setScrollEnabled false
85
+ @table_search_display_controller.delegate.will_begin_search if @table_search_display_controller.delegate.respond_to? "will_begin_search"
86
+ end
87
+ end
88
+ end
89
+ end
@@ -4,6 +4,10 @@ module RubyMotionQuery
4
4
  def current_screen(root_view_controller = nil)
5
5
  current_view_controller root_view_controller
6
6
  end
7
+
8
+ def data(*args) # Do not alias this
9
+ CDQ.cdq(*args)
10
+ end
7
11
  end
8
12
  end
9
13
  end
@@ -1,3 +1,3 @@
1
1
  module RedPotion
2
- VERSION = "1.3.0"
2
+ VERSION = "1.4.0"
3
3
  end
@@ -7,7 +7,7 @@ end
7
7
  require 'ruby_motion_query'
8
8
  require 'ProMotion'
9
9
  require 'motion_print'
10
- require 'redalert'
10
+ require 'RedAlert'
11
11
 
12
12
  lib_dir_path = File.dirname(File.expand_path(__FILE__))
13
13
  Motion::Project::App.setup do |app|
@@ -35,7 +35,7 @@ class <%= @name_camel_case %>Screen < UICollectionViewController
35
35
 
36
36
  def collectionView(view, cellForItemAtIndexPath: index_path)
37
37
  view.dequeueReusableCellWithReuseIdentifier(<%= @name.upcase %>_CELL_ID, forIndexPath: index_path).tap do |cell|
38
- build(cell) unless cell.reused
38
+ self.rmq.build(cell) unless cell.reused
39
39
 
40
40
  # Update cell's data here
41
41
  end
@@ -1,6 +1,4 @@
1
1
  class <%= @name_camel_case %>Cell < UICollectionViewCell
2
- attr_reader :reused
3
-
4
2
  def on_load
5
3
  find(self).apply_style :<%= @name %>_cell
6
4
 
@@ -8,10 +6,4 @@ class <%= @name_camel_case %>Cell < UICollectionViewCell
8
6
  # Add your subviews, init stuff here
9
7
  # @foo = q.append!(UILabel, :foo)
10
8
  end
11
-
12
- def prepareForReuse
13
- super
14
- @reused = true
15
- end
16
-
17
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redpotion
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - InfiniteRed
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-05-29 00:00:00.000000000 Z
12
+ date: 2015-07-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ruby_motion_query
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 1.4.0
20
+ version: 1.6.1
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: 1.4.0
27
+ version: 1.6.1
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: ProMotion
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -123,11 +123,16 @@ files:
123
123
  - lib/project/ext/kernel.rb
124
124
  - lib/project/ext/object.rb
125
125
  - lib/project/ext/pm_delegate.rb
126
+ - lib/project/ext/ui_collection_view_cell.rb
126
127
  - lib/project/ext/ui_color.rb
127
128
  - lib/project/ext/ui_image_view.rb
129
+ - lib/project/ext/ui_table_view_cell.rb
128
130
  - lib/project/ext/ui_view.rb
129
131
  - lib/project/ext/ui_view_controller.rb
132
+ - lib/project/pro_motion/data_table.rb
130
133
  - lib/project/pro_motion/data_table_screen.rb
134
+ - lib/project/pro_motion/data_table_search_delegate.rb
135
+ - lib/project/pro_motion/data_table_searchable.rb
131
136
  - lib/project/pro_motion/screen.rb
132
137
  - lib/project/pro_motion/support.rb
133
138
  - lib/project/pro_motion/table.rb