strum 0.0.21
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/.rakeTasks +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +25 -0
- data/CHANGELOG.md +1 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +71 -0
- data/README.md +35 -0
- data/Rakefile +8 -0
- data/bin/strum +5 -0
- data/lib/strum/Rakefile +6 -0
- data/lib/strum/cli.rb +37 -0
- data/lib/strum/command.rb +18 -0
- data/lib/strum/commands/generate.rb +33 -0
- data/lib/strum/commands/mixin/app_check.rb +21 -0
- data/lib/strum/commands/mixin/fields.rb +29 -0
- data/lib/strum/commands/mixin/names.rb +57 -0
- data/lib/strum/commands/new.rb +68 -0
- data/lib/strum/commands/resource/migration.rb +59 -0
- data/lib/strum/commands/resource/model.rb +31 -0
- data/lib/strum/commands/resource/route.rb +47 -0
- data/lib/strum/commands/resource/scaffold.rb +20 -0
- data/lib/strum/commands/resource/serializer.rb +31 -0
- data/lib/strum/commands/resource/service.rb +42 -0
- data/lib/strum/service.rb +116 -0
- data/lib/strum/sub_command_base.rb +18 -0
- data/lib/strum/tasks/sequel.rake +87 -0
- data/lib/strum/templates/app/blank/.env.local.tt +6 -0
- data/lib/strum/templates/app/blank/.env.test.tt +4 -0
- data/lib/strum/templates/app/blank/.gitignore +26 -0
- data/lib/strum/templates/app/blank/.rubocop.yml +28 -0
- data/lib/strum/templates/app/blank/Dockerfile +15 -0
- data/lib/strum/templates/app/blank/Gemfile.tt +68 -0
- data/lib/strum/templates/app/blank/Rakefile +8 -0
- data/lib/strum/templates/app/blank/bin/console.tt +15 -0
- data/lib/strum/templates/app/blank/config/app.rb.tt +60 -0
- data/lib/strum/templates/app/blank/config/env.rb +12 -0
- data/lib/strum/templates/app/blank/config.ru.tt +18 -0
- data/lib/strum/templates/app/blank/lib/.keep +0 -0
- data/lib/strum/templates/app/blank/routes/.keep +0 -0
- data/lib/strum/templates/app/blank/services/.keep +0 -0
- data/lib/strum/templates/app/json/serializers/.keep +0 -0
- data/lib/strum/templates/app/sequel/config/models.rb +18 -0
- data/lib/strum/templates/app/sequel/config/sequel.rb +10 -0
- data/lib/strum/templates/app/sequel/db/migrations/001_setup.rb +17 -0
- data/lib/strum/templates/app/sequel/models/.keep +0 -0
- data/lib/strum/templates/migration/%migration_filename%.rb.tt +27 -0
- data/lib/strum/templates/model/%resource_filename%.rb.tt +12 -0
- data/lib/strum/templates/route/%resource_filename%.rb.tt +9 -0
- data/lib/strum/templates/route_crud/%resource_filename%.rb.tt +44 -0
- data/lib/strum/templates/serializer/%resource_name%_serializer.rb.tt +17 -0
- data/lib/strum/templates/service/%resource_filename%.rb.tt +22 -0
- data/lib/strum/templates/service_crud/%resource_name%/create.rb.tt +28 -0
- data/lib/strum/templates/service_crud/%resource_name%/delete.rb.tt +27 -0
- data/lib/strum/templates/service_crud/%resource_name%/find.rb.tt +25 -0
- data/lib/strum/templates/service_crud/%resource_name%/search.rb.tt +23 -0
- data/lib/strum/templates/service_crud/%resource_name%/update.rb.tt +28 -0
- data/lib/strum/version.rb +5 -0
- data/lib/strum.rb +9 -0
- data/strum.gemspec +46 -0
- metadata +219 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8564c1b4cee7cb9226c7beaba0dbc32a9f39b731d177a0510ef3e00a68eacb0c
|
4
|
+
data.tar.gz: d0237c3b5aff99261d61bfabb044f01323b537b40ae0d786aa735bf903a17de4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 68de1c7b0db5542040617f8eda848e4de15c446a9ce740225938038e9eeb58debddf88e564059ce9185201dac46f88863aae61e6dbd0d6193f0e7d991e6e0e78
|
7
|
+
data.tar.gz: fb54166c475d63f0f99e277afe9f553eced31387bcc9b895262a8d6ad4c1f232fbd301f35eed903a0d5271dff3ccf670db4a49fe6c14f1297f3da71a2575686f
|
data/.gitignore
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
/.bundle/
|
2
|
+
/.yardoc
|
3
|
+
/_yardoc/
|
4
|
+
/coverage/
|
5
|
+
/doc/
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/tmp/
|
9
|
+
|
10
|
+
# rspec failure tracking
|
11
|
+
.rspec_status
|
12
|
+
|
13
|
+
# Editor directories and files
|
14
|
+
.idea
|
15
|
+
.vscode
|
16
|
+
*.suo
|
17
|
+
*.ntvs*
|
18
|
+
*.njsproj
|
19
|
+
*.sln
|
20
|
+
*.sw*
|
21
|
+
|
22
|
+
# builds
|
23
|
+
*.gem
|
data/.rakeTasks
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<Settings><!--This file was automatically generated by Ruby plugin.
|
3
|
+
You are allowed to:
|
4
|
+
1. Remove rake task
|
5
|
+
2. Add existing rake tasks
|
6
|
+
To add existing rake tasks automatically delete this file and reload the project.
|
7
|
+
--><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build strum-0.0.5.gem into the pkg directory" fullCmd="build" taksId="build" /><RakeTask description="Remove any temporary products" fullCmd="clean" taksId="clean" /><RakeTask description="Remove any generated files" fullCmd="clobber" taksId="clobber" /><RakeTask description="Build and install strum-0.0.5.gem into system gems" fullCmd="install" taksId="install" /><RakeGroup description="" fullCmd="" taksId="install"><RakeTask description="Build and install strum-0.0.5.gem into system gems without network access" fullCmd="install:local" taksId="local" /></RakeGroup><RakeTask description="Create tag v0.0.5 and build and push strum-0.0.5.gem to https://rubygems.org" fullCmd="release[remote]" taksId="release[remote]" /><RakeTask description="Run RSpec code examples" fullCmd="spec" taksId="spec" /><RakeTask description="" fullCmd="default" taksId="default" /><RakeTask description="" fullCmd="release" taksId="release" /><RakeGroup description="" fullCmd="" taksId="release"><RakeTask description="" fullCmd="release:guard_clean" taksId="guard_clean" /><RakeTask description="" fullCmd="release:rubygem_push" taksId="rubygem_push" /><RakeTask description="" fullCmd="release:source_control_push" taksId="source_control_push" /></RakeGroup></RakeGroup></Settings>
|
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
AllCops:
|
2
|
+
TargetRubyVersion: 2.6
|
3
|
+
|
4
|
+
# Use Ruby >= 1.9 syntax for hashes. Prefer { a: :b } over { :a => :b }.
|
5
|
+
Style/HashSyntax:
|
6
|
+
Enabled: true
|
7
|
+
|
8
|
+
# Method definitions after `private` or `protected` isolated calls need one
|
9
|
+
# extra level of indentation.
|
10
|
+
Layout/IndentationConsistency:
|
11
|
+
Enabled: true
|
12
|
+
EnforcedStyle: indented_internal_methods
|
13
|
+
|
14
|
+
# Two spaces, no tabs (for indentation).
|
15
|
+
Layout/IndentationWidth:
|
16
|
+
Enabled: true
|
17
|
+
|
18
|
+
# Check quotes usage according to lint rule below.
|
19
|
+
Style/StringLiterals:
|
20
|
+
Enabled: true
|
21
|
+
EnforcedStyle: double_quotes
|
22
|
+
|
23
|
+
Metrics/LineLength:
|
24
|
+
Max: 120
|
25
|
+
IgnoredPatterns: ['\A#']
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# Strum
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
strum (0.0.20)
|
5
|
+
dry-inflector (~> 0.2.0)
|
6
|
+
dry-matcher (~> 0.8.2)
|
7
|
+
thor (~> 0.20)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
ast (2.4.0)
|
13
|
+
coderay (1.1.2)
|
14
|
+
concurrent-ruby (1.1.5)
|
15
|
+
diff-lcs (1.3)
|
16
|
+
dry-core (0.4.9)
|
17
|
+
concurrent-ruby (~> 1.0)
|
18
|
+
dry-inflector (0.2.0)
|
19
|
+
dry-matcher (0.8.2)
|
20
|
+
dry-core (>= 0.4.8)
|
21
|
+
irb (1.1.0)
|
22
|
+
reline (>= 0.0.1)
|
23
|
+
jaro_winkler (1.5.4)
|
24
|
+
method_source (0.9.2)
|
25
|
+
parallel (1.19.0)
|
26
|
+
parser (2.6.5.0)
|
27
|
+
ast (~> 2.4.0)
|
28
|
+
pry (0.12.2)
|
29
|
+
coderay (~> 1.1.0)
|
30
|
+
method_source (~> 0.9.0)
|
31
|
+
rainbow (3.0.0)
|
32
|
+
rake (10.5.0)
|
33
|
+
reline (0.0.7)
|
34
|
+
rspec (3.9.0)
|
35
|
+
rspec-core (~> 3.9.0)
|
36
|
+
rspec-expectations (~> 3.9.0)
|
37
|
+
rspec-mocks (~> 3.9.0)
|
38
|
+
rspec-core (3.9.0)
|
39
|
+
rspec-support (~> 3.9.0)
|
40
|
+
rspec-expectations (3.9.0)
|
41
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
42
|
+
rspec-support (~> 3.9.0)
|
43
|
+
rspec-mocks (3.9.0)
|
44
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
45
|
+
rspec-support (~> 3.9.0)
|
46
|
+
rspec-support (3.9.0)
|
47
|
+
rubocop (0.76.0)
|
48
|
+
jaro_winkler (~> 1.5.1)
|
49
|
+
parallel (~> 1.10)
|
50
|
+
parser (>= 2.6)
|
51
|
+
rainbow (>= 2.2.2, < 4.0)
|
52
|
+
ruby-progressbar (~> 1.7)
|
53
|
+
unicode-display_width (>= 1.4.0, < 1.7)
|
54
|
+
ruby-progressbar (1.10.1)
|
55
|
+
thor (0.20.3)
|
56
|
+
unicode-display_width (1.6.0)
|
57
|
+
|
58
|
+
PLATFORMS
|
59
|
+
ruby
|
60
|
+
|
61
|
+
DEPENDENCIES
|
62
|
+
bundler (~> 1.17)
|
63
|
+
irb
|
64
|
+
pry
|
65
|
+
rake (~> 10.0)
|
66
|
+
rspec (~> 3.0)
|
67
|
+
rubocop (~> 0.76.0)
|
68
|
+
strum!
|
69
|
+
|
70
|
+
BUNDLED WITH
|
71
|
+
1.17.2
|
data/README.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# Strum
|
2
|
+
|
3
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/strum`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
|
+
|
5
|
+
TODO: Delete this and the text above, and describe your gem
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'strum'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install strum
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
TODO: Write usage instructions here
|
26
|
+
|
27
|
+
## Development
|
28
|
+
|
29
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
|
+
|
31
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
|
+
|
33
|
+
## Contributing
|
34
|
+
|
35
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/strum.
|
data/Rakefile
ADDED
data/bin/strum
ADDED
data/lib/strum/Rakefile
ADDED
data/lib/strum/cli.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "thor"
|
4
|
+
require "strum/commands/new"
|
5
|
+
require "strum/commands/generate"
|
6
|
+
|
7
|
+
module Strum
|
8
|
+
# Command line interface
|
9
|
+
class CLI < Thor
|
10
|
+
include Thor::Actions
|
11
|
+
|
12
|
+
map "-v" => :version,
|
13
|
+
"g" => :generate,
|
14
|
+
"c" => :console,
|
15
|
+
"s" => :server
|
16
|
+
register(Strum::Commands::New, "new", "new [NAME] [options]", "Create new project skeleton")
|
17
|
+
|
18
|
+
desc "console", "Start the Strum console (short-cut alias: \"c\")"
|
19
|
+
def console
|
20
|
+
run "bundle exec rake #{File.expand_path('bin/console')}"
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "server", "Start the Strum server (short-cut alias: \"s\")"
|
24
|
+
def server
|
25
|
+
run File.expand_path("bin/strum")
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "generate [RESOURCE]", "Generate new Strum resource"
|
29
|
+
subcommand "generate", Commands::Generate
|
30
|
+
|
31
|
+
desc "version", "Show Strum version"
|
32
|
+
def version
|
33
|
+
require_relative "version"
|
34
|
+
say "Strum #{Strum::VERSION}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "thor"
|
4
|
+
require "strum/commands/version"
|
5
|
+
require "strum/commands/console"
|
6
|
+
require "strum/generators/new"
|
7
|
+
require "strum/generators/generate"
|
8
|
+
module Strum
|
9
|
+
# Strum commands
|
10
|
+
class Command < Thor
|
11
|
+
map "v" => :version, "g" => :generate, "c" => :console
|
12
|
+
|
13
|
+
register(Strum::Version, "version", "version", "Show Strum version")
|
14
|
+
register(Strum::Console, "console", "console", "Start Strum console (IRB)")
|
15
|
+
register(Strum::New, "new", "new", "Generate new Strum project skeleton")
|
16
|
+
register(Strum::Generate, "generate", "generate", "Generate new Strum resource")
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "strum/sub_command_base"
|
4
|
+
require "strum/commands/resource/model"
|
5
|
+
require "strum/commands/resource/migration"
|
6
|
+
require "strum/commands/resource/serializer"
|
7
|
+
require "strum/commands/resource/service"
|
8
|
+
require "strum/commands/resource/route"
|
9
|
+
require "strum/commands/resource/scaffold"
|
10
|
+
|
11
|
+
module Strum
|
12
|
+
module Commands
|
13
|
+
# Generate sub commands
|
14
|
+
class Generate < Thor
|
15
|
+
register(Strum::Commands::Resource::Route, "route", "route [NAME]", "Create route")
|
16
|
+
register(Strum::Commands::Resource::Service, "service", "service [NAME]", "Create service object")
|
17
|
+
register(Strum::Commands::Resource::Serializer, "serializer", "serializer [NAME] [fields]", "Create serializer")
|
18
|
+
register(Strum::Commands::Resource::Migration, "migration", "migration [NAME] [fields]", "Create sequel migration")
|
19
|
+
register(Strum::Commands::Resource::Model, "model", "model [NAME] [fields]", "Create sequel model")
|
20
|
+
register(Strum::Commands::Resource::Scaffold, "scaffold", "scaffold [NAME] [fields]", "Create Scaffold")
|
21
|
+
|
22
|
+
def self.banner(command, _namespace = nil, _subcommand = false)
|
23
|
+
"#{basename} #{subcommand_prefix} #{command.usage}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.subcommand_prefix
|
27
|
+
name.gsub(/.*::/, "")
|
28
|
+
.gsub(/^[A-Z]/) { |match| match[0].downcase }
|
29
|
+
.gsub(/[A-Z]/) { |match| "-#{match[0].downcase}" }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Strum
|
2
|
+
module Commands
|
3
|
+
module Mixin
|
4
|
+
# Is it strum folder
|
5
|
+
module AppCheck
|
6
|
+
protected
|
7
|
+
class StrumGenerateError < StandardError; end
|
8
|
+
|
9
|
+
def app_class_name
|
10
|
+
File.open("config/app.rb").read.match(/class (.+) < Roda/)[1]
|
11
|
+
rescue StandardError
|
12
|
+
nil
|
13
|
+
end
|
14
|
+
|
15
|
+
def strum?
|
16
|
+
!app_class_name.nil?
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Strum
|
4
|
+
module Commands
|
5
|
+
module Mixin
|
6
|
+
# Parse fields for commands
|
7
|
+
module Fields
|
8
|
+
# class FieldError < StandardError; end
|
9
|
+
# FIELD_TYPES = %w[string integer boolean date time datetime].freeze
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def permitted_fields
|
14
|
+
fields.map do |field|
|
15
|
+
field_parts = field.split(":")
|
16
|
+
payload = { name: field_parts[0] }
|
17
|
+
payload[:type] = field_parts[1] || "string"
|
18
|
+
payload[:index] = field_parts[2] unless field_parts[2].nil?
|
19
|
+
# raise FieldError, "Incorrect name format '#{payload[:name]}'" unless payload[:name].match(/[a-z\_\-]+/)
|
20
|
+
# raise FieldError, "Incorrect field type '#{payload[:type]}'" unless FIELD_TYPES.include?(payload[:type])
|
21
|
+
# raise FieldError, "Incorrect index format" unless payload[:index].nil? ^ payload[:index].eql?("index")
|
22
|
+
|
23
|
+
payload
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "dry-inflector"
|
4
|
+
|
5
|
+
module Strum
|
6
|
+
module Commands
|
7
|
+
module Mixin
|
8
|
+
# Parse fields for commands
|
9
|
+
module Names
|
10
|
+
protected
|
11
|
+
|
12
|
+
def resource_class_name
|
13
|
+
resource_name.split("_").map(&:capitalize).join
|
14
|
+
end
|
15
|
+
|
16
|
+
def resources_class_name
|
17
|
+
inflector.pluralize(resource_class_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def resource_name
|
21
|
+
inflector.singularize(name_components.last)
|
22
|
+
end
|
23
|
+
|
24
|
+
def resources_name
|
25
|
+
inflector.pluralize(name_components.last)
|
26
|
+
end
|
27
|
+
alias resource_filename resources_name
|
28
|
+
|
29
|
+
def namespace_names
|
30
|
+
namespaces.map { |namespace| namespace.split("_").map(&:capitalize).join }
|
31
|
+
end
|
32
|
+
|
33
|
+
def namespace_path
|
34
|
+
File.join(*namespaces)
|
35
|
+
end
|
36
|
+
|
37
|
+
def ident
|
38
|
+
" " * namespaces.size
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def name_components
|
44
|
+
@name_components ||= name.scan(/[[:alnum:]]+/).map { |s| s.split(/(?=[A-Z])|\_/).map(&:downcase).join("_") }
|
45
|
+
end
|
46
|
+
|
47
|
+
def namespaces
|
48
|
+
name_components.take(name_components.size - 1)
|
49
|
+
end
|
50
|
+
|
51
|
+
def inflector
|
52
|
+
@inflector ||= Dry::Inflector.new
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Strum
|
4
|
+
module Commands
|
5
|
+
class New < Thor::Group
|
6
|
+
include Thor::Actions
|
7
|
+
|
8
|
+
desc "Create new project skeleton"
|
9
|
+
argument :name
|
10
|
+
class_option :cors, type: :boolean
|
11
|
+
class_option :sequel, type: :boolean, aliases: ["-s"]
|
12
|
+
class_option :rabbit, type: :boolean, aliases: ["-r"]
|
13
|
+
class_option :json, type: :boolean, aliases: ["-j"]
|
14
|
+
class_option :rest, type: :boolean, aliases: ["--api"]
|
15
|
+
class_option :redis, type: :boolean
|
16
|
+
|
17
|
+
def create_app
|
18
|
+
directory("../templates/app/blank", app_name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def extend_sequel
|
22
|
+
directory("../templates/app/sequel", app_name) if sequel?
|
23
|
+
end
|
24
|
+
|
25
|
+
def extend_json
|
26
|
+
directory("../templates/app/json", app_name) if json?
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.banner
|
30
|
+
"#{basename} #{self_command.formatted_usage(self, false).split(':').last}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.source_root
|
34
|
+
File.expand_path(__dir__, "../templates")
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
38
|
+
|
39
|
+
def app_name
|
40
|
+
name.gsub(/[^0-9A-Za-z]+/, "_").split(/(?=[A-Z])|[\-\_]/).map(&:downcase).join("_")
|
41
|
+
end
|
42
|
+
|
43
|
+
def app_class_name
|
44
|
+
app_name.split("_").map(&:capitalize).join << "App"
|
45
|
+
end
|
46
|
+
|
47
|
+
def sequel?
|
48
|
+
options[:sequel] || (options[:rest] && (options[:sequel] != false))
|
49
|
+
end
|
50
|
+
|
51
|
+
def json?
|
52
|
+
options[:json] || (options[:rest] && (options[:json] != false))
|
53
|
+
end
|
54
|
+
|
55
|
+
def cors?
|
56
|
+
options[:cors]
|
57
|
+
end
|
58
|
+
|
59
|
+
def rabbit?
|
60
|
+
options[:rabbit]
|
61
|
+
end
|
62
|
+
|
63
|
+
def redis?
|
64
|
+
options[:redis]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "strum/commands/mixin/app_check"
|
4
|
+
require "strum/commands/mixin/names"
|
5
|
+
require "strum/commands/mixin/fields"
|
6
|
+
|
7
|
+
module Strum::Commands::Resource
|
8
|
+
# Strum generate sub command
|
9
|
+
# `strum generate migration`
|
10
|
+
class Migration < Thor::Group
|
11
|
+
include Thor::Actions
|
12
|
+
include Strum::Commands::Mixin::AppCheck
|
13
|
+
include Strum::Commands::Mixin::Names
|
14
|
+
include Strum::Commands::Mixin::Fields
|
15
|
+
|
16
|
+
argument :name
|
17
|
+
class_option :model, type: :boolean, default: false
|
18
|
+
class_option :fields, type: :array, default: []
|
19
|
+
|
20
|
+
def self.source_root
|
21
|
+
File.expand_path("../../templates", __dir__)
|
22
|
+
end
|
23
|
+
|
24
|
+
def pre_check
|
25
|
+
raise StrumGenerateError, "This is not Strum application" unless strum?
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_model_file
|
29
|
+
directory("migration", "db/migrations")
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
def model?
|
35
|
+
options[:model]
|
36
|
+
end
|
37
|
+
|
38
|
+
def table_name
|
39
|
+
inflector.tableize(name_components.join("_"))
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def migration_filename
|
45
|
+
if model?
|
46
|
+
"#{new_migration_number}_create_#{table_name}"
|
47
|
+
else
|
48
|
+
"#{new_migration_number}_#{name_components.join("_")}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def new_migration_number
|
53
|
+
migration_files = (Dir.chdir("db/migrations") { Dir.glob("*").max })
|
54
|
+
last_number = migration_files && migration_files[/\d+/].to_i || 0
|
55
|
+
new_number = last_number > 9 ? last_number + 10 : 10
|
56
|
+
new_number.to_s.rjust(3, "0")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "strum/commands/mixin/app_check"
|
4
|
+
require "strum/commands/mixin/names"
|
5
|
+
require "strum/commands/mixin/fields"
|
6
|
+
|
7
|
+
module Strum::Commands::Resource
|
8
|
+
class Model < Thor::Group
|
9
|
+
include Thor::Actions
|
10
|
+
include Strum::Commands::Mixin::AppCheck
|
11
|
+
include Strum::Commands::Mixin::Names
|
12
|
+
include Strum::Commands::Mixin::Fields
|
13
|
+
|
14
|
+
argument :name, required: true
|
15
|
+
argument :fields, type: :array, required: false, default: []
|
16
|
+
class_option :rspec, type: :boolean
|
17
|
+
class_option :migration, type: :boolean, default: true
|
18
|
+
|
19
|
+
def self.source_root
|
20
|
+
File.expand_path("../../templates", __dir__)
|
21
|
+
end
|
22
|
+
|
23
|
+
def pre_check
|
24
|
+
raise StrumGenerateError, "This is not Strum application" unless strum?
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_model_file
|
28
|
+
directory("model", File.expand_path(namespace_path, "models"))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "strum/commands/mixin/app_check"
|
4
|
+
require "strum/commands/mixin/names"
|
5
|
+
require "strum/commands/mixin/fields"
|
6
|
+
|
7
|
+
module Strum::Commands::Resource
|
8
|
+
# Strum generate sub command
|
9
|
+
# `strum generate migration`
|
10
|
+
class Route < Thor::Group
|
11
|
+
include Thor::Actions
|
12
|
+
include Strum::Commands::Mixin::AppCheck
|
13
|
+
include Strum::Commands::Mixin::Names
|
14
|
+
include Strum::Commands::Mixin::Fields
|
15
|
+
|
16
|
+
argument :name
|
17
|
+
class_option :crud, type: :boolean, aliases: ["-c"]
|
18
|
+
|
19
|
+
def self.source_root
|
20
|
+
File.expand_path("../../templates", __dir__)
|
21
|
+
end
|
22
|
+
|
23
|
+
def pre_check
|
24
|
+
raise StrumGenerateError, "This is not Strum application" unless strum?
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_route_file
|
28
|
+
options[:crud] ? crud_route : basic_route
|
29
|
+
end
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
33
|
+
def route_name
|
34
|
+
options[:crud] ? inflector.pluralize(name_components.join("-")) : name_components.join("-")
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def basic_route
|
40
|
+
directory("route", File.expand_path(namespace_path, "routes"))
|
41
|
+
end
|
42
|
+
|
43
|
+
def crud_route
|
44
|
+
directory("route_crud", File.expand_path(namespace_path, "routes"))
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "strum/commands/resource/model"
|
4
|
+
|
5
|
+
module Strum::Commands::Resource
|
6
|
+
class Scaffold < Thor::Group
|
7
|
+
argument :name, required: true
|
8
|
+
argument :fields, type: :array, required: false, default: []
|
9
|
+
class_option :crud, type: :boolean, default: true
|
10
|
+
class_option :rspec, type: :boolean, default: true
|
11
|
+
|
12
|
+
def create_scaffold
|
13
|
+
invoke Strum::Commands::Resource::Model, nil, options
|
14
|
+
invoke Strum::Commands::Resource::Migration, nil, model: true
|
15
|
+
invoke Strum::Commands::Resource::Serializer, nil, options
|
16
|
+
invoke Strum::Commands::Resource::Route, nil, options.merge(crud: true)
|
17
|
+
invoke Strum::Commands::Resource::Service, nil, options.merge(crud: true)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "strum/commands/mixin/app_check"
|
4
|
+
require "strum/commands/mixin/names"
|
5
|
+
require "strum/commands/mixin/fields"
|
6
|
+
|
7
|
+
module Strum::Commands::Resource
|
8
|
+
# Strum generate sub command
|
9
|
+
# `strum generate migration`
|
10
|
+
class Serializer < Thor::Group
|
11
|
+
include Thor::Actions
|
12
|
+
include Strum::Commands::Mixin::AppCheck
|
13
|
+
include Strum::Commands::Mixin::Names
|
14
|
+
include Strum::Commands::Mixin::Fields
|
15
|
+
|
16
|
+
argument :name
|
17
|
+
class_option :fields, type: :array, default: []
|
18
|
+
|
19
|
+
def self.source_root
|
20
|
+
File.expand_path("../../templates", __dir__)
|
21
|
+
end
|
22
|
+
|
23
|
+
def pre_check
|
24
|
+
raise StrumGenerateError, "This is not Strum application" unless strum?
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_serializer_file
|
28
|
+
directory("serializer", File.expand_path(namespace_path, "serializers"))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|