strum 0.0.21
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 +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
|