roject 0.7.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +147 -1
- data/Rakefile +33 -6
- data/bin/roject +58 -0
- data/exp/project/foobar.rb +1 -1
- data/lib/project.rb +37 -3
- data/lib/roject.rb +1 -1
- data/spec/project_spec.rb +117 -20
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 807cc469992c60c0377a1a0544b487e71f39d6cd
|
4
|
+
data.tar.gz: 290adb3e83bb77773cf86265fe64c9962aa00353
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a886dc73ee4ad3ab267f51b7ef5fa14c78074e581a1d6a83b05546efbce326c3d99be8d2a7909a10da15c508d4387d354f36c1c09cba48136943ca7f1d801b9d
|
7
|
+
data.tar.gz: dc5437b8cd0605dbbfd94497dc3cd810e57a0451c891da46138631fe9c2574d3008d0d53b0b56271dc70a2a405ea2b17d9dca4cbe472d95fc934f8976561cfe2
|
data/README.md
CHANGED
@@ -1,3 +1,149 @@
|
|
1
1
|
# Roject
|
2
2
|
|
3
|
-
Roject is a programming project manager written in Ruby. With Roject, you can create and edit projects based on templates and using simple, customisable commands without a heavy IDE.
|
3
|
+
Roject is a programming project manager written in Ruby. With Roject, you can create and edit projects based on templates and using simple, customisable commands without a heavy IDE.
|
4
|
+
|
5
|
+
## Table of Contents
|
6
|
+
|
7
|
+
- [Project Script](#project-script)
|
8
|
+
- [Config](#config)
|
9
|
+
- [Makers](#makers)
|
10
|
+
- [The Command Line](#the-command-line)
|
11
|
+
|
12
|
+
## Project Script
|
13
|
+
|
14
|
+
A Roject project is configured using a project script in a project directory, create a ruby script called "project.rb". This ruby script is evaluated in the context of a Roject project object and contains information about the project, the types of files that can be made, and the tasks that can be performed.
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
# Config
|
18
|
+
config project_name: "Dre",
|
19
|
+
author: "Anshul Kharbanda",
|
20
|
+
created: "7 - 23 - 2016",
|
21
|
+
short_description: "Forgot about Dre.",
|
22
|
+
long_description: "Nowadays everybody wanna talk like" \
|
23
|
+
" they got somethin' to say but nothin' comes out" \
|
24
|
+
" when they move their lips just a bunch of gibberish" \
|
25
|
+
" and they all acting like they forgot about Dre."
|
26
|
+
|
27
|
+
#---------------------------MAKERS---------------------------
|
28
|
+
|
29
|
+
# Header file
|
30
|
+
file :header,
|
31
|
+
path: "include/@(project_name)/@(path)",
|
32
|
+
template: "header.general",
|
33
|
+
extension: "h"
|
34
|
+
|
35
|
+
# Source file
|
36
|
+
file :source,
|
37
|
+
path: "src/@(path)",
|
38
|
+
template: "source.general",
|
39
|
+
extension: "cpp"
|
40
|
+
|
41
|
+
# Module includes a source and include
|
42
|
+
task :module do |args|
|
43
|
+
# Add header id
|
44
|
+
args[:header_id] = c_header_id(args[:path])
|
45
|
+
|
46
|
+
# Create source and header
|
47
|
+
make :header, args
|
48
|
+
make :source, args
|
49
|
+
end
|
50
|
+
```
|
51
|
+
|
52
|
+
In this script, the project information (project_name, author, etc.) is configured using the `config` method, which is given a hash of the project info. After which, project makers (automated tasks that can be called via the command line) are defined using the `file` and `task` methods. The `file` method creates a file maker which makes files according to the information given using the command line arguments. The `task` method creates a task maker which executes the given block with the command line arguments.
|
53
|
+
|
54
|
+
### Config
|
55
|
+
|
56
|
+
Projects are configured using the `config` method:
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
config project_name: "Dre",
|
60
|
+
author: "Anshul Kharbanda",
|
61
|
+
created: "7 - 23 - 2016",
|
62
|
+
short_description: "Forgot about Dre.",
|
63
|
+
long_description: "Nowadays everybody wanna talk like" \
|
64
|
+
" they got somethin' to say but nothin' comes out" \
|
65
|
+
" when they move their lips just a bunch of gibberish" \
|
66
|
+
" and they all acting like they forgot about Dre."
|
67
|
+
```
|
68
|
+
|
69
|
+
This command should be passed a hash of project info keys, of which are the following:
|
70
|
+
|
71
|
+
| Key | Description |
|
72
|
+
|:-----------------:|:----------------------------------:|
|
73
|
+
| project_name | the name of the project |
|
74
|
+
| author | the project's author |
|
75
|
+
| created | the date the project was created |
|
76
|
+
| short_description | a short description of the project |
|
77
|
+
| long_description | a long description of the project |
|
78
|
+
|
79
|
+
There are also optional options to set. The `directory` key is a hash of essential directories. The `templates` key within the `directory` hash determines where project templates are located, and defaults to `_templates`. Of course, this can also be changed to your liking.
|
80
|
+
|
81
|
+
```ruby
|
82
|
+
config project_name: "Dre",
|
83
|
+
author: "Anshul Kharbanda",
|
84
|
+
created: "7 - 23 - 2016",
|
85
|
+
short_description: "Forgot about Dre.",
|
86
|
+
long_description: "Nowadays everybody wanna talk like" \
|
87
|
+
" they got somethin' to say but nothin' comes out" \
|
88
|
+
" when they move their lips just a bunch of gibberish" \
|
89
|
+
" and they all acting like they forgot about Dre.",
|
90
|
+
directory: {
|
91
|
+
templates: "new-templates-dir"
|
92
|
+
}
|
93
|
+
```
|
94
|
+
|
95
|
+
### Makers
|
96
|
+
|
97
|
+
Project makers are also specified int the Project script. Makers are automated tasks that create new files. There are two types of makers to date.
|
98
|
+
|
99
|
+
#### File Makers
|
100
|
+
|
101
|
+
File makers are specified using the `file` method.
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
file :header,
|
105
|
+
path: "include/@(project_name)/@(path)",
|
106
|
+
template: "header.general",
|
107
|
+
extension: "h"
|
108
|
+
```
|
109
|
+
|
110
|
+
Roject uses the [General](http://andydevs.github.io/general) templating library for file and string templates. FileMakers use general templates, project information, and command line arguments to create files of specific types. File templates are located in the `templates` directory (which is set using `config`).
|
111
|
+
|
112
|
+
The `file` method is passed a name (used to call the maker via the command line arguments), and a hash of options, which should include the following:
|
113
|
+
|
114
|
+
| Key | Description |
|
115
|
+
|:---------:|:---------------------------------------------------------------------------------------:|
|
116
|
+
| path | The path of the file, as a General template string (parsed on creation of the file) |
|
117
|
+
| template | The filename of the General template file to format |
|
118
|
+
| extension | The file extension |
|
119
|
+
|
120
|
+
#### Task Makers
|
121
|
+
|
122
|
+
Task makers are specified using the `task` method.
|
123
|
+
|
124
|
+
```ruby
|
125
|
+
# Module includes a source and include
|
126
|
+
task :module do |args|
|
127
|
+
# Add header id
|
128
|
+
args[:header_id] = c_header_id(args[:path])
|
129
|
+
|
130
|
+
# Create source and header
|
131
|
+
make :header, args
|
132
|
+
make :source, args
|
133
|
+
end
|
134
|
+
```
|
135
|
+
|
136
|
+
The `task` method is passed the command line name and a block which is called when the task is called from the command line, which takes one hash of arguments parsed from the command line.
|
137
|
+
|
138
|
+
## The Command Line
|
139
|
+
|
140
|
+
The Roject library comes with the `roject` binary script, from which you call the project makers that were defined.
|
141
|
+
|
142
|
+
```
|
143
|
+
$ roject [maker name] [command line arguments]
|
144
|
+
```
|
145
|
+
|
146
|
+
Command line arguments are key-value pairs which follow the following pattern: `[key]:[value]`. The script will search the current directory for a project script, read it, and run the given maker in the context of the project.
|
147
|
+
|
148
|
+
---
|
149
|
+
Anshul Kharbanda
|
data/Rakefile
CHANGED
@@ -14,6 +14,7 @@ Created: 7 - 8 - 2016
|
|
14
14
|
# Required libraries
|
15
15
|
require "rspec/core/rake_task"
|
16
16
|
require "rubygems/tasks"
|
17
|
+
require "fileutils"
|
17
18
|
|
18
19
|
# Requird files
|
19
20
|
require_relative "lib/roject"
|
@@ -22,6 +23,10 @@ require_relative "lib/roject"
|
|
22
23
|
GEMDIR = "gem"
|
23
24
|
SPECDIR = "spec"
|
24
25
|
|
26
|
+
# Test argument sets
|
27
|
+
TEST_ARG_SETS = "header path:\"path/to/file\"",
|
28
|
+
"module path:\"path/to/second/file\""
|
29
|
+
|
25
30
|
# Default task
|
26
31
|
task :default => :spec
|
27
32
|
|
@@ -51,12 +56,34 @@ namespace :git do
|
|
51
56
|
end
|
52
57
|
|
53
58
|
desc "Soft git reset"
|
54
|
-
task :reset do
|
55
|
-
sh "git reset"
|
56
|
-
end
|
59
|
+
task :reset do sh "git reset" end
|
57
60
|
|
58
61
|
desc "Hard git reset"
|
59
|
-
task :reset_hard do
|
60
|
-
|
61
|
-
|
62
|
+
task :reset_hard do sh "git reset --hard HEAD" end
|
63
|
+
end
|
64
|
+
|
65
|
+
#----------------------------------SCRIPT----------------------------------
|
66
|
+
|
67
|
+
desc "Runs the script with test arguments"
|
68
|
+
task :test, [:index] do |task, args|
|
69
|
+
# Changedown to project
|
70
|
+
Dir.chdir "exp/project"
|
71
|
+
|
72
|
+
# Run each test arg set
|
73
|
+
sh "../../bin/roject #{TEST_ARG_SETS[args[:index].to_i]}"
|
74
|
+
|
75
|
+
# Changeup
|
76
|
+
Dir.chdir "../.."
|
77
|
+
end
|
78
|
+
|
79
|
+
desc "Cleans the project directory"
|
80
|
+
task :cleantest do
|
81
|
+
# Changedown to project
|
82
|
+
Dir.chdir "exp/project"
|
83
|
+
|
84
|
+
# Cleanup
|
85
|
+
FileUtils.rmtree ["include", "src"]
|
86
|
+
|
87
|
+
# Changeup
|
88
|
+
Dir.chdir "../.."
|
62
89
|
end
|
data/bin/roject
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
=begin
|
4
|
+
|
5
|
+
Program: Roject
|
6
|
+
|
7
|
+
Roject is a programming project manager written in Ruby.
|
8
|
+
With Roject, you can create and edit projects based on templates
|
9
|
+
using simple commands without a heavy IDE.
|
10
|
+
|
11
|
+
Author: Anshul Kharbanda
|
12
|
+
Created: 7 - 8 - 2016
|
13
|
+
|
14
|
+
=end
|
15
|
+
|
16
|
+
# Require roject library
|
17
|
+
require_relative "../lib/roject"
|
18
|
+
|
19
|
+
# Regular expression for parsing arguments
|
20
|
+
ARGREGEX = /(?<key>\w+):(?<value>.+)/
|
21
|
+
|
22
|
+
# Parses command line arguments into a task
|
23
|
+
# and hash of arguments
|
24
|
+
#
|
25
|
+
# Parameter: args - the command line arguments
|
26
|
+
#
|
27
|
+
# Return: parsed task and hash of arguments
|
28
|
+
def parse_arguments args
|
29
|
+
# First argument is the maker
|
30
|
+
makr = args[0].to_sym
|
31
|
+
|
32
|
+
# Parse remaining arguments
|
33
|
+
argh = {}; args[1..-1].each do |arg|
|
34
|
+
ARGREGEX.match(arg) do |match|
|
35
|
+
argh[match[:key].to_sym] = match[:value]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Return maker and args
|
40
|
+
return [makr, argh]
|
41
|
+
end
|
42
|
+
|
43
|
+
# If working dir is project
|
44
|
+
if Roject::Project.exist?
|
45
|
+
|
46
|
+
# Parse command line arguments
|
47
|
+
task, args = parse_arguments ARGV
|
48
|
+
|
49
|
+
# Print info
|
50
|
+
puts "making #{task}", "args #{args}"
|
51
|
+
|
52
|
+
# Make maker and args
|
53
|
+
Roject::Project.open { make task, args }
|
54
|
+
|
55
|
+
# Else raise error
|
56
|
+
else
|
57
|
+
raise IOError, "Could not locate a project script in current directory: #{Dir.getwd}"
|
58
|
+
end
|
data/exp/project/foobar.rb
CHANGED
data/lib/project.rb
CHANGED
@@ -25,7 +25,7 @@ module Roject
|
|
25
25
|
# Author: Anshul Kharbanda
|
26
26
|
# Created: 7 - 10 - 2016
|
27
27
|
class Project
|
28
|
-
#
|
28
|
+
# Helper methods for creating and manipulating projects
|
29
29
|
include Helpers
|
30
30
|
|
31
31
|
# Default filename
|
@@ -43,6 +43,34 @@ module Roject
|
|
43
43
|
}
|
44
44
|
}
|
45
45
|
|
46
|
+
# Check if a project file exists in the current directory
|
47
|
+
#
|
48
|
+
# Parameter: filename - the filename to check
|
49
|
+
# (defaults to the default filename)
|
50
|
+
#
|
51
|
+
# Returns: true if the project file exists in the current
|
52
|
+
# directory
|
53
|
+
def self.exist? filename=FILENAME_DEFAULT
|
54
|
+
File.file?(FILENAME_DEFAULT)
|
55
|
+
end
|
56
|
+
|
57
|
+
#-----------------------------------CLASS CONFIG-----------------------------------
|
58
|
+
|
59
|
+
# Alias for load if no block is given. Evaluates the given
|
60
|
+
# block in the context of the project if block is given
|
61
|
+
#
|
62
|
+
# Parameter: filename - the name of the file to parse
|
63
|
+
# (defaults to the default filename)
|
64
|
+
# Parameter: block - the block to evaluate within the
|
65
|
+
# context of the project
|
66
|
+
#
|
67
|
+
# Return: Project loaded from the file
|
68
|
+
def self.open filename=FILENAME_DEFAULT, &block
|
69
|
+
project = self.load(filename)
|
70
|
+
project.instance_eval(&block) unless block.nil?
|
71
|
+
return project
|
72
|
+
end
|
73
|
+
|
46
74
|
# Loads a Project from the project file with the given filename
|
47
75
|
#
|
48
76
|
# Parameter: filename - the name of the file to parse
|
@@ -50,17 +78,23 @@ module Roject
|
|
50
78
|
#
|
51
79
|
# Return: Project loaded from the file
|
52
80
|
def self.load filename=FILENAME_DEFAULT
|
53
|
-
project =
|
81
|
+
project = self.new
|
54
82
|
project.instance_eval(IO.read(filename))
|
55
83
|
return project
|
56
84
|
end
|
57
85
|
|
58
|
-
#----------------------------------
|
86
|
+
#----------------------------------INSTANCE CONFIG----------------------------------
|
59
87
|
|
60
88
|
# Called upon the initialization of a Project
|
61
89
|
# Creates config and makers hashes
|
62
90
|
def initialize; @config = CONFIG_DEFAULT; @makers = {}; end
|
63
91
|
|
92
|
+
# Reloads the project with the file with the given filename
|
93
|
+
#
|
94
|
+
# Parameter: filename - the name of the file to parse
|
95
|
+
# (defaults to the default filename)
|
96
|
+
def reload(filename=FILENAME_DEFAULT); initialize and instance_eval(IO.read(filename)); end
|
97
|
+
|
64
98
|
# If a hash is given, sets the Project configuration to the hash.
|
65
99
|
# Else, returns the configuration of the Project.
|
66
100
|
#
|
data/lib/roject.rb
CHANGED
data/spec/project_spec.rb
CHANGED
@@ -21,14 +21,20 @@ require_relative "../lib/roject"
|
|
21
21
|
describe Roject::Project do
|
22
22
|
# Do before
|
23
23
|
before :all do
|
24
|
+
# Change to project
|
24
25
|
Dir.chdir "exp/project"
|
26
|
+
|
27
|
+
# Create base project
|
25
28
|
@project = Roject::Project.new
|
26
|
-
|
29
|
+
|
30
|
+
# Foobar file
|
31
|
+
@foofle = "foobar.rb"
|
32
|
+
@foocfg = Roject::Project::CONFIG_DEFAULT.merge({
|
27
33
|
project_name: "Foo",
|
28
34
|
author: "Anshul Kharbanda",
|
29
35
|
created: "7 - 24 - 2016",
|
30
36
|
short_description: "Foo bar",
|
31
|
-
long_description: "Foo bar baz
|
37
|
+
long_description: "Foo bar baz joo jar jaz noo kar kaz"
|
32
38
|
})
|
33
39
|
end
|
34
40
|
|
@@ -49,37 +55,127 @@ describe Roject::Project do
|
|
49
55
|
|
50
56
|
context 'with hash given' do
|
51
57
|
it 'configures the Project with the given hash' do
|
52
|
-
expect{@project.config(@
|
53
|
-
expect(@project.config).to eql @
|
58
|
+
expect{@project.config(@foocfg)}.not_to raise_error
|
59
|
+
expect(@project.config).to eql @foocfg
|
54
60
|
end
|
55
61
|
end
|
56
62
|
end
|
57
63
|
|
58
|
-
# Describe Roject::Project
|
64
|
+
# Describe Roject::Project loading system
|
59
65
|
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
# Parameter: filename - the name of the file to parse
|
66
|
+
# The system of loading and reloading from a file
|
63
67
|
#
|
64
|
-
#
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
68
|
+
# Author: Anshul Kharbanda
|
69
|
+
# Created: 7 - 25 - 2016
|
70
|
+
describe 'loading' do
|
71
|
+
# Describe Roject::Project::exist?
|
72
|
+
#
|
73
|
+
# Check if a project file exists in the current directory
|
74
|
+
#
|
75
|
+
# Parameter: filename - the filename to check
|
76
|
+
# (defaults to the default filename)
|
77
|
+
#
|
78
|
+
# Returns: true if the project file exists in the current
|
79
|
+
# directory
|
80
|
+
describe '::exist?' do
|
81
|
+
context 'with a filename given' do
|
82
|
+
it 'checks if the given project filename exists in the current directory' do
|
83
|
+
expect(Roject::Project).to be_exist(@foofle)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'with no filename given' do
|
88
|
+
it 'checks if the default project filename exists in the current directory' do
|
89
|
+
expect(Roject::Project).to be_exist
|
90
|
+
end
|
70
91
|
end
|
71
92
|
end
|
72
93
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
94
|
+
# Describe Roject::Project::load
|
95
|
+
#
|
96
|
+
# Loads a Project from the project file with the given filename
|
97
|
+
#
|
98
|
+
# Parameter: filename - the name of the file to parse
|
99
|
+
#
|
100
|
+
# Return: Project loaded from the file
|
101
|
+
describe '::load' do
|
102
|
+
# Check when filename is given
|
103
|
+
context 'with a filename given' do
|
104
|
+
it 'loads a project from the given filename' do
|
105
|
+
# Test loading foobar.rb file
|
106
|
+
expect{@project = Roject::Project.load(@foofle)}.not_to raise_error
|
107
|
+
expect(@project).to be_an_instance_of Roject::Project
|
108
|
+
expect(@project.config).to eql @foocfg
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# Check when filename is not given
|
113
|
+
context 'with no filename given' do
|
114
|
+
it 'loads a project from the default filename' do
|
115
|
+
# Test loading default file
|
116
|
+
expect{@project = Roject::Project.load}.not_to raise_error
|
117
|
+
expect(@project).to be_an_instance_of Roject::Project
|
118
|
+
end
|
77
119
|
end
|
78
120
|
end
|
79
121
|
|
80
|
-
|
81
|
-
|
122
|
+
# Describe Roject::Project::open
|
123
|
+
#
|
124
|
+
# Alias for load if no block is given. Evaluates the given
|
125
|
+
# block in the context of the project if block is given
|
126
|
+
#
|
127
|
+
# Parameter: filename - the name of the file to parse
|
128
|
+
# (defaults to the default filename)
|
129
|
+
# Parameter: block - the block to evaluate within the
|
130
|
+
# context of the project
|
131
|
+
#
|
132
|
+
# Return: Project loaded from the file
|
133
|
+
describe '::open' do
|
134
|
+
# Check for when block is given
|
135
|
+
context 'with a block given' do
|
136
|
+
it 'loads the project and evaluates it within the given block' do
|
137
|
+
project = nil
|
138
|
+
expect { Roject::Project.open { project = self } }.not_to raise_error
|
139
|
+
expect(project).to be_an_instance_of Roject::Project
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
# Check for when no block is given
|
144
|
+
context 'with no block given' do
|
145
|
+
it 'loads the project' do
|
146
|
+
expect { @project = Roject::Project.open }.not_to raise_error
|
147
|
+
expect(@project).to be_an_instance_of Roject::Project
|
148
|
+
end
|
149
|
+
end
|
82
150
|
end
|
151
|
+
|
152
|
+
# Describe Roject::Project#reload
|
153
|
+
#
|
154
|
+
# Reloads the project with the file with the given filename
|
155
|
+
#
|
156
|
+
# Parameter: filename - the name of the file to parse
|
157
|
+
# (defaults to the default filename)
|
158
|
+
describe '#reload' do
|
159
|
+
context 'with a filename given' do
|
160
|
+
it 'loads the given filename into the project' do
|
161
|
+
# Test loading foobar.rb file
|
162
|
+
expect{@project.reload("foobar.rb")}.not_to raise_error
|
163
|
+
expect(@project).to be_an_instance_of Roject::Project
|
164
|
+
expect(@project.config).to eql @foocfg
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
context 'with no filename given' do
|
169
|
+
it 'loads the default filename into the project' do
|
170
|
+
# Test loading default file
|
171
|
+
expect{@project.reload}.not_to raise_error
|
172
|
+
expect(@project).to be_an_instance_of Roject::Project
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
# Delete makers
|
178
|
+
after :all do @project.instance_variable_set :@makers, {} end
|
83
179
|
end
|
84
180
|
|
85
181
|
# Describe Roject::Project makers
|
@@ -218,5 +314,6 @@ describe Roject::Project do
|
|
218
314
|
end
|
219
315
|
end
|
220
316
|
|
317
|
+
# Change back to root
|
221
318
|
after :all do Dir.chdir "../.." end
|
222
319
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roject
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anshul Kharbanda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: general
|
@@ -70,13 +70,15 @@ description: Roject is a programming project manager written in Ruby. With Rojec
|
|
70
70
|
you can create and edit projects based on templates using simple commands without
|
71
71
|
a heavy IDE.
|
72
72
|
email: akanshul97@gmail.com
|
73
|
-
executables:
|
73
|
+
executables:
|
74
|
+
- roject
|
74
75
|
extensions: []
|
75
76
|
extra_rdoc_files: []
|
76
77
|
files:
|
77
78
|
- LICENSE
|
78
79
|
- README.md
|
79
80
|
- Rakefile
|
81
|
+
- bin/roject
|
80
82
|
- exp/project/_templates/header.general
|
81
83
|
- exp/project/_templates/source.general
|
82
84
|
- exp/project/foobar.rb
|