easy_app_helper 2.0.3 → 2.1.0
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 +4 -4
- data/.gitignore +3 -0
- data/README.md +65 -3
- data/Rakefile +5 -0
- data/easy_app_helper.gemspec +2 -1
- data/lib/easy_app_helper/version.rb +1 -1
- data/lib/tasks/easy_app_helper_tasks.rake +31 -0
- data/lib/tasks/template.rb.erb +69 -0
- data/lib/tasks/template_manager.rb +57 -0
- data/test/foo/Gemfile +6 -0
- data/test/foo/LICENSE.txt +22 -0
- data/test/foo/README.md +29 -0
- data/test/foo/Rakefile +8 -0
- data/test/foo/foo.gemspec +26 -0
- data/test/foo/lib/foo/version.rb +3 -0
- data/test/foo/lib/foo.rb +5 -0
- metadata +36 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0352ee0a8fcd905f3078f99d49ec0d0f1e760b4f
|
4
|
+
data.tar.gz: aa425b6c080f4b007e0b8eb21aa2d4871008a2ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fd9cd9cbc19b33177d7d26f89670bff03ee4fa5317adec804e5c7144230ee7d64e6fa854d165dfedee49fd149218e8b806eeb292ca7e968adb94ee8931be35f
|
7
|
+
data.tar.gz: 1cad685afd543aecab65bb53b24befd86af6d3c632e21a6ea23a36c3fa2968a92e214a9221af9bdc7a36bc75aaf0033e4cc752376bfc8022ffbbbc306efdba3b
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -174,11 +174,72 @@ nevertheless be the case.
|
|
174
174
|
There is a (not perfect) compatibility mode that you can trigger by setting the `easy_app_helper_compatibility_mode`
|
175
175
|
property to true in one of your config files.
|
176
176
|
|
177
|
-
##
|
177
|
+
## Generate scripts using rake task
|
178
|
+
|
179
|
+
### Including easy_app_helper tasks in your own gems.
|
180
|
+
|
181
|
+
For this you just need to include in your own gem `Rakefile`:
|
182
|
+
|
183
|
+
```ruby
|
184
|
+
spec = Gem::Specification.find_by_name 'easy_app_helper'
|
185
|
+
load "#{spec.gem_dir}/Rakefile"
|
186
|
+
```
|
187
|
+
This will add two extra rake tasks to your gem. Normally if you created correctly your gem (`bundle gem my_gem`), you
|
188
|
+
already have 3 tasks existing coming from the `require "bundler/gem_tasks"` that you probably have in your default
|
189
|
+
Rakefile. Now will get something like this instead:
|
190
|
+
|
191
|
+
```shell
|
192
|
+
$ bundle exec rake -T
|
193
|
+
rake build # Build your_gem-0.0.1.gem into the pkg directory
|
194
|
+
rake easy_app_helper:create_executable[executable_name] # create automatically a new executable in "bin" from a template
|
195
|
+
rake easy_app_helper:show_template # Displays the template used
|
196
|
+
rake install # Build and install your_gem-0.0.1.gem into system gems
|
197
|
+
rake release # Create tag v0.0.1 and build and push your_gem-0.0.1.gem to Rubygems
|
198
|
+
```
|
199
|
+
The two [easy_app_helper][EAH] tasks are quite self-explanatory.
|
200
|
+
|
201
|
+
### Generating script templates for your project
|
202
|
+
|
203
|
+
Basically you will do a:
|
204
|
+
|
205
|
+
$ bundle rake easy_app_helper:create_executable
|
206
|
+
|
207
|
+
And it will reply something like:
|
208
|
+
|
209
|
+
```
|
210
|
+
File '/home/you/devel/ruby/gems/your_gem/bin/your_gem' created with execution rights.
|
211
|
+
-> Try: "bundle exec '/home/you/devel/ruby/gems/your_gem/bin/your_gem' --help"
|
212
|
+
```
|
178
213
|
|
179
|
-
|
214
|
+
It means that by default, the rake task will create a executable with the name of the gem you are currently developing.
|
215
|
+
__This task is safe and will never overwrite an existing file__. Instead, if the file already exists, you would get:
|
216
|
+
|
217
|
+
```
|
218
|
+
File '/home/you/devel/ruby/gems/your_gem/bin/your_gem' already exists !
|
219
|
+
-> Aborted.
|
220
|
+
```
|
221
|
+
|
222
|
+
You can, of course, specify your own file name to the rake task. Depending on your shell, and due to different
|
223
|
+
variable expansion mechanisms, you have to do it differently:
|
224
|
+
|
225
|
+
* __zsh__ should be something like: `bundle rake easy_app_helper:create_executable\[my_executable\]`
|
226
|
+
* whereas in __bash__ more probably: `bundle rake easy_app_helper:create_executable[my_executable]`
|
227
|
+
|
228
|
+
Check the documentation of your shell for further information.
|
229
|
+
You should nevertheless have this kind of answer from the task:
|
230
|
+
|
231
|
+
```
|
232
|
+
File '/home/you/devel/ruby/gems/your_gem/bin/my_executable' created with execution rights.
|
233
|
+
-> Try: "bundle exec '/home/you/devel/ruby/gems/your_gem/bin/my_executable' --help"
|
234
|
+
```
|
235
|
+
|
236
|
+
You can notice the slight changes in terms of code in the two generated scripts ;-). Check the template with
|
237
|
+
`bundle rake easy_app_helper:show_template` to understand how the template adapts.
|
238
|
+
|
239
|
+
|
240
|
+
## Complete example of a script based on `easy_app_helper`
|
180
241
|
|
181
|
-
|
242
|
+
This is not exactly what is generated by the rake task (which is more up-to-date), but gives an overall idea:
|
182
243
|
|
183
244
|
```ruby
|
184
245
|
#!/usr/bin/env ruby
|
@@ -194,6 +255,7 @@ class MyApp
|
|
194
255
|
DESCRIPTION = 'Best app ever'
|
195
256
|
|
196
257
|
def initialize
|
258
|
+
config.config_file_base_name = 'basename_for_my_config_files' # Default is the name of this script (w/o extensions)
|
197
259
|
config.describes_application app_name: NAME,
|
198
260
|
app_version: VERSION,
|
199
261
|
app_description: DESCRIPTION
|
data/Rakefile
CHANGED
data/easy_app_helper.gemspec
CHANGED
@@ -23,5 +23,6 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency 'pry'
|
24
24
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
25
25
|
|
26
|
-
spec.
|
26
|
+
spec.add_dependency 'activesupport'
|
27
|
+
spec.add_runtime_dependency 'stacked_config', '~> 0.3'
|
27
28
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
|
4
|
+
require File.expand_path '../template_manager.rb', __FILE__
|
5
|
+
|
6
|
+
namespace :easy_app_helper do
|
7
|
+
|
8
|
+
include EasyAppHelper::Tasks::TemplateManager
|
9
|
+
|
10
|
+
desc 'create automatically a new executable in "bin" from a template. Default name is Gem name'
|
11
|
+
task :create_executable, [:executable_name] do |tsk, args|
|
12
|
+
@task = tsk
|
13
|
+
script_content = build_executable args[:executable_name]
|
14
|
+
bin_dir = check_bin_dir
|
15
|
+
script_name = File.join bin_dir, executable_name
|
16
|
+
if File.exists? script_name
|
17
|
+
STDERR.puts "File '#{script_name}' already exists !\n -> Aborted."
|
18
|
+
next
|
19
|
+
end
|
20
|
+
File.write script_name, script_content
|
21
|
+
FileUtils.chmod 'u=wrx,go=rx', script_name
|
22
|
+
puts "File '#{script_name}' created with execution rights.\n -> Try: \"bundle exec '#{script_name}' --help\" to test it."
|
23
|
+
end
|
24
|
+
|
25
|
+
desc 'Displays the template used.'
|
26
|
+
task :show_template do
|
27
|
+
puts get_template
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This file has been generated by easy_app_helper Gem on the <%= current_date %>
|
3
|
+
# See 'https://rubygems.org/gems/easy_app_helper'
|
4
|
+
|
5
|
+
require 'easy_app_helper'
|
6
|
+
require '<%= gem_name %>'
|
7
|
+
|
8
|
+
module <%= gem_module %>
|
9
|
+
class <%= script_class %>
|
10
|
+
|
11
|
+
# Inserted here, but you may probably have already defined this somewhere else...
|
12
|
+
NAME = '<%= executable_name.titleize %>'
|
13
|
+
DESCRIPTION = 'Description of <%= executable_name %>'
|
14
|
+
|
15
|
+
include EasyAppHelper
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
<% unless executable_name == gem_name -%>config.config_file_base_name = '<%= executable_name %>'
|
19
|
+
<% end -%>config.describes_application app_name: NAME,
|
20
|
+
app_version: <%= gem_module %>::VERSION,
|
21
|
+
app_description: DESCRIPTION
|
22
|
+
add_script_options
|
23
|
+
end
|
24
|
+
|
25
|
+
def run
|
26
|
+
# logging startup configuration
|
27
|
+
logger.debug "Config layers ->\n#{config.detailed_layers_info}"
|
28
|
+
logger.debug "Merged config -> #{config[].to_yaml}"
|
29
|
+
# Displaying (and exiting) command line help
|
30
|
+
if config[:help]
|
31
|
+
puts config.command_line_help
|
32
|
+
exit 0
|
33
|
+
end
|
34
|
+
check_config
|
35
|
+
logger.info 'Application is starting...'
|
36
|
+
do_process
|
37
|
+
rescue => e
|
38
|
+
puts "Program aborted with message: '#{e.message}'."
|
39
|
+
if config[:debug]
|
40
|
+
logger.fatal "#{e.message}\nBacktrace:\n#{e.backtrace.join("\n\t")}"
|
41
|
+
else
|
42
|
+
puts ' Use --debug option for more detail (see --help).'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def add_script_options
|
49
|
+
## Create here your extra command-line options
|
50
|
+
## Here under are examples using potentially gem config layer to display default option value...
|
51
|
+
## Check Slop documentation for further info.
|
52
|
+
# config.add_command_line_section do |slop|
|
53
|
+
# slop.on :p, :port, "Specify port to bind to. Default #{config.gem_layer[:port]}.", argument: true, as: Integer
|
54
|
+
# slop.on :b, :bind, "Specify address to bind to. Default #{config.gem_layer[:bind]}.", argument: true, as: String
|
55
|
+
# end
|
56
|
+
end
|
57
|
+
|
58
|
+
def do_process
|
59
|
+
# Your code here.
|
60
|
+
end
|
61
|
+
|
62
|
+
def check_config
|
63
|
+
# Check the config and raise an exception if incorrect.
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
<%= gem_module %>::<%= script_class %>.new.run
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'active_support/core_ext/string/inflections'
|
3
|
+
|
4
|
+
module EasyAppHelper
|
5
|
+
module Tasks
|
6
|
+
|
7
|
+
module TemplateManager
|
8
|
+
|
9
|
+
attr_reader :executable_name, :gem_module, :gem_name, :current_date, :script_class, :task
|
10
|
+
|
11
|
+
TEMPLATE = File.expand_path '../template.rb.erb', __FILE__
|
12
|
+
|
13
|
+
def get_template
|
14
|
+
File.read TEMPLATE
|
15
|
+
end
|
16
|
+
|
17
|
+
def check_bin_dir
|
18
|
+
spec = current_gem_spec
|
19
|
+
rel_bin_dir = spec.bindir.empty? ? 'bin' : spec.bindir
|
20
|
+
bin_dir = File.join task.application.original_dir, rel_bin_dir
|
21
|
+
FileUtils.mkdir bin_dir unless Dir.exists? bin_dir
|
22
|
+
bin_dir
|
23
|
+
end
|
24
|
+
|
25
|
+
def build_executable(executable_name=current_gem_name)
|
26
|
+
executable_name ||= current_gem_spec.name
|
27
|
+
@executable_name = executable_name
|
28
|
+
@gem_name = current_gem_spec.name
|
29
|
+
@gem_module = @gem_name.camelize
|
30
|
+
@current_date = Time.now.strftime('%c')
|
31
|
+
@script_class = executable_name == current_gem_spec.name ? '' : executable_name.camelize
|
32
|
+
@script_class << 'Script'
|
33
|
+
renderer = ERB.new(File.read(TEMPLATE), nil, '-')
|
34
|
+
renderer.result binding
|
35
|
+
end
|
36
|
+
|
37
|
+
def current_gem_spec
|
38
|
+
searcher = if Gem::Specification.respond_to? :find
|
39
|
+
# ruby 2.0
|
40
|
+
Gem::Specification
|
41
|
+
elsif Gem.respond_to? :searcher
|
42
|
+
# ruby 1.8/1.9
|
43
|
+
Gem.searcher.init_gemspecs
|
44
|
+
end
|
45
|
+
unless searcher.nil?
|
46
|
+
searcher.find do |spec|
|
47
|
+
original_file = task ? File.join(task.application.original_dir, task.application.rakefile) : __FILE__
|
48
|
+
File.fnmatch(File.join(spec.full_gem_path,'*'), original_file)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
data/test/foo/Gemfile
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 L.Briais
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/test/foo/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Foo
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'foo'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install foo
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it ( http://github.com/<my-github-username>/foo/fork )
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/test/foo/Rakefile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'foo/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'foo'
|
8
|
+
spec.version = Foo::VERSION
|
9
|
+
spec.authors = ['bar']
|
10
|
+
spec.email = ['bar@nowhere.org']
|
11
|
+
spec.summary = %q{Does Nothing.}
|
12
|
+
spec.description = %q{Does nothing, no more.}
|
13
|
+
spec.homepage = ''
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_development_dependency 'bundler', '~> 1.5'
|
22
|
+
spec.add_development_dependency 'rake'
|
23
|
+
|
24
|
+
spec.add_runtime_dependency 'easy_app_helper'
|
25
|
+
|
26
|
+
end
|
data/test/foo/lib/foo.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easy_app_helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- L.Briais
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -67,25 +67,33 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: activesupport
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0.1'
|
76
73
|
- - '>='
|
77
74
|
- !ruby/object:Gem::Version
|
78
|
-
version: 0
|
75
|
+
version: '0'
|
79
76
|
type: :runtime
|
80
77
|
prerelease: false
|
81
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: stacked_config
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
82
86
|
requirements:
|
83
87
|
- - ~>
|
84
88
|
- !ruby/object:Gem::Version
|
85
|
-
version: '0.
|
86
|
-
|
89
|
+
version: '0.3'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
87
95
|
- !ruby/object:Gem::Version
|
88
|
-
version: 0.
|
96
|
+
version: '0.3'
|
89
97
|
description: Easy Application Helpers framework
|
90
98
|
email:
|
91
99
|
- lbnetid+rb@gmail.com
|
@@ -109,10 +117,20 @@ files:
|
|
109
117
|
- lib/easy_app_helper/logger/wrapper.rb
|
110
118
|
- lib/easy_app_helper/managed_logger.rb
|
111
119
|
- lib/easy_app_helper/version.rb
|
120
|
+
- lib/tasks/easy_app_helper_tasks.rake
|
121
|
+
- lib/tasks/template.rb.erb
|
122
|
+
- lib/tasks/template_manager.rb
|
112
123
|
- spec/config_spec.rb
|
113
124
|
- spec/easy_app_helper_spec.rb
|
114
125
|
- spec/logger_spec.rb
|
115
126
|
- spec/spec_helper.rb
|
127
|
+
- test/foo/Gemfile
|
128
|
+
- test/foo/LICENSE.txt
|
129
|
+
- test/foo/README.md
|
130
|
+
- test/foo/Rakefile
|
131
|
+
- test/foo/foo.gemspec
|
132
|
+
- test/foo/lib/foo.rb
|
133
|
+
- test/foo/lib/foo/version.rb
|
116
134
|
homepage: https://github.com/lbriais/easy_app_helper
|
117
135
|
licenses:
|
118
136
|
- MIT
|
@@ -133,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
151
|
version: '0'
|
134
152
|
requirements: []
|
135
153
|
rubyforge_project:
|
136
|
-
rubygems_version: 2.0.
|
154
|
+
rubygems_version: 2.0.0
|
137
155
|
signing_key:
|
138
156
|
specification_version: 4
|
139
157
|
summary: Provides cool helpers to your application, including configuration and logging
|
@@ -143,3 +161,10 @@ test_files:
|
|
143
161
|
- spec/easy_app_helper_spec.rb
|
144
162
|
- spec/logger_spec.rb
|
145
163
|
- spec/spec_helper.rb
|
164
|
+
- test/foo/Gemfile
|
165
|
+
- test/foo/LICENSE.txt
|
166
|
+
- test/foo/README.md
|
167
|
+
- test/foo/Rakefile
|
168
|
+
- test/foo/foo.gemspec
|
169
|
+
- test/foo/lib/foo.rb
|
170
|
+
- test/foo/lib/foo/version.rb
|