motion_record 0.0.1 → 0.0.2
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.
- checksums.yaml +5 -13
- data/README.md +35 -46
- data/lib/motion_record/base.rb +2 -0
- data/lib/motion_record/persistence.rb +5 -8
- data/lib/motion_record/scope.rb +5 -1
- data/lib/motion_record/scope_helpers.rb +4 -0
- data/lib/motion_record/serialization.rb +17 -8
- data/lib/motion_record/version.rb +1 -1
- data/lib/motion_record.rb +3 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
YTgzNmU2OTFhMzVhNjRiYWZlNGY1MjZiZDQ0MWI5Njk0Y2VlMTQ3Zg==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 806d2c421426bad6f8c077bcd5a6d12e74015367
|
4
|
+
data.tar.gz: 2a906afefcc90eecd49b3f03badeda1bee7f3171
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NDViNWZkYmQ0NjhlZTFlMzM5NjAyOGIwNTMzYjQzNzEzMDhkNGE0OTkzZWM4
|
11
|
-
MTRkNDg4ZTA1N2NiYWJmNjBiZDcwY2I0Mjk5NTI0NzdjZWNjZmI=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZDkxM2Y1ODI4NTFmYmExZjMwZjM2MzEzOTgxMjRiNWYyYWM1ODlmNWE4YWJk
|
14
|
-
MTNlNTY5ZTMyOTExZWE2ODRjYzRkYTZjODYyNDYzZGQ4ZGUxYjJjMmNhMmEy
|
15
|
-
YjMyYTRlMmRiYzhmNDIwOTUyMzEzOWM4MmRmMWI1Njk2M2U2MDY=
|
6
|
+
metadata.gz: e46095019c1d27c71be32543d3b8896f909a0f64446e4fdd6a76d8e39e2d59fbcb00bdc806206a17fa5554e9b0f73264b7769deb79d5b25dbdc6281d554be082
|
7
|
+
data.tar.gz: f314d3c7defa369ab86623572789dcea5f9c0127e46a45325100a4ccd64b4846779c336a3c31525dd39199403e9525e078cb0eb58c7f454b7159409b38cddf4f
|
data/README.md
CHANGED
@@ -6,9 +6,9 @@ MotionRecord
|
|
6
6
|
Everything you need to start using SQLite as the datastore for your RubyMotion
|
7
7
|
app.
|
8
8
|
|
9
|
-
:turtle: Android support should be coming soon
|
9
|
+
:turtle: Android support should be [coming soon](https://github.com/magoosh/motion_record/issues/3)
|
10
10
|
|
11
|
-
[](https://codeclimate.com/github/magoosh/motion_record) [](https://codeclimate.com/github/magoosh/motion_record)
|
11
|
+
[](http://badge.fury.io/rb/motion_record) [](https://codeclimate.com/github/magoosh/motion_record) [](https://codeclimate.com/github/magoosh/motion_record)
|
12
12
|
|
13
13
|
Installation
|
14
14
|
------------
|
@@ -35,7 +35,38 @@ And then execute:
|
|
35
35
|
$ bundle
|
36
36
|
```
|
37
37
|
|
38
|
-
|
38
|
+
MotionRecord::Base
|
39
|
+
------------------
|
40
|
+
|
41
|
+
MotionRecord::Base provides a superclass for defining objects which are stored
|
42
|
+
in the database.
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
class Message < MotionRecord::Base
|
46
|
+
# That's all!
|
47
|
+
end
|
48
|
+
```
|
49
|
+
|
50
|
+
Attribute methods are inferred from the associated SQLite table definition.
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
message = Message.new(subject: "Welcome!", body: "If you have any questions...")
|
54
|
+
# => #<Message: @id=nil @subject="Welcome!" @body="If you have any..." ...>
|
55
|
+
message.satisfaction
|
56
|
+
# => 0.0
|
57
|
+
```
|
58
|
+
|
59
|
+
Manage persistence with `save!`, `delete!`, and `persisted?`
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
message = Message.new(subject: "Welcome!", body: "If you have any questions...")
|
63
|
+
message.save!
|
64
|
+
message.id
|
65
|
+
# => 1
|
66
|
+
message.delete!
|
67
|
+
message.persisted?
|
68
|
+
# => false
|
69
|
+
```
|
39
70
|
|
40
71
|
MotionRecord::Schema
|
41
72
|
--------------------
|
@@ -82,41 +113,6 @@ which will be cleared every time the app process is killed.
|
|
82
113
|
MotionRecord::Schema.up!(file: :memory) # ...
|
83
114
|
```
|
84
115
|
|
85
|
-
MotionRecord::Base
|
86
|
-
------------------
|
87
|
-
|
88
|
-
MotionRecord::Base provides a superclass for defining objects which are stored
|
89
|
-
in the database.
|
90
|
-
|
91
|
-
```ruby
|
92
|
-
class Message < MotionRecord::Base
|
93
|
-
# That's all!
|
94
|
-
end
|
95
|
-
```
|
96
|
-
|
97
|
-
Attribute methods are inferred from the associated SQLite table definition.
|
98
|
-
|
99
|
-
```ruby
|
100
|
-
message = Message.new(subject: "Welcome!", body: "If you have any questions...")
|
101
|
-
# => #<Message: @id=nil @subject="Welcome!" @body="If you have any..." ...>
|
102
|
-
message.satisfaction
|
103
|
-
# => 0.0
|
104
|
-
```
|
105
|
-
|
106
|
-
Manage persistence with `save!`, `delete!`, and `persisted?`
|
107
|
-
|
108
|
-
```ruby
|
109
|
-
message = Message.new(subject: "Welcome!", body: "If you have any questions...")
|
110
|
-
message.save!
|
111
|
-
message.id
|
112
|
-
# => 1
|
113
|
-
message.delete!
|
114
|
-
message.persisted?
|
115
|
-
# => false
|
116
|
-
```
|
117
|
-
|
118
|
-
* TODO: Better default inflection of class names to table names
|
119
|
-
|
120
116
|
MotionRecord::Scope
|
121
117
|
-------------------
|
122
118
|
|
@@ -141,8 +137,6 @@ Message.where(read_at: nil).find_all
|
|
141
137
|
Message.where(read_at: nil).update_all(read_at: Time.now.to_i)
|
142
138
|
```
|
143
139
|
|
144
|
-
* TODO: Return "rows modified" count for update_all and delete_all
|
145
|
-
|
146
140
|
Run calculations on scopes with `count`, `sum`, `maximum`, `minimum`, and
|
147
141
|
`average`.
|
148
142
|
|
@@ -153,9 +147,6 @@ Message.where(subject: "How do you like the app?").maximum(:satisfaction)
|
|
153
147
|
# => 10.0
|
154
148
|
```
|
155
149
|
|
156
|
-
* TODO: Predicates for comparisons other than `=`
|
157
|
-
* TODO: Handle datatype conversion in `where` and `update_all`
|
158
|
-
|
159
150
|
MotionRecord::Serialization
|
160
151
|
----------------------------------
|
161
152
|
|
@@ -203,8 +194,6 @@ Survey.first
|
|
203
194
|
# => #<Survey: @id=1 @response={"nps"=>10, "what_can_we_improve"=>"Nothing :)"}>
|
204
195
|
```
|
205
196
|
|
206
|
-
* TODO: Make JSON serializer cross-platform
|
207
|
-
|
208
197
|
#### Custom Serializers
|
209
198
|
|
210
199
|
To write a custom serializer, extend MotionRecord::Serialization::BaseSerializer
|
@@ -231,7 +220,7 @@ end
|
|
231
220
|
MotionRecord::Association
|
232
221
|
-------------------------
|
233
222
|
|
234
|
-
|
223
|
+
[TODO](https://github.com/magoosh/motion_record/issues/7)
|
235
224
|
|
236
225
|
|
237
226
|
Contributing
|
data/lib/motion_record/base.rb
CHANGED
@@ -13,10 +13,6 @@ module MotionRecord
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
def primary_key_condition
|
17
|
-
{self.class.primary_key => self.instance_variable_get("@#{self.class.primary_key}")}
|
18
|
-
end
|
19
|
-
|
20
16
|
def persisted?
|
21
17
|
!!@persisted
|
22
18
|
end
|
@@ -36,7 +32,7 @@ module MotionRecord
|
|
36
32
|
self.class.table_columns
|
37
33
|
|
38
34
|
params = self.to_attribute_hash.reject { |k, _v| k == self.class.primary_key }
|
39
|
-
table_params = self.class.
|
35
|
+
table_params = self.class.serialize_table_params(params)
|
40
36
|
|
41
37
|
if persisted?
|
42
38
|
self.class.where(primary_key_condition).update_all(table_params)
|
@@ -47,10 +43,11 @@ module MotionRecord
|
|
47
43
|
self.mark_persisted!
|
48
44
|
end
|
49
45
|
|
50
|
-
|
51
|
-
|
52
|
-
|
46
|
+
def primary_key_condition
|
47
|
+
{self.class.primary_key => self.instance_variable_get("@#{self.class.primary_key}")}
|
48
|
+
end
|
53
49
|
|
50
|
+
module ClassMethods
|
54
51
|
def create!(attributes={})
|
55
52
|
self.new(attributes).save!
|
56
53
|
end
|
data/lib/motion_record/scope.rb
CHANGED
@@ -43,7 +43,11 @@ module MotionRecord
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def find_all
|
46
|
-
connection.select(self).map
|
46
|
+
connection.select(self).map do |row|
|
47
|
+
record = @klass.new(@klass.deserialize_table_params(row))
|
48
|
+
record.mark_persisted!
|
49
|
+
record
|
50
|
+
end
|
47
51
|
end
|
48
52
|
|
49
53
|
def pluck(attribute)
|
@@ -23,19 +23,24 @@ module MotionRecord
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
#
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
# Deserialize a Hash of attributes from their database representation
|
27
|
+
#
|
28
|
+
# params - a Hash of Symbol column names to SQLite values
|
29
|
+
#
|
30
|
+
# Returns a Hash with all values replaced by their deserialized versions
|
31
|
+
def deserialize_table_params(params)
|
32
|
+
params.each_with_object({}) do |name_and_value, attributes|
|
33
|
+
name, value = name_and_value
|
30
34
|
attributes[name.to_sym] = serializer(name.to_sym).deserialize(value)
|
31
35
|
end
|
32
|
-
record = self.new(attributes)
|
33
|
-
record.mark_persisted!
|
34
|
-
record
|
35
36
|
end
|
36
37
|
|
37
38
|
# Serialize a Hash of attributes to their database representation
|
38
|
-
|
39
|
+
#
|
40
|
+
# params - a Hash of Symbol column names to their attribute values
|
41
|
+
#
|
42
|
+
# Returns a Hash with all values replaced by their serialized versions
|
43
|
+
def serialize_table_params(hash)
|
39
44
|
hash.each_with_object({}) do |attribute_and_value, params|
|
40
45
|
attribute, value = attribute_and_value
|
41
46
|
params[attribute] = serializer(attribute).serialize(value)
|
@@ -64,5 +69,9 @@ module MotionRecord
|
|
64
69
|
serializer_classes[attribute].new(table_columns[attribute])
|
65
70
|
end
|
66
71
|
end
|
72
|
+
|
73
|
+
def self.included(base)
|
74
|
+
base.extend(ClassMethods)
|
75
|
+
end
|
67
76
|
end
|
68
77
|
end
|
data/lib/motion_record.rb
CHANGED
@@ -26,7 +26,9 @@ Motion::Project::App.setup do |app|
|
|
26
26
|
|
27
27
|
# Some files don't have the same dependency order and alphabetic order
|
28
28
|
{
|
29
|
-
"motion_record/
|
29
|
+
"motion_record/base.rb" => "motion_record/persistence.rb",
|
30
|
+
"motion_record/base.rb" => "motion_record/serialization.rb",
|
31
|
+
"motion_record/base.rb" => "motion_record/scope_helpers.rb"
|
30
32
|
}.each do |file, dependency|
|
31
33
|
app.files_dependencies File.join(dirname, file) => File.join(dirname, dependency)
|
32
34
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zach Millman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,14 +28,14 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
description: Mini ActiveRecord for RubyMotion
|
@@ -82,12 +82,12 @@ require_paths:
|
|
82
82
|
- lib
|
83
83
|
required_ruby_version: !ruby/object:Gem::Requirement
|
84
84
|
requirements:
|
85
|
-
- -
|
85
|
+
- - '>='
|
86
86
|
- !ruby/object:Gem::Version
|
87
87
|
version: '0'
|
88
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
89
|
requirements:
|
90
|
-
- -
|
90
|
+
- - '>='
|
91
91
|
- !ruby/object:Gem::Version
|
92
92
|
version: '0'
|
93
93
|
requirements: []
|