datacrafts-io-skeleton 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6a8a7f1e3667328f825505e1b90a9f34548dc6a8426b48ff5125f5db2d9ede8d
4
- data.tar.gz: 54b24bb63320fdd65259fe522603a76ef5c8331494ea966942442313f975b1a8
3
+ metadata.gz: e084eeb831e90582d312d578e13d6b93da910dae08de6e080509f8a1740742c4
4
+ data.tar.gz: 841209c86906ad895b93e1deea6e22a8b304ab784f28b56d45023db6cb7b0c68
5
5
  SHA512:
6
- metadata.gz: 140634ed3abb87538160981b25b4f464f4f2eb867fbce41679cacb98e107e12d0f535f562db1487aed6fd4555f5ccc8a02a730172be2e2fbe8949b4062837bc2
7
- data.tar.gz: 7a99a01212e82edc917b2bd542ae9f3ce57d62b06407555c8cc978402fbc24c3c88e17c9dec05836a670f1b9b0d73fa85c27a299b4cf21db38896982b871d6ef
6
+ metadata.gz: 95d4a8e8cfe849f390ab5bd217da9939ab2a2462d8ccc5ac8629fce038a604c35d9fa8c33fc432651c5e6b3cfe10d042f4bdb275f02365beebf0fb1955ed7bf3
7
+ data.tar.gz: 388886a4e2af257d7fa352e1eeb9fe1838eea19f36be74c4b42fc8755dc055fdbcacabc3915cfb59ec4c845a252b43186ce28b0935fa14aeba853e7f612e2561
data/Gemfile CHANGED
@@ -3,5 +3,5 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in datacrafts_io_skeleton.gemspec
4
4
  gemspec
5
5
 
6
- gem "rake", "~> 12.0"
6
+ gem "rake", "~> 13.0"
7
7
  gem "rspec", "~> 3.0"
@@ -117,7 +117,7 @@ GEM
117
117
  method_source
118
118
  rake (>= 0.8.7)
119
119
  thor (>= 0.20.3, < 2.0)
120
- rake (12.3.3)
120
+ rake (13.0.1)
121
121
  rspec (3.9.0)
122
122
  rspec-core (~> 3.9.0)
123
123
  rspec-expectations (~> 3.9.0)
@@ -152,7 +152,7 @@ PLATFORMS
152
152
 
153
153
  DEPENDENCIES
154
154
  datacrafts-io-skeleton!
155
- rake (~> 12.0)
155
+ rake (~> 13.0)
156
156
  rspec (~> 3.0)
157
157
 
158
158
  BUNDLED WITH
data/README.md CHANGED
@@ -17,6 +17,14 @@ This command will create new rails app with configured rails_helper.rb and .rubo
17
17
  $ datacrafts-io-skeleton create APP_NAME
18
18
  $ datacrafts-io-skeleton build APP_NAME
19
19
  $ datacrafts-io-skeleton new APP_NAME
20
+
21
+ ### With frontend part.
22
+
23
+ You can specify `--frontend (-f) FRONTEND_TYPE` option to additionally create frontend application inside `APP_NAME/frontend` directory. Use `-t` option to add typescript support.
24
+
25
+ $ datacrafts-io-skeleton create APP_NAME --frontend react -t
26
+
27
+ Allowed frontend types include only `react` for now.
20
28
 
21
29
  ## Development
22
30
 
@@ -35,4 +43,3 @@ The gem is available as open source under the terms of the [MIT License](https:/
35
43
  ## Code of Conduct
36
44
 
37
45
  Everyone interacting in the Skeleton project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/datacrafts-io/skeleton/blob/master/CODE_OF_CONDUCT.md).
38
- g
@@ -1,34 +1,58 @@
1
1
  require "thor"
2
2
  require_relative "./version"
3
3
  require_relative "./rails_creator"
4
+ require_relative "./react_creator"
4
5
 
5
6
  module DatacraftsIoSkeleton
6
7
  # Defines all CLI commands, their descriptions, params and aliases.
7
8
  class Composer < Thor
9
+ FRONTEND_CREATORS = {
10
+ "react" => ->(app_name, options) { ReactCreator.new(app_name, options).call },
11
+ nil => proc { |app_name| puts("The frontend is not specified for #{app_name}") }
12
+ }.freeze
13
+ ALLOWED_FRONTEND = FRONTEND_CREATORS.keys.freeze
14
+
8
15
  desc "create APP_NAME", "This will create new rails app."
9
16
  long_desc <<-CREATE_NEW_APP
10
- This command will create new rails app with configured rails_helper.rb and .rubocop.yml files.
11
- All major gems are also included.
17
+ This command will create new rails app with configured rails_helper.rb and .rubocop.yml files.
18
+ All major gems are also included.
19
+
20
+ You can use this command with next aliases:\n
12
21
 
13
- You can use this command with next aliases:\n
22
+ `datacrafts-io-skeleton create APPNAME`\n
23
+ `datacrafts-io-skeleton build APPNAME`\n
24
+ `datacrafts-io-skeleton new APPNAME`\n
25
+
26
+ Skip boring start and let's code amazing stuff together.
14
27
 
15
- `datacrafts-io-skeleton create APPNAME`\n
16
- `datacrafts-io-skeleton build APPNAME`\n
17
- `datacrafts-io-skeleton new APPNAME`\n
18
28
  CREATE_NEW_APP
29
+ option :frontend, type: :string, aliases: [:f], desc: <<~DESC.gsub(/\n/, "").squeeze
30
+ Additionally creates frontend client app, you can choose one type from the list:
31
+ #{ALLOWED_FRONTEND.compact.join(', ')}.
32
+ DESC
33
+ option :typescipt, type: :boolean, aliases: [:t], desc: "Adds typescript support to frontend application."
19
34
  map %w[new build] => :create
20
35
  # Creates new app.
21
36
  #
22
37
  # @param [String] app_name The name of app you are going to create.
23
38
  def create(app_name)
39
+ say("The specified frontend is not allowed", :red) && return unless specified_frontend_valid?
40
+
24
41
  DatacraftsIoSkeleton::RailsCreator.new(app_name).call
42
+ FRONTEND_CREATORS[options[:frontend]].call(app_name, options)
25
43
  end
26
44
 
27
45
  desc "version", "Display version"
28
46
  map %w[-v --version] => :version
29
47
  # Informs user about gem version.
30
48
  def version
31
- say "datacrafts-io-skeleton #{DatacraftsIoSkeleton::VERSION}"
49
+ say("datacrafts-io-skeleton #{DatacraftsIoSkeleton::VERSION}")
50
+ end
51
+
52
+ private
53
+
54
+ def specified_frontend_valid?
55
+ ALLOWED_FRONTEND.include?(options[:frontend])
32
56
  end
33
57
  end
34
58
  end
@@ -0,0 +1,23 @@
1
+ require "thor"
2
+
3
+ module DatacraftsIoSkeleton
4
+ # Shared logic.
5
+ module Helpers
6
+ # Defines gem templates folder which you can use to load template to the new app.
7
+ TEMPLATES_DIR = (File.dirname(__FILE__) + "/../../templates").freeze
8
+
9
+ def self.included(klass)
10
+ klass.class_eval do
11
+ include Thor::Actions
12
+ end
13
+ end
14
+
15
+ def commit(message, app_path=app)
16
+ run "cd #{app_path} && git add . && git commit -m '#{message}'"
17
+ end
18
+
19
+ def app(path=nil)
20
+ "#{@app_name}/#{path}"
21
+ end
22
+ end
23
+ end
@@ -1,13 +1,10 @@
1
1
  require "thor"
2
+ require_relative "./helpers"
2
3
 
3
4
  module DatacraftsIoSkeleton
4
5
  # Responsible for the creation of rails projects.
5
6
  class RailsCreator < Thor
6
- include Thor::Actions
7
-
8
- # Defines gem templates folder which you can use to load template to the new app.
9
- TEMPLATES_DIR = (File.dirname(__FILE__) + "/../../templates").freeze
10
-
7
+ include Helpers
11
8
  source_root TEMPLATES_DIR
12
9
 
13
10
  no_commands do
@@ -28,6 +25,7 @@ module DatacraftsIoSkeleton
28
25
  update_spec_config
29
26
  run_rubocop
30
27
  commit_project
28
+ say("Rails API part has built.", :green)
31
29
  end
32
30
  end
33
31
 
@@ -51,16 +49,12 @@ module DatacraftsIoSkeleton
51
49
  end
52
50
 
53
51
  def run_rubocop
54
- run "cd #{app} && rubocop -a"
52
+ run "cd #{app} && bundle exec rubocop -A"
55
53
  end
56
54
 
57
55
  def commit_project
58
- append_to_file app(".gitignore"), "/.idea/\n"
59
- run "cd #{app} && git add . && git commit -m 'Initial commit.'"
60
- end
61
-
62
- def app(path=nil)
63
- "#{@app_name}/#{path}"
56
+ append_to_file app(".gitignore"), "/.idea/"
57
+ commit("Initial commit.")
64
58
  end
65
59
  end
66
60
  end
@@ -0,0 +1,65 @@
1
+ require "thor"
2
+ require_relative "./helpers"
3
+
4
+ module DatacraftsIoSkeleton
5
+ # Responsible for the creation of rails projects.
6
+ class ReactCreator < Thor
7
+ include Helpers
8
+ source_root TEMPLATES_DIR
9
+
10
+ DEFAULT_FOLDERS = %w[src/tests src/components].freeze
11
+
12
+ no_commands do
13
+ def initialize(app_name, options)
14
+ super()
15
+ @app_name = app_name # We use it to commit changes.
16
+ @front_name = "#{app_name}/frontend"
17
+ @ts = options[:typescipt]
18
+ end
19
+
20
+ def call
21
+ empty_directory @front_name
22
+ inside @front_name do
23
+ create_react_app
24
+ create_default_folders
25
+ end
26
+ copy_config_files
27
+ run_linters
28
+ commit("React frontend app was added.")
29
+ say("React frontend part has built.", :green)
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ no_commands do
36
+ def create_react_app
37
+ run "npx create-react-app . #{@ts && '--template typescript'}"
38
+ run "npm i -s #{react_libs}"
39
+ run "npm install"
40
+ end
41
+
42
+ def create_default_folders
43
+ DEFAULT_FOLDERS.each(&method(:empty_directory))
44
+ end
45
+
46
+ def copy_config_files
47
+ copy_file "eslintrc.js", app("frontend/.eslintrc.js")
48
+ copy_file "stylelintrc.json", app("frontend/.stylelintrc")
49
+ copy_file "prettierrc.json", app("frontend/.prettierrc.json")
50
+ end
51
+
52
+ def run_linters
53
+ run "cd #{app('frontend')} && npx eslint --quiet --fix --ext ts,tsx,js,jsx src"
54
+ run "cd #{app('frontend')} && npx stylelint --fix **/*.css"
55
+ end
56
+
57
+ def react_libs
58
+ %w[axios prettier @typescript-eslint/parser @typescript-eslint/eslint-plugin
59
+ eslint-plugin-react eslint-config-prettier eslint-plugin-prettier
60
+ stylelint stylelint-config-standard typescript
61
+ enzyme @testing-library/react msw].join(" ")
62
+ end
63
+ end
64
+ end
65
+ end
@@ -1,4 +1,4 @@
1
1
  module DatacraftsIoSkeleton
2
2
  # Defines gem version
3
- VERSION = "0.1.0".freeze
3
+ VERSION = "0.1.1".freeze
4
4
  end
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": [
3
+ "config:base"
4
+ ]
5
+ }
@@ -0,0 +1,23 @@
1
+ module.exports = {
2
+ parser: "@typescript-eslint/parser",
3
+ parserOptions: {
4
+ ecmaVersion: 2020,
5
+ sourceType: "module",
6
+ ecmaFeatures: {
7
+ jsx: true
8
+ }
9
+ },
10
+ settings: {
11
+ react: {
12
+ version: "detect"
13
+ }
14
+ },
15
+ extends: [
16
+ "plugin:react/recommended",
17
+ "plugin:@typescript-eslint/recommended",
18
+ "prettier/@typescript-eslint",
19
+ "plugin:prettier/recommended"
20
+ ],
21
+ rules: {
22
+ },
23
+ };
@@ -0,0 +1,6 @@
1
+ {
2
+ "trailingComma": "es5",
3
+ "tabWidth": 2,
4
+ "semi": false,
5
+ "singleQuote": true
6
+ }
@@ -29,7 +29,7 @@ end
29
29
 
30
30
  gem_group :test do
31
31
  gem "database_cleaner-active_record"
32
- gem "factory_bot"
32
+ gem "factory_bot_rails"
33
33
  gem "simplecov", require: false
34
34
  gem "shoulda-matchers"
35
35
  end
@@ -5,6 +5,7 @@ require:
5
5
  - rubocop-faker
6
6
 
7
7
  AllCops:
8
+ NewCops: enable
8
9
  UseCache: false
9
10
  TargetRubyVersion: <%= RUBY_VERSION[/\d+\.\d+/] %>
10
11
  Exclude:
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "stylelint-config-standard"
3
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datacrafts-io-skeleton
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roman Ovcharov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-15 00:00:00.000000000 Z
11
+ date: 2020-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -76,11 +76,17 @@ files:
76
76
  - exe/datacrafts-io-skeleton
77
77
  - lib/datacrafts_io_skeleton.rb
78
78
  - lib/datacrafts_io_skeleton/composer.rb
79
+ - lib/datacrafts_io_skeleton/helpers.rb
79
80
  - lib/datacrafts_io_skeleton/rails_creator.rb
81
+ - lib/datacrafts_io_skeleton/react_creator.rb
80
82
  - lib/datacrafts_io_skeleton/version.rb
83
+ - renovate.json
84
+ - templates/eslintrc.js
85
+ - templates/prettierrc.json
81
86
  - templates/rails.rb
82
87
  - templates/rubocop.yml.erb
83
88
  - templates/spec.rb
89
+ - templates/stylelintrc.json
84
90
  homepage: https://github.com/datacrafts-io/skeleton
85
91
  licenses:
86
92
  - MIT