gennifer 0.0.1 → 0.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 +24 -0
- data/exe/gen +5 -0
- data/lib/gennifer/version.rb +1 -1
- data/lib/gennifer.rb +135 -1
- data/lib/recipe_helper.rb +76 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff35e3df1f794dec0816d0842cb897efae5d4850
|
4
|
+
data.tar.gz: 057739a7c096baf25645f5b28d13c3167c60b939
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5586c6bd0864224a559874b1c21afb3573ae47469df1549ed6c1ae2c7da25ac09ca749180f9b85e944fa478256d8313a39866a5d141f0237829e07f8a706d96a
|
7
|
+
data.tar.gz: 0c45264f82d24d98bf8b8fecd7a6a165fa1a34e221f93bdc70c77f81784b16800220eb6a8429df6e9da17397612f450c7feadcd5a9975f3c27476bf16abaf49d
|
data/.gitignore
CHANGED
@@ -7,3 +7,27 @@
|
|
7
7
|
/pkg/
|
8
8
|
/spec/reports/
|
9
9
|
/tmp/
|
10
|
+
/private/
|
11
|
+
|
12
|
+
*.log
|
13
|
+
*.7z
|
14
|
+
*.dmg
|
15
|
+
*.gz
|
16
|
+
*.iso
|
17
|
+
*.jar
|
18
|
+
*.rar
|
19
|
+
*.tar
|
20
|
+
*.zip
|
21
|
+
*.sql
|
22
|
+
*.sqlite
|
23
|
+
*.com
|
24
|
+
*.class
|
25
|
+
*.dll
|
26
|
+
*.exe
|
27
|
+
.DS_Store
|
28
|
+
.DS_Store?
|
29
|
+
._*
|
30
|
+
.Spotlight-V100
|
31
|
+
.Trashes
|
32
|
+
ehthumbs.db
|
33
|
+
Thumbs.db
|
data/exe/gen
ADDED
data/lib/gennifer/version.rb
CHANGED
data/lib/gennifer.rb
CHANGED
@@ -1,5 +1,139 @@
|
|
1
1
|
require "gennifer/version"
|
2
|
+
require 'fileutils'
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
# TODO: command to generate new recipes with commented hint/tutorial
|
6
|
+
# TODO: write tests and test in windows
|
7
|
+
# TODO: better treatment for duplicate files in bin folder
|
8
|
+
# TODO: put help text in recipe and make the help command auto read it
|
2
9
|
|
3
10
|
module Gennifer
|
4
|
-
|
11
|
+
def self.gen(argv)
|
12
|
+
|
13
|
+
argv0 = argv[0] || ''
|
14
|
+
argv1 = argv[1] || ''
|
15
|
+
|
16
|
+
if (argv0 == 'install' && (Dir.exists?(File.expand_path('~/.gennifer'))==true)) then
|
17
|
+
puts "
|
18
|
+
It seems that you have already installed Gennifer before since ~/.gennifer exists.
|
19
|
+
|
20
|
+
If you insist, please backup your custom recipes, resources, and settings (all the contents in ~/.gennifer). Then remove the folder ~/.gennifer and re-run 'gen install'.
|
21
|
+
|
22
|
+
"
|
23
|
+
return
|
24
|
+
elsif (argv0 == 'forcedinstall') then
|
25
|
+
FileUtils.rm_rf(File.expand_path('~/.gennifer'))
|
26
|
+
install_gennifer
|
27
|
+
return
|
28
|
+
end
|
29
|
+
|
30
|
+
if (Dir.exists?(File.expand_path('~/.gennifer'))==false) then
|
31
|
+
install_gennifer
|
32
|
+
end
|
33
|
+
|
34
|
+
require File.expand_path('~/.gennifer/settings.rb', __FILE__)
|
35
|
+
Dir[File.expand_path('~/.gennifer/recipes/**/*.rb')].each {|file| require file }
|
36
|
+
|
37
|
+
|
38
|
+
if (argv0 == 'help' or argv0 == '') then
|
39
|
+
help_text(argv1)
|
40
|
+
else
|
41
|
+
recipe_class = get_recipe_class(argv1)
|
42
|
+
if recipe_class then
|
43
|
+
use_recipe(recipe_class,argv0,argv)
|
44
|
+
else
|
45
|
+
recipe_class = get_recipe_class_from_path(argv0)
|
46
|
+
if recipe_class then
|
47
|
+
use_recipe(recipe_class,argv0,argv)
|
48
|
+
elsif Settings::USEDEFAULT == true then
|
49
|
+
use_recipe(DefaultRecipe,argv0,argv)
|
50
|
+
else
|
51
|
+
puts "Recipe not found"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.get_recipe_class_from_path(full_name)
|
58
|
+
original_name = File.basename(full_name)
|
59
|
+
ext_name_list = File.basename(full_name).split('.')
|
60
|
+
base_name = ext_name_list.delete_at(0)
|
61
|
+
combined_ext_name = ext_name_list.join('_')
|
62
|
+
trial_list = [original_name] + [combined_ext_name] + ext_name_list + [base_name]
|
63
|
+
|
64
|
+
trial_list.each do |trial|
|
65
|
+
recipe_class = get_recipe_class(trial)
|
66
|
+
if recipe_class then
|
67
|
+
return recipe_class
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
return nil
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.use_recipe(recipe_class, full_name, argv)
|
75
|
+
|
76
|
+
if recipe_class then
|
77
|
+
require File.expand_path('../recipe_helper.rb', __FILE__)
|
78
|
+
recipe_setup(recipe_class)
|
79
|
+
jr = recipe_class.new(File.expand_path('./'+ full_name ), argv)
|
80
|
+
jr.generate
|
81
|
+
end
|
82
|
+
return recipe_class
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.help_text(argv1)
|
86
|
+
|
87
|
+
if argv1 == 'install' then
|
88
|
+
puts "
|
89
|
+
gen install install the default settings and recipe
|
90
|
+
"
|
91
|
+
elsif argv1 == 'article' then
|
92
|
+
puts "
|
93
|
+
gen myproject article generate a latex article project
|
94
|
+
"
|
95
|
+
elsif argv1 == 'exam' then
|
96
|
+
puts "
|
97
|
+
gen myproject exam generate a latex exam project
|
98
|
+
"
|
99
|
+
elsif argv1 == 'exe' then
|
100
|
+
puts "
|
101
|
+
gen myfile.rb exe generate a ruby file and make it executable
|
102
|
+
"
|
103
|
+
elsif argv1 == 'bin' then
|
104
|
+
puts "
|
105
|
+
gen myfile.rb bin generate a ruby file and make it executable,
|
106
|
+
move the file to the bin folder and use the
|
107
|
+
editor to open the file.
|
108
|
+
"
|
109
|
+
else
|
110
|
+
puts "
|
111
|
+
gen install install the default settings and recipe
|
112
|
+
gen myproject article generate a latex article project
|
113
|
+
gen myproject exam generate a latex exam project
|
114
|
+
gen myproject letter generate a latex letter project
|
115
|
+
gen myfile.rb generate a ruby file with name myfile.rb
|
116
|
+
gen myfile rb generate a ruby file with name myfile
|
117
|
+
gen myfile.rb exe generate a ruby file and make it executable
|
118
|
+
gen myfile.rb bin generate a ruby file and make it executable,
|
119
|
+
move the file to the bin folder and use the
|
120
|
+
editor to open the file.
|
121
|
+
"
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def self.install_gennifer
|
126
|
+
FileUtils.mkdir_p(File.expand_path('~/.gennifer'))
|
127
|
+
FileUtils.cp_r(Dir[File.expand_path('../../default/*', __FILE__)], File.expand_path('~/.gennifer'))
|
128
|
+
puts "Gennifer default settings installed"
|
129
|
+
end
|
130
|
+
|
131
|
+
def self.get_recipe_class(recipe_text)
|
132
|
+
begin
|
133
|
+
recipe_class = Object.const_get(recipe_text.capitalize.gsub(/_(.)/) {|e| $1.upcase} + "Recipe")
|
134
|
+
rescue
|
135
|
+
# puts "Recipe not found"
|
136
|
+
end
|
137
|
+
recipe_class
|
138
|
+
end
|
5
139
|
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
def recipe_setup(jr)
|
2
|
+
jr.class_eval do
|
3
|
+
def initialize(full_path, argv)
|
4
|
+
@argv = argv
|
5
|
+
@current_dir = Dir.pwd
|
6
|
+
@resources = File.expand_path('~/.jennifer/resources')
|
7
|
+
@full_name = File.basename(full_path)
|
8
|
+
@base_name = File.basename(full_path,'.*')
|
9
|
+
@ext_name = File.extname(full_path)
|
10
|
+
@recipe = self.class
|
11
|
+
@target_dir = File.expand_path('./'+ full_path + '/..')
|
12
|
+
#@project_dir = File.expand_path('./'+ full_path )
|
13
|
+
@full_path = full_path
|
14
|
+
end
|
15
|
+
|
16
|
+
def generate
|
17
|
+
if File.exists?(@full_path)
|
18
|
+
puts(@full_path + ' already exists.')
|
19
|
+
else
|
20
|
+
invoke(BeforeRecipe)
|
21
|
+
recipe
|
22
|
+
invoke(AfterRecipe)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def create(target, resource=nil)
|
27
|
+
if resource.nil?
|
28
|
+
FileUtils.mkdir_p(File.expand_path(target))
|
29
|
+
else
|
30
|
+
FileUtils.cp_r(File.expand_path("#{@resources}/#{resource}"),File.expand_path(target))
|
31
|
+
end
|
32
|
+
puts "Create #{File.expand_path(target)}" if Settings::VERBOSE
|
33
|
+
end
|
34
|
+
|
35
|
+
# def file(target, resource=nil)
|
36
|
+
# if resource.nil?
|
37
|
+
# FileUtils.touch(File.expand_path(target))
|
38
|
+
# else
|
39
|
+
# FileUtils.cp_r(File.expand_path("#{@resources}/#{resource}"),File.expand_path(target))
|
40
|
+
# end
|
41
|
+
# puts "Create #{File.expand_path(target)}" if Settings::VERBOSE
|
42
|
+
# end
|
43
|
+
#
|
44
|
+
# def directory(target, resource=nil)
|
45
|
+
# if resource.nil?
|
46
|
+
# FileUtils.mkdir_p(File.expand_path(target))
|
47
|
+
# else
|
48
|
+
# FileUtils.cp_r(File.expand_path("#{@resources}/#{resource}"),File.expand_path(target))
|
49
|
+
# end
|
50
|
+
# puts "Create #{File.expand_path(target)}" if Settings::VERBOSE
|
51
|
+
# end
|
52
|
+
|
53
|
+
def invoke(invoke_class)
|
54
|
+
recipe_setup(invoke_class)
|
55
|
+
new_recipe = invoke_class.new(@full_path, @argv)
|
56
|
+
new_recipe.recipe
|
57
|
+
end
|
58
|
+
|
59
|
+
def check_argv(check)
|
60
|
+
if @argv.include?(check) then
|
61
|
+
return true
|
62
|
+
else
|
63
|
+
return false
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def executable(file)
|
68
|
+
FileUtils.chmod 0755, file
|
69
|
+
end
|
70
|
+
|
71
|
+
def erb(full_path)
|
72
|
+
erb = File.read(full_path)
|
73
|
+
File.open(full_path, 'w') { |file| file.write(ERB.new(erb,0,'-').result(binding)) }
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gennifer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chungsang Tom Lam
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -42,7 +42,8 @@ description: 'This is a gem for generating files/projects using recipes. The def
|
|
42
42
|
recipes included ruby python and latex files. Erb template supported. '
|
43
43
|
email:
|
44
44
|
- erinata@gmail.com
|
45
|
-
executables:
|
45
|
+
executables:
|
46
|
+
- gen
|
46
47
|
extensions: []
|
47
48
|
extra_rdoc_files: []
|
48
49
|
files:
|
@@ -55,9 +56,11 @@ files:
|
|
55
56
|
- Rakefile
|
56
57
|
- bin/console
|
57
58
|
- bin/setup
|
59
|
+
- exe/gen
|
58
60
|
- gennifer.gemspec
|
59
61
|
- lib/gennifer.rb
|
60
62
|
- lib/gennifer/version.rb
|
63
|
+
- lib/recipe_helper.rb
|
61
64
|
homepage: https://github.com/erinata/gennifer
|
62
65
|
licenses:
|
63
66
|
- All rights reserved
|