tgios 0.0.1

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.
@@ -0,0 +1,173 @@
1
+ module Tgios
2
+ class UITableViewModelListBinding < BindingBase
3
+ def initialize
4
+ super
5
+
6
+ @events={}
7
+ @events[:build_cell]=->(cell_identifier) {
8
+ cell = UITableViewCell.value1(cell_identifier)
9
+ cell.detailTextLabel.adjustsFontSizeToFitWidth = true
10
+ cell
11
+ }
12
+ @events[:update_cell]=->(field_set, cell, index_path) { update_field(field_set, cell, index_path)}
13
+ self
14
+
15
+ end
16
+
17
+ def bind(tableView, models, fields)
18
+ @tableView=WeakRef.new(tableView)
19
+ @fields=fields
20
+ @contact_buttons = []
21
+ @models=WeakRef.new(models)
22
+ @tableView.dataSource=self
23
+ @tableView.delegate=self
24
+ self
25
+ end
26
+
27
+ def models=(value)
28
+ @models=value
29
+ @tableView.reloadData
30
+ end
31
+
32
+ def on(event_name, &block)
33
+ @events[event_name]=block
34
+ self
35
+ end
36
+
37
+
38
+ def tableView(tableView, cellForRowAtIndexPath: index_path)
39
+
40
+ field_set = field_set_at_index_path(index_path)
41
+ type = field_set[:child_index].nil? ? field_set[:type] : field_set[:child_field][:type]
42
+
43
+ cell_identifier = "CELL_IDENTIFIER_#{type}"
44
+ cell=tableView.dequeueReusableCellWithIdentifier(cell_identifier)
45
+ isReusedCell=!cell.nil?
46
+
47
+ cell=@events[:build_cell].call(cell_identifier) unless isReusedCell
48
+
49
+ @events[:update_cell].call(field_set, cell, index_path)
50
+
51
+ cell
52
+
53
+ end
54
+
55
+ def update_field(o_field_set, cell, index_path)
56
+ model = @models[index_path.section]
57
+ field_set = o_field_set
58
+ if !field_set[:child_index].nil?
59
+ model = model.send(field_set[:name])[field_set[:child_index]]
60
+ field_set = field_set[:child_field]
61
+ end
62
+
63
+ accessory_view = cell.accessoryView
64
+ if field_set[:accessory] == :contact
65
+ if accessory_view && accessory_view.buttonType == :contact.uibuttontype
66
+ contact_button = accessory_view
67
+ else
68
+ contact_button = (@contact_buttons.pop || UIButton.contact)
69
+ cell.accessoryView = contact_button
70
+ end
71
+ unhook(contact_button, :tapped)
72
+ hook(contact_button, :tapped) do
73
+ tableView(@tableView, didSelectRowAtIndexPath:index_path)
74
+ end
75
+ else
76
+ if accessory_view && accessory_view.buttonType == :contact.uibuttontype
77
+ @contact_buttons << accessory_view
78
+ cell.accessoryView = nil
79
+ end
80
+ cell.accessoryType = (field_set[:accessory] || :none).uitablecellaccessory
81
+ end
82
+
83
+ case field_set[:type]
84
+ when :array
85
+ cell.textLabel.text=field_set[:label]
86
+ cell.detailTextLabel.text = ''
87
+ when :label, :text
88
+ cell.textLabel.text= field_set[:show_label] ? field_set[:label] : field_set[:label_name].nil? ? '' : model.send(field_set[:label_name])
89
+ cell.detailTextLabel.text = model.send(field_set[:name])
90
+ when :big_label
91
+ cell.detailTextLabel.numberOfLines = 0
92
+ cell.detailTextLabel.backgroundColor = :clear.uicolor
93
+ cell.detailTextLabel.text = model.send(field_set[:name])
94
+ end
95
+
96
+ end
97
+
98
+ def tableView(tableView, didSelectRowAtIndexPath:index_path)
99
+ @selected_field_set=field_set_at_index_path(index_path)
100
+ @events[:touch_row].call(@selected_field_set, {tableView: tableView, didSelectRowAtIndexPath:index_path}) if @events.has_key?(:touch_row)
101
+
102
+ end
103
+
104
+ def tableView(tableView, numberOfRowsInSection: section)
105
+ count = @fields.length
106
+ @fields.each do |fld|
107
+ count += @models[section].send(fld[:name]).length if fld[:type] == :array
108
+ end
109
+ count
110
+ end
111
+
112
+ def numberOfSectionsInTableView(tableView)
113
+ @models.length
114
+ end
115
+
116
+ def tableView(tableView, commitEditingStyle:editingStyle, forRowAtIndexPath:index_path)
117
+ if editingStyle == UITableViewCellEditingStyleDelete
118
+ field_set = field_set_at_index_path(index_path)
119
+ real_fs = field_set
120
+ real_fs = real_fs[:child_field] unless real_fs[:child_index].nil?
121
+ if real_fs[:delete] == true
122
+ unless @events[:delete_row].nil?
123
+ @events[:delete_row].call(field_set, @models[index_path.section].send(field_set[:name]), {tableView: tableView, commitEditingStyle: editingStyle, forRowAtIndexPath:index_path}) do |success|
124
+ tableView.deleteRowsAtIndexPaths([index_path], withRowAnimation: UITableViewRowAnimationFade) if success
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
130
+
131
+ def tableView(tableView, canEditRowAtIndexPath: index_path)
132
+ field_set = field_set_at_index_path(index_path)
133
+ field_set = field_set[:child_field] unless field_set[:child_index].nil?
134
+ return field_set[:delete] == true
135
+ end
136
+
137
+ def tableView(tableView, heightForRowAtIndexPath: index_path)
138
+ field_set = field_set_at_index_path(index_path)
139
+ field_set = field_set[:child_field] unless field_set[:child_index].nil?
140
+ if field_set[:type] == :big_label || field_set[:type] == :checkbox
141
+ 20 + 20 * (field_set[:lines] || 2)
142
+ else
143
+ 45
144
+ end
145
+ end
146
+
147
+ def field_set_at_index_path(index_path)
148
+ row = index_path.row
149
+ array_indices = @fields.each_index.select{|i| @fields[i][:type] == :array}
150
+ return @fields[row] if array_indices.empty? || array_indices.first >= row
151
+ array_count_sum = 0
152
+ array_indices.each do |a_idx|
153
+ array_count = @models[index_path.section].send(@fields[a_idx][:name]).length
154
+ if row <= a_idx + array_count_sum + array_count
155
+ sub_idx = row - a_idx - array_count_sum - 1
156
+ return sub_idx < 0 ? @fields[a_idx + sub_idx + 1] : @fields[a_idx].merge(child_index: sub_idx)
157
+ end
158
+ array_count_sum += array_count
159
+ end
160
+ @fields[row - array_count_sum]
161
+ end
162
+
163
+ def onPrepareForRelease
164
+ @contact_buttons = nil
165
+ @events=nil
166
+ @models=nil
167
+ @tableView.delegate=nil
168
+ @tableView.dataSource=nil
169
+ @tableView=nil
170
+
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,268 @@
1
+ include SugarCube::CoreGraphics
2
+
3
+ module Tgios
4
+ class UITextFieldBinding < BindingBase
5
+ include PlasticCup
6
+
7
+ def initialize(model, ui_field, field_name, options={})
8
+ super
9
+
10
+ Base.add_style_sheet(:decimal_button_common, {
11
+ title: '.',
12
+ titleFont: lambda {UIFont.boldSystemFontOfSize(30)},
13
+ }) unless Base.get_style_sheet(:decimal_button_common)
14
+ Base.add_style_sheet(:decimal_button, {
15
+ extends: :decimal_button_common,
16
+ frame: [[0, 162.5 + 44], [104.5, 54]],
17
+ highlighted_background_image: Tgios::CommonUIUtility.imageFromColor(:white),
18
+ titleColor: :black.uicolor
19
+ }, :ios7) unless Base.get_style_sheet(:decimal_button)
20
+
21
+ Base.add_style_sheet(:decimal_button, {
22
+ extends: :decimal_button_common,
23
+ frame: [[0, 163 + 44], [105, 54]],
24
+ highlighted_background_image: Tgios::CommonUIUtility.imageFromColor(UIColor.colorWithRed(0.324, green: 0.352, blue: 0.402, alpha: 1)),
25
+ titleColor: :darkgray.uicolor,
26
+ highlighted_title_color: :white.uicolor
27
+ }) unless Base.get_style_sheet(:decimal_button)
28
+
29
+ @field_name=field_name
30
+ @options=options
31
+ @events={}
32
+ @ui_field=WeakRef.new(ui_field)
33
+ @model=WeakRef.new(model)
34
+ update_ui_field_style
35
+ assign_value_to_field
36
+ end
37
+
38
+ def assign_value_to_field
39
+ val = @model.send(@field_name)
40
+ if val.is_a?(String) || val.nil?
41
+ @ui_field.text=val
42
+ else
43
+ @original_value = val
44
+ @ui_field.text= if val.respond_to?(:round)
45
+ default_precision = 0
46
+ default_precision = 6 unless val.is_a?(Integer)
47
+ val.round((@options[:precision] || default_precision)).to_s
48
+ else
49
+ val.to_s
50
+ end
51
+ @model.send("#{@field_name}=", @ui_field.text)
52
+ end
53
+ end
54
+
55
+ def ui_field=(val)
56
+ @ui_field=WeakRef.new(val)
57
+ @ui_field.delegate=self
58
+ update_ui_field_style
59
+ assign_value_to_field
60
+ end
61
+
62
+ def model=(val)
63
+ @model=WeakRef.new(val)
64
+ assign_value_to_field
65
+ end
66
+
67
+ def update(ui_field, model)
68
+ self.ui_field=ui_field
69
+ self.model=model
70
+
71
+ end
72
+
73
+ def on(event, &block)
74
+ @events[event]=block
75
+ end
76
+
77
+
78
+ def textFieldDidEndEditing(textField)
79
+ puts "textFieldDidEndEditing"
80
+ @model.send("#{@field_name}=", textField.text)
81
+ weak_text_field=WeakRef.new(textField)
82
+ @events[:end_edit].call(@model, @field_name, {text_field: weak_text_field}) unless @events[:end_edit].nil?
83
+ @decimal_button.removeFromSuperview unless @decimal_button.nil?
84
+ end
85
+
86
+ def textFieldShouldReturn(textField)
87
+ @ui_field.resignFirstResponder
88
+ weak_text_field=WeakRef.new(@ui_field)
89
+ @events[:return_tapped].call(@model, @field_name, {text_field: weak_text_field}) unless @events[:return_tapped].nil?
90
+ end
91
+
92
+ def textFieldDidBeginEditing(textField)
93
+ add_decimal_button
94
+ weak_text_field=WeakRef.new(textField)
95
+ @events[:begin_edit].call(@model, @field_name, {text_field: weak_text_field}) unless @events[:begin_edit].nil?
96
+ end
97
+
98
+ def keyboardDidShow(note)
99
+ add_decimal_button if @ui_field.isFirstResponder
100
+ end
101
+
102
+ def is_number_pad?
103
+ @ui_field.keyboardType == UIKeyboardTypeNumberPad
104
+ end
105
+
106
+ def is_decimal?
107
+ @options[:keyboard] == :decimal && is_number_pad?
108
+ end
109
+
110
+ def add_decimal_button
111
+ if is_decimal? && @ui_field.delegate == self
112
+ temp_window = (UIApplication.sharedApplication.windows[1] || UIApplication.sharedApplication.windows[0])
113
+ temp_window.subviews.each do |keyboard|
114
+ if keyboard.description.hasPrefix('<UIPeripheralHost')
115
+ if @decimal_button.nil?
116
+ @decimal_button = PlasticCup::Base.style(UIButton.custom, :decimal_button)
117
+ @decimal_button.addTarget(self, action: 'decimal_tapped', forControlEvents: UIControlEventTouchUpInside)
118
+ end
119
+ keyboard.addSubview(@decimal_button)
120
+ break
121
+ end
122
+ end
123
+ end
124
+ end
125
+
126
+ def decimal_tapped
127
+ @ui_field.text = "#{@ui_field.text}." unless !@ui_field.text.nil? && @ui_field.text.include?('.')
128
+ end
129
+
130
+ #### options
131
+ # type:
132
+ # :password
133
+ # :label
134
+ #
135
+ # auto_correct:
136
+ # true
137
+ # false
138
+ # UITextAutocorrectionType
139
+ #
140
+ # auto_capitalize:
141
+ # true
142
+ # false
143
+ # UITextAutocapitalizationType
144
+ #
145
+ # keyboard:
146
+ # :decimal
147
+ # uikeyboardtype (sugarcube)
148
+ # UIKeyboardType
149
+ #
150
+ # precision: Numeric (only useful when value is Numeric)
151
+ # default:
152
+ # Integer: 0
153
+ # Float: 6
154
+ #
155
+ # error:
156
+ # true
157
+ # false
158
+ #
159
+ # reduce_font_size:
160
+ # true
161
+ # false
162
+ ####
163
+
164
+ def update_ui_field_style
165
+ @ui_field.secureTextEntry=@options[:type]==:password
166
+ @ui_field.autocorrectionType = get_auto_correct_type(@options[:auto_correct])
167
+ @ui_field.autocapitalizationType = get_auto_capitalize_type(@options[:auto_capitalize])
168
+ @ui_field.keyboardType = get_keyboard_type(@options[:keyboard])
169
+ @ui_field.enabled = @options[:type] != :label
170
+ @ui_field.adjustsFontSizeToFitWidth = @options[:reduce_font_size]
171
+
172
+ if @model.respond_to?(:has_error?) && @model.has_error?(@field_name)
173
+ @ui_field.leftViewMode = UITextFieldViewModeAlways
174
+ if @ui_field.leftView.nil? || @ui_field.leftView.tag != 888
175
+ error_label_styles ={frame: [[0,0], [25,25]],
176
+ textColor: :red.uicolor,
177
+ backgroundColor: :clear.uicolor,
178
+ font: 'GillSans-Bold'.uifont(25),
179
+ textAlignment: :center.uialignment,
180
+ text: '!',
181
+ tag: 888}
182
+ error_label = PlasticCup::Base.style(UILabel.new, error_label_styles)
183
+ @ui_field.leftView = error_label
184
+ end
185
+ else
186
+ @ui_field.leftViewMode = UITextFieldViewModeNever
187
+ end
188
+
189
+ if is_number_pad?
190
+ text_toolbar = PlasticCup::Base.style(UIToolbar.new, frame: CGRectMake(0,0,320,44))
191
+ done_button = UIBarButtonItem.alloc.initWithBarButtonSystemItem(UIBarButtonSystemItemDone, target: self, action: 'textFieldShouldReturn:')
192
+ text_toolbar.items=[
193
+ UIBarButtonItem.flexible_space, done_button
194
+ ]
195
+ @ui_field.inputAccessoryView = text_toolbar
196
+ else
197
+ @ui_field.inputAccessoryView = nil
198
+
199
+ end
200
+
201
+ stop_listen
202
+ listen_keyboard
203
+ end
204
+
205
+ def get_auto_capitalize_type(type=nil)
206
+ case type
207
+ when true, nil
208
+ UITextAutocapitalizationTypeSentences
209
+ when false
210
+ UITextAutocapitalizationTypeNone
211
+ else
212
+ type
213
+ end
214
+ end
215
+
216
+ def get_auto_correct_type(type=nil)
217
+ case type
218
+ when true
219
+ UITextAutocorrectionTypeYes
220
+ when false
221
+ UITextAutocorrectionTypeNo
222
+ when nil
223
+ UITextAutocorrectionTypeDefault
224
+ else
225
+ type
226
+ end
227
+ end
228
+
229
+ def get_keyboard_type(type=nil)
230
+ return type if type.is_a?(Integer)
231
+ ktype = type == :decimal ? :number : type
232
+ (ktype || :default).uikeyboardtype
233
+ end
234
+
235
+
236
+ def listen_keyboard
237
+ if is_decimal? && @ui_field.delegate == self
238
+ NSNotificationCenter.defaultCenter.addObserver(self, selector: 'keyboardDidShow:', name: UIKeyboardDidShowNotification, object: nil)
239
+ end
240
+
241
+ end
242
+
243
+ def stop_listen
244
+ NSNotificationCenter.defaultCenter.removeObserver(self)
245
+ end
246
+
247
+ def onPrepareForRelease
248
+ stop_listen
249
+ @model=nil
250
+ @decimal_button=nil
251
+ if !@ui_field.nil? && @ui_field.delegate == self
252
+ @ui_field.delegate = nil
253
+ toolbar = @ui_field.inputAccessoryView
254
+ toolbar.items = nil unless toolbar.nil?
255
+ @ui_field.inputAccessoryView = nil
256
+ end
257
+ @ui_field=nil
258
+ @events=nil
259
+ end
260
+
261
+ def dealloc
262
+ prepareForRelease
263
+ ap 'dealloc ui_text_field_binding'
264
+ super
265
+ end
266
+
267
+ end
268
+ end
@@ -0,0 +1,177 @@
1
+ module Tgios
2
+ class UITextViewBinding < BindingBase
3
+
4
+ def initialize(model, ui_field, field_name, options={})
5
+ super
6
+ @field_name=field_name
7
+ @options=options
8
+ @events={}
9
+ @ui_field=WeakRef.new(ui_field)
10
+ @model=WeakRef.new(model)
11
+ update_ui_field_style
12
+ assign_value_to_field
13
+ end
14
+
15
+ def assign_value_to_field
16
+ val = @model.send(@field_name)
17
+ if val.is_a?(String) || val.nil?
18
+ @ui_field.text=val
19
+ else
20
+ @original_value = val
21
+ @ui_field.text= if val.respond_to?(:round)
22
+ default_precision = 0
23
+ default_precision = 6 unless val.is_a?(Integer)
24
+ val.round((@options[:precision] || default_precision)).to_s
25
+ else
26
+ val.to_s
27
+ end
28
+ @model.send("#{@field_name}=", @ui_field.text)
29
+ end
30
+ end
31
+
32
+ def ui_field=(val)
33
+ @ui_field=WeakRef.new(val)
34
+ @ui_field.delegate=self
35
+ update_ui_field_style
36
+ assign_value_to_field
37
+ end
38
+
39
+ def model=(val)
40
+ @model=WeakRef.new(val)
41
+ assign_value_to_field
42
+ end
43
+
44
+ def update(ui_field, model)
45
+ self.ui_field=ui_field
46
+ self.model=model
47
+
48
+ end
49
+
50
+ def on(event, &block)
51
+ @events[event]=block
52
+ end
53
+
54
+ #### options
55
+ # type:
56
+ # :password
57
+ # :label
58
+ #
59
+ # auto_correct:
60
+ # true
61
+ # false
62
+ # UITextAutocorrectionType
63
+ #
64
+ # auto_capitalize:
65
+ # true
66
+ # false
67
+ # UITextAutocapitalizationType
68
+ #
69
+ # keyboard:
70
+ # :decimal
71
+ # uikeyboardtype (sugarcube)
72
+ # UIKeyboardType
73
+ #
74
+ # precision: Numeric (only useful when value is Numeric)
75
+ # default:
76
+ # Integer: 0
77
+ # Float: 6
78
+ #
79
+ # error:
80
+ # true
81
+ # false
82
+ #
83
+ # reduce_font_size:
84
+ # true
85
+ # false
86
+ ####
87
+
88
+ def update_ui_field_style
89
+ @ui_field.secureTextEntry=@options[:type]==:password
90
+ @ui_field.autocorrectionType = get_auto_correct_type(@options[:auto_correct])
91
+ @ui_field.autocapitalizationType = get_auto_capitalize_type(@options[:auto_capitalize])
92
+ @ui_field.keyboardType = get_keyboard_type(@options[:keyboard])
93
+ @ui_field.enabled = @options[:type] != :label
94
+
95
+
96
+ text_view_toolbar = PlasticCup::Base.style(UIToolbar.new, frame: CGRectMake(0,0,320,44))
97
+ done_button = UIBarButtonItem.alloc.initWithBarButtonSystemItem(UIBarButtonSystemItemDone, target: self, action: 'did_return:')
98
+
99
+ text_view_toolbar.items=[
100
+ UIBarButtonItem.flexible_space, done_button
101
+ ]
102
+ @ui_field.inputAccessoryView = text_view_toolbar
103
+
104
+ end
105
+
106
+ def get_auto_capitalize_type(type=nil)
107
+ case type
108
+ when true, nil
109
+ UITextAutocapitalizationTypeSentences
110
+ when false
111
+ UITextAutocapitalizationTypeNone
112
+ else
113
+ type
114
+ end
115
+ end
116
+
117
+ def get_auto_correct_type(type=nil)
118
+ case type
119
+ when true
120
+ UITextAutocorrectionTypeYes
121
+ when false
122
+ UITextAutocorrectionTypeNo
123
+ when nil
124
+ UITextAutocorrectionTypeDefault
125
+ else
126
+ type
127
+ end
128
+ end
129
+
130
+ def get_keyboard_type(type=nil)
131
+ return type if type.is_a?(Integer)
132
+ ktype = type == :decimal ? :numbers_and_punctuation : type
133
+ (ktype || :default).uikeyboardtype
134
+ end
135
+
136
+ def textViewDidEndEditing(field)
137
+ ap 'did_end_editing'
138
+ @model.send("#{@field_name}=", field.text)
139
+ weak_text_field=WeakRef.new(field)
140
+ @events[:end_edit].call(@model, @field_name, {text_field: weak_text_field}) unless @events[:end_edit].nil?
141
+
142
+ end
143
+
144
+ def did_return(field)
145
+ ap 'did return'
146
+ @ui_field.resignFirstResponder
147
+ weak_text_field=WeakRef.new(@ui_field)
148
+ @events[:return_tapped].call(@model, @field_name, {text_field: weak_text_field}) unless @events[:return_tapped].nil?
149
+
150
+ end
151
+
152
+ def textViewDidBeginEditing(field)
153
+ ap 'did_begin_editing'
154
+ weak_text_field=WeakRef.new(field)
155
+ @events[:begin_edit].call(@model, @field_name, {text_field: weak_text_field}) unless @events[:begin_edit].nil?
156
+
157
+ end
158
+
159
+ def onPrepareForRelease
160
+ @model=nil
161
+ if !@ui_field.nil? && @ui_field.delegate == self
162
+ @ui_field.delegate = nil
163
+ toolbar = @ui_field.inputAccessoryView
164
+ toolbar.items = nil unless toolbar.nil?
165
+ @ui_field.inputAccessoryView = nil
166
+ end
167
+ @ui_field=nil
168
+ @events=nil
169
+ end
170
+
171
+ def dealloc
172
+ prepareForRelease
173
+ ap 'dealloc ui_text_view input_binding'
174
+ super
175
+ end
176
+ end
177
+ end
@@ -0,0 +1,3 @@
1
+ module Tgios
2
+ VERSION = '0.0.1'
3
+ end
data/lib/tgios.rb ADDED
@@ -0,0 +1,17 @@
1
+ #require 'sugarcube'
2
+ #require 'sugarcube-coregraphics'
3
+ #require 'plastic_cup'
4
+
5
+
6
+ unless defined?(Motion::Project::Config)
7
+ raise "This file must be required within a RubyMotion project Rakefile."
8
+ end
9
+
10
+ Motion::Project::App.setup do |app|
11
+ Dir.glob(File.join(File.dirname(__FILE__), 'tgios/*.rb')).each do |file|
12
+ app.files.unshift(file)
13
+ end
14
+ Dir.glob(File.join(File.dirname(__FILE__), 'tgios/*/*.rb')).each do |file|
15
+ app.files.unshift(file)
16
+ end
17
+ end
Binary file
data/spec/main_spec.rb ADDED
@@ -0,0 +1,9 @@
1
+ describe "Application 'tgios'" do
2
+ before do
3
+ @app = UIApplication.sharedApplication
4
+ end
5
+
6
+ it "has one window" do
7
+ @app.windows.size.should == 1
8
+ end
9
+ end
data/tgios.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/tgios/version.rb', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = 'tgios'
6
+ gem.version = Tgios::VERSION
7
+ gem.licenses = ['BSD']
8
+
9
+ gem.authors = ['April Tsang', 'William Yeung']
10
+ gem.email = ['april@tofugear.com', 'william@tofugear.com']
11
+
12
+ gem.description = <<-DESC
13
+ A package of ruby-motion libraries written by our team.
14
+ DESC
15
+
16
+ gem.summary = 'A package of ruby-motion libraries written by our team.'
17
+ gem.homepage = 'https://github.com/apriltg/tgios'
18
+
19
+ gem.files = `git ls-files`.split($\)
20
+ gem.require_paths = ['lib']
21
+ gem.test_files = gem.files.grep(%r{^spec/})
22
+ gem.add_dependency 'sugarcube', '1.1.0'
23
+ #gem.add_dependency 'sugarcube-classic'
24
+ gem.add_dependency 'awesome_print_motion'
25
+ gem.add_dependency 'motion-layout'
26
+ gem.add_dependency 'plastic_cup', '>=0.1.1'
27
+ end