rom 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (175) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -3
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +13 -14
  5. data/{Changelog.md → CHANGELOG.md} +12 -3
  6. data/Gemfile +14 -10
  7. data/Gemfile.devtools +16 -16
  8. data/Guardfile +2 -5
  9. data/README.md +68 -56
  10. data/Rakefile +3 -3
  11. data/config/flay.yml +2 -2
  12. data/config/mutant.yml +2 -4
  13. data/config/rubocop.yml +30 -0
  14. data/lib/rom.rb +47 -9
  15. data/lib/rom/adapter.rb +52 -0
  16. data/lib/rom/adapter/memory.rb +70 -0
  17. data/lib/rom/boot.rb +158 -0
  18. data/lib/rom/boot/base_relation_dsl.rb +43 -0
  19. data/lib/rom/boot/dsl.rb +30 -0
  20. data/lib/rom/boot/mapper_dsl.rb +23 -0
  21. data/lib/rom/boot/relation_dsl.rb +23 -0
  22. data/lib/rom/boot/schema_dsl.rb +27 -0
  23. data/lib/rom/env.rb +48 -0
  24. data/lib/rom/header.rb +123 -0
  25. data/lib/rom/mapper.rb +38 -153
  26. data/lib/rom/mapper_builder.rb +85 -0
  27. data/lib/rom/model_builder.rb +58 -0
  28. data/lib/rom/ra.rb +196 -0
  29. data/lib/rom/ra/operation/group.rb +49 -0
  30. data/lib/rom/ra/operation/join.rb +41 -0
  31. data/lib/rom/ra/operation/wrap.rb +45 -0
  32. data/lib/rom/reader.rb +62 -0
  33. data/lib/rom/reader_builder.rb +28 -0
  34. data/lib/rom/relation.rb +41 -350
  35. data/lib/rom/relation_builder.rb +48 -0
  36. data/lib/rom/repository.rb +28 -53
  37. data/lib/rom/support/registry.rb +34 -0
  38. data/lib/rom/version.rb +3 -0
  39. data/rom.gemspec +12 -10
  40. data/spec/integration/adapters/extending_relations_spec.rb +43 -0
  41. data/spec/integration/mappers/definition_dsl_spec.rb +82 -0
  42. data/spec/integration/mappers/prefixing_attributes_spec.rb +42 -0
  43. data/spec/integration/mappers/renaming_attributes_spec.rb +138 -0
  44. data/spec/integration/ra/group_spec.rb +47 -0
  45. data/spec/integration/ra/join_spec.rb +24 -0
  46. data/spec/integration/ra/wrap_spec.rb +37 -0
  47. data/spec/integration/relations/reading_spec.rb +116 -0
  48. data/spec/integration/relations/registry_dsl_spec.rb +44 -0
  49. data/spec/integration/schema_spec.rb +29 -0
  50. data/spec/integration/setup_spec.rb +18 -0
  51. data/spec/shared/users_and_tasks.rb +34 -0
  52. data/spec/spec_helper.rb +14 -36
  53. data/spec/unit/rom/adapter_spec.rb +59 -0
  54. data/spec/unit/rom/header_spec.rb +58 -0
  55. data/spec/unit/rom/mapper_spec.rb +27 -0
  56. data/spec/unit/rom/ra/operation/group_spec.rb +55 -0
  57. data/spec/unit/rom/ra/operation/wrap_spec.rb +29 -0
  58. data/spec/unit/rom/relation_spec.rb +34 -0
  59. metadata +122 -190
  60. data/lib/rom/constants.rb +0 -16
  61. data/lib/rom/environment.rb +0 -105
  62. data/lib/rom/environment/builder.rb +0 -71
  63. data/lib/rom/mapper/attribute.rb +0 -108
  64. data/lib/rom/mapper/builder.rb +0 -58
  65. data/lib/rom/mapper/builder/definition.rb +0 -162
  66. data/lib/rom/mapper/header.rb +0 -103
  67. data/lib/rom/mapper/loader_builder.rb +0 -26
  68. data/lib/rom/schema.rb +0 -21
  69. data/lib/rom/schema/builder.rb +0 -59
  70. data/lib/rom/schema/definition.rb +0 -84
  71. data/lib/rom/schema/definition/relation.rb +0 -80
  72. data/lib/rom/schema/definition/relation/base.rb +0 -27
  73. data/lib/rom/session.rb +0 -111
  74. data/lib/rom/session/environment.rb +0 -67
  75. data/lib/rom/session/identity_map.rb +0 -43
  76. data/lib/rom/session/mapper.rb +0 -62
  77. data/lib/rom/session/relation.rb +0 -140
  78. data/lib/rom/session/state.rb +0 -59
  79. data/lib/rom/session/state/created.rb +0 -22
  80. data/lib/rom/session/state/deleted.rb +0 -25
  81. data/lib/rom/session/state/persisted.rb +0 -34
  82. data/lib/rom/session/state/transient.rb +0 -20
  83. data/lib/rom/session/state/updated.rb +0 -29
  84. data/lib/rom/session/tracker.rb +0 -62
  85. data/lib/rom/support/axiom/adapter.rb +0 -111
  86. data/lib/rom/support/axiom/adapter/data_objects.rb +0 -38
  87. data/lib/rom/support/axiom/adapter/memory.rb +0 -25
  88. data/lib/rom/support/axiom/adapter/postgres.rb +0 -19
  89. data/lib/rom/support/axiom/adapter/sqlite3.rb +0 -20
  90. data/lib/version.rb +0 -3
  91. data/spec/integration/environment_setup_spec.rb +0 -24
  92. data/spec/integration/grouped_mappers_spec.rb +0 -87
  93. data/spec/integration/join_and_group_spec.rb +0 -76
  94. data/spec/integration/join_and_wrap_spec.rb +0 -68
  95. data/spec/integration/mapping_embedded_relations_spec.rb +0 -73
  96. data/spec/integration/mapping_relations_spec.rb +0 -120
  97. data/spec/integration/schema_definition_spec.rb +0 -152
  98. data/spec/integration/session_spec.rb +0 -87
  99. data/spec/integration/wrapped_mappers_spec.rb +0 -73
  100. data/spec/shared/unit/environment_context.rb +0 -6
  101. data/spec/shared/unit/loader.rb +0 -11
  102. data/spec/shared/unit/loader_identity.rb +0 -13
  103. data/spec/shared/unit/mapper_context.rb +0 -11
  104. data/spec/shared/unit/relation_context.rb +0 -82
  105. data/spec/shared/unit/session_environment_context.rb +0 -11
  106. data/spec/shared/unit/session_relation_context.rb +0 -18
  107. data/spec/support/helper.rb +0 -34
  108. data/spec/support/ice_nine_config.rb +0 -10
  109. data/spec/support/test_mapper.rb +0 -110
  110. data/spec/unit/rom/environment/builder/mapping_spec.rb +0 -24
  111. data/spec/unit/rom/environment/builder/schema_spec.rb +0 -33
  112. data/spec/unit/rom/environment/class_methods/setup_spec.rb +0 -18
  113. data/spec/unit/rom/environment/repository_spec.rb +0 -21
  114. data/spec/unit/rom/mapper/attribute/embedded_collection/to_ast_spec.rb +0 -18
  115. data/spec/unit/rom/mapper/attribute/embedded_value/to_ast_spec.rb +0 -16
  116. data/spec/unit/rom/mapper/attribute/rename_spec.rb +0 -9
  117. data/spec/unit/rom/mapper/attribute/to_ast_spec.rb +0 -9
  118. data/spec/unit/rom/mapper/builder/class_methods/call_spec.rb +0 -61
  119. data/spec/unit/rom/mapper/class_methods/build_spec.rb +0 -55
  120. data/spec/unit/rom/mapper/dump_spec.rb +0 -11
  121. data/spec/unit/rom/mapper/group_spec.rb +0 -35
  122. data/spec/unit/rom/mapper/header/each_spec.rb +0 -26
  123. data/spec/unit/rom/mapper/header/element_reader_spec.rb +0 -21
  124. data/spec/unit/rom/mapper/header/group_spec.rb +0 -18
  125. data/spec/unit/rom/mapper/header/join_spec.rb +0 -14
  126. data/spec/unit/rom/mapper/header/keys_spec.rb +0 -29
  127. data/spec/unit/rom/mapper/header/project_spec.rb +0 -13
  128. data/spec/unit/rom/mapper/header/rename_spec.rb +0 -11
  129. data/spec/unit/rom/mapper/header/to_ast_spec.rb +0 -11
  130. data/spec/unit/rom/mapper/header/wrap_spec.rb +0 -18
  131. data/spec/unit/rom/mapper/identity_from_tuple_spec.rb +0 -11
  132. data/spec/unit/rom/mapper/identity_spec.rb +0 -11
  133. data/spec/unit/rom/mapper/join_spec.rb +0 -15
  134. data/spec/unit/rom/mapper/load_spec.rb +0 -11
  135. data/spec/unit/rom/mapper/new_object_spec.rb +0 -14
  136. data/spec/unit/rom/mapper/project_spec.rb +0 -11
  137. data/spec/unit/rom/mapper/rename_spec.rb +0 -16
  138. data/spec/unit/rom/mapper/wrap_spec.rb +0 -35
  139. data/spec/unit/rom/relation/delete_spec.rb +0 -15
  140. data/spec/unit/rom/relation/drop_spec.rb +0 -11
  141. data/spec/unit/rom/relation/each_spec.rb +0 -23
  142. data/spec/unit/rom/relation/first_spec.rb +0 -19
  143. data/spec/unit/rom/relation/group_spec.rb +0 -29
  144. data/spec/unit/rom/relation/inject_mapper_spec.rb +0 -17
  145. data/spec/unit/rom/relation/insert_spec.rb +0 -13
  146. data/spec/unit/rom/relation/last_spec.rb +0 -19
  147. data/spec/unit/rom/relation/one_spec.rb +0 -49
  148. data/spec/unit/rom/relation/rename_spec.rb +0 -21
  149. data/spec/unit/rom/relation/replace_spec.rb +0 -13
  150. data/spec/unit/rom/relation/restrict_spec.rb +0 -25
  151. data/spec/unit/rom/relation/sort_by_spec.rb +0 -25
  152. data/spec/unit/rom/relation/take_spec.rb +0 -11
  153. data/spec/unit/rom/relation/to_a_spec.rb +0 -20
  154. data/spec/unit/rom/relation/update_spec.rb +0 -25
  155. data/spec/unit/rom/relation/wrap_spec.rb +0 -29
  156. data/spec/unit/rom/repository/class_methods/build_spec.rb +0 -27
  157. data/spec/unit/rom/repository/element_reader_spec.rb +0 -21
  158. data/spec/unit/rom/repository/element_writer_spec.rb +0 -18
  159. data/spec/unit/rom/schema/builder/class_methods/build_spec.rb +0 -103
  160. data/spec/unit/rom/schema/element_reader_spec.rb +0 -15
  161. data/spec/unit/rom/session/class_methods/start_spec.rb +0 -23
  162. data/spec/unit/rom/session/clean_predicate_spec.rb +0 -21
  163. data/spec/unit/rom/session/environment/element_reader_spec.rb +0 -13
  164. data/spec/unit/rom/session/flush_spec.rb +0 -58
  165. data/spec/unit/rom/session/mapper/load_spec.rb +0 -47
  166. data/spec/unit/rom/session/relation/delete_spec.rb +0 -28
  167. data/spec/unit/rom/session/relation/dirty_predicate_spec.rb +0 -35
  168. data/spec/unit/rom/session/relation/identity_spec.rb +0 -11
  169. data/spec/unit/rom/session/relation/new_spec.rb +0 -50
  170. data/spec/unit/rom/session/relation/save_spec.rb +0 -50
  171. data/spec/unit/rom/session/relation/state_spec.rb +0 -23
  172. data/spec/unit/rom/session/relation/track_spec.rb +0 -23
  173. data/spec/unit/rom/session/relation/tracking_predicate_spec.rb +0 -23
  174. data/spec/unit/rom/session/relation/update_attributes_spec.rb +0 -45
  175. data/spec/unit/rom/session/state_spec.rb +0 -79
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 721bf4200ba43797d78160490085ab5f545c4845
4
+ data.tar.gz: b0931e08715301413a9f21ab95694dee5a1d1074
5
+ SHA512:
6
+ metadata.gz: 829fd23000ae2dc4f88a05462285f34e47ce2aa288c14d93bd86385bc5ea8d4c281cfd579690f802911b644c49fc756a0fa37428a5429c8ce1427733c7dbbe51
7
+ data.tar.gz: 6a4513c5fe5f436ada0045ce4a9b7933d5c2a6f6f58a546d013ec8f7e5dc9719dace3cfdb89b75fbc8769f22cb9fd988225eaae1f080d6e2c6cd94718dcc4782
data/.gitignore CHANGED
@@ -13,11 +13,11 @@ test/version_tmp
13
13
  tmp
14
14
  Gemfile.lock
15
15
 
16
+ .idea/
17
+
16
18
  # YARD artifacts
17
19
  .yardoc
18
20
  _yardoc
19
21
  doc/
20
22
 
21
- rom-relation
22
- rom-mapper
23
- rom-session
23
+ Gemfile.lock
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 1.9.3
1
+ 2.1.5
data/.travis.yml CHANGED
@@ -1,22 +1,21 @@
1
1
  language: ruby
2
- bundler_args: --without yard guard benchmarks
3
- script: "bundle exec rake metrics:coverage"
2
+ env:
3
+ - CODECLIMATE_REPO_TOKEN=f7c652b65a700fcf1032174afc5ea243b991e48bf73077cc34c148e1c800a2f7
4
+ bundler_args: --without sql benchmarks
5
+ script: "bundle exec rake spec"
4
6
  rvm:
5
- - 1.9.3
6
- - 2.0.0
7
- - 2.1.1
8
- - rbx
7
+ - 2.0
8
+ - 2.1
9
+ - rbx-2
9
10
  - jruby
10
11
  - ruby-head
11
12
  matrix:
12
13
  allow_failures:
13
14
  - rvm: ruby-head
14
15
  notifications:
15
- irc:
16
- channels:
17
- - "irc.freenode.org#rom-rb"
18
- on_success: never
19
- on_failure: change
20
- email:
21
- on_success: never
22
- on_failure: change
16
+ webhooks:
17
+ urls:
18
+ - https://webhooks.gitter.im/e/39e1225f489f38b0bd09
19
+ on_success: change
20
+ on_failure: always
21
+ on_start: false
@@ -1,3 +1,10 @@
1
+ # v0.3.0 2014-11-24
2
+
3
+ This version is a rewrite that introduces a new, simplified architecture based
4
+ on a new adapter interface.
5
+
6
+ [Compare v0.2.0...v0.3.0](https://github.com/rom-rb/rom/compare/v0.2.0...v0.3.0)
7
+
1
8
  # v0.2.0 2014-04-06
2
9
 
3
10
  * [BREAKING] rom-relation, rom-mapper and rom-session were merged into rom project (solnic)
@@ -12,20 +19,22 @@
12
19
  * [feature] environment exposes mapper registry via Environment#mappers (solnic)
13
20
  * [internal] mappers are now backed by [morpher](https://github.com/mbj/morpher) (solnic)
14
21
  * [internal] renaming and optimizing relations happens on the schema level now (solnic)
15
- * [internal] environment will raise if unknown relation is referenced via Environment#[] (solnic)
22
+ * [internal] environment will raise if unknown relation is referenced via `Environment#[]` (solnic)
23
+
24
+ [Compare v0.1.2...v0.2.0](https://github.com/rom-rb/rom/compare/v0.1.2...v0.2.0)
16
25
 
17
26
  # v0.1.2 2013-09-02
18
27
 
19
28
  * [updated] [rom-relation](https://github.com/rom-rb/rom-relation/blob/v0.1.2/Changelog.md#v012-2013-09-02)
20
29
 
21
- [Compare v0.1.1..v0.1.2](https://github.com/rom-rb/rom/compare/v0.1.1...v0.1.2)
30
+ [Compare v0.1.1...v0.1.2](https://github.com/rom-rb/rom/compare/v0.1.1...v0.1.2)
22
31
 
23
32
  # v0.1.1 2013-08-30
24
33
 
25
34
  * [updated] [rom-relation](https://github.com/rom-rb/rom-relation/blob/v0.1.1/Changelog.md#v011-2013-08-30)
26
35
  * [updated] [rom-session](https://github.com/rom-rb/rom-session/blob/v0.1.1/Changelog.md#v011-2013-08-30)
27
36
 
28
- [Compare v0.1.0..v0.1.1](https://github.com/rom-rb/rom/compare/v0.1.0...v0.1.1)
37
+ [Compare v0.1.0...v0.1.1](https://github.com/rom-rb/rom/compare/v0.1.0...v0.1.1)
29
38
 
30
39
  # v0.1.0 2013-08-23
31
40
 
data/Gemfile CHANGED
@@ -3,17 +3,21 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  group :test do
6
- gem 'axiom-memory-adapter', '~> 0.2'
7
- gem 'bogus', '~> 0.1'
8
- gem 'rubysl-bigdecimal', :platforms => :rbx
6
+ gem 'mutant'
7
+ gem 'mutant-rspec'
8
+ gem 'rubysl-bigdecimal', platforms: :rbx
9
+ gem 'guard'
10
+ gem 'guard-rspec'
11
+ gem 'codeclimate-test-reporter', require: false
9
12
  end
10
13
 
11
- group :benchmarks do
12
- gem 'perftools.rb'
14
+ group :sql do
15
+ gem 'rom-sql', git: 'https://github.com/rom-rb/rom-sql.git', branch: 'master'
16
+ gem 'jdbc-sqlite3', platforms: :jruby
17
+ gem 'sqlite3', platforms: [:mri, :rbx]
13
18
  end
14
19
 
15
- gem 'devtools', git: 'https://github.com/rom-rb/devtools.git', branch: 'master'
16
- gem 'morpher', git: 'https://github.com/mbj/morpher.git', branch: 'master'
17
-
18
- # Added by devtools
19
- eval_gemfile 'Gemfile.devtools'
20
+ group :benchmarks do
21
+ gem 'activerecord'
22
+ gem 'benchmark-ips'
23
+ end
data/Gemfile.devtools CHANGED
@@ -1,9 +1,9 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  group :development do
4
- gem 'rake', '~> 10.2.1'
5
- gem 'rspec', '~> 2.14.1'
6
- gem 'rspec-core', '~> 2.14.8'
4
+ gem 'rake', '~> 10.3.2'
5
+ gem 'rspec', '~> 3.1.0'
6
+ gem 'rspec-its', '~> 1.0.1'
7
7
  gem 'yard', '~> 0.8.7.4'
8
8
 
9
9
  platform :rbx do
@@ -16,35 +16,35 @@ group :yard do
16
16
  end
17
17
 
18
18
  group :guard do
19
- gem 'guard', '~> 2.6.0'
19
+ gem 'guard', '~> 2.6.1'
20
20
  gem 'guard-bundler', '~> 2.0.0'
21
- gem 'guard-rspec', '~> 4.2.8'
22
- gem 'guard-rubocop', '~> 1.0.2'
21
+ gem 'guard-rspec', '~> 4.2.9'
22
+ gem 'guard-rubocop', '~> 1.1.0'
23
23
 
24
24
  # file system change event handling
25
- gem 'listen', '~> 2.7.1'
25
+ gem 'listen', '~> 2.7.7'
26
26
  gem 'rb-fchange', '~> 0.0.6', require: false
27
27
  gem 'rb-fsevent', '~> 0.9.4', require: false
28
- gem 'rb-inotify', '~> 0.9.3', require: false
28
+ gem 'rb-inotify', '~> 0.9.5', require: false
29
29
 
30
30
  # notification handling
31
- gem 'libnotify', '~> 0.8.2', require: false
31
+ gem 'libnotify', '~> 0.8.3', require: false
32
32
  gem 'rb-notifu', '~> 0.0.4', require: false
33
33
  gem 'terminal-notifier-guard', '~> 1.5.3', require: false
34
34
  end
35
35
 
36
36
  group :metrics do
37
37
  gem 'coveralls', '~> 0.7.0'
38
- gem 'flay', '~> 2.4.0'
39
- gem 'flog', '~> 4.2.0'
38
+ gem 'flay', '~> 2.5.0'
39
+ gem 'flog', '~> 4.2.1'
40
40
  gem 'reek', '~> 1.3.7'
41
- gem 'rubocop', '~> 0.19.1'
42
- gem 'simplecov', '~> 0.8.2'
41
+ gem 'rubocop', '~> 0.23.0'
42
+ gem 'simplecov', '~> 0.7.1'
43
43
  gem 'yardstick', '~> 0.9.9'
44
44
 
45
45
  platforms :mri do
46
- gem 'mutant', '~> 0.5.9'
47
- gem 'mutant-rspec', '~> 0.5.3'
46
+ gem 'mutant', '~> 0.6.3'
47
+ gem 'mutant-rspec', '~> 0.6.3'
48
48
  end
49
49
 
50
50
  platforms :ruby_19, :ruby_20 do
@@ -66,6 +66,6 @@ end
66
66
 
67
67
  platform :jruby do
68
68
  group :jruby do
69
- gem 'jruby-openssl', '~> 0.8.5'
69
+ gem 'jruby-openssl', '~> 0.9.4'
70
70
  end
71
71
  end
data/Guardfile CHANGED
@@ -1,4 +1,4 @@
1
- guard :rspec do
1
+ guard :rspec, cmd: "rspec" do
2
2
  #run all specs if configuration is modified
3
3
  watch('Guardfile') { 'spec' }
4
4
  watch('Gemfile.lock') { 'spec' }
@@ -7,10 +7,7 @@ guard :rspec do
7
7
  # run all specs if supporting files files are modified
8
8
  watch(%r{\Aspec/(?:lib|support|shared)/.+\.rb\z}) { 'spec' }
9
9
 
10
- # run unit specs if associated lib code is modified
11
- watch(%r{\Alib/(.+)\.rb\z}) { |m| Dir["spec/unit/#{m[1]}"] }
12
- watch(%r{\Alib/(.+)/support/(.+)\.rb\z}) { |m| Dir["spec/unit/#{m[1]}/#{m[2]}"] }
13
- watch("lib/#{File.basename(File.expand_path('../', __FILE__))}.rb") { 'spec' }
10
+ watch(%r{\Alib/(.+)\.rb\z}) { |m| 'spec' }
14
11
 
15
12
  # run a spec if it is modified
16
13
  watch(%r{\Aspec/(?:unit|integration)/.+_spec\.rb\z})
data/README.md CHANGED
@@ -1,90 +1,102 @@
1
- # Ruby Object Mapper
2
-
3
- [![Gem Version](https://badge.fury.io/rb/rom.png)][gem]
4
- [![Build Status](https://travis-ci.org/rom-rb/rom.png?branch=master)][travis]
1
+ [![Gem Version](https://badge.fury.io/rb/rom.svg)][gem]
2
+ [![Build Status](https://travis-ci.org/rom-rb/rom.svg?branch=master)][travis]
5
3
  [![Dependency Status](https://gemnasium.com/rom-rb/rom.png)][gemnasium]
6
- [![Code Climate](https://codeclimate.com/github/rom-rb/rom.png)][codeclimate]
7
- [![Coverage Status](https://coveralls.io/repos/rom-rb/rom/badge.png?branch=master)][coveralls]
8
- [![Inline docs](http://inch-pages.github.io/github/rom-rb/rom.png)][inchpages]
4
+ [![Code Climate](https://codeclimate.com/github/rom-rb/rom/badges/gpa.svg)][codeclimate]
5
+ [![Test Coverage](https://codeclimate.com/github/rom-rb/rom/badges/coverage.svg)][codeclimate]
6
+ [![Inline docs](http://inch-ci.org/github/rom-rb/rom.svg?branch=master)][inchpages]
9
7
 
10
8
  [gem]: https://rubygems.org/gems/rom
11
9
  [travis]: https://travis-ci.org/rom-rb/rom
12
10
  [gemnasium]: https://gemnasium.com/rom-rb/rom
13
11
  [codeclimate]: https://codeclimate.com/github/rom-rb/rom
14
12
  [coveralls]: https://coveralls.io/r/rom-rb/rom
15
- [inchpages]: http://inch-pages.github.io/github/rom-rb/rom/
13
+ [inchpages]: http://inch-ci.org/github/rom-rb/rom/
16
14
 
17
- Ruby Object Mapper is an implementation of [the Data Mapper](http://martinfowler.com/eaaCatalog/dataMapper.html)
18
- pattern in Ruby language. It consists of multiple loosely coupled pieces and uses
19
- a powerful relational algebra library called [axiom](https://github.com/dkubb/axiom).
15
+ # Ruby Object Mapper
20
16
 
21
- ## Getting started
17
+ ROM is an experimental Ruby ORM that aims to bring powerful object mapping
18
+ capabilities and give you back the full power of your database. It is based on
19
+ a couple of core concepts which makes it different from a typical ORM:
22
20
 
23
- Currently the setup is a bit verbose. Automatization will come in the future once
24
- the API becomes stable.
21
+ * Quering a database is considered as a private implementation detail
22
+ * Abstract query interfaces are evil and a source of unnecessary complexity
23
+ * Reading and mutating data are 2 distinct concerns and should be treated separately
24
+ * It must be **simple** to use the full power of your database
25
25
 
26
- ```
27
- gem install rom axiom-memory-adapter
28
- ```
26
+ With that in mind ROM ships with adapters that allow you to connect to any
27
+ database and exposes a DSL to define **relations** and **mappers** to simplify
28
+ accessing the data.
29
29
 
30
- ### 1. Set up environment and define schema with mappings
30
+ Database support:
31
31
 
32
- ```ruby
33
- require 'rom'
34
- require 'axiom-memory-adapter'
32
+ * [rom-sql](https://github.com/rom-rb/rom-sql)
33
+ * [rom-mongo](https://github.com/rom-rb/rom-mongo)
35
34
 
36
- class User
37
- attr_reader :id, :name
35
+ See [issues](https://github.com/rom-rb/rom/issues?q=is%3Aopen+is%3Aissue+label%3Aadapter+label%3Afeature)
36
+ for a list of adapters that are planned to be added soon.
38
37
 
39
- def initialize(attributes)
40
- @id, @name = attributes.values_at(:id, :name)
41
- end
42
- end
38
+ ## Synopsis
43
39
 
44
- env = ROM::Environment.setup(memory: 'memory://test') do
45
- schema do
46
- base_relation :users do
47
- repository :memory
40
+ ``` ruby
41
+ require 'rom-sql'
48
42
 
49
- attribute :id, Integer
50
- attribute :name, String
43
+ setup = ROM.setup(sqlite: "sqlite::memory")
51
44
 
52
- key :id
53
- end
54
- end
45
+ setup.sqlite.connection.create_table :users do
46
+ primary_key :id
47
+ String :name
48
+ Integer :age
49
+ end
55
50
 
56
- mapping do
57
- relation(:users) do
58
- map :id, :name
59
- model User
60
- end
61
- end
51
+ setup.relation(:users) do
52
+ def by_name(name)
53
+ where(name: name)
62
54
  end
63
- ```
64
55
 
65
- ### 2. Work with Plain Old Ruby Objects
56
+ def adults
57
+ where { age >= 18 }
58
+ end
59
+ end
66
60
 
67
- ```ruby
68
- env.session do |session|
69
- user = session[:users].new(id: 1, name: 'Jane')
70
- session[:users].save(user)
71
- session.flush
61
+ setup.mappers do
62
+ define(:users) do
63
+ model(name: 'User')
72
64
  end
65
+ end
73
66
 
74
- jane = env[:users].restrict(name: 'Jane').one
67
+ rom = setup.finalize
68
+
69
+ # accessing registered relations
70
+ users = rom.relations.users
71
+
72
+ users.insert(name: "Joe", age: 17)
73
+ users.insert(name: "Jane", age: 18)
74
+
75
+ puts users.by_name("Jane").adults.to_a.inspect
76
+ # => [{:id=>2, :name=>"Jane", :age=>18}]
77
+
78
+ # reading relations using defined mappers
79
+ puts rom.read(:users).by_name("Jane").adults.to_a.inspect
80
+ # => [#<User:0x007fdba161cc48 @id=2, @name="Jane", @age=18>]
75
81
  ```
76
82
 
83
+ ## ROADMAP
84
+
85
+ ROM is on its way towards 1.0.0. Please refer to [issues](https://github.com/rom-rb/rom/issues)
86
+ for details.
87
+
77
88
  ## Community
78
89
 
79
- * #rom-rb channel on freenode
90
+ * [![Gitter chat](https://badges.gitter.im/rom-rb/chat.png)](https://gitter.im/rom-rb/chat)
80
91
  * [Ruby Object Mapper](https://groups.google.com/forum/#!forum/rom-rb) mailing list
81
92
 
82
- ## Authors
93
+ ## Credits
94
+
95
+ This project has a long history and wouldn't exist without following people:
83
96
 
84
- * [Dan Kubb](https://github.com/dkubb)
85
- * [Markus Schirp](https://github.com/mbj)
86
- * [Martin Gamsjaeger](https://github.com/snusnu)
87
- * [Piotr Solnica](https://github.com/solnic)
97
+ * [Dan Kubb](https://github.com/dkubb)
98
+ * [Markus Schirp](https://github.com/mbj)
99
+ * [Martin Gamsjaeger](https://github.com/snusnu)
88
100
 
89
101
  ## License
90
102
 
data/Rakefile CHANGED
@@ -1,3 +1,3 @@
1
- # Added by devtools
2
- require 'devtools'
3
- Devtools.init_rake_tasks
1
+ require "rspec/core/rake_task"
2
+
3
+ RSpec::Core::RakeTask.new(:spec)
data/config/flay.yml CHANGED
@@ -1,3 +1,3 @@
1
1
  ---
2
- threshold: 18
3
- total_score: 310
2
+ threshold: 0
3
+ total_score: 0
data/config/mutant.yml CHANGED
@@ -1,5 +1,3 @@
1
1
  ---
2
- name: rom
3
- namespace:
4
- - ROM::Relation
5
- - ROM::Mapper
2
+ name: your_lib
3
+ namespace: YourLib
data/config/rubocop.yml CHANGED
@@ -12,6 +12,11 @@ ParameterLists:
12
12
  Max: 3
13
13
  CountKeywordArgs: true
14
14
 
15
+ # Limit method length
16
+ MethodLength:
17
+ CountComments: false
18
+ Max: 10
19
+
15
20
  # Avoid more than `Max` levels of nesting.
16
21
  BlockNesting:
17
22
  Max: 3
@@ -41,6 +46,10 @@ LineLength:
41
46
  Documentation:
42
47
  Enabled: false
43
48
 
49
+ # Do not always use &&/|| instead of and/or.
50
+ AndOr:
51
+ Enabled: false
52
+
44
53
  # Do not favor modifier if/unless usage when you have a single-line body
45
54
  IfUnlessModifier:
46
55
  Enabled: false
@@ -57,6 +66,27 @@ ConstantName:
57
66
  TrivialAccessors:
58
67
  Enabled: false
59
68
 
69
+ # Do not prefer do/end over {} for multiline blocks
70
+ Blocks:
71
+ Enabled: false
72
+
60
73
  # Allow empty lines around body
61
74
  EmptyLinesAroundBody:
62
75
  Enabled: false
76
+
77
+ # Prefer String#% over Kernel#sprintf
78
+ FormatString:
79
+ Enabled: false
80
+
81
+ # Use square brackets for literal Array objects
82
+ PercentLiteralDelimiters:
83
+ PreferredDelimiters:
84
+ '%': ()
85
+ '%i': '[]'
86
+ '%q': ()
87
+ '%Q': ()
88
+ '%r': '{}'
89
+ '%s': ()
90
+ '%w': '[]'
91
+ '%W': '[]'
92
+ '%x': ()