clowne 0.1.0.pre1 → 0.1.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 (81) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +7 -0
  3. data/.gitattributes +1 -0
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +17 -0
  6. data/.travis.yml +15 -2
  7. data/CHANGELOG.md +9 -2
  8. data/Gemfile +1 -0
  9. data/README.md +25 -381
  10. data/clowne.gemspec +1 -0
  11. data/docs/.rubocop.yml +12 -0
  12. data/docs/active_record.md +36 -0
  13. data/docs/alternatives.md +26 -0
  14. data/docs/architecture.md +141 -0
  15. data/docs/basic_example.md +66 -0
  16. data/docs/configuration.md +29 -0
  17. data/docs/customization.md +64 -0
  18. data/docs/exclude_association.md +63 -0
  19. data/docs/execution_order.md +14 -0
  20. data/docs/finalize.md +35 -0
  21. data/docs/implicit_cloner.md +36 -0
  22. data/docs/include_association.md +119 -0
  23. data/docs/init_as.md +36 -0
  24. data/docs/inline_configuration.md +38 -0
  25. data/docs/installation.md +16 -0
  26. data/docs/nullify.md +37 -0
  27. data/docs/sequel.md +56 -0
  28. data/docs/supported_adapters.md +13 -0
  29. data/docs/traits.md +28 -0
  30. data/docs/web/.gitignore +11 -0
  31. data/docs/web/core/Footer.js +92 -0
  32. data/docs/web/i18n/en.json +134 -0
  33. data/docs/web/package.json +14 -0
  34. data/docs/web/pages/en/help.js +50 -0
  35. data/docs/web/pages/en/index.js +231 -0
  36. data/docs/web/pages/en/users.js +47 -0
  37. data/docs/web/sidebars.json +30 -0
  38. data/docs/web/siteConfig.js +44 -0
  39. data/docs/web/static/css/custom.css +229 -0
  40. data/docs/web/static/fonts/FiraCode-Medium.woff +0 -0
  41. data/docs/web/static/fonts/FiraCode-Regular.woff +0 -0
  42. data/docs/web/static/fonts/StemText.woff +0 -0
  43. data/docs/web/static/fonts/StemTextBold.woff +0 -0
  44. data/docs/web/static/img/favicon/favicon.ico +0 -0
  45. data/docs/web/yarn.lock +1741 -0
  46. data/gemfiles/activerecord42.gemfile +1 -0
  47. data/gemfiles/jruby.gemfile +2 -0
  48. data/gemfiles/railsmaster.gemfile +1 -0
  49. data/lib/clowne.rb +3 -1
  50. data/lib/clowne/adapters/active_record.rb +3 -12
  51. data/lib/clowne/adapters/active_record/association.rb +1 -1
  52. data/lib/clowne/adapters/active_record/associations/base.rb +8 -48
  53. data/lib/clowne/adapters/active_record/associations/has_one.rb +8 -1
  54. data/lib/clowne/adapters/active_record/associations/noop.rb +4 -1
  55. data/lib/clowne/adapters/active_record/dsl.rb +33 -0
  56. data/lib/clowne/adapters/base.rb +13 -6
  57. data/lib/clowne/adapters/base/association.rb +69 -0
  58. data/lib/clowne/adapters/base/finalize.rb +1 -1
  59. data/lib/clowne/adapters/base/init_as.rb +21 -0
  60. data/lib/clowne/adapters/registry.rb +5 -11
  61. data/lib/clowne/adapters/sequel.rb +25 -0
  62. data/lib/clowne/adapters/sequel/association.rb +47 -0
  63. data/lib/clowne/adapters/sequel/associations.rb +26 -0
  64. data/lib/clowne/adapters/sequel/associations/base.rb +23 -0
  65. data/lib/clowne/adapters/sequel/associations/many_to_many.rb +19 -0
  66. data/lib/clowne/adapters/sequel/associations/noop.rb +16 -0
  67. data/lib/clowne/adapters/sequel/associations/one_to_many.rb +23 -0
  68. data/lib/clowne/adapters/sequel/associations/one_to_one.rb +23 -0
  69. data/lib/clowne/adapters/sequel/copier.rb +23 -0
  70. data/lib/clowne/adapters/sequel/record_wrapper.rb +59 -0
  71. data/lib/clowne/cloner.rb +6 -4
  72. data/lib/clowne/declarations.rb +1 -0
  73. data/lib/clowne/declarations/exclude_association.rb +0 -5
  74. data/lib/clowne/declarations/include_association.rb +0 -2
  75. data/lib/clowne/declarations/init_as.rb +20 -0
  76. data/lib/clowne/declarations/trait.rb +2 -0
  77. data/lib/clowne/ext/orm_ext.rb +21 -0
  78. data/lib/clowne/ext/string_constantize.rb +2 -2
  79. data/lib/clowne/planner.rb +11 -4
  80. data/lib/clowne/version.rb +1 -1
  81. metadata +70 -4
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Copyright (c) 2017-present, Facebook, Inc.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ const React = require('react');
9
+
10
+ class Footer extends React.Component {
11
+ docUrl(doc, language) {
12
+ const baseUrl = this.props.config.baseUrl;
13
+ return baseUrl + 'docs/' + (language ? language + '/' : '') + doc;
14
+ }
15
+
16
+ pageUrl(doc, language) {
17
+ const baseUrl = this.props.config.baseUrl;
18
+ return baseUrl + (language ? language + '/' : '') + doc;
19
+ }
20
+
21
+ render() {
22
+ const currentYear = new Date().getFullYear();
23
+
24
+ const yearLabel = currentYear > 2018 ? `2018–${currentYear}` : currentYear;
25
+
26
+ return (
27
+ <footer className="nav-footer" id="footer">
28
+ <section className="sitemap">
29
+ <div className="footer--block">
30
+ <h5>Project</h5>
31
+ <div className="footer--list--item">
32
+ <a href={this.props.config.repoUrl} target="_blank">
33
+ GitHub
34
+ </a>
35
+ </div>
36
+ <div className="footer--list--item">
37
+ <a href={this.props.config.gemUrl} target="_blank">
38
+ RubyGems
39
+ </a>
40
+ </div>
41
+ </div>
42
+ {/* <div className="footer--block">
43
+ <h5>Community</h5>
44
+ <div className="footer--list--item">
45
+ <a href="https://discordapp.com/" target="_blank">Project Chat</a>
46
+ </div>
47
+ <div className="footer--list--item">
48
+ <a href="https://twitter.com/" target="_blank">
49
+ Twitter
50
+ </a>
51
+ </div>
52
+ </div>
53
+ <div className="footer--block">
54
+ <h5>Resources</h5>
55
+ <div className="footer--list--item">
56
+ <a href="#" target="_blank">Super puper chronicles post</a>
57
+ </div>
58
+ <div className="footer--list--item">
59
+ <a href="#" target="_blank">
60
+ Talk Slides
61
+ </a>
62
+ </div>
63
+ </div> */}
64
+ <div className="footer--block legals">
65
+ <p className="footer--copy">
66
+ <span className="copy">{yearLabel}</span>&nbsp;
67
+ <a href="https://evilmartians.com" target="_blank">Evil Martians</a>
68
+ </p>
69
+ <div className="footer--list--item">
70
+ <p>Released under the <a href="https://github.com/palkan/clowne/blob/master/LICENSE.txt" target="_blank">MIT license</a></p>
71
+ </div>
72
+ <div className="footer--list--item">
73
+ <p>Built with <a href="https://docusaurus.io" target="_blank">Docusaurus</a></p>
74
+ </div>
75
+ </div>
76
+ </section>
77
+ <div className="footer--humanoids">
78
+ <div className="humanoids">
79
+ <div className="humanoids__martian">
80
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 108 92"><path fill="#111" d="M26 88L8 78l18-10"/><path fill="#111" d="M94 92v-6H44c-5.5 0-10-4.5-10-10s4.5-10 10-10h50V32c0-14-7.9-22-22-22H48c-14.1 0-22 8-22 22v60h68z"/><circle fill="#FFF" cx="48" cy="50" r="8"/><circle fill="#FFF" cx="72" cy="50" r="8"/><circle fill="#363636" cx="48" cy="50" r="4"/><circle fill="#363636" cx="72" cy="50" r="4"/><g fill="#fff"><path d="M48 60c-5.5 0-10-4.5-10-10s4.5-10 10-10 10 4.5 10 10-4.5 10-10 10zm0-16c-3.3 0-6 2.7-6 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zM82 50c0 5.5-4.5 10-10 10s-10-4.5-10-10 4.5-10 10-10 10 4.5 10 10zm-16 0c0 3.3 2.7 6 6 6s6-2.7 6-6-2.7-6-6-6-6 2.7-6 6z"/><path d="M102 8c-3.8 0-6-2.2-6-6 0-1.1-.9-2-2-2s-2 .9-2 2c0 2.2.5 4.1 1.5 5.7L88.2 13c-4-3.3-9.5-5-16.2-5H48c-6.7 0-12.2 1.7-16.2 4.9l-5.3-5.3C27.5 6.1 28 4.2 28 2c0-1.1-.9-2-2-2s-2 .9-2 2c0 3.8-2.2 6-6 6-1.1 0-2 .9-2 2s.9 2 2 2c2.2 0 4.1-.5 5.7-1.5l5.3 5.3c-3.2 4-4.9 9.5-4.9 16.2v34.8L3.9 78 24 89v3h4V32c0-12.9 7.1-20 20-20h24c12.9 0 20 7.1 20 20v32H44c-6.6 0-12 5.4-12 12s5.4 12 12 12h48v4h4v-8h-2l-4-8-4 8h-4l-4-8-4 8h-4l-4-8-4 8h-4l-4-8-4 8h-4l-4-8-3.1 6.2C37.1 80.7 36 78.5 36 76c0-4.4 3.6-8 8-8l4 8 4-8h4l4 8 4-8h4l4 8 4-8h4l4 8 4-8h8V32c0-6.7-1.7-12.2-4.9-16.2l5.3-5.3c1.6 1 3.5 1.5 5.7 1.5 1.1 0 2-.9 2-2s-1-2-2.1-2zM24 84.4L12.1 78 24 71.4v13z"/></g></svg>
81
+ </div>
82
+ <div className="humanoids__human">
83
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 108 92"><path fill="#FFF" d="M14 62v30h68v-6H32c-5.5 0-10-4.5-10-10s4.5-10 10-10h50v-4c4 0 8-3.6 8-8s-4-8-8-8V32c0-14-7.9-22-22-22H36c-14.1 0-22 8-22 22v14c-4 0-8 3.6-8 8s4 8 8 8z"/><circle fill="#FFF" cx="36" cy="50" r="8"/><circle fill="#FFF" cx="60" cy="50" r="8"/><circle fill="#363636" cx="36" cy="50" r="4"/><circle fill="#363636" cx="60" cy="50" r="4"/><path fill="#363636" d="M60 10H36c-14.1 0-22 8-22 22v2l4-4 6 6 6-6 6 6 6-6 6 6 6-6 6 6 6-6 6 6 6-6 4 4v-2c0-14-7.9-22-22-22z"/><g fill="#111"><path d="M36 60c-5.5 0-10-4.5-10-10s4.5-10 10-10 10 4.5 10 10-4.5 10-10 10zm0-16c-3.3 0-6 2.7-6 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zM60 60c-5.5 0-10-4.5-10-10s4.5-10 10-10 10 4.5 10 10-4.5 10-10 10zm0-16c-3.3 0-6 2.7-6 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6z"/><path d="M12 63.8V92h4V32c0-12.9 7.1-20 20-20h24c12.9 0 20 7.1 20 20v32H32c-6.6 0-12 5.4-12 12s5.4 12 12 12h48v4h4v-8H74v-1c0-1.7-1.3-3-3-3s-3 1.3-3 3v1h-6v-1c0-1.7-1.3-3-3-3s-3 1.3-3 3v1h-6v-1c0-1.7-1.3-3-3-3s-3 1.3-3 3v1h-6v-1c0-1.7-1.3-3-3-3s-3 1.3-3 3v1c-4 0-8-3.6-8-8s3.6-8 8-8h6v1c0 1.7 1.3 3 3 3s3-1.3 3-3v-1h6v1c0 1.7 1.3 3 3 3s3-1.3 3-3v-1h6v1c0 1.7 1.3 3 3 3s3-1.3 3-3v-1h6v1c0 1.7 1.3 3 3 3s3-1.3 3-3v-1h4v-4.2c5-.9 8-5 8-9.8s-3-8.9-8-9.8V32c0-15.3-8.7-24-24-24H36c-15.3 0-24 8.7-24 24v12.2c-5 .9-8 5-8 9.8s3 8.9 8 9.8zm72-15.5c2 .8 4 3 4 5.7s-2 4.8-4 5.7V48.3zm-72 0v11.3c-2-.8-4-3-4-5.7s2-4.7 4-5.6z"/></g></svg>
84
+ </div>
85
+ </div>
86
+ </div>
87
+ </footer>
88
+ );
89
+ }
90
+ }
91
+
92
+ module.exports = Footer;
@@ -0,0 +1,134 @@
1
+ {
2
+ "_comment": "This file is auto-generated by write-translations.js",
3
+ "localized-strings": {
4
+ "next": "Next",
5
+ "previous": "Previous",
6
+ "tagline": "A flexible gem for cloning your models",
7
+ "active_record": "Active Record",
8
+ "alternatives": "Motivation & Alternatives",
9
+ "architecture": "Architecture",
10
+ "basic_example": "Basic Example",
11
+ "configuration": "Configuration",
12
+ "customization": "Customization",
13
+ "exclude_association": "Exclude Association",
14
+ "execution_order": "Execution Order",
15
+ "finalize": "Finalization",
16
+ "Finalize": "Finalize",
17
+ "implicit_cloner": "Implicit Cloner",
18
+ "include_association": "Include Association",
19
+ "init_as": "Initialize Cloning Target",
20
+ "Init As": "Init As",
21
+ "inline_configuration": "Inline Configuration",
22
+ "installation": "Installation",
23
+ "nullify": "Nullify Attributes",
24
+ "Nullify": "Nullify",
25
+ "sequel": "Sequel",
26
+ "supported_adapters": "Supported Adapters",
27
+ "traits": "Traits",
28
+ "HISTORY": "HISTORY",
29
+ "README": "README",
30
+ "readme": "readme",
31
+ "CHANGES": "CHANGES",
32
+ "LICENSE": "LICENSE",
33
+ "CHANGELOG": "CHANGELOG",
34
+ "CONTRIBUTING": "CONTRIBUTING",
35
+ "History": "History",
36
+ "Readme": "Readme",
37
+ "extending-remarkable": "extending-remarkable",
38
+ "local-third-party-project-testing": "local-third-party-project-testing",
39
+ "publish": "publish",
40
+ "testing-changes-on-Docusaurus-itself": "testing-changes-on-Docusaurus-itself",
41
+ "CODE_OF_CONDUCT": "CODE_OF_CONDUCT",
42
+ "2016-03-11-blog-post": "Blog Title",
43
+ "2017-04-10-blog-post-two": "New Blog Post",
44
+ "2017-09-25-testing-rss": "Adding RSS Support - RSS Truncation Test",
45
+ "2017-09-26-adding-rss": "Adding RSS Support",
46
+ "2017-10-24-new-version-1.0.0": "New Version 1.0.0",
47
+ "doc1": "Latin-ish",
48
+ "Example Page": "Example Page",
49
+ "doc2": "document number 2",
50
+ "doc3": "This is document number 3",
51
+ "doc4": "Other Document",
52
+ "doc5": "Fifth Document",
53
+ "copy-sync": "copy-sync",
54
+ "copy": "copy",
55
+ "emptyDir-sync": "emptyDir-sync",
56
+ "emptyDir": "emptyDir",
57
+ "ensureDir-sync": "ensureDir-sync",
58
+ "ensureDir": "ensureDir",
59
+ "ensureFile-sync": "ensureFile-sync",
60
+ "ensureFile": "ensureFile",
61
+ "ensureLink-sync": "ensureLink-sync",
62
+ "ensureLink": "ensureLink",
63
+ "ensureSymlink-sync": "ensureSymlink-sync",
64
+ "ensureSymlink": "ensureSymlink",
65
+ "fs-read-write": "fs-read-write",
66
+ "move-sync": "move-sync",
67
+ "move": "move",
68
+ "outputFile-sync": "outputFile-sync",
69
+ "outputFile": "outputFile",
70
+ "outputJson-sync": "outputJson-sync",
71
+ "outputJson": "outputJson",
72
+ "pathExists-sync": "pathExists-sync",
73
+ "pathExists": "pathExists",
74
+ "readJson-sync": "readJson-sync",
75
+ "readJson": "readJson",
76
+ "remove-sync": "remove-sync",
77
+ "remove": "remove",
78
+ "writeJson-sync": "writeJson-sync",
79
+ "writeJson": "writeJson",
80
+ "changelog": "changelog",
81
+ "http_signing": "http_signing",
82
+ "Changelog": "Changelog",
83
+ "license": "license",
84
+ "ERROR-HANDLING": "ERROR-HANDLING",
85
+ "LIMITS": "LIMITS",
86
+ "block-bq-flat": "block-bq-flat",
87
+ "block-bq-nested": "block-bq-nested",
88
+ "block-code": "block-code",
89
+ "block-fences": "block-fences",
90
+ "block-heading": "block-heading",
91
+ "block-hr": "block-hr",
92
+ "block-html": "block-html",
93
+ "block-lheading": "block-lheading",
94
+ "block-list-flat": "block-list-flat",
95
+ "block-list-nested": "block-list-nested",
96
+ "block-ref-flat": "block-ref-flat",
97
+ "block-ref-nested": "block-ref-nested",
98
+ "block-tables-large": "block-tables-large",
99
+ "block-tables": "block-tables",
100
+ "inline-autolink": "inline-autolink",
101
+ "inline-backticks": "inline-backticks",
102
+ "inline-em-flat": "inline-em-flat",
103
+ "inline-em-nested": "inline-em-nested",
104
+ "inline-em-worst": "inline-em-worst",
105
+ "inline-entity": "inline-entity",
106
+ "inline-escape": "inline-escape",
107
+ "inline-html": "inline-html",
108
+ "inline-links-flat": "inline-links-flat",
109
+ "inline-links-nested": "inline-links-nested",
110
+ "inline-newlines-large": "inline-newlines-large",
111
+ "inline-newlines": "inline-newlines",
112
+ "rawtabs": "rawtabs",
113
+ "example": "example",
114
+ "parser": "parser",
115
+ "parsing_block": "parsing_block",
116
+ "parsing_core": "parsing_core",
117
+ "parsing_inline": "parsing_inline",
118
+ "plugins": "plugins",
119
+ "renderer": "renderer",
120
+ "AUTHORS": "AUTHORS",
121
+ "PULL_REQUEST_TEMPLATE": "PULL_REQUEST_TEMPLATE",
122
+ "Docs": "Docs",
123
+ "GitHub": "GitHub",
124
+ "Getting Started": "Getting Started",
125
+ "API": "API",
126
+ "Adapters": "Adapters",
127
+ "Features": "Features"
128
+ },
129
+ "pages-strings": {
130
+ "Help Translate|recruit community translators for your project": "Help Translate",
131
+ "Edit this Doc|recruitment message asking to edit the doc source": "Edit",
132
+ "Translate this Doc|recruitment message asking to translate the docs": "Translate"
133
+ }
134
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "scripts": {
3
+ "examples": "docusaurus-examples",
4
+ "start": "docusaurus-start",
5
+ "build": "docusaurus-build",
6
+ "publish-gh-pages": "docusaurus-publish",
7
+ "write-translations": "docusaurus-write-translations",
8
+ "version": "docusaurus-version",
9
+ "rename-version": "docusaurus-rename-version"
10
+ },
11
+ "devDependencies": {
12
+ "docusaurus": "^1.0.5"
13
+ }
14
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Copyright (c) 2017-present, Facebook, Inc.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ const React = require('react');
9
+
10
+ const CompLibrary = require('../../core/CompLibrary.js');
11
+ const Container = CompLibrary.Container;
12
+ const GridBlock = CompLibrary.GridBlock;
13
+
14
+ const siteConfig = require(process.cwd() + '/siteConfig.js');
15
+
16
+ class Help extends React.Component {
17
+ render() {
18
+ const supportLinks = [
19
+ {
20
+ content:
21
+ 'Learn more using the [documentation on this site.](/test-site/docs/en/doc1.html)',
22
+ title: 'Browse Docs',
23
+ },
24
+ {
25
+ content: 'Ask questions about the documentation and project',
26
+ title: 'Join the community',
27
+ },
28
+ {
29
+ content: "Find out what's new with this project",
30
+ title: 'Stay up to date',
31
+ },
32
+ ];
33
+
34
+ return (
35
+ <div className="docMainWrapper wrapper">
36
+ <Container className="mainContainer documentContainer postContainer">
37
+ <div className="post">
38
+ <header className="postHeader">
39
+ <h2>Need help?</h2>
40
+ </header>
41
+ <p>This project is maintained by a dedicated group of people.</p>
42
+ <GridBlock contents={supportLinks} layout="threeColumn" />
43
+ </div>
44
+ </Container>
45
+ </div>
46
+ );
47
+ }
48
+ }
49
+
50
+ module.exports = Help;
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Copyright (c) 2017-present, Facebook, Inc.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ const React = require('react');
9
+
10
+ const CompLibrary = require('../../core/CompLibrary.js');
11
+ const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
12
+ const Container = CompLibrary.Container;
13
+ const GridBlock = CompLibrary.GridBlock;
14
+
15
+ const siteConfig = require(process.cwd() + '/siteConfig.js');
16
+
17
+ function imgUrl(img) {
18
+ return siteConfig.baseUrl + 'img/' + img;
19
+ }
20
+
21
+ function docUrl(doc, language) {
22
+ return siteConfig.baseUrl + 'docs/' + (language ? language + '/' : '') + doc;
23
+ }
24
+
25
+ function pageUrl(page, language) {
26
+ return siteConfig.baseUrl + (language ? language + '/' : '') + page;
27
+ }
28
+
29
+ class Button extends React.Component {
30
+ render() {
31
+ return (
32
+ <div className="pluginWrapper buttonWrapper">
33
+ <a className={`button ${this.props.className}`} href={this.props.href} target={this.props.target}>
34
+ {this.props.children}
35
+ </a>
36
+ </div>
37
+ );
38
+ }
39
+ }
40
+
41
+ Button.defaultProps = {
42
+ target: '_self',
43
+ className: '',
44
+ };
45
+
46
+ const SplashContainer = props => (
47
+ <div className="homeContainer">
48
+ <div className="homeSplashFade">
49
+ <div className="wrapper homeWrapper">{props.children}</div>
50
+ </div>
51
+ </div>
52
+ );
53
+
54
+ const Logo = props => (
55
+ <div className="projectLogo">
56
+ </div>
57
+ );
58
+
59
+ const ProjectTitle = props => (
60
+ <h2 className="projectTitle">
61
+ <span className="projectTitleName">{siteConfig.title}</span>
62
+ <small>{siteConfig.tagline}</small>
63
+ <p>
64
+ <a href="https://badge.fury.io/rb/clowne"><image title="Gem Version" src="https://badge.fury.io/rb/clowne.svg" /></a>
65
+ </p>
66
+ </h2>
67
+ );
68
+
69
+ const PromoSection = props => (
70
+ <div className="section promoSection">
71
+ <div className="promoRow">
72
+ <div className="pluginRowBlock">{props.children}</div>
73
+ </div>
74
+ </div>
75
+ );
76
+
77
+ class HomeSplash extends React.Component {
78
+ render() {
79
+ let language = this.props.language || '';
80
+ return (
81
+ <SplashContainer>
82
+ <div className="inner">
83
+ <ProjectTitle />
84
+ <PromoSection>
85
+ <Button href="/clowne/docs/installation.html">Getting Started</Button>
86
+ </PromoSection>
87
+ </div>
88
+ </SplashContainer>
89
+ );
90
+ }
91
+ }
92
+
93
+ const Block = props => (
94
+ <Container
95
+ padding={props.padding}
96
+ id={props.id}
97
+ background={props.background}>
98
+ <GridBlock align="center" contents={props.children} layout={props.layout} />
99
+ </Container>
100
+ );
101
+
102
+ Block.defaultProps = {
103
+ padding: ['bottom', 'top'],
104
+ };
105
+
106
+ const Features = props => (
107
+ <Block layout="twoColumn" padding={['bottom']}>
108
+ {[
109
+ {
110
+ content: 'Rich DSL out-of-the-box',
111
+ imageAlign: 'top',
112
+ title: 'Powerful',
113
+ },
114
+ {
115
+ content: 'Supports ActiveRecord and Sequel<br/><small><em>ROM is coming soon!</em></small>',
116
+ imageAlign: 'top',
117
+ title: 'ORM adapters',
118
+ },
119
+ {
120
+ content: 'Easy to extend for your needs',
121
+ imageAlign: 'top',
122
+ title: 'Customizable',
123
+ },
124
+ {
125
+ content: "It's just Ruby without any dependency",
126
+ imageAlign: 'top',
127
+ title: 'Rails-free',
128
+ },
129
+ ]}
130
+ </Block>
131
+ );
132
+
133
+ const FeatureCallout = props => (
134
+ <div
135
+ className="productShowcaseSection paddingBottom"
136
+ style={{textAlign: 'center'}}>
137
+ <h2>Feature Callout</h2>
138
+ <MarkdownBlock>These are features of this project</MarkdownBlock>
139
+ </div>
140
+ );
141
+
142
+ const LearnHow = props => (
143
+ <Block background="light">
144
+ {[
145
+ {
146
+ content: 'Talk about learning how to use this',
147
+ image: imgUrl('docusaurus.svg'),
148
+ imageAlign: 'right',
149
+ title: 'Learn How',
150
+ },
151
+ ]}
152
+ </Block>
153
+ );
154
+
155
+ const TryOut = props => (
156
+ <Block id="try">
157
+ {[
158
+ {
159
+ content: 'Talk about trying this out',
160
+ image: imgUrl('docusaurus.svg'),
161
+ imageAlign: 'left',
162
+ title: 'Try it Out',
163
+ },
164
+ ]}
165
+ </Block>
166
+ );
167
+
168
+ const Description = props => (
169
+ <Block background="dark">
170
+ {[
171
+ {
172
+ content: 'This is another description of how this project is useful',
173
+ image: imgUrl('docusaurus.svg'),
174
+ imageAlign: 'right',
175
+ title: 'Description',
176
+ },
177
+ ]}
178
+ </Block>
179
+ );
180
+
181
+ const Showcase = props => {
182
+ if ((siteConfig.users || []).length === 0) {
183
+ return null;
184
+ }
185
+ const showcase = siteConfig.users
186
+ .filter(user => {
187
+ return user.pinned;
188
+ })
189
+ .map((user, i) => {
190
+ return (
191
+ <a href={user.infoLink} key={i}>
192
+ <img src={user.image} title={user.caption} />
193
+ </a>
194
+ );
195
+ });
196
+
197
+ return (
198
+ <div className="productShowcaseSection paddingBottom">
199
+ <h2>{"Who's Using This?"}</h2>
200
+ <p>This project is used by all these people</p>
201
+ <div className="logos">{showcase}</div>
202
+ <div className="more-users">
203
+ <a className="button" href={pageUrl('users.html', props.language)}>
204
+ More {siteConfig.title} Users
205
+ </a>
206
+ </div>
207
+ </div>
208
+ );
209
+ };
210
+
211
+ class Index extends React.Component {
212
+ render() {
213
+ let language = this.props.language || '';
214
+
215
+ return (
216
+ <div>
217
+ <HomeSplash language={language} />
218
+ <div className="mainContainer">
219
+ <Features />
220
+ {/* <FeatureCallout /> */}
221
+ {/* <LearnHow /> */}
222
+ {/* <TryOut /> */}
223
+ {/* <Description /> */}
224
+ {/* <Showcase language={language} /> */}
225
+ </div>
226
+ </div>
227
+ );
228
+ }
229
+ }
230
+
231
+ module.exports = Index;