sunstone 6.1.0.2 → 6.1.3
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 +4 -4
- data/ext/active_record/finder_methods.rb +2 -1
- data/lib/active_record/connection_adapters/sunstone/column.rb +1 -1
- data/lib/sunstone/version.rb +1 -1
- metadata +18 -58
- data/.github/workflows/main.yml +0 -141
- data/.gitignore +0 -31
- data/.tm_properties +0 -1
- data/Gemfile +0 -4
- data/README.md +0 -46
- data/Rakefile +0 -37
- data/TODO.md +0 -89
- data/sunstone.gemspec +0 -40
- data/test/active_record/associations/belongs_to_test.rb +0 -162
- data/test/active_record/associations/has_and_belongs_to_many_test.rb +0 -125
- data/test/active_record/associations/has_many_test.rb +0 -244
- data/test/active_record/eager_loading_test.rb +0 -62
- data/test/active_record/persistance_test.rb +0 -184
- data/test/active_record/preload_test.rb +0 -51
- data/test/active_record/query/all_test.rb +0 -33
- data/test/active_record/query/count_test.rb +0 -51
- data/test/active_record/query/distinct_test.rb +0 -30
- data/test/active_record/query/find_test.rb +0 -37
- data/test/active_record/query/limit_test.rb +0 -19
- data/test/active_record/query/order_test.rb +0 -27
- data/test/active_record/query/where_test.rb +0 -79
- data/test/active_record/query_test.rb +0 -131
- data/test/active_record/rpc_test.rb +0 -30
- data/test/schema_mock.rb +0 -121
- data/test/sunstone/connection/column_definition_test.rb +0 -30
- data/test/sunstone/connection/configuration_test.rb +0 -44
- data/test/sunstone/connection/cookie_store_test.rb +0 -37
- data/test/sunstone/connection/request_helper_test.rb +0 -105
- data/test/sunstone/connection/send_request_test.rb +0 -164
- data/test/sunstone/connection_test.rb +0 -23
- data/test/test_helper.rb +0 -153
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67c26e8a4275aa67d9e09b43cfce417732142a043b6ca49d2c1e85bbfb74950d
|
4
|
+
data.tar.gz: a46c586fe763e9d90029a007074919fca9e997efa8ddddf57588136d6cb2b883
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1fd7cb872485fa5507d1bcb21e28e81d92b807279fbdbf12440a74de32cd39c4584c42e6f0ea1fd371261a3c614358967d94c1abc30bb304b2364bb8ae7e9dab
|
7
|
+
data.tar.gz: 3d3105125dfaad25f7884648406444ca3a4dab3e2782b482659179ca8a484ce52bded0222af6b48210ad7f0f00c901ca92a3e780380b22d4b62cb3e3c57019f8
|
@@ -212,7 +212,7 @@ module ActiveRecord
|
|
212
212
|
).reflections
|
213
213
|
)
|
214
214
|
)
|
215
|
-
if has_limit_or_offset?
|
215
|
+
if has_limit_or_offset? && !connection.is_a?(ActiveRecord::ConnectionAdapters::SunstoneAPIAdapter)
|
216
216
|
limited_ids = limited_ids_for(relation)
|
217
217
|
limited_ids.empty? ? relation.none! : relation.where!(primary_key => limited_ids)
|
218
218
|
end
|
@@ -225,6 +225,7 @@ module ActiveRecord
|
|
225
225
|
relation
|
226
226
|
end
|
227
227
|
end
|
228
|
+
|
228
229
|
end
|
229
230
|
|
230
231
|
end
|
@@ -8,7 +8,7 @@ module ActiveRecord
|
|
8
8
|
@name = name.freeze
|
9
9
|
@sql_type_metadata = sql_type_metadata
|
10
10
|
@null = options['null']
|
11
|
-
@default = options['default']
|
11
|
+
@default = (sql_type_metadata.type == :json ? JSON.generate(options['default']) : options['default'])
|
12
12
|
@default_function = nil
|
13
13
|
@collation = nil
|
14
14
|
@table_name = nil
|
data/lib/sunstone/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sunstone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.1.
|
4
|
+
version: 6.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Bracy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -222,6 +222,20 @@ dependencies:
|
|
222
222
|
version: '0'
|
223
223
|
- !ruby/object:Gem::Dependency
|
224
224
|
name: activerecord
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - ">="
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: 6.1.3
|
230
|
+
type: :runtime
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - ">="
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: 6.1.3
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: arel-extensions
|
225
239
|
requirement: !ruby/object:Gem::Requirement
|
226
240
|
requirements:
|
227
241
|
- - ">="
|
@@ -235,7 +249,7 @@ dependencies:
|
|
235
249
|
- !ruby/object:Gem::Version
|
236
250
|
version: 6.1.0
|
237
251
|
- !ruby/object:Gem::Dependency
|
238
|
-
name:
|
252
|
+
name: activerecord-filter
|
239
253
|
requirement: !ruby/object:Gem::Requirement
|
240
254
|
requirements:
|
241
255
|
- - ">="
|
@@ -255,14 +269,7 @@ executables: []
|
|
255
269
|
extensions: []
|
256
270
|
extra_rdoc_files: []
|
257
271
|
files:
|
258
|
-
- ".github/workflows/main.yml"
|
259
|
-
- ".gitignore"
|
260
|
-
- ".tm_properties"
|
261
|
-
- Gemfile
|
262
272
|
- LICENSE
|
263
|
-
- README.md
|
264
|
-
- Rakefile
|
265
|
-
- TODO.md
|
266
273
|
- ext/active_record/associations.rb
|
267
274
|
- ext/active_record/associations/collection_association.rb
|
268
275
|
- ext/active_record/attribute_methods.rb
|
@@ -298,30 +305,6 @@ files:
|
|
298
305
|
- lib/sunstone/exception.rb
|
299
306
|
- lib/sunstone/gis.rb
|
300
307
|
- lib/sunstone/version.rb
|
301
|
-
- sunstone.gemspec
|
302
|
-
- test/active_record/associations/belongs_to_test.rb
|
303
|
-
- test/active_record/associations/has_and_belongs_to_many_test.rb
|
304
|
-
- test/active_record/associations/has_many_test.rb
|
305
|
-
- test/active_record/eager_loading_test.rb
|
306
|
-
- test/active_record/persistance_test.rb
|
307
|
-
- test/active_record/preload_test.rb
|
308
|
-
- test/active_record/query/all_test.rb
|
309
|
-
- test/active_record/query/count_test.rb
|
310
|
-
- test/active_record/query/distinct_test.rb
|
311
|
-
- test/active_record/query/find_test.rb
|
312
|
-
- test/active_record/query/limit_test.rb
|
313
|
-
- test/active_record/query/order_test.rb
|
314
|
-
- test/active_record/query/where_test.rb
|
315
|
-
- test/active_record/query_test.rb
|
316
|
-
- test/active_record/rpc_test.rb
|
317
|
-
- test/schema_mock.rb
|
318
|
-
- test/sunstone/connection/column_definition_test.rb
|
319
|
-
- test/sunstone/connection/configuration_test.rb
|
320
|
-
- test/sunstone/connection/cookie_store_test.rb
|
321
|
-
- test/sunstone/connection/request_helper_test.rb
|
322
|
-
- test/sunstone/connection/send_request_test.rb
|
323
|
-
- test/sunstone/connection_test.rb
|
324
|
-
- test/test_helper.rb
|
325
308
|
homepage: http://sunstonerb.com
|
326
309
|
licenses: []
|
327
310
|
metadata: {}
|
@@ -344,27 +327,4 @@ rubygems_version: 3.2.3
|
|
344
327
|
signing_key:
|
345
328
|
specification_version: 4
|
346
329
|
summary: A library for interacting with REST APIs
|
347
|
-
test_files:
|
348
|
-
- test/active_record/associations/belongs_to_test.rb
|
349
|
-
- test/active_record/associations/has_and_belongs_to_many_test.rb
|
350
|
-
- test/active_record/associations/has_many_test.rb
|
351
|
-
- test/active_record/eager_loading_test.rb
|
352
|
-
- test/active_record/persistance_test.rb
|
353
|
-
- test/active_record/preload_test.rb
|
354
|
-
- test/active_record/query/all_test.rb
|
355
|
-
- test/active_record/query/count_test.rb
|
356
|
-
- test/active_record/query/distinct_test.rb
|
357
|
-
- test/active_record/query/find_test.rb
|
358
|
-
- test/active_record/query/limit_test.rb
|
359
|
-
- test/active_record/query/order_test.rb
|
360
|
-
- test/active_record/query/where_test.rb
|
361
|
-
- test/active_record/query_test.rb
|
362
|
-
- test/active_record/rpc_test.rb
|
363
|
-
- test/schema_mock.rb
|
364
|
-
- test/sunstone/connection/column_definition_test.rb
|
365
|
-
- test/sunstone/connection/configuration_test.rb
|
366
|
-
- test/sunstone/connection/cookie_store_test.rb
|
367
|
-
- test/sunstone/connection/request_helper_test.rb
|
368
|
-
- test/sunstone/connection/send_request_test.rb
|
369
|
-
- test/sunstone/connection_test.rb
|
370
|
-
- test/test_helper.rb
|
330
|
+
test_files: []
|
data/.github/workflows/main.yml
DELETED
@@ -1,141 +0,0 @@
|
|
1
|
-
name: CI
|
2
|
-
|
3
|
-
on:
|
4
|
-
push:
|
5
|
-
branches: [ master ]
|
6
|
-
pull_request:
|
7
|
-
branches: [ master ]
|
8
|
-
|
9
|
-
jobs:
|
10
|
-
sunstone:
|
11
|
-
name: Sunstone Test
|
12
|
-
runs-on: ubuntu-20.04
|
13
|
-
|
14
|
-
steps:
|
15
|
-
- uses: ruby/setup-ruby@v1
|
16
|
-
with:
|
17
|
-
ruby-version: 3.0
|
18
|
-
|
19
|
-
- uses: actions/checkout@v2
|
20
|
-
|
21
|
-
- run: bundle
|
22
|
-
|
23
|
-
- run: bundle exec rake test
|
24
|
-
|
25
|
-
ar-postgresql:
|
26
|
-
name: ActiveRecord PostgresQL Test
|
27
|
-
strategy:
|
28
|
-
matrix:
|
29
|
-
rails: [v6.1.3]
|
30
|
-
|
31
|
-
runs-on: ubuntu-20.04
|
32
|
-
|
33
|
-
steps:
|
34
|
-
- name: Install Postgresql
|
35
|
-
run: |
|
36
|
-
sudo apt-get install curl ca-certificates gnupg
|
37
|
-
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
38
|
-
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
39
|
-
sudo apt-get update
|
40
|
-
sudo apt-get install postgresql-13
|
41
|
-
sudo systemctl start postgresql@13-main.service
|
42
|
-
sudo -u postgres createuser runner --superuser
|
43
|
-
|
44
|
-
- uses: ruby/setup-ruby@v1
|
45
|
-
with:
|
46
|
-
ruby-version: 3.0
|
47
|
-
|
48
|
-
- uses: actions/checkout@v2
|
49
|
-
|
50
|
-
- name: Download Rails
|
51
|
-
run: |
|
52
|
-
git clone --branch ${{ matrix.rails }} https://github.com/rails/rails.git ~/rails
|
53
|
-
pushd ~/rails
|
54
|
-
cat /home/runner/work/_temp/*.sh
|
55
|
-
sed -i "s/Gem.ruby, '-w'/Gem.ruby, '-w0'/" ~/rails/activerecord/Rakefile
|
56
|
-
sed -i "s/t.warning = true/t.warning = false/g" ~/rails/activerecord/Rakefile
|
57
|
-
sed -i "/require 'support\/connection'/a \$LOAD_PATH.unshift\(File.expand_path\(ENV['GITHUB_WORKSPACE']\)\)\nrequire 'sunstone'" ~/rails/activerecord/test/cases/helper.rb
|
58
|
-
rm ~/rails/Gemfile.lock
|
59
|
-
sed -i "/# Active Record./a gem 'sunstone', path: File.expand_path\(ENV['GITHUB_WORKSPACE']\)" ~/rails/Gemfile
|
60
|
-
cat ~/rails/Gemfile
|
61
|
-
bundle update --jobs=3 --retry=3
|
62
|
-
|
63
|
-
- run: |
|
64
|
-
pushd ~/rails/activerecord
|
65
|
-
bundle exec rake db:postgresql:rebuild postgresql:test
|
66
|
-
bundle exec rake db:postgresql:rebuild postgresql:isolated_test
|
67
|
-
|
68
|
-
ar-sqlite:
|
69
|
-
name: ActiveRecord SQLite Test
|
70
|
-
strategy:
|
71
|
-
matrix:
|
72
|
-
rails: [v6.1.3]
|
73
|
-
|
74
|
-
runs-on: ubuntu-20.04
|
75
|
-
|
76
|
-
steps:
|
77
|
-
- uses: ruby/setup-ruby@v1
|
78
|
-
with:
|
79
|
-
ruby-version: 3.0
|
80
|
-
|
81
|
-
- uses: actions/checkout@v2
|
82
|
-
|
83
|
-
- name: Download Rails
|
84
|
-
run: |
|
85
|
-
git clone --branch ${{ matrix.rails }} https://github.com/rails/rails.git ~/rails
|
86
|
-
pushd ~/rails
|
87
|
-
cat /home/runner/work/_temp/*.sh
|
88
|
-
sed -i "s/Gem.ruby, '-w'/Gem.ruby, '-w0'/" ~/rails/activerecord/Rakefile
|
89
|
-
sed -i "s/t.warning = true/t.warning = false/g" ~/rails/activerecord/Rakefile
|
90
|
-
sed -i "/require 'support\/connection'/a \$LOAD_PATH.unshift\(File.expand_path\(ENV['GITHUB_WORKSPACE']\)\)\nrequire 'sunstone'" ~/rails/activerecord/test/cases/helper.rb
|
91
|
-
rm ~/rails/Gemfile.lock
|
92
|
-
sed -i "/# Active Record./a gem 'sunstone', path: File.expand_path\(ENV['GITHUB_WORKSPACE']\)" ~/rails/Gemfile
|
93
|
-
cat ~/rails/Gemfile
|
94
|
-
bundle update --jobs=3 --retry=3
|
95
|
-
|
96
|
-
- run: |
|
97
|
-
pushd ~/rails/activerecord
|
98
|
-
bundle exec rake sqlite3:test
|
99
|
-
rm test/db/*.sqlite3 test/fixtures/*.sqlite3
|
100
|
-
bundle exec rake sqlite3:isolated_test
|
101
|
-
rm test/db/*.sqlite3 test/fixtures/*.sqlite3
|
102
|
-
bundle exec rake sqlite3_mem:test
|
103
|
-
|
104
|
-
ar-mysql:
|
105
|
-
name: ActiveRecord MySQL Test
|
106
|
-
strategy:
|
107
|
-
matrix:
|
108
|
-
rails: [v6.1.3]
|
109
|
-
|
110
|
-
runs-on: ubuntu-20.04
|
111
|
-
|
112
|
-
steps:
|
113
|
-
- name: Install MySQL
|
114
|
-
run: |
|
115
|
-
sudo /etc/init.d/mysql start
|
116
|
-
mysql -uroot -proot -e "CREATE USER 'rails'@'%';"
|
117
|
-
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON *.* TO 'rails'@'%' WITH GRANT OPTION;"
|
118
|
-
|
119
|
-
- uses: ruby/setup-ruby@v1
|
120
|
-
with:
|
121
|
-
ruby-version: 3.0
|
122
|
-
|
123
|
-
- uses: actions/checkout@v2
|
124
|
-
|
125
|
-
- name: Download Rails
|
126
|
-
run: |
|
127
|
-
git clone --branch ${{ matrix.rails }} https://github.com/rails/rails.git ~/rails
|
128
|
-
pushd ~/rails
|
129
|
-
cat /home/runner/work/_temp/*.sh
|
130
|
-
sed -i "s/Gem.ruby, '-w'/Gem.ruby, '-w0'/" ~/rails/activerecord/Rakefile
|
131
|
-
sed -i "s/t.warning = true/t.warning = false/g" ~/rails/activerecord/Rakefile
|
132
|
-
sed -i "/require 'support\/connection'/a \$LOAD_PATH.unshift\(File.expand_path\(ENV['GITHUB_WORKSPACE']\)\)\nrequire 'sunstone'" ~/rails/activerecord/test/cases/helper.rb
|
133
|
-
rm ~/rails/Gemfile.lock
|
134
|
-
sed -i "/# Active Record./a gem 'sunstone', path: File.expand_path\(ENV['GITHUB_WORKSPACE']\)" ~/rails/Gemfile
|
135
|
-
cat ~/rails/Gemfile
|
136
|
-
bundle update --jobs=3 --retry=3
|
137
|
-
|
138
|
-
- run: |
|
139
|
-
pushd ~/rails/activerecord
|
140
|
-
bundle exec rake db:mysql:rebuild mysql2:test
|
141
|
-
bundle exec rake db:mysql:rebuild mysql2:isolated_test
|
data/.gitignore
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
*.gem
|
2
|
-
*.rbc
|
3
|
-
/.config
|
4
|
-
/coverage/
|
5
|
-
/InstalledFiles
|
6
|
-
/pkg/
|
7
|
-
/spec/reports/
|
8
|
-
/test/tmp/
|
9
|
-
/test/version_tmp/
|
10
|
-
/tmp/
|
11
|
-
.DS_Store
|
12
|
-
|
13
|
-
## Documentation cache and generated files:
|
14
|
-
/.yardoc/
|
15
|
-
/_yardoc/
|
16
|
-
/doc/
|
17
|
-
/rdoc/
|
18
|
-
|
19
|
-
## Environment normalisation:
|
20
|
-
/.bundle/
|
21
|
-
/lib/bundler/man/
|
22
|
-
|
23
|
-
# for a library or gem, you might want to ignore these files since the code is
|
24
|
-
# intended to run in multiple environments; otherwise, check them in:
|
25
|
-
Gemfile.lock
|
26
|
-
.ruby-version
|
27
|
-
.ruby-gemset
|
28
|
-
|
29
|
-
# Text Editor scraps
|
30
|
-
*~
|
31
|
-
.byebug_history
|
data/.tm_properties
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
exclude = '{$exclude,log,bin,tmp,.tm_properties,coverage}'
|
data/Gemfile
DELETED
data/README.md
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
# Sunstone
|
2
|
-
|
3
|
-
Sunstone is an [ActiveRecord](https://rubygems.org/gems/activerecord) adapter for quering
|
4
|
-
APIs conforming to [Standard API](https://github.com/waratuman/standardapi).
|
5
|
-
|
6
|
-
Configuration
|
7
|
-
-------------
|
8
|
-
|
9
|
-
### Rails
|
10
|
-
|
11
|
-
Add `sunstone` to your Gemfile:
|
12
|
-
|
13
|
-
```ruby
|
14
|
-
gem 'sunstone'
|
15
|
-
```
|
16
|
-
|
17
|
-
Update `config/database.yml`"
|
18
|
-
|
19
|
-
```yaml
|
20
|
-
development:
|
21
|
-
adapter: sunstone
|
22
|
-
url: https://mystanda.rd/api
|
23
|
-
api_key: ..optional..
|
24
|
-
user_agent: ..optional..
|
25
|
-
```
|
26
|
-
|
27
|
-
### Standalone ActiveRecord
|
28
|
-
|
29
|
-
Initialize the connection on `ActiveRecord::Base` or your abstract model (`ApplicationRecord` for example)
|
30
|
-
|
31
|
-
```ruby
|
32
|
-
ActiveRecord::Base.establish_connection(
|
33
|
-
adapter: 'sunstone',
|
34
|
-
url: 'https://mystanda.rd/api'
|
35
|
-
)
|
36
|
-
```
|
37
|
-
|
38
|
-
Usage
|
39
|
-
-----
|
40
|
-
|
41
|
-
Mention fitler / etc...
|
42
|
-
|
43
|
-
TODO:
|
44
|
-
=====
|
45
|
-
Make `cookie_store` and optional
|
46
|
-
stream building model instances with wankel
|
data/Rakefile
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'bundler/setup'
|
2
|
-
require "bundler/gem_tasks"
|
3
|
-
Bundler.require(:development)
|
4
|
-
require 'rake/testtask'
|
5
|
-
require 'rdoc/task'
|
6
|
-
|
7
|
-
task :console do
|
8
|
-
exec 'irb -I lib -r sunstone.rb'
|
9
|
-
end
|
10
|
-
task :c => :console
|
11
|
-
|
12
|
-
Rake::TestTask.new do |t|
|
13
|
-
t.libs << 'test'
|
14
|
-
t.test_files = FileList['test/**/*_test.rb']
|
15
|
-
t.warning = true
|
16
|
-
#t.verbose = true
|
17
|
-
end
|
18
|
-
|
19
|
-
Rake::RDocTask.new do |rd|
|
20
|
-
rd.main = 'README.md'
|
21
|
-
rd.title = 'Sunstone Documentation'
|
22
|
-
rd.rdoc_dir = 'doc'
|
23
|
-
|
24
|
-
rd.options << '-f' << 'sdoc'
|
25
|
-
rd.options << '-T' << '42floors'
|
26
|
-
rd.options << '-g' # Generate github links
|
27
|
-
|
28
|
-
rd.rdoc_files.include('README.rdoc')
|
29
|
-
rd.rdoc_files.include('lib/**/*.rb')
|
30
|
-
end
|
31
|
-
|
32
|
-
desc "Run tests"
|
33
|
-
task :default => :test
|
34
|
-
|
35
|
-
namespace :pages do
|
36
|
-
#TODO: https://github.com/defunkt/sdoc-helpers/blob/master/lib/sdoc_helpers/pages.rb
|
37
|
-
end
|
data/TODO.md
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
- Check if `Sunstone#to_key` needs to be added
|
2
|
-
|
3
|
-
- Add `Sunstone::Model::Persistance` with the following methods:
|
4
|
-
|
5
|
-
- `#new_record?`
|
6
|
-
- `#persisted?`
|
7
|
-
- `#save`
|
8
|
-
- `#save!`
|
9
|
-
- `#update`
|
10
|
-
- `#update!`
|
11
|
-
- `#create`
|
12
|
-
- `#to_param` ?
|
13
|
-
- `::all`
|
14
|
-
- `::where` (probably goes in an Arel like engine)
|
15
|
-
- `::build`
|
16
|
-
- `::create!`
|
17
|
-
- `#==`
|
18
|
-
- `::create`
|
19
|
-
|
20
|
-
```ruby
|
21
|
-
# Creates an object and saves it to the MLS. The resulting object is returned
|
22
|
-
# whether or no the object was saved successfully to the MLS or not.
|
23
|
-
#
|
24
|
-
# ==== Examples
|
25
|
-
# #!ruby
|
26
|
-
# # Create a single new object
|
27
|
-
# User.create(:first_name => 'Jamie')
|
28
|
-
#
|
29
|
-
# # Create a single object and pass it into a block to set other attributes.
|
30
|
-
# User.create(:first_name => 'Jamie') do |u|
|
31
|
-
# u.is_admin = false
|
32
|
-
# end
|
33
|
-
def self.create(attributes={}, &block) # TODO: testme
|
34
|
-
model = self.new(attributes)
|
35
|
-
yield(model) if block_given?
|
36
|
-
model.save
|
37
|
-
model
|
38
|
-
end
|
39
|
-
|
40
|
-
|
41
|
-
- Look at https://gist.github.com/malomalo/91f360fe52db3dbe1c99 files for inspiration, came from
|
42
|
-
Rails code I think
|
43
|
-
|
44
|
-
- Simplify `Sunstone::Type::Value` to `Sunstone::Type`
|
45
|
-
|
46
|
-
- Add a `find_class(type)` in `Sunstone::Schema`
|
47
|
-
|
48
|
-
- Possibly use Classes to hold information about each attribute in addition to the type
|
49
|
-
|
50
|
-
```ruby
|
51
|
-
class MLS::Attribute
|
52
|
-
|
53
|
-
DEFAULT_OPTIONS = { :serialize => true }
|
54
|
-
|
55
|
-
attr_reader :model, :name, :instance_variable_name, :options, :default
|
56
|
-
attr_reader :reader_visibility, :writer_visibility
|
57
|
-
|
58
|
-
def initialize(name, options={})
|
59
|
-
@name = name
|
60
|
-
@instance_variable_name = "@#{@name}".freeze
|
61
|
-
@options = DEFAULT_OPTIONS.merge(options)
|
62
|
-
|
63
|
-
@default = @options[:default]
|
64
|
-
@reader_visibility = @options[:reader] || :public
|
65
|
-
@writer_visibility = @options[:writer] || :public
|
66
|
-
end
|
67
|
-
end
|
68
|
-
```
|
69
|
-
|
70
|
-
- Use Association classes to model the association:
|
71
|
-
|
72
|
-
```ruby
|
73
|
-
class MLS::Association
|
74
|
-
class BelongsTo
|
75
|
-
attr_reader :klass, :foreign_key, :foreign_type, :primary_key, :polymorphic
|
76
|
-
|
77
|
-
def initialize(name, options={})
|
78
|
-
@name = name
|
79
|
-
@klass = options[:class_name] ? options[:class_name].constantize : name.camelize.constantize
|
80
|
-
|
81
|
-
@polymorphic = options[:polymorphic] || false
|
82
|
-
@foreign_key = options[:foreign_key] || "#{name}_id".to_sym
|
83
|
-
@foreign_type = options[:foreign_type] || "#{name}_type".to_sym
|
84
|
-
@primary_key = options[:primary_key] || :id
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
```
|