cog 0.0.1 → 0.0.2
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.
- data/API.rdoc +25 -0
- data/bin/cog +15 -4
- data/lib/cog.rb +10 -13
- data/lib/cog/cogfile.rb +59 -0
- data/lib/cog/has_template.rb +34 -2
- data/lib/cog_version.rb +1 -1
- metadata +6 -6
- data/cog.rdoc +0 -3
- data/lib/cog/config.rb +0 -19
data/API.rdoc
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
= cog API docs
|
2
|
+
|
3
|
+
+cog+ is a command line utility that makes it a bit easier to organize a project
|
4
|
+
which uses code generation. Many of your interactions with +cog+ will be using
|
5
|
+
the command line interface. However, to get any real mileage out of it you'll
|
6
|
+
need to use the API (documented here). For more information on the command line
|
7
|
+
interface see https://github.com/ktonon/cog#cog
|
8
|
+
|
9
|
+
+cog+ is configured with a +Cogfile+, which should be in the root of your
|
10
|
+
project's file tree. The +Cogfile+ is just a ruby file and the commands
|
11
|
+
available in it are defined in the Cog::Cogfile class. It is generated for you
|
12
|
+
when you issue this command from a shell in the root directory of your project:
|
13
|
+
|
14
|
+
cog project
|
15
|
+
|
16
|
+
and it will look something like this:
|
17
|
+
|
18
|
+
# All paths are relative to the directory containing this file.
|
19
|
+
|
20
|
+
# The directory in which to find ERB template files.
|
21
|
+
template_dir 'templates'
|
22
|
+
|
23
|
+
# The directory in which application code can be found. This is where
|
24
|
+
# generated code will go. Probably along side non-generated code.
|
25
|
+
code_dir 'src'
|
data/bin/cog
CHANGED
@@ -29,7 +29,18 @@ desc 'Add cog to a project by generating a Cogfile in the current directory'
|
|
29
29
|
command :project do |c|
|
30
30
|
c.action do |global_options, options, args|
|
31
31
|
puts 'Created Cogfile'
|
32
|
-
|
32
|
+
File.open('Cogfile', 'w') do |file|
|
33
|
+
# TODO: use a template to do this instead
|
34
|
+
file.write("# All paths are relative to the directory containing this file.
|
35
|
+
|
36
|
+
# The directory in which to find ERB template files.
|
37
|
+
template_dir 'templates'
|
38
|
+
|
39
|
+
# The directory in which application code can be found. This is where
|
40
|
+
# generated code will go. Probably along side non-generated code.
|
41
|
+
code_dir 'src'
|
42
|
+
")
|
43
|
+
end
|
33
44
|
end
|
34
45
|
end
|
35
46
|
|
@@ -37,7 +48,7 @@ desc 'Create a new template'
|
|
37
48
|
arg_name 'NAME'
|
38
49
|
command :template do |c|
|
39
50
|
c.action do |global_options, options, args|
|
40
|
-
|
51
|
+
puts 'Not implemented'
|
41
52
|
end
|
42
53
|
end
|
43
54
|
|
@@ -47,12 +58,12 @@ pre do |global, command, options, args|
|
|
47
58
|
# chosen command
|
48
59
|
# Use skips_pre before a command to skip this block
|
49
60
|
# on that command only
|
50
|
-
|
61
|
+
cogfile = Cog.load_cogfile
|
51
62
|
if !cogfile && command && command.name != :project
|
52
63
|
puts 'No Cogfile could be found'
|
53
64
|
false
|
54
65
|
elsif cogfile && command && command.name == :project
|
55
|
-
puts "A Cogfile already exists at #{cogfile.
|
66
|
+
puts "A Cogfile already exists at #{cogfile.cogfile_path.inspect}"
|
56
67
|
false
|
57
68
|
else
|
58
69
|
global[:cogfile] = cogfile
|
data/lib/cog.rb
CHANGED
@@ -1,23 +1,17 @@
|
|
1
|
-
require 'cog/
|
1
|
+
require 'cog/cogfile'
|
2
2
|
require 'cog/has_template'
|
3
3
|
|
4
4
|
module Cog
|
5
5
|
|
6
|
-
|
7
|
-
def message
|
8
|
-
"in Cogfile, " + super
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
# Loads the +Cogfile+.
|
6
|
+
# Loads the +Cogfile+ for the current project.
|
13
7
|
#
|
14
8
|
# The +Cogfile+ will be looked for in the present working directory. If none
|
15
9
|
# is found there the parent directory will be checked, and then the
|
16
10
|
# grandparent, and so on.
|
17
11
|
#
|
18
12
|
# === Returns
|
19
|
-
# An instance of Config which has been configured
|
20
|
-
#
|
13
|
+
# An instance of Config which has been configured with a Cogfile. Or +nil+ if
|
14
|
+
# no +Cogfile+ could be found.
|
21
15
|
def self.load_cogfile
|
22
16
|
parts = Dir.pwd.split File::SEPARATOR
|
23
17
|
i = parts.length
|
@@ -26,14 +20,17 @@ module Cog
|
|
26
20
|
end
|
27
21
|
path = File.join(parts.slice(0, i) + ['Cogfile']) if i >= 0
|
28
22
|
if path
|
29
|
-
|
23
|
+
Cogfile.instance.instance_eval do
|
24
|
+
@cogfile_path = path
|
25
|
+
@project_root = File.dirname path
|
26
|
+
end
|
30
27
|
begin
|
31
|
-
b =
|
28
|
+
b = Cogfile.instance.instance_eval {binding}
|
32
29
|
eval File.read(path), b
|
33
30
|
rescue Exception => e
|
34
31
|
raise CogfileError.new(e.to_s)
|
35
32
|
end
|
36
|
-
|
33
|
+
Cogfile.instance
|
37
34
|
end
|
38
35
|
end
|
39
36
|
|
data/lib/cog/cogfile.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'cog/config'
|
2
|
+
require 'singleton'
|
3
|
+
|
4
|
+
module Cog
|
5
|
+
|
6
|
+
# When the +Cogfile+ is processed, +self+ will be the singleton instance of
|
7
|
+
# this object.
|
8
|
+
class Cogfile
|
9
|
+
include Singleton
|
10
|
+
|
11
|
+
def get_or_set(name, val, &block) # :nodoc:
|
12
|
+
if val.nil?
|
13
|
+
instance_variable_get "@#{name}"
|
14
|
+
else
|
15
|
+
val = block.call val unless block.nil?
|
16
|
+
instance_variable_set "@#{name}", val
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# The directory in which the +Cogfile+ is found.
|
21
|
+
attr_reader :project_root
|
22
|
+
|
23
|
+
# The path to the +Cogfile+.
|
24
|
+
attr_reader :cogfile_path
|
25
|
+
|
26
|
+
# The directory in which to find ERB template files. This is relative to
|
27
|
+
# project_root
|
28
|
+
#
|
29
|
+
# Can be used as a getter or a setter (within the +Cogfile+).
|
30
|
+
def template_dir(val=nil)
|
31
|
+
get_or_set :template_dir, val do |val|
|
32
|
+
File.join project_root, val
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# The directory in which application code can be found. This is where
|
37
|
+
# generated code will go. Probably along side non-generated code. It is
|
38
|
+
# relative to project_root
|
39
|
+
#
|
40
|
+
# Can be used as a getter or a setter (within the +Cogfile+).
|
41
|
+
def code_dir(val=nil)
|
42
|
+
get_or_set :code_dir, val do |val|
|
43
|
+
File.join project_root, val
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def to_s # :nodoc:
|
48
|
+
"#{project_root} #{code_dir}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# For wrapping errors which occur during the processing of a +Cogfile+.
|
53
|
+
class CogfileError < StandardError
|
54
|
+
def message
|
55
|
+
"in Cogfile, " + super
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
data/lib/cog/has_template.rb
CHANGED
@@ -1,12 +1,44 @@
|
|
1
|
+
require 'erb'
|
2
|
+
|
1
3
|
module Cog
|
2
4
|
|
3
5
|
# Mixin for classes that can use templates to generate code
|
4
6
|
module HasTemplate
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
+
# Get the template with the given name.
|
9
|
+
#
|
10
|
+
# === Parameters
|
11
|
+
# * +path+ - a path to a template file which is relative to
|
12
|
+
# Cogfile#template_dir and does not include the +.erb+ extension.
|
13
|
+
#
|
14
|
+
# === Returns
|
15
|
+
# An instance of ERB.
|
16
|
+
def get_template(path)
|
17
|
+
path = File.join Cogfile.instance.template_dir, "#{path}.erb"
|
18
|
+
unless File.exists? path
|
19
|
+
raise MissingTemplate.new path
|
20
|
+
end
|
8
21
|
end
|
9
22
|
|
23
|
+
# Stamp this object using the template at the given path.
|
24
|
+
#
|
25
|
+
# === Parameters
|
26
|
+
# * +path+ - the path to the template to use which is relative to
|
27
|
+
# Config#template_dir and does not include the +.erb+ extension.
|
28
|
+
# * +dest+ - the destination path to the generated file which is relative
|
29
|
+
# to Config#code_dir. If this is not provided, then the generated code
|
30
|
+
# will be returned as a string.
|
31
|
+
#
|
32
|
+
# === Returns
|
33
|
+
# +nil+ if generated to a file, otherwise returns the generated code as a
|
34
|
+
# string.
|
35
|
+
def stamp(path, dest=nil)
|
36
|
+
end
|
10
37
|
end
|
11
38
|
|
39
|
+
class MissingTemplate < Exception
|
40
|
+
def message
|
41
|
+
'could not find the template ' + super
|
42
|
+
end
|
43
|
+
end
|
12
44
|
end
|
data/lib/cog_version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kevin Tonon
|
@@ -52,14 +52,14 @@ executables:
|
|
52
52
|
extensions: []
|
53
53
|
|
54
54
|
extra_rdoc_files:
|
55
|
-
-
|
55
|
+
- API.rdoc
|
56
56
|
files:
|
57
57
|
- bin/cog
|
58
|
-
- lib/cog/
|
58
|
+
- lib/cog/cogfile.rb
|
59
59
|
- lib/cog/has_template.rb
|
60
60
|
- lib/cog.rb
|
61
61
|
- lib/cog_version.rb
|
62
|
-
-
|
62
|
+
- API.rdoc
|
63
63
|
homepage: https://github.com/ktonon/cog
|
64
64
|
licenses: []
|
65
65
|
|
data/cog.rdoc
DELETED
data/lib/cog/config.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
module Cog
|
2
|
-
|
3
|
-
# When the Cogfile is processed, +self+ will be set to an instance of this
|
4
|
-
# object at the global context.
|
5
|
-
class Config
|
6
|
-
attr_reader :path
|
7
|
-
|
8
|
-
# Create an empty config object
|
9
|
-
#
|
10
|
-
# === Arguments
|
11
|
-
# * +path+ - The path to the +Cogfile+ which will be used to configure
|
12
|
-
# this object.
|
13
|
-
def initialize(path)
|
14
|
-
@path = path
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|