motion-loco 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NzdjMjhmYjA5ZTgzNjEzMTg2ZTQ1ZjcxZjYyOGEwMWRjM2I3NWI2MA==
5
- data.tar.gz: !binary |-
6
- NTVkY2JlMmE0MzE1NTI0OTk2YmI5YjJiZmJiNmRlZGZlYmEyZDI3Mg==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- MzQ5YTcyNjAxODRlYTU5NGVlMmE1YWU2OTc5MTcxYzVjZmVhNzkxNTk2NmQ3
10
- ZDQxMzQ3ZTJlNzczYjYxYWI2OTQ2NTlmY2JlZGUzNzI4ODNiNTI2YjMxNTll
11
- ZGZhNDI5MGFhZGM2MzM3ZTYwNWU4Y2NlMDYyODlmYTk2NGQxYTg=
12
- data.tar.gz: !binary |-
13
- MzlhNDI5ODUzODczZDZlNzgzMDIxOGNkYjkyMGU5YTZiY2M3YWM2NDg3YTNm
14
- YWZiZjE2NzE3NWNiZTExNTZkYTAwOGYzY2NmZTlmYTY3MmUxOWVkZjU4NTVk
15
- NTVlYzlkMWRkOTRmNWFhNWQxMTU4ZDZjMzQwY2JkODY0NmZhNTQ=
2
+ SHA1:
3
+ metadata.gz: c98e3096247b7eae3292a67a95d2b51a05683124
4
+ data.tar.gz: 808638ee1a7b95c5dd44b6758afaade0394526f2
5
+ SHA512:
6
+ metadata.gz: e3c2603821b5329287281c3f9ea3aeaace0fe69195bddc2bf4122c42db9a37d7ea61aa0993d9eaa658c6ab38ba0201d40ab1b11b9848b6fe4190683faada48e7
7
+ data.tar.gz: 682dd22c9ec387eacb23d69b9129304e707a00b501d26bf02f9888d42f38325e237aa17090711f0a4470bea3004f02722b86957676a7bacf7adec3fa25afd7d7
data/README.md CHANGED
@@ -10,7 +10,7 @@ computed properties, and observers. **And Ember-Data inspired [data](#locofixtur
10
10
 
11
11
  #### SQLiteAdapter and Relationships!
12
12
 
13
- I need to write up some better documentation, but be sure to check out the [Loco::SQLiteAdapter](locosqliteadapter) and the new `has_many` and `belongs_to` relationships in `Loco::Model`.
13
+ I need to write up some better documentation, but be sure to check out the [Loco::SQLiteAdapter](#locosqliteadapter) and the new `has_many` and `belongs_to` relationships in `Loco::Model`.
14
14
 
15
15
  The relationship stuff needs some major code clean up, so don't copy my code if you're doing anything similar for loading/saving relationship data. :)
16
16
 
@@ -91,7 +91,7 @@ module Loco
91
91
  private
92
92
 
93
93
  def load(type, records, data)
94
- if records.is_a? Array
94
+ if records.is_a? RecordArray
95
95
  if data.is_a? Hash
96
96
  data = data[type.to_s.underscore.pluralize]
97
97
  end
@@ -0,0 +1,15 @@
1
+ motion_require 'controller'
2
+
3
+ module Loco
4
+
5
+ class ArrayController < Controller
6
+
7
+ def self.instance
8
+ @instance ||= begin
9
+ new(content: RecordArray.new)
10
+ end
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,122 @@
1
+ module Loco
2
+
3
+ module Associatable
4
+
5
+ def initialize(properties={})
6
+ super
7
+ initialize_relationships
8
+ self
9
+ end
10
+
11
+ def initialize_relationships
12
+ self.class.get_class_relationships.select{|relationship| relationship[:has_many] }.each do |relationship|
13
+ has_many_class = relationship[:has_many].to_s.classify.constantize
14
+ self.send("#{relationship[:has_many]}=", RecordArray.new(item_class: has_many_class, belongs_to: self))
15
+ self.send("#{relationship[:has_many].to_s.singularize}_ids=", [])
16
+ end
17
+ end
18
+
19
+ module ClassMethods
20
+
21
+ def belongs_to(model)
22
+ attr_accessor model
23
+ attr_accessor "#{model}_id"
24
+
25
+ define_method "#{model}" do |&block|
26
+ belongs_to_class = model.to_s.classify.constantize
27
+ record = instance_variable_get("@#{model}")
28
+ if record
29
+ block.call(record) if block.is_a? Proc
30
+ record
31
+ else
32
+ belongs_to_id = self.send("#{model}_id")
33
+ if belongs_to_id
34
+ belongs_to_class.find(belongs_to_id) do |record|
35
+ instance_variable_set("@#{model}", record)
36
+ block.call(record) if block.is_a? Proc
37
+ end
38
+ else
39
+ block.call(record) if block.is_a? Proc
40
+ record
41
+ end
42
+ end
43
+ end
44
+
45
+ define_method "#{model}=" do |record|
46
+ belongs_to_class = model.to_s.classify.constantize
47
+ raise TypeError, "Expecting a #{belongs_to_class} as defined by #belongs_to :#{model}" unless record.is_a? belongs_to_class
48
+ instance_variable_set("@#{model}", record)
49
+ self.send("#{model}_id=", (record.nil? ? nil : record.id))
50
+ record
51
+ end
52
+
53
+ relationships = get_class_relationships
54
+ relationships << { belongs_to: model }
55
+ end
56
+
57
+ def has_many(model)
58
+ attr_accessor model
59
+ attr_accessor "#{model.to_s.singularize}_ids"
60
+
61
+ define_method "#{model}" do |&block|
62
+ has_many_class = model.to_s.singularize.classify.constantize
63
+
64
+ record_array = instance_variable_get("@#{model}")
65
+ if record_array.is_loaded
66
+ block.call(record_array) if block.is_a? Proc
67
+ record_array
68
+ else
69
+ has_many_ids = instance_variable_get("@#{model.to_s.singularize}_ids")
70
+ if has_many_ids
71
+ array = has_many_class.find(has_many_ids) do |records|
72
+ record_array.load(records)
73
+ instance_variable_set("@#{model}", record_array)
74
+ block.call(record_array) if block.is_a? Proc
75
+ end
76
+ record_array.load(array)
77
+ else
78
+ query = {}
79
+ query["#{self.class.to_s.underscore.singularize}_id"] = self.id
80
+ array = has_many_class.find(query) do |records|
81
+ record_array.load(records)
82
+ instance_variable_set("@#{model}", record_array)
83
+ block.call(record_array) if block.is_a? Proc
84
+ end
85
+ record_array.load(array)
86
+ end
87
+ instance_variable_set("@#{model}", record_array)
88
+ record_array
89
+ end
90
+ end
91
+
92
+ define_method "#{model}=" do |records|
93
+ has_many_class = model.to_s.singularize.classify.constantize
94
+
95
+ if (records.is_a?(RecordArray) || records.is_a?(Array)) && (records.length == 0 || (records.length > 0 && records.first.class == has_many_class))
96
+ unless records.is_a?(RecordArray)
97
+ record_array = RecordArray.new(item_class: has_many_class, belongs_to: self)
98
+ record_array.addObjectsFromArray(records)
99
+ records = record_array
100
+ end
101
+ else
102
+ raise TypeError, "Expecting a Loco::RecordArray of #{has_many_class} objects as defined by #has_many :#{model}"
103
+ end
104
+
105
+ instance_variable_set("@#{model}", records)
106
+ instance_variable_set("@#{model.to_s.singularize}_ids", records.map(&:id))
107
+ records
108
+ end
109
+
110
+ relationships = get_class_relationships
111
+ relationships << { has_many: model }
112
+ end
113
+
114
+ end
115
+
116
+ def self.included(base)
117
+ base.extend(ClassMethods)
118
+ end
119
+
120
+ end
121
+
122
+ end
@@ -4,6 +4,15 @@ module Loco
4
4
 
5
5
  class Controller
6
6
  include Observable
7
+ property :content
8
+
9
+ def method_missing(method, *args, &block)
10
+ if self.content.respond_to? method
11
+ self.content.send(method, *args)
12
+ else
13
+ super
14
+ end
15
+ end
7
16
 
8
17
  def self.instance
9
18
  @instance ||= new
@@ -4,178 +4,10 @@ motion_require 'record_array'
4
4
  module Loco
5
5
 
6
6
  class Model
7
+ include Associatable
7
8
  include Observable
9
+ include Persistable
8
10
  property :id, :integer
9
-
10
- def destroy(&block)
11
- adapter = self.class.get_class_adapter
12
- unless self.new?
13
- adapter.delete_record(self) do |record|
14
- block.call(record) if block.is_a? Proc
15
- end
16
- end
17
- end
18
-
19
- def load(id, data)
20
- data.merge!({ id: id })
21
- self.set_properties(data)
22
- self
23
- end
24
-
25
- def new?
26
- self.id.nil?
27
- end
28
-
29
- def save(&block)
30
- adapter = self.class.get_class_adapter
31
- if self.new?
32
- adapter.create_record(self) do |record|
33
- block.call(record) if block.is_a? Proc
34
- end
35
- else
36
- adapter.update_record(self) do |record|
37
- block.call(record) if block.is_a? Proc
38
- end
39
- end
40
- end
41
-
42
- def serialize(options={})
43
- self.class.get_class_adapter.serialize(self, options)
44
- end
45
-
46
- class << self
47
-
48
- def adapter(adapter_class, *args)
49
- if adapter_class.is_a? String
50
- @adapter = adapter_class.constantize.new(*args)
51
- else
52
- @adapter = adapter_class.new(*args)
53
- end
54
- end
55
-
56
- def belongs_to(model)
57
- attr_accessor model
58
- attr_accessor "#{model}_id"
59
-
60
- belongs_to_class_name = model.to_s.classify
61
-
62
- define_method "#{model}" do |&block|
63
- record = instance_variable_get("@#{model}")
64
- if record
65
- block.call(record) if block.is_a? Proc
66
- record
67
- else
68
- belongs_to_id = self.send("#{model}_id")
69
- if belongs_to_id
70
- belongs_to_class_name.constantize.find(belongs_to_id) do |record|
71
- instance_variable_set("@#{model}", record)
72
- block.call(record) if block.is_a? Proc
73
- end
74
- else
75
- block.call(record) if block.is_a? Proc
76
- record
77
- end
78
- end
79
- end
80
-
81
- define_method "#{model}=" do |record|
82
- raise TypeError, "Expecting a #{belongs_to_class_name} as defined by #belongs_to :#{model}" unless record.is_a? belongs_to_class_name.constantize
83
- self.send("#{model}_id=", (record.nil? ? nil : record.id))
84
- instance_variable_set("@#{model}", record)
85
- record
86
- end
87
-
88
- relationships = get_class_relationships
89
- relationships << { belongs_to: model }
90
- end
91
-
92
- def has_many(model)
93
- attr_accessor model
94
- attr_accessor "#{model.to_s.singularize}_ids"
95
-
96
- has_many_class_name = model.to_s.singularize.classify
97
-
98
- define_method "#{model}" do |&block|
99
- has_many_class = has_many_class_name.constantize
100
- records = instance_variable_get("@#{model}")
101
- if records
102
- block.call(records) if block.is_a? Proc
103
- records
104
- else
105
- has_many_ids = self.send("#{model.to_s.singularize}_ids")
106
- if has_many_ids
107
- has_many_class.find(has_many_ids) do |records|
108
- block.call(records) if block.is_a? Proc
109
- end
110
- else
111
- query = {}
112
- query["#{self.class.to_s.underscore.singularize}_id"] = self.id
113
- has_many_class.find(query) do |records|
114
- block.call(records) if block.is_a? Proc
115
- end
116
- end
117
- end
118
- end
119
-
120
- define_method "#{model}=" do |records|
121
- has_many_class = has_many_class_name.constantize
122
- if (records.is_a?(RecordArray) || records.is_a?(Array)) && (records.length == 0 || (records.length > 0 && records.first.class == has_many_class))
123
- unless records.is_a?(RecordArray)
124
- record_array = RecordArray.new
125
- record_array.addObjectsFromArray(records)
126
- records = record_array
127
- end
128
- else
129
- raise TypeError, "Expecting a Loco::RecordArray of #{has_many_class_name} objects as defined by #has_many :#{model}"
130
- end
131
-
132
- self.send("#{model.to_s.singularize}_ids=", records.map(&:id))
133
- instance_variable_set("@#{model}", records)
134
- end
135
-
136
- relationships = get_class_relationships
137
- relationships << { has_many: model }
138
- end
139
-
140
- def find(id=nil, &block)
141
- adapter = self.get_class_adapter
142
- if id.nil?
143
- # Return all records
144
- records = RecordArray.new
145
- adapter.find_all(self, records) do |records|
146
- block.call(records) if block.is_a? Proc
147
- end
148
- elsif id.is_a? Array
149
- # Return records with given ids
150
- records = RecordArray.new
151
- id.each do |i|
152
- records << self.new(id: i)
153
- end
154
- adapter.find_many(self, records, id) do |records|
155
- block.call(records) if block.is_a? Proc
156
- end
157
- elsif id.is_a? Hash
158
- # Return records matching query
159
- records = RecordArray.new
160
- adapter.find_query(self, records, id) do |records|
161
- block.call(records) if block.is_a? Proc
162
- end
163
- else
164
- record = self.new(id: id)
165
- adapter.find(record, id) do |record|
166
- block.call(record) if block.is_a? Proc
167
- end
168
- end
169
- end
170
- alias_method :all, :find
171
- alias_method :where, :find
172
-
173
- def get_class_adapter
174
- @adapter ||= Adapter.new
175
- end
176
-
177
- end
178
-
179
11
  end
180
12
 
181
13
  end
@@ -0,0 +1,96 @@
1
+ module Loco
2
+
3
+ module Persistable
4
+
5
+ def destroy(&block)
6
+ adapter = self.class.get_class_adapter
7
+ unless self.new?
8
+ adapter.delete_record(self) do |record|
9
+ block.call(record) if block.is_a? Proc
10
+ end
11
+ end
12
+ end
13
+
14
+ def load(id, data)
15
+ data.merge!({ id: id })
16
+ self.set_properties(data)
17
+ self
18
+ end
19
+
20
+ def new?
21
+ self.id.nil?
22
+ end
23
+
24
+ def save(&block)
25
+ adapter = self.class.get_class_adapter
26
+ if self.new?
27
+ adapter.create_record(self) do |record|
28
+ block.call(record) if block.is_a? Proc
29
+ end
30
+ else
31
+ adapter.update_record(self) do |record|
32
+ block.call(record) if block.is_a? Proc
33
+ end
34
+ end
35
+ end
36
+
37
+ def serialize(options={})
38
+ self.class.get_class_adapter.serialize(self, options)
39
+ end
40
+
41
+ module ClassMethods
42
+
43
+ def adapter(adapter_class, *args)
44
+ if adapter_class.is_a? String
45
+ @adapter = adapter_class.constantize.new(*args)
46
+ else
47
+ @adapter = adapter_class.new(*args)
48
+ end
49
+ end
50
+
51
+ def find(id=nil, &block)
52
+ adapter = self.get_class_adapter
53
+ if id.nil?
54
+ # Return all records
55
+ records = RecordArray.new(item_class: self.class)
56
+ adapter.find_all(self, records) do |records|
57
+ block.call(records) if block.is_a? Proc
58
+ end
59
+ elsif id.is_a? Array
60
+ # Return records with given ids
61
+ records = RecordArray.new(item_class: self.class)
62
+ id.each do |i|
63
+ records << self.new(id: i)
64
+ end
65
+ adapter.find_many(self, records, id) do |records|
66
+ block.call(records) if block.is_a? Proc
67
+ end
68
+ elsif id.is_a? Hash
69
+ # Return records matching query
70
+ records = RecordArray.new(item_class: self.class)
71
+ adapter.find_query(self, records, id) do |records|
72
+ block.call(records) if block.is_a? Proc
73
+ end
74
+ else
75
+ record = self.new(id: id)
76
+ adapter.find(record, id) do |record|
77
+ block.call(record) if block.is_a? Proc
78
+ end
79
+ end
80
+ end
81
+ alias_method :all, :find
82
+ alias_method :where, :find
83
+
84
+ def get_class_adapter
85
+ @adapter ||= Adapter.new
86
+ end
87
+
88
+ end
89
+
90
+ def self.included(base)
91
+ base.extend(ClassMethods)
92
+ end
93
+
94
+ end
95
+
96
+ end
@@ -2,22 +2,64 @@ motion_require 'observable'
2
2
 
3
3
  module Loco
4
4
 
5
- class RecordArray < Array
5
+ class RecordArray
6
6
  include Observable
7
+ property :belongs_to
8
+ property :content
9
+ property :is_loaded, :string
10
+ property :item_class
11
+ property :length, :integer
7
12
 
8
- def load(type, data)
9
- self.removeAllObjects
10
- data.each do |item_data|
11
- self.addObject(type.new(item_data))
13
+ def <<(record)
14
+ self.addObjectsFromArray([record])
15
+ end
16
+
17
+ def addObjectsFromArray(objects)
18
+ objects.each do |object|
19
+ object.send("#{self.belongs_to.class.to_s.underscore}=", self.belongs_to) if self.belongs_to
12
20
  end
21
+ self.content.addObjectsFromArray(objects)
22
+ update_properties
13
23
  self
14
24
  end
15
25
 
16
26
  def initialize(properties={})
17
- self.init
27
+ super
28
+ self.content = Array.new
29
+ self.length = 0
30
+ self
31
+ end
32
+
33
+ def load(type, data=nil)
34
+ if type.is_a? RecordArray
35
+ self.content = type.content
36
+ else
37
+ self.item_class = type
38
+ self.content.removeAllObjects
39
+ data.each do |item_data|
40
+ self.content.addObject(type.new(item_data))
41
+ end
42
+ end
43
+
44
+ update_properties
45
+ self.is_loaded = true
46
+
18
47
  self
19
48
  end
20
49
 
50
+ def method_missing(method, *args, &block)
51
+ self.content.send(method, *args, &block)
52
+ end
53
+
54
+ private
55
+
56
+ def update_properties
57
+ self.length = self.content.length
58
+ if self.belongs_to
59
+ self.belongs_to.send("#{self.item_class.to_s.underscore.singularize}_ids=", self.content.map(&:id))
60
+ end
61
+ end
62
+
21
63
  end
22
64
 
23
65
  end
@@ -9,6 +9,17 @@ module Loco
9
9
  # relative to the superview's bottom edge.
10
10
  # @return [Integer]
11
11
  attr_accessor :bottom
12
+ def bottom
13
+ if @bottom.is_a?(String)
14
+ if self.parentView
15
+ self.parentView.bounds.size.height * (@bottom.gsub('%', '').to_f / 100.0)
16
+ else
17
+ 0
18
+ end
19
+ else
20
+ @bottom
21
+ end
22
+ end
12
23
  def bottom=(bottom)
13
24
  super
14
25
  refresh_layout
@@ -17,6 +28,13 @@ module Loco
17
28
  # The height of the view.
18
29
  # @return [Integer]
19
30
  attr_accessor :height
31
+ def height
32
+ if @height.is_a?(String)
33
+ self.parentView ? self.parentView.bounds.size.height * (@height.gsub('%', '').to_f / 100.0) : 0
34
+ else
35
+ @height
36
+ end
37
+ end
20
38
  def height=(height)
21
39
  super
22
40
  refresh_layout
@@ -26,6 +44,13 @@ module Loco
26
44
  # relative to the superview's left edge.
27
45
  # @return [Integer]
28
46
  attr_accessor :left
47
+ def left
48
+ if @left.is_a?(String)
49
+ self.parentView ? self.parentView.bounds.size.width * (@left.gsub('%', '').to_f / 100.0) : 0
50
+ else
51
+ @left
52
+ end
53
+ end
29
54
  def left=(left)
30
55
  super
31
56
  refresh_layout
@@ -35,6 +60,13 @@ module Loco
35
60
  # relative to the superview's right edge.
36
61
  # @return [Integer]
37
62
  attr_accessor :right
63
+ def right
64
+ if @right.is_a?(String)
65
+ self.parentView ? self.parentView.bounds.size.width * (@right.gsub('%', '').to_f / 100.0) : 0
66
+ else
67
+ @right
68
+ end
69
+ end
38
70
  def right=(right)
39
71
  super
40
72
  refresh_layout
@@ -44,6 +76,13 @@ module Loco
44
76
  # relative to the superview's top edge.
45
77
  # @return [Integer]
46
78
  attr_accessor :top
79
+ def top
80
+ if @top.is_a?(String)
81
+ self.parentView ? self.parentView.bounds.size.height * (@top.gsub('%', '').to_f / 100.0) : 0
82
+ else
83
+ @top
84
+ end
85
+ end
47
86
  def top=(top)
48
87
  super
49
88
  refresh_layout
@@ -52,6 +91,13 @@ module Loco
52
91
  # The width of the view.
53
92
  # @return [Integer]
54
93
  attr_accessor :width
94
+ def width
95
+ if @width.is_a?(String)
96
+ self.parentView ? self.parentView.bounds.size.width * (@width.gsub('%', '').to_f / 100.0) : 0
97
+ else
98
+ @width
99
+ end
100
+ end
55
101
  def width=(width)
56
102
  super
57
103
  refresh_layout
@@ -235,6 +281,7 @@ module Loco
235
281
  view.refresh_layout(self) if view.is_a? Resizable
236
282
  end
237
283
  end
284
+ alias_method :refreshLayout, :refresh_layout
238
285
 
239
286
  def view_setup
240
287
  viewSetup
@@ -249,6 +296,7 @@ module Loco
249
296
  self.parentView = superview
250
297
  refresh_layout(superview)
251
298
  end
299
+
252
300
  end
253
301
 
254
302
  end
@@ -14,6 +14,7 @@ module Loco
14
14
  end
15
15
  save_data_for_type(type)
16
16
  load(type, record, data)
17
+ save_has_many(record)
17
18
  block.call(record) if block.is_a? Proc
18
19
  record
19
20
  end
@@ -73,6 +74,7 @@ module Loco
73
74
  end
74
75
  save_data_for_type(type)
75
76
  load(type, record, data)
77
+ save_has_many(record)
76
78
  block.call(record) if block.is_a? Proc
77
79
  record
78
80
  else
@@ -186,6 +188,15 @@ module Loco
186
188
  raise "Error when saving #{type}: #{error[0].description}" unless context(type).save(error)
187
189
  end
188
190
 
191
+ def save_has_many(record)
192
+ record.class.get_class_relationships.select{|relationship| relationship[:has_many] }.each do |relationship|
193
+ related = record.send("#{relationship[:has_many]}")
194
+ related.each do |r|
195
+ r.save
196
+ end
197
+ end
198
+ end
199
+
189
200
  def transform_data(type, data)
190
201
  if data.is_a? Array
191
202
  super(type, data.map{|object|
@@ -1,3 +1,3 @@
1
1
  module Loco
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
@@ -23,6 +23,51 @@ module Loco
23
23
  class Label < UILabel
24
24
  include Resizable
25
25
  include Observable
26
+
27
+ def text_align
28
+ case self.textAlignment
29
+ when NSTextAlignmentLeft
30
+ 'left'
31
+ when NSTextAlignmentCenter
32
+ 'center'
33
+ when NSTextAlignmentRight
34
+ 'right'
35
+ when NSTextAlignmentJustified
36
+ 'justified'
37
+ when NSTextAlignmentNatural
38
+ 'natural'
39
+ end
40
+ end
41
+ alias_method :textAlign, :text_align
42
+
43
+ def text_align=(alignment)
44
+ case alignment
45
+ when 'left'
46
+ self.textAlignment = NSTextAlignmentLeft
47
+ when 'center'
48
+ self.textAlignment = NSTextAlignmentCenter
49
+ when 'right'
50
+ self.textAlignment = NSTextAlignmentRight
51
+ when 'justified'
52
+ self.textAlignment = NSTextAlignmentJustified
53
+ when 'natural'
54
+ self.textAlignment = NSTextAlignmentNatural
55
+ end
56
+ end
57
+ alias_method :textAlign=, :text_align=
58
+
59
+ def textAlignment=(alignment)
60
+ if alignment.is_a? String
61
+ self.text_align = alignment
62
+ else
63
+ super
64
+ end
65
+ end
66
+ end
67
+
68
+ class PageControl < UIPageControl
69
+ include Resizable
70
+ include Observable
26
71
  end
27
72
 
28
73
  class PickerView < UIPickerView
@@ -58,6 +103,16 @@ module Loco
58
103
  class View < UIView
59
104
  include Resizable
60
105
  include Observable
106
+
107
+ def border_radius
108
+ self.layer.cornerRadius
109
+ end
110
+ alias_method :borderRadius, :border_radius
111
+
112
+ def border_radius=(radius)
113
+ self.layer.cornerRadius = radius
114
+ end
115
+ alias_method :borderRadius=, :border_radius=
61
116
  end
62
117
 
63
118
  class WebView < UIWebView
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-loco
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Pattison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-23 00:00:00.000000000 Z
11
+ date: 2013-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print_motion
@@ -70,17 +70,17 @@ dependencies:
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ! '>='
73
+ - - '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- description: ! "Motion-Loco is a library for RubyMotion that includes Ember.js inspired\n
83
+ description: "Motion-Loco is a library for RubyMotion that includes Ember.js inspired\n
84
84
  \ bindings, computed properties, and observers.\n Also
85
85
  included is a set of views that are easier to position and size.\n "
86
86
  email:
@@ -91,11 +91,14 @@ extra_rdoc_files: []
91
91
  files:
92
92
  - README.md
93
93
  - lib/motion-loco/adapter.rb
94
+ - lib/motion-loco/array_controller.rb
95
+ - lib/motion-loco/associatable.rb
94
96
  - lib/motion-loco/controller.rb
95
97
  - lib/motion-loco/convenience_methods.rb
96
98
  - lib/motion-loco/fixture_adapter.rb
97
99
  - lib/motion-loco/model.rb
98
100
  - lib/motion-loco/observable.rb
101
+ - lib/motion-loco/persistable.rb
99
102
  - lib/motion-loco/proc.rb
100
103
  - lib/motion-loco/record_array.rb
101
104
  - lib/motion-loco/resizable.rb
@@ -116,17 +119,17 @@ require_paths:
116
119
  - lib
117
120
  required_ruby_version: !ruby/object:Gem::Requirement
118
121
  requirements:
119
- - - ! '>='
122
+ - - '>='
120
123
  - !ruby/object:Gem::Version
121
124
  version: '0'
122
125
  required_rubygems_version: !ruby/object:Gem::Requirement
123
126
  requirements:
124
- - - ! '>='
127
+ - - '>='
125
128
  - !ruby/object:Gem::Version
126
129
  version: '0'
127
130
  requirements: []
128
131
  rubyforge_project:
129
- rubygems_version: 2.0.3
132
+ rubygems_version: 2.1.4
130
133
  signing_key:
131
134
  specification_version: 4
132
135
  summary: Library for RubyMotion that includes Ember.js inspired bindings, computed