clowne 1.1.0 → 1.2.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 (100) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +11 -51
  3. data/.travis.yml +11 -23
  4. data/Gemfile +9 -9
  5. data/README.md +8 -7
  6. data/Rakefile +3 -3
  7. data/clowne.gemspec +14 -8
  8. data/docs/.nojekyll +0 -0
  9. data/docs/.rubocop.yml +8 -2
  10. data/docs/CNAME +1 -0
  11. data/docs/README.md +131 -0
  12. data/docs/_sidebar.md +25 -0
  13. data/docs/active_record.md +2 -5
  14. data/docs/after_clone.md +3 -6
  15. data/docs/after_persist.md +7 -10
  16. data/docs/architecture.md +2 -5
  17. data/docs/assets/docsify.min.js +1 -0
  18. data/docs/assets/prism-ruby.min.js +1 -0
  19. data/docs/assets/styles.css +348 -0
  20. data/docs/assets/vue.css +1 -0
  21. data/docs/clone_mapper.md +2 -5
  22. data/docs/customization.md +1 -4
  23. data/docs/exclude_association.md +1 -4
  24. data/docs/finalize.md +4 -8
  25. data/docs/from_v02_to_v1.md +2 -10
  26. data/docs/getting_started.md +171 -0
  27. data/docs/implicit_cloner.md +1 -4
  28. data/docs/include_association.md +3 -6
  29. data/docs/index.html +29 -0
  30. data/docs/init_as.md +4 -8
  31. data/docs/inline_configuration.md +1 -4
  32. data/docs/nullify.md +1 -5
  33. data/docs/operation.md +3 -6
  34. data/docs/parameters.md +5 -8
  35. data/docs/sequel.md +1 -4
  36. data/docs/supported_adapters.md +3 -6
  37. data/docs/testing.md +18 -21
  38. data/docs/traits.md +1 -4
  39. data/gemfiles/activerecord42.gemfile +5 -5
  40. data/gemfiles/jruby.gemfile +6 -6
  41. data/gemfiles/railsmaster.gemfile +6 -6
  42. data/lib/clowne.rb +11 -11
  43. data/lib/clowne/adapters/active_record.rb +3 -3
  44. data/lib/clowne/adapters/active_record/associations.rb +7 -7
  45. data/lib/clowne/adapters/active_record/associations/base.rb +1 -1
  46. data/lib/clowne/adapters/active_record/associations/belongs_to.rb +1 -1
  47. data/lib/clowne/adapters/active_record/associations/has_one.rb +1 -1
  48. data/lib/clowne/adapters/active_record/resolvers/association.rb +1 -1
  49. data/lib/clowne/adapters/base.rb +6 -6
  50. data/lib/clowne/adapters/sequel.rb +7 -7
  51. data/lib/clowne/adapters/sequel/associations.rb +6 -6
  52. data/lib/clowne/adapters/sequel/associations/base.rb +2 -2
  53. data/lib/clowne/adapters/sequel/associations/many_to_many.rb +4 -4
  54. data/lib/clowne/adapters/sequel/associations/one_to_many.rb +1 -1
  55. data/lib/clowne/adapters/sequel/associations/one_to_one.rb +1 -1
  56. data/lib/clowne/adapters/sequel/operation.rb +3 -2
  57. data/lib/clowne/adapters/sequel/resolvers/after_persist.rb +1 -1
  58. data/lib/clowne/adapters/sequel/resolvers/association.rb +1 -1
  59. data/lib/clowne/adapters/sequel/specifications/after_persist_does_not_support.rb +1 -1
  60. data/lib/clowne/cloner.rb +8 -8
  61. data/lib/clowne/declarations.rb +15 -15
  62. data/lib/clowne/declarations/after_clone.rb +1 -1
  63. data/lib/clowne/declarations/after_persist.rb +1 -1
  64. data/lib/clowne/declarations/finalize.rb +1 -1
  65. data/lib/clowne/declarations/include_association.rb +1 -1
  66. data/lib/clowne/declarations/init_as.rb +1 -1
  67. data/lib/clowne/declarations/nullify.rb +1 -1
  68. data/lib/clowne/ext/orm_ext.rb +1 -1
  69. data/lib/clowne/ext/record_key.rb +1 -1
  70. data/lib/clowne/ext/string_constantize.rb +1 -1
  71. data/lib/clowne/ext/yield_self_then.rb +1 -1
  72. data/lib/clowne/planner.rb +1 -1
  73. data/lib/clowne/rspec.rb +3 -3
  74. data/lib/clowne/rspec/clone_association.rb +3 -3
  75. data/lib/clowne/rspec/clone_associations.rb +2 -2
  76. data/lib/clowne/rspec/helpers.rb +1 -1
  77. data/lib/clowne/utils/clone_mapper.rb +1 -1
  78. data/lib/clowne/utils/operation.rb +3 -3
  79. data/lib/clowne/utils/params.rb +1 -1
  80. data/lib/clowne/version.rb +1 -1
  81. metadata +50 -35
  82. data/docs/alternatives.md +0 -26
  83. data/docs/basic_example.md +0 -83
  84. data/docs/installation.md +0 -46
  85. data/docs/overview.md +0 -25
  86. data/docs/web/.gitignore +0 -11
  87. data/docs/web/README.md +0 -6
  88. data/docs/web/core/Footer.js +0 -88
  89. data/docs/web/i18n/en.json +0 -141
  90. data/docs/web/package.json +0 -14
  91. data/docs/web/pages/en/help.js +0 -50
  92. data/docs/web/pages/en/index.js +0 -231
  93. data/docs/web/pages/en/users.js +0 -47
  94. data/docs/web/sidebars.json +0 -38
  95. data/docs/web/siteConfig.js +0 -46
  96. data/docs/web/static/css/custom.css +0 -235
  97. data/docs/web/static/fonts/FiraCode-Medium.woff +0 -0
  98. data/docs/web/static/fonts/FiraCode-Regular.woff +0 -0
  99. data/docs/web/static/img/favicon/favicon.ico +0 -0
  100. data/docs/web/yarn.lock +0 -1741
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 50a2126fd3d4f4581bb9d06a1d53489dab431e2285683cba815df66a683d154a
4
- data.tar.gz: 973bebd26c7e8e33807d6a4a3438d5f72aefb540bbbf4ce4d5aecfcf58761893
3
+ metadata.gz: '0815485e47677a65023e13711ad70570b79c97057ad8d09bed83f45aa293f939'
4
+ data.tar.gz: d1f8a39135462f1bca941515d055f19f44cdf92c0152ea0c49d8dd3f39475fb7
5
5
  SHA512:
6
- metadata.gz: db3a1a9e38b180a2a5ad6cd490fe9852f074de4484df91ff62525fb88497a2785ef9307745a264bcb082a42ff9f1be95848534a949a78c96e591141c24fefea1
7
- data.tar.gz: 565def47871791088a954d8ffd7ea374de91d37844fcc3bed97f35c6e299d65bd14f3c817906815b79544a7080a456058ed46dbf375d5d200ba7956b79149ac3
6
+ metadata.gz: 809ecabf16dc071eda96f03853baaa42b5736804864e417e2d9a03ee3d37425b7e01c649cee2a2b8728813ffb09a3a4fb61a59e53ebdbf5f3da0b0a435a91807
7
+ data.tar.gz: 9c186a3f86f85f2a08eaea4612329a86f104328c99aa561f82a9b42f9b69f50b159f15b1426aec68585aca6f24c937b0967876689b84a0d04a64ac041169c175
@@ -1,68 +1,28 @@
1
1
  require:
2
- - 'rubocop-md'
2
+ # add after moving docs to another tool
3
+ - 'standard/cop/semantic_blocks'
4
+ - 'rubocop-md'
5
+
6
+ inherit_gem:
7
+ standard: config/base.yml
8
+
3
9
  AllCops:
4
10
  Exclude:
5
11
  - 'bin/**/*'
6
12
  - 'tmp/**/*'
7
- - 'docs/web/**/*'
8
13
  - 'vendor/**/*'
9
14
  - 'gemfiles/vendor/**/*'
15
+ - 'clowne.gemspec'
10
16
  DisplayCopNames: true
11
- StyleGuideCopsOnly: false
12
- TargetRubyVersion: 2.3
17
+ TargetRubyVersion: 2.5
13
18
 
14
19
  Markdown:
15
20
  WarnInvalid: true
16
21
 
17
- Rails:
18
- Enabled: false
19
-
20
- Naming/AccessorMethodName:
21
- Enabled: false
22
-
23
- Naming/ClassAndModuleCamelCase:
24
- Exclude:
25
- - 'spec/**/*.rb'
26
-
27
- Naming/UncommunicativeMethodParamName:
28
- Enabled: false
29
-
30
- Naming/MemoizedInstanceVariableName:
31
- Enabled: false
32
-
33
- Style/TrivialAccessors:
34
- Enabled: false
35
-
36
- Metrics/LineLength:
37
- Max: 100
38
-
39
- Style/Documentation:
40
- Exclude:
41
- - 'spec/**/*.rb'
42
- - 'README.md'
43
-
44
- Style/SymbolArray:
45
- Enabled: false
46
-
47
- Style/FrozenStringLiteralComment:
48
- Exclude:
49
- - 'spec/**/*.rb'
50
- - 'Gemfile'
51
- - 'Rakefile'
52
- - '*.gemspec'
53
- - 'CHANGELOG.md'
54
- - 'README.md'
55
-
56
- Metrics/BlockLength:
57
- Exclude:
58
- - 'spec/**/*.rb'
59
-
60
- Bundler/OrderedGems:
61
- Enabled: false
62
-
63
- Gemspec/OrderedDependencies:
22
+ Standard/SemanticBlocks:
64
23
  Enabled: false
65
24
 
66
25
  Lint/Void:
67
26
  Exclude:
27
+ - 'docs/README.md'
68
28
  - 'README.md'
@@ -1,11 +1,11 @@
1
1
  sudo: false
2
2
  language: ruby
3
+ cache: bundler
3
4
 
4
5
  notifications:
5
6
  email: false
6
7
 
7
8
  before_install:
8
- - gem update --system
9
9
  - gem install bundler
10
10
 
11
11
  before_script:
@@ -16,40 +16,28 @@ before_script:
16
16
  script:
17
17
  - bundle exec rake
18
18
  - if [ "$CC_REPORT" == "true" ]; then ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT; fi
19
- - if [ "$DEPLOY_ME" == "true" ]; then (cd ./docs/web && yarn && yarn run build); fi
20
19
 
21
20
  matrix:
22
21
  fast_finish: true
23
22
  include:
24
23
  - rvm: ruby-head
25
24
  gemfile: gemfiles/railsmaster.gemfile
26
- - rvm: jruby-9.2.5.0
25
+ - rvm: jruby-9.2.8.0
27
26
  gemfile: gemfiles/jruby.gemfile
28
- - rvm: jruby-9.1.15.0
29
- gemfile: gemfiles/jruby.gemfile
30
- - rvm: 2.5.0
27
+ - rvm: 2.7
28
+ gemfile: Gemfile
29
+ - rvm: 2.6.5
31
30
  gemfile: Gemfile
32
- - rvm: 2.4.3
31
+ - rvm: 2.5.7
33
32
  gemfile: Gemfile
34
- env:
35
- - CC_REPORT=true
36
- - DEPLOY_ME=true
37
- - rvm: 2.4.1
33
+ - rvm: 2.4.9
38
34
  gemfile: gemfiles/activerecord42.gemfile
39
- - rvm: 2.3.1
35
+ - rvm: truffleruby-head
40
36
  gemfile: Gemfile
41
37
  allow_failures:
42
38
  - rvm: ruby-head
43
39
  gemfile: gemfiles/railsmaster.gemfile
44
- - rvm: jruby-9.2.5.0
40
+ - rvm: jruby-9.2.8.0
45
41
  gemfile: gemfiles/jruby.gemfile
46
- - rvm: jruby-9.1.15.0
47
- gemfile: gemfiles/jruby.gemfile
48
- deploy:
49
- provider: pages
50
- skip_cleanup: true
51
- github_token: $GITHUB_TOKEN
52
- local_dir: "./docs/web/build/clowne"
53
- on:
54
- branch: master
55
- condition: $DEPLOY_ME = true
42
+ - rvm: truffleruby-head
43
+ gemfile: Gemfile
data/Gemfile CHANGED
@@ -1,19 +1,19 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in clowne.gemspec
4
4
  gemspec
5
5
 
6
- gem 'pry-byebug', platform: :mri
6
+ gem "pry-byebug", platform: :mri
7
7
 
8
- gem 'sqlite3', '~> 1.3.6', platform: :mri
9
- gem 'activerecord-jdbcsqlite3-adapter', '~> 50.0', platform: :jruby
10
- gem 'jdbc-sqlite3', platform: :jruby
8
+ gem "sqlite3", "~> 1.4.1", platform: :ruby
9
+ gem "activerecord-jdbcsqlite3-adapter", "~> 50.0", platform: :jruby
10
+ gem "jdbc-sqlite3", platform: :jruby
11
11
 
12
- gem 'activerecord', '>= 5.0'
13
- gem 'sequel', '>= 5.0'
14
- gem 'simplecov'
12
+ gem "activerecord", "~> 5.2"
13
+ gem "sequel", ">= 5.0"
14
+ gem "simplecov"
15
15
 
16
- local_gemfile = 'Gemfile.local'
16
+ local_gemfile = "Gemfile.local"
17
17
 
18
18
  if File.exist?(local_gemfile)
19
19
  eval(File.read(local_gemfile)) # rubocop:disable Security/Eval
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/clowne.svg)](https://badge.fury.io/rb/clowne)
2
- [![Build Status](https://travis-ci.org/palkan/clowne.svg?branch=master)](https://travis-ci.org/palkan/clowne)
3
- [![Test Coverage](https://codeclimate.com/github/palkan/clowne/badges/coverage.svg)](https://codeclimate.com/github/palkan/clowne/coverage)
2
+ [![Build Status](https://travis-ci.org/clowne-rb/clowne.svg?branch=master)](https://travis-ci.org/clowne-rb/clowne)
3
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/9143c4f91e9d1d2a4bd1/test_coverage)](https://codeclimate.com/github/clowne-rb/clowne/test_coverage)
4
+ [![Maintainability](https://api.codeclimate.com/v1/badges/9143c4f91e9d1d2a4bd1/maintainability)](https://codeclimate.com/github/clowne-rb/clowne/maintainability)
4
5
  [![Docs](https://img.shields.io/badge/docs-link-brightgreen.svg)](https://clowne.evilmartians.io)
5
6
 
6
7
  # Clowne
@@ -26,7 +27,7 @@ gem install clowne
26
27
  Or add this line to your application's Gemfile:
27
28
 
28
29
  ```ruby
29
- gem 'clowne'
30
+ gem "clowne"
30
31
  ```
31
32
 
32
33
  ## Quick Start
@@ -86,7 +87,7 @@ Now you can use `UserCloner` to clone existing records:
86
87
  user = User.last
87
88
  # => <#User id: 1, login: 'clown', email: 'clown@circus.example.com'>
88
89
 
89
- operation = UserCloner.call(user, email: 'fake@example.com')
90
+ operation = UserCloner.call(user, email: "fake@example.com")
90
91
  # => <#Clowne::Utils::Operation...>
91
92
 
92
93
  operation.to_record
@@ -116,14 +117,14 @@ Take a look at our [documentation](https://clowne.evilmartians.io) for more info
116
117
 
117
118
  Adapter |1:1 |*:1 | 1:M | M:M |
118
119
  ------------------------------------------|------------|------------|-------------|-------------------------|
119
- [Active Record](https://clowne.evilmartians.io/clowne/docs/active_record.html) | has_one | belongs_to | has_many | has_and_belongs_to|
120
- [Sequel](https://clowne.evilmartians.io/clowne/docs/sequel.html) | one_to_one | - | one_to_many | many_to_many |
120
+ [Active Record](https://clowne.evilmartians.io/#/active_record) | has_one | belongs_to | has_many | has_and_belongs_to|
121
+ [Sequel](https://clowne.evilmartians.io/#/sequel) | one_to_one | - | one_to_many | many_to_many |
121
122
 
122
123
  ## Maintainers
123
124
 
124
125
  - [Vladimir Dementyev](https://github.com/palkan)
125
126
 
126
- - [Sverchkov Nikolay](https://github.com/ssnickolay)
127
+ - [Nikolay Sverchkov](https://github.com/ssnickolay)
127
128
 
128
129
  ## License
129
130
 
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
3
- require 'rubocop/rake_task'
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ require "rubocop/rake_task"
4
4
 
5
5
  RSpec::Core::RakeTask.new(:spec)
6
6
  RuboCop::RakeTask.new
@@ -8,23 +8,29 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ['Vladimir Dementyev', 'Sverchkov Nikolay']
9
9
  spec.email = ['palkan@evilmartians.com', 'ssnikolay@gmail.com']
10
10
 
11
- spec.summary = 'A flexible gem for cloning your models.'
11
+ spec.summary = 'A flexible gem for cloning your models'
12
12
  spec.description = 'A flexible gem for cloning your models.'
13
- spec.homepage = 'https://github.com/palkan/clowne'
13
+ spec.homepage = 'https://github.com/clowne-rb/clowne'
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
17
  f.match(%r{^(test|spec|features)/})
18
18
  end
19
- spec.bindir = 'exe'
20
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.metadata = {
20
+ "bug_tracker_uri" => "http://github.com/clowne-rb/clowne/issues",
21
+ "changelog_uri" => "https://github.com/clowne-rb/clowne/blob/master/CHANGELOG.md",
22
+ "documentation_uri" => "https://clowne.evilmartians.io/",
23
+ "homepage_uri" => "https://clowne.evilmartians.io/",
24
+ "source_code_uri" => "http://github.com/clowne-rb/clowne"
25
+ }
21
26
  spec.require_paths = ['lib']
22
27
 
23
28
  spec.add_development_dependency 'bundler', '~> 2.0'
24
- spec.add_development_dependency 'rake', '~> 10.0'
29
+ spec.add_development_dependency 'rake', '~> 12.3', '>= 12.3.3'
25
30
  spec.add_development_dependency 'rspec', '~> 3.0'
26
31
  spec.add_development_dependency 'factory_bot', '~> 4.8'
27
- spec.add_development_dependency 'rubocop', '~> 0.61'
28
- spec.add_development_dependency 'rubocop-md', '~> 0.2'
29
- spec.add_development_dependency 'rubocop-rspec', '~> 1.31'
32
+ spec.add_development_dependency 'rubocop', '~> 0.75.0'
33
+ spec.add_development_dependency 'rubocop-md', '~> 0.3.0'
34
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.36.0'
35
+ spec.add_development_dependency 'standard', '~> 0.1.5'
30
36
  end
File without changes
@@ -1,5 +1,5 @@
1
- Metrics/LineLength:
2
- Max: 100
1
+ inherit_gem:
2
+ standard: config/base.yml
3
3
 
4
4
  Lint/Void:
5
5
  Exclude:
@@ -8,5 +8,11 @@ Lint/Void:
8
8
  Metrics/AbcSize:
9
9
  Enabled: false
10
10
 
11
+ Standard/SemanticBlocks:
12
+ Enabled: false
13
+
11
14
  Metrics/BlockLength:
12
15
  Enabled: false
16
+
17
+ Metrics/LineLength:
18
+ Enabled: false
@@ -0,0 +1 @@
1
+ clowne.evilmartians.io
@@ -0,0 +1,131 @@
1
+ [![Gem Version](https://badge.fury.io/rb/clowne.svg)](https://badge.fury.io/rb/clowne)
2
+ [![Build Status](https://travis-ci.org/clowne-rb/clowne.svg?branch=master)](https://travis-ci.org/clowne-rb/clowne)
3
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/9143c4f91e9d1d2a4bd1/test_coverage)](https://codeclimate.com/github/clowne-rb/clowne/test_coverage)
4
+ [![Maintainability](https://api.codeclimate.com/v1/badges/9143c4f91e9d1d2a4bd1/maintainability)](https://codeclimate.com/github/clowne-rb/clowne/maintainability)
5
+ [![Docs](https://img.shields.io/badge/docs-link-brightgreen.svg)](https://clowne.evilmartians.io)
6
+
7
+ # Clowne
8
+
9
+ A flexible gem for cloning your models. Clowne focuses on ease of use and provides the ability to connect various ORM adapters.
10
+
11
+ 📖 Read [Evil Martians Chronicles](https://evilmartians.com/chronicles/clowne-clone-ruby-models-with-a-smile) to learn about possible use cases.
12
+
13
+ 📑 [Documentation](https://clowne.evilmartians.io)
14
+
15
+ <a href="https://evilmartians.com/">
16
+ <img src="https://evilmartians.com/badges/sponsored-by-evil-martians.svg" alt="Sponsored by Evil Martians" width="236" height="54"></a>
17
+
18
+
19
+ ## Installation
20
+
21
+ To install Clowne with RubyGems:
22
+
23
+ ```ruby
24
+ gem install clowne
25
+ ```
26
+
27
+ Or add this line to your application's Gemfile:
28
+
29
+ ```ruby
30
+ gem "clowne"
31
+ ```
32
+
33
+ ## Quick Start
34
+
35
+ Assume that you have the following model:
36
+
37
+ ```ruby
38
+ class User < ActiveRecord::Base
39
+ # create_table :users do |t|
40
+ # t.string :login
41
+ # t.string :email
42
+ # t.timestamps null: false
43
+ # end
44
+
45
+ has_one :profile
46
+ has_many :posts
47
+ end
48
+
49
+ class Profile < ActiveRecord::Base
50
+ # create_table :profiles do |t|
51
+ # t.string :name
52
+ # end
53
+ end
54
+
55
+ class Post < ActiveRecord::Base
56
+ # create_table :posts
57
+ end
58
+ ```
59
+
60
+ Let's declare our cloners first:
61
+
62
+ ```ruby
63
+ class UserCloner < Clowne::Cloner
64
+ adapter :active_record
65
+
66
+ include_association :profile, clone_with: SpecialProfileCloner
67
+ include_association :posts
68
+
69
+ nullify :login
70
+
71
+ # params here is an arbitrary Hash passed into cloner
72
+ finalize do |_source, record, params|
73
+ record.email = params[:email]
74
+ end
75
+ end
76
+
77
+ class SpecialProfileCloner < Clowne::Cloner
78
+ adapter :active_record
79
+
80
+ nullify :name
81
+ end
82
+ ```
83
+
84
+ Now you can use `UserCloner` to clone existing records:
85
+
86
+ ```ruby
87
+ user = User.last
88
+ # => <#User id: 1, login: 'clown', email: 'clown@circus.example.com'>
89
+
90
+ operation = UserCloner.call(user, email: "fake@example.com")
91
+ # => <#Clowne::Utils::Operation...>
92
+
93
+ operation.to_record
94
+ # => <#User id: nil, login: nil, email: 'fake@example.com'>
95
+
96
+ operation.persist!
97
+ # => true
98
+
99
+ cloned = operation.to_record
100
+ # => <#User id: 2, login: nil, email: 'fake@example.com'>
101
+
102
+ cloned.login
103
+ # => nil
104
+ cloned.email
105
+ # => "fake@example.com"
106
+
107
+ # associations:
108
+ cloned.posts.count == user.posts.count
109
+ # => true
110
+ cloned.profile.name
111
+ # => nil
112
+ ```
113
+
114
+ Take a look at our [documentation](https://clowne.evilmartians.io) for more info!
115
+
116
+ ### Supported ORM adapters
117
+
118
+ Adapter |1:1 |*:1 | 1:M | M:M |
119
+ ------------------------------------------|------------|------------|-------------|-------------------------|
120
+ [Active Record](active_record) | has_one | belongs_to | has_many | has_and_belongs_to|
121
+ [Sequel](sequel) | one_to_one | - | one_to_many | many_to_many |
122
+
123
+ ## Maintainers
124
+
125
+ - [Vladimir Dementyev](https://github.com/palkan)
126
+
127
+ - [Nikolay Sverchkov](https://github.com/ssnickolay)
128
+
129
+ ## License
130
+
131
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1,25 @@
1
+ * [Getting Started](getting_started.md)
2
+ * DSL
3
+ * [Operation](operation.md)
4
+ * [Include Association](include_association.md)
5
+ * [Exclude Association](exclude_association.md)
6
+ * [Nullify Attributes](nullify.md)
7
+ * [Finalization](finalize.md)
8
+ * [After Clone](after_clone.md)
9
+ * [After Persist](after_persist.md)
10
+ * [Initialize Cloning Target](init_as.md)
11
+ * [Traits](traits.md)
12
+ * [Parameters](parameters.md)
13
+ * Adapters
14
+ * [Supported Adapters](supported_adapters.md)
15
+ * [ActiveRecord](active_record.md)
16
+ * [Sequel](sequel.md)
17
+ * Advanced Options
18
+ * [Implicit Cloner](implicit_cloner.md)
19
+ * [Inline Configuration](inline_configuration.md)
20
+ * [Clone mapper](clone_mapper.md)
21
+ * [Architecture](architecture.md)
22
+ * [Testing](testing.md)
23
+ * [Customization](customization.md)
24
+ * Upgrade Notes
25
+ * [From v0.2.x to v1.0.0](from_v02_to_v1.md)