roject 0.7.0 → 1.0.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/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
|