rom 0.2.0 → 0.3.0

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.
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': ()