vedeu_cli 0.0.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 +7 -0
- data/.gitignore +11 -0
- data/.rubocop.yml +182 -0
- data/.ruby-version +1 -0
- data/.travis.yml +4 -0
- data/.yardopts +4 -0
- data/Gemfile +4 -0
- data/Guardfile +8 -0
- data/LICENSE.txt +21 -0
- data/README.md +66 -0
- data/Rakefile +10 -0
- data/config/rubocop_disabled.yml +50 -0
- data/config/rubocop_enabled.yml +1039 -0
- data/lib/vedeu/cli/application.rb +133 -0
- data/lib/vedeu/cli/helpers.rb +139 -0
- data/lib/vedeu/cli/main.rb +39 -0
- data/lib/vedeu/cli/templates/application/.gitignore +1 -0
- data/lib/vedeu/cli/templates/application/.ruby-version +1 -0
- data/lib/vedeu/cli/templates/application/Gemfile +4 -0
- data/lib/vedeu/cli/templates/application/LICENSE.txt +24 -0
- data/lib/vedeu/cli/templates/application/README.md +18 -0
- data/lib/vedeu/cli/templates/application/app/controllers/application_controller.erb +7 -0
- data/lib/vedeu/cli/templates/application/app/controllers/name.erb +22 -0
- data/lib/vedeu/cli/templates/application/app/helpers/application_helper.erb +9 -0
- data/lib/vedeu/cli/templates/application/app/helpers/name.erb +11 -0
- data/lib/vedeu/cli/templates/application/app/models/keymaps/_global_.rb +8 -0
- data/lib/vedeu/cli/templates/application/app/models/keymaps/name.erb +3 -0
- data/lib/vedeu/cli/templates/application/app/views/interfaces/name.erb +67 -0
- data/lib/vedeu/cli/templates/application/app/views/name.erb +36 -0
- data/lib/vedeu/cli/templates/application/app/views/templates/name.erb +0 -0
- data/lib/vedeu/cli/templates/application/application.erb +22 -0
- data/lib/vedeu/cli/templates/application/bin/name +9 -0
- data/lib/vedeu/cli/templates/application/config/app_name.erb +1 -0
- data/lib/vedeu/cli/templates/application/config/configuration.erb +33 -0
- data/lib/vedeu/cli/templates/application/lib/.gitkeep +0 -0
- data/lib/vedeu/cli/templates/application/test/.gitkeep +0 -0
- data/lib/vedeu/cli/templates/application/vendor/.gitkeep +0 -0
- data/lib/vedeu/cli/version.rb +10 -0
- data/lib/vedeu/cli/view.rb +86 -0
- data/lib/vedeu_cli.rb +21 -0
- data/test/lib/vedeu/cli/application_test.rb +37 -0
- data/test/lib/vedeu/cli/helpers_test.rb +197 -0
- data/test/lib/vedeu/cli/main_test.rb +60 -0
- data/test/lib/vedeu/cli/version_test.rb +12 -0
- data/test/lib/vedeu/cli/view_test.rb +38 -0
- data/test/lib/vedeu_cli_test.rb +11 -0
- data/test/test_helper.rb +46 -0
- data/vedeu_cli.gemspec +36 -0
- metadata +288 -0
@@ -0,0 +1,133 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module CLI
|
4
|
+
|
5
|
+
# Generates the client application directory and file structure.
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# ```bash
|
9
|
+
# vedeu new your_app_name_here
|
10
|
+
# ```
|
11
|
+
#
|
12
|
+
# :nocov:
|
13
|
+
class Application
|
14
|
+
|
15
|
+
include Vedeu::CLI::Helpers
|
16
|
+
|
17
|
+
# @param name [String] The name of the application.
|
18
|
+
# @return [Vedeu::CLI::Application]
|
19
|
+
def self.generate(name)
|
20
|
+
new(name).generate
|
21
|
+
end
|
22
|
+
|
23
|
+
# Returns a new instance of Vedeu::CLI::Application.
|
24
|
+
#
|
25
|
+
# @param name [String] The name of the application.
|
26
|
+
# @return [Vedeu::CLI::Application]
|
27
|
+
def initialize(name)
|
28
|
+
@name = name
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [void]
|
32
|
+
def generate
|
33
|
+
make_directory_structure
|
34
|
+
|
35
|
+
copy_app_root_files
|
36
|
+
copy_application_bootstrapper
|
37
|
+
copy_application_controller
|
38
|
+
copy_application_helper
|
39
|
+
copy_global_keymap
|
40
|
+
copy_application_executable
|
41
|
+
make_application_executable
|
42
|
+
copy_configuration
|
43
|
+
copy_app_name
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
# @return [void]
|
49
|
+
def make_directory_structure
|
50
|
+
directories.each { |directory| make_directory(name + directory) }
|
51
|
+
end
|
52
|
+
|
53
|
+
# @return [void]
|
54
|
+
def copy_application_bootstrapper
|
55
|
+
make_file(source + '/application.erb',
|
56
|
+
app_root_path + '/application.rb')
|
57
|
+
end
|
58
|
+
|
59
|
+
# @return [void]
|
60
|
+
def copy_application_controller
|
61
|
+
make_file(source + '/app/controllers/application_controller.erb',
|
62
|
+
app_controllers_path + 'application_controller.rb')
|
63
|
+
end
|
64
|
+
|
65
|
+
# @return [void]
|
66
|
+
def copy_application_executable
|
67
|
+
copy_file(source + '/bin/name', app_bin_path + "#{name}")
|
68
|
+
end
|
69
|
+
|
70
|
+
# @return [void]
|
71
|
+
def copy_application_helper
|
72
|
+
make_file(source + '/app/helpers/application_helper.erb',
|
73
|
+
app_helpers_path + 'application_helper.rb')
|
74
|
+
end
|
75
|
+
|
76
|
+
# @return [void]
|
77
|
+
def copy_configuration
|
78
|
+
make_file(source + '/config/configuration.erb',
|
79
|
+
app_config_path + 'configuration.rb')
|
80
|
+
end
|
81
|
+
|
82
|
+
# @return [void]
|
83
|
+
def copy_app_name
|
84
|
+
make_file(source + '/config/app_name.erb',
|
85
|
+
app_config_path + 'app_name')
|
86
|
+
end
|
87
|
+
|
88
|
+
# @return [void]
|
89
|
+
def copy_app_root_files
|
90
|
+
[
|
91
|
+
'/Gemfile',
|
92
|
+
'/.gitignore',
|
93
|
+
'/LICENSE.txt',
|
94
|
+
'/README.md',
|
95
|
+
'/.ruby-version',
|
96
|
+
].each do |file|
|
97
|
+
copy_file((source + file), (app_root_path + file))
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# @return [void]
|
102
|
+
def make_application_executable
|
103
|
+
FileUtils.chmod(0755, "#{name}/bin/#{name}")
|
104
|
+
end
|
105
|
+
|
106
|
+
# @return [void]
|
107
|
+
def copy_global_keymap
|
108
|
+
copy_file(source + '/app/models/keymaps/_global_.rb',
|
109
|
+
app_keymaps_path + '_global_.rb')
|
110
|
+
end
|
111
|
+
|
112
|
+
# @return [Array<String>]
|
113
|
+
def directories
|
114
|
+
[
|
115
|
+
'/app/controllers',
|
116
|
+
'/app/helpers',
|
117
|
+
'/app/models/keymaps',
|
118
|
+
'/app/views/interfaces',
|
119
|
+
'/app/views/templates',
|
120
|
+
'/bin',
|
121
|
+
'/config',
|
122
|
+
'/lib',
|
123
|
+
'/test',
|
124
|
+
'/vendor',
|
125
|
+
]
|
126
|
+
end
|
127
|
+
|
128
|
+
end # Application
|
129
|
+
# :nocov:
|
130
|
+
|
131
|
+
end # CLI
|
132
|
+
|
133
|
+
end # Vedeu
|
@@ -0,0 +1,139 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module CLI
|
4
|
+
|
5
|
+
# Provides functionality used by the generators to build the client
|
6
|
+
# application.
|
7
|
+
#
|
8
|
+
# :nocov:
|
9
|
+
module Helpers
|
10
|
+
|
11
|
+
include Vedeu::Common
|
12
|
+
|
13
|
+
# @return [String]
|
14
|
+
def app_name
|
15
|
+
@app_name ||= File.read('./config/app_name')
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [String]
|
19
|
+
def app_bin_path
|
20
|
+
name + '/bin/'
|
21
|
+
end
|
22
|
+
|
23
|
+
# @return [String]
|
24
|
+
def app_config_path
|
25
|
+
name + '/config/'
|
26
|
+
end
|
27
|
+
|
28
|
+
# @return [String]
|
29
|
+
def app_controllers_path
|
30
|
+
name + '/app/controllers/'
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [String]
|
34
|
+
def app_helpers_path
|
35
|
+
name + '/app/helpers/'
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [String]
|
39
|
+
def app_models_path
|
40
|
+
name + '/app/models/'
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [String]
|
44
|
+
def app_keymaps_path
|
45
|
+
name + '/app/models/keymaps/'
|
46
|
+
end
|
47
|
+
|
48
|
+
# @return [String]
|
49
|
+
def app_views_path
|
50
|
+
name + '/app/views/'
|
51
|
+
end
|
52
|
+
|
53
|
+
# @param destination [String]
|
54
|
+
# @return [void]
|
55
|
+
def make_directory(destination)
|
56
|
+
Vedeu.log_stdout(type: :create, message: "#{destination}")
|
57
|
+
|
58
|
+
FileUtils.mkdir_p(destination)
|
59
|
+
end
|
60
|
+
|
61
|
+
# @param source [String]
|
62
|
+
# @param destination [String]
|
63
|
+
# @return [void]
|
64
|
+
def copy_file(source, destination)
|
65
|
+
if File.exist?(destination)
|
66
|
+
skipped_file(destination)
|
67
|
+
|
68
|
+
else
|
69
|
+
Vedeu.log_stdout(type: :create, message: "#{destination}")
|
70
|
+
|
71
|
+
FileUtils.cp(source, destination)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# @param source [String]
|
76
|
+
# @param destination [String]
|
77
|
+
# @return [void]
|
78
|
+
def make_file(source, destination)
|
79
|
+
if File.exist?(destination)
|
80
|
+
skipped_file(destination)
|
81
|
+
|
82
|
+
else
|
83
|
+
Vedeu.log_stdout(type: :create, message: "#{destination}")
|
84
|
+
|
85
|
+
File.write(destination, parse(source))
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# @param destination [String]
|
90
|
+
# @return [void]
|
91
|
+
def skipped_file(destination)
|
92
|
+
Vedeu.log_stdout(type: :create,
|
93
|
+
message: "#{destination} " +
|
94
|
+
Esc.red { 'already exists, skipped.' })
|
95
|
+
end
|
96
|
+
|
97
|
+
# @param destination [String]
|
98
|
+
# @return [void]
|
99
|
+
def touch_file(destination)
|
100
|
+
Vedeu.log_stdout(type: :create, message: "#{destination}")
|
101
|
+
|
102
|
+
FileUtils.touch(destination)
|
103
|
+
end
|
104
|
+
|
105
|
+
# @return [String]
|
106
|
+
def name
|
107
|
+
@_name ||= @name.downcase
|
108
|
+
end
|
109
|
+
alias_method :app_root_path, :name
|
110
|
+
|
111
|
+
# @return [String]
|
112
|
+
def name_as_class
|
113
|
+
name.downcase.split(/_|-/).map(&:capitalize).join
|
114
|
+
end
|
115
|
+
|
116
|
+
# @return [String]
|
117
|
+
def output(message = '')
|
118
|
+
Vedeu.log_stdout(type: :info, message: message)
|
119
|
+
|
120
|
+
message
|
121
|
+
end
|
122
|
+
|
123
|
+
# @param source [String]
|
124
|
+
# @return [String]
|
125
|
+
def parse(source)
|
126
|
+
Vedeu::Templating::Template.parse(self, source)
|
127
|
+
end
|
128
|
+
|
129
|
+
# @return [String]
|
130
|
+
def source
|
131
|
+
File.dirname(__FILE__) + '/templates/application/.'
|
132
|
+
end
|
133
|
+
|
134
|
+
end # Helpers
|
135
|
+
# :nocov:
|
136
|
+
|
137
|
+
end # CLI
|
138
|
+
|
139
|
+
end # Vedeu
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
# Provide a command line interface to Vedeu.
|
4
|
+
#
|
5
|
+
module CLI
|
6
|
+
|
7
|
+
# The main command line interface commands.
|
8
|
+
#
|
9
|
+
class Main < Thor
|
10
|
+
|
11
|
+
desc 'new <name>', 'Create a skeleton Vedeu client application.'
|
12
|
+
# @param name [String]
|
13
|
+
# @return [String]
|
14
|
+
def new(name)
|
15
|
+
say(Vedeu::CLI::Application.generate(name))
|
16
|
+
end
|
17
|
+
|
18
|
+
# 'Specify the interface name lowercase snakecase; e.g. main_interface'
|
19
|
+
|
20
|
+
desc 'view <name>',
|
21
|
+
'Create a new interface within the client application.'
|
22
|
+
# @param name [String]
|
23
|
+
# @return [String]
|
24
|
+
def view(name)
|
25
|
+
Vedeu::CLI::View.generate(name)
|
26
|
+
end
|
27
|
+
|
28
|
+
desc 'version',
|
29
|
+
'Print the version.'
|
30
|
+
# @return [String]
|
31
|
+
def version
|
32
|
+
say("vedeu #{Vedeu::VERSION} (vedeu_cli #{Vedeu::CLI::VERSION})")
|
33
|
+
end
|
34
|
+
|
35
|
+
end # Main
|
36
|
+
|
37
|
+
end # CLI
|
38
|
+
|
39
|
+
end # Vedeu
|
@@ -0,0 +1 @@
|
|
1
|
+
log/**/*
|
@@ -0,0 +1 @@
|
|
1
|
+
2.2.2
|
@@ -0,0 +1,24 @@
|
|
1
|
+
Copyright (c) 2014 Your Name Here
|
2
|
+
|
3
|
+
Note: You may wish to change this license to suit your legal needs.
|
4
|
+
|
5
|
+
MIT License
|
6
|
+
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
8
|
+
a copy of this software and associated documentation files (the
|
9
|
+
"Software"), to deal in the Software without restriction, including
|
10
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
11
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
12
|
+
permit persons to whom the Software is furnished to do so, subject to
|
13
|
+
the following conditions:
|
14
|
+
|
15
|
+
The above copyright notice and this permission notice shall be
|
16
|
+
included in all copies or substantial portions of the Software.
|
17
|
+
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
19
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
20
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
21
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
22
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
23
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
24
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# <%= object.name_as_class %>
|
2
|
+
|
3
|
+
This README would normally document whatever steps are necessary to get the
|
4
|
+
application up and running.
|
5
|
+
|
6
|
+
Things you may want to cover:
|
7
|
+
|
8
|
+
* Dependencies
|
9
|
+
|
10
|
+
* Installation
|
11
|
+
|
12
|
+
* Configuration
|
13
|
+
|
14
|
+
* Runtime instructions
|
15
|
+
|
16
|
+
* How to contribute
|
17
|
+
|
18
|
+
* Author information
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative 'application_controller'
|
2
|
+
require_relative '../views/<%= object.name %>'
|
3
|
+
|
4
|
+
module <%= object.app_name %>
|
5
|
+
|
6
|
+
class <%= object.name_as_class %>Controller < <%= object.app_name -%>::ApplicationController
|
7
|
+
|
8
|
+
controller :<%= object.name %>
|
9
|
+
action :list
|
10
|
+
action :show
|
11
|
+
# add more actions and implement or remove existing actions
|
12
|
+
|
13
|
+
def list
|
14
|
+
end
|
15
|
+
|
16
|
+
def show
|
17
|
+
<%= object.app_name %>::<%= object.name_as_class %>View.render(params)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
Vedeu.keymap('_global_') do
|
2
|
+
# see http://www.rubydoc.info/gems/vedeu/Vedeu/DSL/Keymap
|
3
|
+
|
4
|
+
key('q') { Vedeu.trigger(:_exit_) }
|
5
|
+
key(:esc) { Vedeu.trigger(:_mode_switch_) }
|
6
|
+
key(:shift_tab) { Vedeu.trigger(:_focus_previous_) }
|
7
|
+
key(:tab) { Vedeu.trigger(:_focus_next_) }
|
8
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
Vedeu.interface '<%= object.name %>' do
|
2
|
+
# border do
|
3
|
+
# Define colour and style of border
|
4
|
+
# colour foreground: '#ffffff', background: '#000000'
|
5
|
+
# style 'normal'
|
6
|
+
|
7
|
+
# Define visibility of border
|
8
|
+
#
|
9
|
+
# Uncomment one of these:
|
10
|
+
# enable!
|
11
|
+
# disable!
|
12
|
+
#
|
13
|
+
# Individually control each border:
|
14
|
+
# hide_bottom!
|
15
|
+
# hide_left!
|
16
|
+
# hide_right!
|
17
|
+
# hide_top!
|
18
|
+
# show_bottom!
|
19
|
+
# show_left!
|
20
|
+
# show_right!
|
21
|
+
# show_top!
|
22
|
+
|
23
|
+
# Define characters used to draw border
|
24
|
+
# bottom_right '+'
|
25
|
+
# bottom_left '+'
|
26
|
+
# horizontal '-'
|
27
|
+
# top_right '+'
|
28
|
+
# top_left '+'
|
29
|
+
# vertical '|'
|
30
|
+
|
31
|
+
# Define the title of the interface
|
32
|
+
# title '<%= object.name %>'
|
33
|
+
# end
|
34
|
+
|
35
|
+
# background
|
36
|
+
|
37
|
+
# colour
|
38
|
+
|
39
|
+
# cursor!
|
40
|
+
|
41
|
+
# See Vedeu::DSL::Interface#delay
|
42
|
+
# delay 1.0
|
43
|
+
|
44
|
+
# focus!
|
45
|
+
|
46
|
+
# foreground
|
47
|
+
|
48
|
+
# geometry do
|
49
|
+
# centred!
|
50
|
+
# x 1
|
51
|
+
# y 1
|
52
|
+
# xn 11
|
53
|
+
# yn 11
|
54
|
+
# height 10
|
55
|
+
# width 10
|
56
|
+
# end
|
57
|
+
|
58
|
+
# group ''
|
59
|
+
|
60
|
+
# hide!
|
61
|
+
|
62
|
+
# show!
|
63
|
+
|
64
|
+
# style
|
65
|
+
|
66
|
+
# zindex
|
67
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module <%= object.app_name %>
|
2
|
+
|
3
|
+
class <%= object.name_as_class %>View < Vedeu::ApplicationView
|
4
|
+
|
5
|
+
def render
|
6
|
+
Vedeu.renders do
|
7
|
+
|
8
|
+
# Build up the view programmatically...
|
9
|
+
#
|
10
|
+
# view '<%= object.name %>' do
|
11
|
+
# lines do
|
12
|
+
# line 'some content...'
|
13
|
+
# end
|
14
|
+
# end
|
15
|
+
|
16
|
+
# ...or use the template in 'app/views/templates/<%= object.name %>'
|
17
|
+
#
|
18
|
+
template_for('<%= object.name %>',
|
19
|
+
template('<%= object.name %>'),
|
20
|
+
object,
|
21
|
+
options)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def object
|
28
|
+
end
|
29
|
+
|
30
|
+
def options
|
31
|
+
{}
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
File without changes
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative 'config/configuration'
|
2
|
+
# When manually setting the entry point below, uncomment this line:
|
3
|
+
# require_relative 'app/controllers/some_controller'
|
4
|
+
|
5
|
+
module <%= object.name_as_class %>
|
6
|
+
|
7
|
+
class Application
|
8
|
+
|
9
|
+
# Change this to be the controller you would like to start the
|
10
|
+
# application from.
|
11
|
+
#
|
12
|
+
# def self.entry_point
|
13
|
+
# <%= object.name_as_class %>::SomeController.new
|
14
|
+
# end
|
15
|
+
|
16
|
+
# Vedeu::Bootstrap.start(ARGV, entry_point)
|
17
|
+
|
18
|
+
Vedeu::Bootstrap.start(ARGV)
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= object.name_as_class -%>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
Vedeu.configure do
|
2
|
+
# base_path
|
3
|
+
|
4
|
+
# colour_mode 16_777_216 # Some terminals don't render colour at all when this
|
5
|
+
# value is not one of 8, 16, 256 or 16777216.
|
6
|
+
|
7
|
+
# compression false
|
8
|
+
|
9
|
+
# debug! # Requires "gem 'ruby-prof'" in your Gemfile.
|
10
|
+
# drb!
|
11
|
+
# drb_host 'localhost'
|
12
|
+
# drb_port 21420
|
13
|
+
# drb_width 80
|
14
|
+
# drb_height 25
|
15
|
+
|
16
|
+
# terminal_mode :raw
|
17
|
+
# cooked!
|
18
|
+
# raw!
|
19
|
+
|
20
|
+
log "/tmp/<%= object.name %>.log"
|
21
|
+
|
22
|
+
# renderers
|
23
|
+
|
24
|
+
# run_once!
|
25
|
+
|
26
|
+
# interactive!
|
27
|
+
# standalone!
|
28
|
+
|
29
|
+
# Not used yet
|
30
|
+
# stdin File.open("/dev/tty", "r")
|
31
|
+
# stdout File.open("/dev/tty", "w")
|
32
|
+
# stderr File.open("/tmp/vedeu_error.log", "w+")
|
33
|
+
end
|
File without changes
|
File without changes
|
File without changes
|