react_on_rails 2.0.0.beta.1 → 2.0.0.beta.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.dockerignore +2 -0
  4. data/.eslintignore +7 -0
  5. data/.eslintrc +19 -0
  6. data/.gitignore +28 -0
  7. data/.jscsrc +27 -0
  8. data/.npmignore +20 -0
  9. data/.rspec +2 -0
  10. data/.rubocop.yml +70 -0
  11. data/.scss-lint.yml +205 -0
  12. data/.travis.yml +43 -0
  13. data/CHANGELOG.md +34 -0
  14. data/Dockerfile_tests +12 -0
  15. data/Gemfile +40 -0
  16. data/README.md +365 -0
  17. data/Rakefile +5 -0
  18. data/app/helpers/react_on_rails_helper.rb +215 -0
  19. data/docker-compose.yml +11 -0
  20. data/docs/LICENSE +21 -0
  21. data/docs/additional_reading/heroku_deployment.md +23 -0
  22. data/docs/additional_reading/manual_installation.md +118 -0
  23. data/docs/additional_reading/node_dependencies_and_npm.md +29 -0
  24. data/docs/additional_reading/optional_configuration.md +33 -0
  25. data/docs/additional_reading/react-and-redux.md +36 -0
  26. data/docs/additional_reading/react_router.md +45 -0
  27. data/docs/additional_reading/server_rendering_tips.md +11 -0
  28. data/docs/additional_reading/tips.md +10 -0
  29. data/docs/additional_reading/webpack.md +46 -0
  30. data/docs/code_of_conduct.md +13 -0
  31. data/docs/coding-style/linters.md +64 -0
  32. data/docs/coding-style/style.md +42 -0
  33. data/docs/contributing.md +157 -0
  34. data/docs/generator_testing.md +20 -0
  35. data/docs/releasing.md +29 -0
  36. data/lib/generators/USAGE +99 -0
  37. data/lib/generators/react_on_rails/base_generator.rb +191 -0
  38. data/lib/generators/react_on_rails/bootstrap_generator.rb +89 -0
  39. data/lib/generators/react_on_rails/dev_tests_generator.rb +39 -0
  40. data/lib/generators/react_on_rails/generator_helper.rb +50 -0
  41. data/lib/generators/react_on_rails/heroku_deployment_generator.rb +30 -0
  42. data/lib/generators/react_on_rails/install_generator.rb +99 -0
  43. data/lib/generators/react_on_rails/js_linters_generator.rb +19 -0
  44. data/lib/generators/react_on_rails/react_no_redux_generator.rb +40 -0
  45. data/lib/generators/react_on_rails/react_with_redux_generator.rb +51 -0
  46. data/lib/generators/react_on_rails/ruby_linters_generator.rb +33 -0
  47. data/lib/generators/react_on_rails/templates/base/base/Procfile.dev.tt +4 -0
  48. data/lib/generators/react_on_rails/templates/base/base/REACT_ON_RAILS.md +16 -0
  49. data/lib/generators/react_on_rails/templates/base/base/app/controllers/hello_world_controller.rb +5 -0
  50. data/lib/generators/react_on_rails/templates/base/base/app/views/hello_world/index.html.erb.tt +4 -0
  51. data/lib/generators/react_on_rails/templates/base/base/client/.babelrc +3 -0
  52. data/lib/generators/react_on_rails/templates/base/base/client/REACT_ON_RAILS_CLIENT_README.md +3 -0
  53. data/lib/generators/react_on_rails/templates/base/base/client/app/bundles/HelloWorld/startup/clientRegistration.jsx.tt +5 -0
  54. data/lib/generators/react_on_rails/templates/base/base/client/index.jade +15 -0
  55. data/lib/generators/react_on_rails/templates/base/base/client/package.json.tt +104 -0
  56. data/lib/generators/react_on_rails/templates/base/base/client/server.js +64 -0
  57. data/lib/generators/react_on_rails/templates/base/base/client/webpack.client.base.config.js.tt +62 -0
  58. data/lib/generators/react_on_rails/templates/base/base/client/webpack.client.hot.config.js.tt +69 -0
  59. data/lib/generators/react_on_rails/templates/base/base/client/webpack.client.rails.config.js +42 -0
  60. data/lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb +26 -0
  61. data/lib/generators/react_on_rails/templates/base/base/lib/tasks/assets.rake.tt +26 -0
  62. data/lib/generators/react_on_rails/templates/base/base/lib/tasks/linters.rake.tt +88 -0
  63. data/lib/generators/react_on_rails/templates/base/base/package.json +31 -0
  64. data/lib/generators/react_on_rails/templates/base/server_rendering/client/app/bundles/HelloWorld/startup/serverRegistration.jsx +4 -0
  65. data/lib/generators/react_on_rails/templates/base/server_rendering/client/webpack.server.rails.config.js +39 -0
  66. data/lib/generators/react_on_rails/templates/bootstrap/app/assets/stylesheets/_bootstrap-custom.scss +63 -0
  67. data/lib/generators/react_on_rails/templates/bootstrap/client/assets/stylesheets/_post-bootstrap.scss +10 -0
  68. data/lib/generators/react_on_rails/templates/bootstrap/client/assets/stylesheets/_pre-bootstrap.scss +8 -0
  69. data/lib/generators/react_on_rails/templates/bootstrap/client/assets/stylesheets/_react-on-rails-sass-helper.scss +19 -0
  70. data/lib/generators/react_on_rails/templates/bootstrap/client/bootstrap-sass.config.js +89 -0
  71. data/lib/generators/react_on_rails/templates/dev_tests/.rspec +2 -0
  72. data/lib/generators/react_on_rails/templates/dev_tests/spec/features/hello_world_spec.rb +25 -0
  73. data/lib/generators/react_on_rails/templates/dev_tests/spec/rails_helper.rb +57 -0
  74. data/lib/generators/react_on_rails/templates/dev_tests/spec/simplecov_helper.rb +21 -0
  75. data/lib/generators/react_on_rails/templates/dev_tests/spec/spec_helper.rb +95 -0
  76. data/lib/generators/react_on_rails/templates/heroku_deployment/.buildpacks +2 -0
  77. data/lib/generators/react_on_rails/templates/heroku_deployment/Procfile +1 -0
  78. data/lib/generators/react_on_rails/templates/heroku_deployment/config/puma.rb +15 -0
  79. data/lib/generators/react_on_rails/templates/js_linters/client/.eslintignore +1 -0
  80. data/lib/generators/react_on_rails/templates/js_linters/client/.eslintrc +48 -0
  81. data/lib/generators/react_on_rails/templates/js_linters/client/.jscsrc +18 -0
  82. data/lib/generators/react_on_rails/templates/no_redux/base/client/app/bundles/HelloWorld/components/HelloWorldWidget.jsx +39 -0
  83. data/lib/generators/react_on_rails/templates/no_redux/base/client/app/bundles/HelloWorld/containers/HelloWorld.jsx +33 -0
  84. data/lib/generators/react_on_rails/templates/no_redux/base/client/app/bundles/HelloWorld/startup/HelloWorldAppClient.jsx.tt +8 -0
  85. data/lib/generators/react_on_rails/templates/no_redux/server_rendering/client/app/bundles/HelloWorld/startup/HelloWorldAppServer.jsx +8 -0
  86. data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/actions/helloWorldActionCreators.jsx +8 -0
  87. data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/components/HelloWorldWidget.jsx +48 -0
  88. data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/constants/helloWorldConstants.jsx +8 -0
  89. data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/containers/HelloWorld.jsx +43 -0
  90. data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/reducers/helloWorldReducer.jsx +19 -0
  91. data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/reducers/index.jsx +14 -0
  92. data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/startup/HelloWorldAppClient.jsx.tt +19 -0
  93. data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/store/helloWorldStore.jsx +35 -0
  94. data/lib/generators/react_on_rails/templates/redux/base/client/app/lib/middlewares/loggerMiddleware.js +20 -0
  95. data/lib/generators/react_on_rails/templates/redux/server_rendering/client/app/bundles/HelloWorld/startup/HelloWorldAppServer.jsx +19 -0
  96. data/lib/generators/react_on_rails/templates/ruby_linters/.rubocop.yml +26 -0
  97. data/lib/generators/react_on_rails/templates/ruby_linters/.scss-lint.yml +205 -0
  98. data/lib/generators/react_on_rails/templates/ruby_linters/lib/tasks/brakeman.rake +17 -0
  99. data/lib/generators/react_on_rails/templates/ruby_linters/lib/tasks/ci.rake +33 -0
  100. data/lib/generators/react_on_rails/templates/ruby_linters/ruby-lint.yml +20 -0
  101. data/lib/react_on_rails.rb +6 -0
  102. data/lib/react_on_rails/configuration.rb +60 -0
  103. data/lib/react_on_rails/engine.rb +7 -0
  104. data/lib/react_on_rails/prerender_error.rb +31 -0
  105. data/lib/react_on_rails/server_rendering_pool.rb +110 -0
  106. data/lib/react_on_rails/version.rb +3 -0
  107. data/package.json +76 -0
  108. data/rakelib/docker.rake +33 -0
  109. data/rakelib/dummy_apps.rake +20 -0
  110. data/rakelib/example_type.rb +160 -0
  111. data/rakelib/examples.rake +103 -0
  112. data/rakelib/examples_config.yml +19 -0
  113. data/rakelib/lint.rake +37 -0
  114. data/rakelib/node_package.rake +11 -0
  115. data/rakelib/run_rspec.rake +65 -0
  116. data/rakelib/task_helpers.rb +44 -0
  117. data/react_on_rails.gemspec +31 -0
  118. data/ruby-lint.yml +24 -0
  119. metadata +119 -2
@@ -0,0 +1,18 @@
1
+ {
2
+ "preset": "airbnb",
3
+ "fileExtensions": [
4
+ ".js",
5
+ ".jsx"
6
+ ],
7
+ "excludeFiles": [
8
+ "assets/**",
9
+ "build/**",
10
+ "node_modules/**"
11
+ ],
12
+ "esprima": "babel-jscs",
13
+ "validateQuoteMarks": {
14
+ "mark": "'",
15
+ "escape": true,
16
+ "ignoreJSX": true
17
+ }
18
+ }
@@ -0,0 +1,39 @@
1
+ import React, { PropTypes } from 'react';
2
+ import _ from 'lodash';
3
+
4
+ // Simple example of a React "dumb" component
5
+ export default class HelloWorldWidget extends React.Component {
6
+ static propTypes = {
7
+ name: PropTypes.string.isRequired,
8
+ _updateName: PropTypes.func.isRequired,
9
+ };
10
+
11
+ constructor(props, context) {
12
+ super(props, context);
13
+
14
+ // Uses lodash to bind all methods to the context of the object instance, otherwise
15
+ // the methods defined here would not refer to the component's class, not the component
16
+ // instance itself.
17
+ _.bindAll(this, '_handleChange');
18
+ }
19
+
20
+ // React will automatically provide us with the event `e`
21
+ _handleChange(e) {
22
+ const name = e.target.value;
23
+ this.props._updateName(name);
24
+ }
25
+
26
+ render() {
27
+ return (
28
+ <div>
29
+ <h3>
30
+ Hello, {this.props.name}!
31
+ </h3>
32
+ <p>
33
+ Say hello to:
34
+ <input type="text" value={this.props.name} onChange={this._handleChange} />
35
+ </p>
36
+ </div>
37
+ );
38
+ }
39
+ }
@@ -0,0 +1,33 @@
1
+ import React, { PropTypes } from 'react';
2
+ import HelloWorldWidget from '../components/HelloWorldWidget';
3
+ import _ from 'lodash';
4
+
5
+ // Simple example of a React "smart" component
6
+ export default class HelloWorld extends React.Component {
7
+ static propTypes = {
8
+ name: PropTypes.string.isRequired, // this is passed from the Rails view
9
+ }
10
+
11
+ constructor(props, context) {
12
+ super(props, context);
13
+
14
+ // Uses lodash to bind all methods to the context of the object instance, otherwise
15
+ // the methods defined here would not refer to the component's class, not the component
16
+ // instance itself.
17
+ _.bindAll(this, '_updateName');
18
+ }
19
+
20
+ state = {name: this.props.name} // how to set initial state in es2015 class syntax
21
+
22
+ _updateName(name) {
23
+ this.setState({name: name});
24
+ }
25
+
26
+ render() {
27
+ return (
28
+ <div>
29
+ <HelloWorldWidget name={this.state.name} _updateName={this._updateName} />
30
+ </div>
31
+ );
32
+ }
33
+ }
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import HelloWorld from '../containers/HelloWorld';
3
+
4
+ export default (props) => {
5
+ return (
6
+ <HelloWorld {...props} />
7
+ );
8
+ };
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import HelloWorld from '../containers/HelloWorld';
3
+
4
+ export default (props) => {
5
+ return (
6
+ <HelloWorld {...props} />
7
+ );
8
+ };
@@ -0,0 +1,8 @@
1
+ import * as actionTypes from '../constants/helloWorldConstants';
2
+
3
+ export function updateName(name) {
4
+ return {
5
+ type: actionTypes.HELLO_WORLD_NAME_UPDATE,
6
+ name,
7
+ };
8
+ }
@@ -0,0 +1,48 @@
1
+ // HelloWorldWidget is an arbitrary name for any "dumb" component. We do not recommend suffixing all your
2
+ // dump component names with Widget.
3
+
4
+ import React, { PropTypes } from 'react';
5
+ import Immutable from 'immutable';
6
+ import _ from 'lodash';
7
+
8
+ // Simple example of a React "dumb" component
9
+ export default class HelloWorldWidget extends React.Component {
10
+ static propTypes = {
11
+ // We prefix all property and variable names pointing to Immutable.js objects with '$$'.
12
+ // This allows us to immediately know we don't call $$helloWorldStore['someProperty'], but instead use
13
+ // the Immutable.js `get` API for Immutable.Map
14
+ actions: PropTypes.object.isRequired,
15
+ $$helloWorldStore: PropTypes.instanceOf(Immutable.Map).isRequired,
16
+ }
17
+
18
+ constructor(props, context) {
19
+ super(props, context);
20
+
21
+ // Uses lodash to bind all methods to the context of the object instance, otherwise
22
+ // the methods defined here would not refer to the component's class, not the component
23
+ // instance itself.
24
+ _.bindAll(this, '_handleChange');
25
+ }
26
+
27
+ // React will automatically provide us with the event `e`
28
+ _handleChange(e) {
29
+ const name = e.target.value;
30
+ this.props.actions.updateName(name);
31
+ }
32
+
33
+ render() {
34
+ const $$helloWorldStore = this.props.$$helloWorldStore;
35
+ const name = $$helloWorldStore.get('name');
36
+ return (
37
+ <div>
38
+ <h3>
39
+ Hello, {name}!
40
+ </h3>
41
+ <p>
42
+ Say hello to:
43
+ <input type="text" value={name} onChange={this._handleChange} />
44
+ </p>
45
+ </div>
46
+ );
47
+ }
48
+ }
@@ -0,0 +1,8 @@
1
+ // See https://www.npmjs.com/package/mirror-creator
2
+ // Allows us to easily setup constants inside of
3
+ // client/app/bundles/HelloWorld/actions/helloWorldActionCreators.jsx
4
+ import mirrorCreator from 'mirror-creator';
5
+
6
+ export default mirrorCreator([
7
+ 'HELLO_WORLD_NAME_UPDATE',
8
+ ]);
@@ -0,0 +1,43 @@
1
+ import React, { PropTypes } from 'react';
2
+ import HelloWorldWidget from '../components/HelloWorldWidget';
3
+ import { connect } from 'react-redux';
4
+ import { bindActionCreators } from 'redux';
5
+ import Immutable from 'immutable';
6
+ import * as helloWorldActionCreators from '../actions/helloWorldActionCreators';
7
+
8
+ function select(state) {
9
+ // Which part of the Redux global state does our component want to receive as props?
10
+ // Note the use of `$$` to prefix the property name because the value is of type Immutable.js
11
+ return { $$helloWorldStore: state.$$helloWorldStore };
12
+ }
13
+
14
+ // Simple example of a React "smart" component
15
+ class HelloWorld extends React.Component {
16
+ static propTypes = {
17
+ dispatch: PropTypes.func.isRequired,
18
+
19
+ // This corresponds to the value used in function select above.
20
+ $$helloWorldStore: PropTypes.instanceOf(Immutable.Map).isRequired,
21
+ }
22
+
23
+ constructor(props, context) {
24
+ super(props, context);
25
+ }
26
+
27
+ render() {
28
+ const { dispatch, $$helloWorldStore } = this.props;
29
+ const actions = bindActionCreators(helloWorldActionCreators, dispatch);
30
+
31
+ // This uses the ES2015 spread operator to pass properties as it is more DRY
32
+ // This is equivalent to:
33
+ // <HelloWorldWidget $$helloWorldStore={$$helloWorldStore} actions={actions} />
34
+ return (
35
+ <HelloWorldWidget {...{$$helloWorldStore, actions}} />
36
+ );
37
+ }
38
+ }
39
+
40
+ // Don't forget to actually use connect!
41
+ // Note that we don't export HelloWorld, but the redux "connected" version of it.
42
+ // See https://github.com/rackt/react-redux/blob/master/docs/api.md#examples
43
+ export default connect(select)(HelloWorld);
@@ -0,0 +1,19 @@
1
+ import Immutable from 'immutable';
2
+
3
+ import * as actionTypes from '../constants/helloWorldConstants';
4
+
5
+ export const $$initialState = Immutable.fromJS({
6
+ name: '', // this is the default state that would be used if one were not passed into the store
7
+ });
8
+
9
+ export default function helloWorldReducer($$state = $$initialState, action) {
10
+ const { type, name } = action;
11
+
12
+ switch (type) {
13
+ case actionTypes.HELLO_WORLD_NAME_UPDATE:
14
+ return $$state.set('name', name);
15
+
16
+ default:
17
+ return $$state;
18
+ }
19
+ }
@@ -0,0 +1,14 @@
1
+ // This file is our manifest of all reducers for the app.
2
+ // See also /client/app/bundles/HelloWorld/store/helloWorldStore.jsx
3
+ // A real world app will likely have many reducers and it helps to organize them in one file.
4
+ // `https://github.com/shakacode/react_on_rails/tree/master/docs/additional_reading/generated_client_code.md`
5
+ import helloWorldReducer from './helloWorldReducer';
6
+ import { $$initialState as $$helloWorldState } from './helloWorldReducer';
7
+
8
+ export default {
9
+ $$helloWorldStore: helloWorldReducer,
10
+ };
11
+
12
+ export const initalStates = {
13
+ $$helloWorldState,
14
+ };
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { Provider } from 'react-redux';
3
+
4
+ import createStore from '../store/helloWorldStore';
5
+ import HelloWorld from '../containers/HelloWorld';
6
+
7
+ // See documentation for https://github.com/rackt/react-redux.
8
+ // This is how you get props from the Rails view into the redux store.
9
+ // This code here binds your smart component to the redux store.
10
+ export default (props) => {
11
+ const store = createStore(props);
12
+ const reactComponent = (
13
+ <Provider store={store}>
14
+ <HelloWorld />
15
+ </Provider>
16
+ );
17
+ return reactComponent;
18
+ };
19
+
@@ -0,0 +1,35 @@
1
+ import { compose, createStore, applyMiddleware, combineReducers } from 'redux';
2
+
3
+ // See https://github.com/gaearon/redux-thunk and http://redux.js.org/docs/advanced/AsyncActions.html
4
+ // This is not actually used for this simple example, but you'd probably want to use this once your app has
5
+ // asynchronous actions.
6
+ import thunkMiddleware from 'redux-thunk';
7
+
8
+ // This provides an example of logging redux actions to the console.
9
+ // You'd want to disable this for production.
10
+ import loggerMiddleware from 'lib/middlewares/loggerMiddleware';
11
+
12
+ import reducers from '../reducers';
13
+ import { initalStates } from '../reducers';
14
+
15
+ export default props => {
16
+ // This is how we get initial props Rails into redux.
17
+ const { name } = props;
18
+ const { $$helloWorldState } = initalStates;
19
+
20
+ // Redux expects to initialize the store using an Object, not an Immutable.Map
21
+ const initialState = {
22
+ $$helloWorldStore: $$helloWorldState.merge({
23
+ name: name,
24
+ }),
25
+ };
26
+
27
+ const reducer = combineReducers(reducers);
28
+ const composedStore = compose(
29
+ applyMiddleware(thunkMiddleware, loggerMiddleware)
30
+ );
31
+ const storeCreator = composedStore(createStore);
32
+ const store = storeCreator(reducer, initialState);
33
+
34
+ return store;
35
+ };
@@ -0,0 +1,20 @@
1
+ /* eslint no-console: 0 */
2
+
3
+ // This logger should be configured not to run in a production environment.
4
+ // See https://github.com/petehunt/webpack-howto#6-feature-flags for you might turn this off for production.
5
+ export default function logger({ getState }) {
6
+ return next => action => {
7
+ console.log('will dispatch', action);
8
+
9
+ // Call the next dispatch method in the middleware chain.
10
+ const result = next(action);
11
+
12
+ const immutableState = getState();
13
+
14
+ console.log('state after dispatch', JSON.stringify(immutableState));
15
+
16
+ // This will likely be the action itself, unless
17
+ // a middleware further in chain changed it.
18
+ return result;
19
+ };
20
+ }
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { Provider } from 'react-redux';
3
+
4
+ import createStore from '../store/helloWorldStore';
5
+ import HelloWorld from '../containers/HelloWorld';
6
+
7
+ // See documentation for https://github.com/rackt/react-redux.
8
+ // This is how you get props from the Rails view into the redux store.
9
+ // This code here binds your smart component to the redux store.
10
+ // This is how the server redux gets hydrated with data.
11
+ export default (props) => {
12
+ const store = createStore(props);
13
+ const reactComponent = (
14
+ <Provider store={store}>
15
+ <HelloWorld />
16
+ </Provider>
17
+ );
18
+ return reactComponent;
19
+ };
@@ -0,0 +1,26 @@
1
+ # This is the configuration used to check the rubocop source code.
2
+ # Check out: https://github.com/bbatsov/rubocop
3
+
4
+ AllCops:
5
+ Include:
6
+ - '**/Rakefile'
7
+ - '**/config.ru'
8
+ Exclude:
9
+ - 'vendor/**/*'
10
+ - 'spec/fixtures/**/*'
11
+ - 'node_modules/**/*'
12
+ - 'db/**/*'
13
+ - 'db/schema.rb'
14
+ - 'db/seeds.rb'
15
+ - 'client/node_modules/**/*'
16
+ - 'bin/**/*'
17
+ - !ruby/regexp /old_and_unused\.rb$/
18
+
19
+ Metrics/LineLength:
20
+ Max: 120
21
+
22
+ Style/StringLiterals:
23
+ EnforcedStyle: double_quotes
24
+
25
+ Style/Documentation:
26
+ Enabled: false
@@ -0,0 +1,205 @@
1
+ # See http://sass-guidelin.es/#zeros
2
+
3
+ scss_files:
4
+ - 'app/assets/stylesheets/**/*.scss'
5
+ - 'client/assets/stylesheets/**/*.scss'
6
+
7
+ linters:
8
+ # BangFormat:
9
+ # enabled: true
10
+ # space_before_bang: true
11
+ # space_after_bang: false
12
+ #
13
+ # BorderZero:
14
+ # enabled: true
15
+ # convention: zero # or `none`
16
+ #
17
+ ColorKeyword:
18
+ enabled: false
19
+ ColorVariable:
20
+ enabled: false
21
+ #
22
+ # Comment:
23
+ # enabled: true
24
+ #
25
+ # DebugStatement:
26
+ # enabled: true
27
+ #
28
+ # DeclarationOrder:
29
+ # enabled: true
30
+ #
31
+ # DuplicateProperty:
32
+ # enabled: true
33
+ #
34
+ # ElsePlacement:
35
+ # enabled: true
36
+ # style: same_line # or 'new_line'
37
+ #
38
+ # EmptyLineBetweenBlocks:
39
+ # enabled: true
40
+ # ignore_single_line_blocks: true
41
+ #
42
+ # EmptyRule:
43
+ # enabled: true
44
+ #
45
+ # FinalNewline:
46
+ # enabled: true
47
+ # present: true
48
+ #
49
+ HexLength:
50
+ enabled: true
51
+ style: long
52
+
53
+ HexNotation:
54
+ enabled: true
55
+ style: uppercase
56
+ #
57
+ # HexValidation:
58
+ # enabled: true
59
+ #
60
+ IdSelector:
61
+ enabled: true
62
+ #
63
+ # ImportantRule:
64
+ # enabled: true
65
+ #
66
+ # ImportPath:
67
+ # enabled: true
68
+ # leading_underscore: false
69
+ # filename_extension: false
70
+ #
71
+ # Indentation:
72
+ # enabled: true
73
+ # allow_non_nested_indentation: false
74
+ # character: space # or 'tab'
75
+ # width: 2
76
+ #
77
+ LeadingZero:
78
+ enabled: true
79
+ style: include_zero
80
+ #
81
+ # MergeableSelector:
82
+ # enabled: true
83
+ # force_nesting: true
84
+ #
85
+ # NameFormat:
86
+ # enabled: true
87
+ # allow_leading_underscore: true
88
+ # convention: hyphenated_lowercase # or 'camel_case', or 'snake_case', or a regex pattern
89
+ #
90
+ # NestingDepth:
91
+ # enabled: true
92
+ # max_depth: 3
93
+ #
94
+ # PlaceholderInExtend:
95
+ # enabled: true
96
+ #
97
+ # PropertyCount:
98
+ # enabled: false
99
+ # include_nested: false
100
+ # max_properties: 10
101
+ #
102
+ # PropertyUnits:
103
+ # enabled: true
104
+ # global: [
105
+ # 'ch', 'em', 'ex', 'rem', # Font-relative lengths
106
+ # 'cm', 'in', 'mm', 'pc', 'pt', 'px', 'q', # Absolute lengths
107
+ # 'vh', 'vw', 'vmin', 'vmax', # Viewport-percentage lengths
108
+ # 'deg', 'grad', 'rad', 'turn', # Angle
109
+ # 'ms', 's', # Duration
110
+ # 'Hz', 'kHz', # Frequency
111
+ # 'dpi', 'dpcm', 'dppx', # Resolution
112
+ # '%', # Other
113
+ # ]
114
+ # properties: {}
115
+ #
116
+ # PropertySortOrder:
117
+ # enabled: true
118
+ # ignore_unspecified: false
119
+ # separate_groups: false
120
+ #
121
+ # PropertySpelling:
122
+ # enabled: true
123
+ # extra_properties: []
124
+ #
125
+ # QualifyingElement:
126
+ # enabled: true
127
+ # allow_element_with_attribute: false
128
+ # allow_element_with_class: false
129
+ # allow_element_with_id: false
130
+ #
131
+ # SelectorDepth:
132
+ # enabled: true
133
+ # max_depth: 3
134
+ #
135
+ # SelectorFormat:
136
+ # enabled: true
137
+ # convention: hyphenated_lowercase # or 'strict_BEM', or 'hyphenated_BEM', or 'snake_case', or 'camel_case', or a regex pattern
138
+ #
139
+ # Shorthand:
140
+ # enabled: true
141
+ # allowed_shorthands: [1, 2, 3]
142
+ #
143
+ # SingleLinePerProperty:
144
+ # enabled: true
145
+ # allow_single_line_rule_sets: true
146
+ #
147
+ # SingleLinePerSelector:
148
+ # enabled: true
149
+ #
150
+ # SpaceAfterComma:
151
+ # enabled: true
152
+ #
153
+ # SpaceAfterPropertyColon:
154
+ # enabled: true
155
+ # style: one_space # or 'no_space', or 'at_least_one_space', or 'aligned'
156
+ #
157
+ # SpaceAfterPropertyName:
158
+ # enabled: true
159
+ #
160
+ # SpaceBeforeBrace:
161
+ # enabled: true
162
+ # style: space # or 'new_line'
163
+ # allow_single_line_padding: false
164
+ #
165
+ # SpaceBetweenParens:
166
+ # enabled: true
167
+ # spaces: 0
168
+ #
169
+ # StringQuotes:
170
+ # enabled: true
171
+ # style: single_quotes # or double_quotes
172
+ #
173
+ # TrailingSemicolon:
174
+ # enabled: true
175
+ #
176
+ # TrailingZero:
177
+ # enabled: false
178
+ #
179
+ # UnnecessaryMantissa:
180
+ # enabled: true
181
+ #
182
+ # UnnecessaryParentReference:
183
+ # enabled: true
184
+ #
185
+ # UrlFormat:
186
+ # enabled: true
187
+ #
188
+ # UrlQuotes:
189
+ # enabled: true
190
+ #
191
+ # VariableForProperty:
192
+ # enabled: false
193
+ # properties: []
194
+ #
195
+ # VendorPrefix:
196
+ # enabled: true
197
+ # identifier_list: base
198
+ # additional_identifiers: []
199
+ # excluded_identifiers: []
200
+ #
201
+ # ZeroUnit:
202
+ # enabled: true
203
+ #
204
+ # Compass::*:
205
+ # enabled: false