acgt 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.
Files changed (5) hide show
  1. data/README +75 -0
  2. data/acgt.gemspec +18 -0
  3. data/bin/acgt +17 -0
  4. data/lib/acgt.rb +92 -0
  5. metadata +83 -0
data/README ADDED
@@ -0,0 +1,75 @@
1
+ acgt(1)
2
+
3
+ NAME
4
+ acgt - Generate using templates
5
+
6
+ SYNOPSIS
7
+ acgt [-h | --help] [-e] [-o path ] <template> [name:value]*
8
+
9
+ DESCRIPTION
10
+ <template>
11
+ Name of the template to be used as a generator.
12
+
13
+ -e
14
+ Opens the template in $EDITOR for edition.
15
+
16
+ -o
17
+ Path to write generated content. If omitted writes to
18
+ STDOUT.
19
+
20
+ [name:value]*
21
+ Several variable replacements. If a name is used more than
22
+ once then the variable is converted to an array of values.
23
+
24
+ See section on default values.
25
+
26
+ -h, --help
27
+ Display this help message.
28
+
29
+ TEMPLATES STORAGE
30
+ Templates are searched in ./.acgt and ~/.acgt
31
+
32
+ Templates are written using Mote, and should end in .mote
33
+ extension.
34
+
35
+ EXAMPLE USAGE
36
+ Given a template ~/.acgt/gemspec.mote with the following contents:
37
+
38
+ # encoding: utf-8
39
+
40
+ Gem::Specification.new do |s|
41
+ s.name = "{{ name }}"
42
+ s.version = "{{ version }}"
43
+ s.summary = "{{ description }}"
44
+ s.description = "{{ description }}"
45
+ s.authors = {{ authors.inspect }}
46
+ s.email = {{ email.inspect }}
47
+ s.homepage = "{{ homepage }}"
48
+ s.files = `git ls-files 2> /dev/null`.split("\n")
49
+ end
50
+
51
+ we can issue the following command to generate:
52
+
53
+ acgt gemspec name:acgt version:0.0.1 \
54
+ description:"DNA for simple generators" \
55
+ authors:"Leandro López" email:"inkel.ar@gmail.com" \
56
+ homepage:"http://inkel.github.com/acgt" \
57
+ authors: email:
58
+
59
+ generates the following output:
60
+
61
+ # encoding: utf-8
62
+
63
+ Gem::Specification.new do |s|
64
+ s.name = "acgt"
65
+ s.version = "0.0.1"
66
+ s.summary = "DNA for simple generators"
67
+ s.description = "DNA for simple generators"
68
+ s.authors = ["Leandro Lopez"]
69
+ s.email = ["inkel.ar@gmail.com"]
70
+ s.homepage = "http://inkel.github.com/acgt"
71
+ s.files = `git ls-files 2> /dev/null`.split("\n")
72
+ end
73
+
74
+ In this example we've used empty authors and email vars at the
75
+ end to convert it to an array.
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "acgt"
5
+ s.version = "0.0.1"
6
+ s.summary = "DNA for simple generators"
7
+ s.description = "DNA for simple generators"
8
+ s.authors = ["Leandro Lopez"]
9
+ s.email = ["inkel.ar@gmail.com"]
10
+ s.homepage = "http://inkel.github.com/acgt"
11
+ s.files = `git ls-files 2> /dev/null`.split("\n")
12
+ s.licenses = ["MIT"]
13
+
14
+ s.executables = ["acgt"]
15
+
16
+ s.add_dependency "mote"
17
+ s.add_dependency "clap"
18
+ end
@@ -0,0 +1,17 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require "clap"
4
+ require_relative "../lib/acgt"
5
+
6
+ rest = Clap.run ARGV, {
7
+ "-h" => ACGT.method(:help),
8
+ "--help" => ACGT.method(:help),
9
+ "--version" => lambda { puts "acgt version #{ ACGT::VERSION }"; exit 0 }
10
+ }
11
+
12
+ template, *params = Clap.run rest, {
13
+ "-o" => ACGT.method(:output),
14
+ "-e" => ACGT.method(:edit_template)
15
+ }
16
+
17
+ ACGT.run template, params
@@ -0,0 +1,92 @@
1
+ require "mote"
2
+
3
+ module ACGT
4
+ VERSION = "0.0.1".freeze
5
+
6
+ @options = { output: nil, edit: false }
7
+
8
+ extend self
9
+
10
+ def help
11
+ readme = File.expand_path("../README", File.dirname(__FILE__))
12
+ exec "${PAGER:-less} #{ readme }"
13
+ end
14
+
15
+ def output path
16
+ @options[:output] = File.absolute_path(path)
17
+ end
18
+
19
+ def add_templates_dir path
20
+ @options[:templates].unshift File.absolute_path(path)
21
+ end
22
+
23
+ def parse params
24
+ {}.tap do |vars|
25
+ params.each do |param|
26
+ name, value = param.split(":", 2)
27
+ name = name.to_sym
28
+ if vars[name]
29
+ vars[name] = [vars[name]] unless vars[name].is_a?(Array)
30
+ vars[name] << value if value && !value.empty?
31
+ else
32
+ vars[name] = value
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ def edit_template
39
+ @options[:edit] = true
40
+ end
41
+
42
+ def get_template_file template
43
+ get_template_file_from_cwd(template) || get_template_file_from_home(template)
44
+ end
45
+
46
+ def get_template_file_from_cwd template
47
+ get_template_file_from File.join(Dir.pwd, ".acgt"), template
48
+ end
49
+
50
+ def get_template_file_from_home template
51
+ get_template_file_from(File.join(ENV["HOME"], ".acgt"), template)
52
+ end
53
+
54
+ def get_template_file_from dir, template
55
+ file = File.join(File.absolute_path(dir), "#{ template }.mote")
56
+ file if File.exists?(file)
57
+ end
58
+
59
+ def render template, params
60
+ vars = parse params
61
+ Mote.parse(File.read(template), self, vars.keys).call(vars)
62
+ end
63
+
64
+ def run template, params
65
+ file = get_template_file template
66
+
67
+ if @options[:edit]
68
+ if file.nil?
69
+ file = File.join(ENV["HOME"], ".acgt", "#{template}.mote")
70
+ STDERR.puts "Creating template #{ file }"
71
+ end
72
+ exec "$EDITOR #{ file }"
73
+ end
74
+
75
+ if file.nil?
76
+ STDERR.puts "Template #{template} doesn't exists in #{Dir.pwd}/.acgt or ~/.acgt."
77
+ exit 1
78
+ end
79
+
80
+ dna = render file, params
81
+
82
+ if @options[:output]
83
+ output = File.absolute_path(@options[:output])
84
+ STDOUT.puts "Generating #{output}"
85
+ File.open(output, "w") do |fp|
86
+ fp.write dna
87
+ end
88
+ else
89
+ STDOUT.puts dna
90
+ end
91
+ end
92
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: acgt
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Leandro Lopez
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mote
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: clap
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: DNA for simple generators
47
+ email:
48
+ - inkel.ar@gmail.com
49
+ executables:
50
+ - acgt
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - README
55
+ - acgt.gemspec
56
+ - bin/acgt
57
+ - lib/acgt.rb
58
+ homepage: http://inkel.github.com/acgt
59
+ licenses:
60
+ - MIT
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project:
79
+ rubygems_version: 1.8.23
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: DNA for simple generators
83
+ test_files: []