new 0.1.1 → 1.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/bin/new +0 -2
- data/lib/new.rb +125 -52
- data/lib/new/cli.rb +514 -67
- data/lib/new/source.rb +110 -0
- data/lib/new/task.rb +67 -24
- data/lib/new/validation.rb +191 -0
- metadata +75 -132
- data/.gitignore +0 -6
- data/.new +0 -23
- data/.rspec +0 -2
- data/Gemfile +0 -16
- data/Gemfile.lock +0 -82
- data/Guardfile +0 -16
- data/LICENSE.txt +0 -22
- data/README.md +0 -128
- data/lib/new/core.rb +0 -7
- data/lib/new/dsl.rb +0 -42
- data/lib/new/interpolate.rb +0 -106
- data/lib/new/project.rb +0 -34
- data/lib/new/template.rb +0 -67
- data/lib/new/version.rb +0 -54
- data/spec/fixtures/custom/.new +0 -16
- data/spec/fixtures/custom/tasks/custom_bar_task/custom_bar_task.rb +0 -3
- data/spec/fixtures/custom/templates/custom_bar_template/.new +0 -3
- data/spec/fixtures/custom/templates/custom_bar_template/custom_bar.txt +0 -0
- data/spec/fixtures/project/.new +0 -4
- data/spec/fixtures/project/.new_cli_release_spec +0 -2
- data/spec/fixtures/tasks/custom_bar_task/custom_bar_task.rb +0 -1
- data/spec/fixtures/tasks/foo_task/Gemfile +0 -5
- data/spec/fixtures/tasks/foo_task/foo_task.rb +0 -7
- data/spec/fixtures/templates/custom_bar_template/.gitkeep +0 -0
- data/spec/fixtures/templates/foo_template/.new +0 -1
- data/spec/fixtures/templates/foo_template/[FOO.BAR].txt.erb +0 -1
- data/spec/fixtures/templates/foo_template/nested_[FOO.BAR]/foo.txt.erb +0 -1
- data/spec/lib/new/cli_spec.rb +0 -107
- data/spec/lib/new/interpolate_spec.rb +0 -43
- data/spec/lib/new/project_spec.rb +0 -33
- data/spec/lib/new/task_spec.rb +0 -39
- data/spec/lib/new/template_spec.rb +0 -59
- data/spec/lib/new/version_spec.rb +0 -26
- data/spec/lib/new_spec.rb +0 -19
- data/spec/spec_helper.rb +0 -46
- data/tasks/gem/.gemspec.erb +0 -4
- data/tasks/gem/README.md +0 -36
- data/tasks/gem/gem.rb +0 -170
- data/tasks/gem/gem_spec.rb +0 -138
- data/templates/js/.bowerrc +0 -3
- data/templates/js/.gitignore +0 -3
- data/templates/js/.new.erb +0 -11
- data/templates/js/CHANGELOG.md +0 -3
- data/templates/js/Gemfile +0 -2
- data/templates/js/Guardfile +0 -7
- data/templates/js/LICENSE-MIT.erb +0 -22
- data/templates/js/README.md.erb +0 -41
- data/templates/js/bower.json.erb +0 -11
- data/templates/js/demo/[PROJECT.FILENAME]_demo.coffee +0 -0
- data/templates/js/demo/[PROJECT.FILENAME]_demo.sass +0 -0
- data/templates/js/demo/index.html.erb +0 -12
- data/templates/js/lib/README.md +0 -2
- data/templates/js/package.json +0 -5
- data/templates/js/spec/[PROJECT.FILENAME]_spec.coffee.erb +0 -1
- data/templates/js/spec/[PROJECT.FILENAME]_spec.sass +0 -0
- data/templates/js/spec/index.html.erb +0 -35
- data/templates/js/src/[PROJECT.FILENAME].coffee.erb +0 -18
- data/templates/js/src/[PROJECT.FILENAME].sass +0 -0
- data/templates/js/testem.yml +0 -23
- data/templates/js/yuyi_menu +0 -7
data/lib/new/source.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'sourcerer'
|
2
|
+
|
3
|
+
class New::Source
|
4
|
+
#
|
5
|
+
# CLASS METHODS
|
6
|
+
#
|
7
|
+
class << self
|
8
|
+
@@sources = {}
|
9
|
+
def sources; @@sources; end
|
10
|
+
|
11
|
+
# loop through sources saved to the global new object and initializes sources from them
|
12
|
+
#
|
13
|
+
def load_sources
|
14
|
+
New.new_object[:sources].each do |name, path|
|
15
|
+
@@sources[name] = New::Source.new name, path
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# look through all sources to find a matching task
|
20
|
+
# @param task_name [String/Symbol] valid task name
|
21
|
+
# @param source_name [String/Symbol] valid source name
|
22
|
+
#
|
23
|
+
# @return [String] valid task path
|
24
|
+
#
|
25
|
+
def find_task task_name, source_name = nil
|
26
|
+
# if source is specified, target it directly
|
27
|
+
if source_name
|
28
|
+
return lookup_task source_name, task_name
|
29
|
+
|
30
|
+
# if source and task is specified in a single string
|
31
|
+
elsif task_name.to_s.include? '#'
|
32
|
+
source_task = task_name.split('#').reverse
|
33
|
+
source_name = source_task[1].to_sym
|
34
|
+
task_name = source_task[0].to_sym
|
35
|
+
|
36
|
+
return lookup_task source_name, task_name
|
37
|
+
|
38
|
+
# otherwise loop through sources until a template is found
|
39
|
+
else
|
40
|
+
@@sources.values.each do |source|
|
41
|
+
return source.tasks[task_name.to_sym] || next
|
42
|
+
end
|
43
|
+
S.ay "No `#{task_name}` task was found in any of the sources", :error
|
44
|
+
end
|
45
|
+
|
46
|
+
return nil
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
# use the source and task names to get a task instance
|
52
|
+
# @param source_name [Symbol] symbolized valid source name
|
53
|
+
# @param task_name [Symbol] symbolized valid task name
|
54
|
+
#
|
55
|
+
# @return [New::Task|nil] returns a task, or nil if none is found
|
56
|
+
#
|
57
|
+
def lookup_task source_name, task_name
|
58
|
+
if source = @@sources[source_name.to_sym]
|
59
|
+
if task = source.tasks[task_name.to_sym]
|
60
|
+
return task
|
61
|
+
else
|
62
|
+
S.ay "No `#{task_name}` task was found in the `#{source_name}` source", :error
|
63
|
+
end
|
64
|
+
else
|
65
|
+
S.ay "No `#{source_name}` source was found", :error
|
66
|
+
end
|
67
|
+
|
68
|
+
return nil
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
#
|
74
|
+
# INSTANCE METHODS
|
75
|
+
#
|
76
|
+
attr_reader :name, :path, :tasks
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def initialize name, path
|
81
|
+
@name = name
|
82
|
+
@tasks = {}
|
83
|
+
|
84
|
+
# fetch source and create tasks
|
85
|
+
source = Sourcerer.new path
|
86
|
+
source.files('**/*_task.rb').each do |task_file_path|
|
87
|
+
# load task ruby file
|
88
|
+
load task_file_path
|
89
|
+
|
90
|
+
# get task name from task path
|
91
|
+
task_name = New::Task.get_task_name task_file_path
|
92
|
+
|
93
|
+
# lookup task from initialized global tasks
|
94
|
+
task = New::Task.tasks[task_name]
|
95
|
+
|
96
|
+
# unload class so it can be inherited again
|
97
|
+
# this means once a class is loaded, it is inherited, initialized, then destroyed
|
98
|
+
New.send :remove_const, task.class.to_s.sub('New::', '').to_sym
|
99
|
+
|
100
|
+
# add source to task
|
101
|
+
task.source = self
|
102
|
+
|
103
|
+
# add global task to the source tasks object
|
104
|
+
@tasks[task_name] = task
|
105
|
+
end
|
106
|
+
|
107
|
+
# set path to sourcerer path
|
108
|
+
@path = source.source
|
109
|
+
end
|
110
|
+
end
|
data/lib/new/task.rb
CHANGED
@@ -1,39 +1,82 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
|
3
1
|
class New::Task
|
4
|
-
|
5
|
-
|
2
|
+
extend New::Validation
|
3
|
+
|
4
|
+
#
|
5
|
+
# CLASS METHODS
|
6
|
+
#
|
7
|
+
class << self
|
8
|
+
# global tasks for task class with a getter
|
9
|
+
@@tasks = {}
|
10
|
+
def tasks; @@tasks; end
|
11
|
+
|
12
|
+
# derive a task name from a task path
|
13
|
+
# @param task_path [String] full path to a task ruby file
|
14
|
+
#
|
15
|
+
def get_task_name task_path
|
16
|
+
task_path.match(/([^\/]*)_task\.rb$/)[1].to_sym
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
# when custom task is required, add the class to the global hash to initialize later
|
22
|
+
#
|
23
|
+
def inherited subclass
|
24
|
+
# get task details from path
|
25
|
+
path = caller.first.match(/(^.*_task\.rb).*$/)[1]
|
26
|
+
name = get_task_name path
|
27
|
+
|
28
|
+
# add subclass to global object for easier lookup
|
29
|
+
@@tasks[name] = subclass.new name, path
|
30
|
+
end
|
6
31
|
end
|
7
32
|
|
8
|
-
|
9
|
-
|
10
|
-
|
33
|
+
|
34
|
+
#
|
35
|
+
# INSTANCE METHODS
|
36
|
+
#
|
37
|
+
attr_accessor :source, :options
|
38
|
+
attr_reader :name, :path
|
39
|
+
|
40
|
+
# getters/setters for task meta data stored temporarily on a class var
|
41
|
+
def description
|
42
|
+
@description ||= self.class.class_variable_get :@@description rescue ''
|
11
43
|
end
|
12
44
|
|
13
|
-
def
|
14
|
-
@
|
45
|
+
def class_options
|
46
|
+
@class_options ||= self.class.class_variable_get :@@options rescue {}
|
15
47
|
end
|
16
|
-
def self.name; @name; end
|
17
|
-
def name; self.class.name.to_sym; end
|
18
48
|
|
19
|
-
#
|
49
|
+
# task to check that outside dependencies are met before we run the tasks
|
50
|
+
# since verify is not a required method, we define a blank one to prevent undefined method errors
|
51
|
+
#
|
52
|
+
def verify; end
|
53
|
+
|
54
|
+
# validate all options
|
20
55
|
#
|
21
|
-
def
|
22
|
-
|
23
|
-
|
56
|
+
def validate
|
57
|
+
class_options.keys.each do |option_name|
|
58
|
+
option_settings = class_options[option_name]
|
59
|
+
option_value = @options[:task_options][option_name]
|
60
|
+
new_option_value = New::Task.validate_option(option_name, option_settings, option_value)
|
24
61
|
|
25
|
-
|
26
|
-
|
27
|
-
all_options[:tasks].delete(task) unless @project_config[:tasks].has_key?(task)
|
62
|
+
# set the new validated value
|
63
|
+
@options[:task_options][option_name] = new_option_value
|
28
64
|
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# run a system command
|
68
|
+
def run_command command
|
69
|
+
# if verbose, dont redirect output to null
|
70
|
+
command += ' >> /dev/null 2>&1' unless New.verbose
|
29
71
|
|
30
|
-
|
72
|
+
# run the command
|
73
|
+
Kernel.system command
|
31
74
|
end
|
32
75
|
|
33
|
-
|
34
|
-
|
35
|
-
def
|
36
|
-
|
37
|
-
@
|
76
|
+
private
|
77
|
+
|
78
|
+
def initialize name, path
|
79
|
+
@name = name
|
80
|
+
@path = path
|
38
81
|
end
|
39
82
|
end
|
@@ -0,0 +1,191 @@
|
|
1
|
+
module New::Validation
|
2
|
+
# validate a task option using a task and its associated options
|
3
|
+
#
|
4
|
+
# @param option_name [String] name of an option
|
5
|
+
# @param option [Hash] formatted option object
|
6
|
+
# @param value [String] typically a user-input value
|
7
|
+
# @return a valid option value depending on the type/validation rules
|
8
|
+
# if no valid value can be made, return nil
|
9
|
+
def validate_option option_name, option, value
|
10
|
+
# validate required option or set default
|
11
|
+
if !value || value.empty?
|
12
|
+
# if the option is required, raise an error
|
13
|
+
if option[:required]
|
14
|
+
raise_validation_error option_name, 'is a required option'
|
15
|
+
|
16
|
+
# otherwise set the default
|
17
|
+
else
|
18
|
+
value = option[:default]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# set default type
|
23
|
+
type = option[:type] || String
|
24
|
+
|
25
|
+
# validate and convert value to specified type
|
26
|
+
value = New::Task.validate_class value, type
|
27
|
+
|
28
|
+
# validate with custom validation
|
29
|
+
if validation = option[:validation]
|
30
|
+
value = case
|
31
|
+
|
32
|
+
when type == String
|
33
|
+
validate_regexp option_name, value, validation
|
34
|
+
|
35
|
+
when type == Symbol
|
36
|
+
validate_regexp option_name, value, validation
|
37
|
+
|
38
|
+
when type == Integer
|
39
|
+
validate_range option_name, value, validation
|
40
|
+
|
41
|
+
when type == Float
|
42
|
+
validate_range option_name, value, validation
|
43
|
+
|
44
|
+
when type == Array
|
45
|
+
# set default
|
46
|
+
validation = validation || String
|
47
|
+
|
48
|
+
# If validation is an array convert it to a hash of String
|
49
|
+
if validation.is_a? Array
|
50
|
+
validation_hash = {}
|
51
|
+
validation.each do |v|
|
52
|
+
validation_hash[v] = String
|
53
|
+
end
|
54
|
+
validation = validation_hash
|
55
|
+
end
|
56
|
+
|
57
|
+
# if validation is a hash, make sure all values exist for required keys
|
58
|
+
if validation.is_a? Hash
|
59
|
+
value.each do |v|
|
60
|
+
if validation.keys != v.keys
|
61
|
+
raise_validation_error option_name, "validation for an Array must contain values for `#{validation.keys.join(', ')}`"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
else
|
65
|
+
unless validation == String || validation == Symbol || validation == Boolean || validation == Integer || validation == Float
|
66
|
+
raise_validation_error option_name, "validation for an Array must be a [String|Symbol|Boolean|Integer|Float]"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# validate each element in array with the validation class type
|
71
|
+
value.map! do |v|
|
72
|
+
New::Task.validate_class v, validation
|
73
|
+
end
|
74
|
+
|
75
|
+
return value
|
76
|
+
|
77
|
+
when type == Hash
|
78
|
+
unless validation.is_a?(Array) || validation.is_a?(Hash)
|
79
|
+
raise_validation_error option_name, "validation must be an Array or Hash of required keys (Check the New docs for the requirements)"
|
80
|
+
end
|
81
|
+
|
82
|
+
# make sure value contains all the required validation keys
|
83
|
+
value_keys = (value.is_a?(Array) ? value : value.keys).map(&:to_sym)
|
84
|
+
validation_keys = (validation.is_a?(Array) ? validation : validation.keys).map(&:to_sym)
|
85
|
+
unless (validation_keys & value_keys) == validation_keys
|
86
|
+
raise_validation_error option_name, "must contain all the following keys: #{validation_keys.join(', ')}"
|
87
|
+
end
|
88
|
+
|
89
|
+
# make sure values are of the provided class type
|
90
|
+
if validation.is_a? Hash
|
91
|
+
validation.each do |key, klass|
|
92
|
+
value[key] = New::Task.validate_class value[key], klass
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
return value
|
97
|
+
else
|
98
|
+
return value
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
return value
|
103
|
+
end
|
104
|
+
|
105
|
+
def validate_class value, klass
|
106
|
+
begin
|
107
|
+
case
|
108
|
+
when klass == String then String(value)
|
109
|
+
when klass == Symbol then validate_symbol value
|
110
|
+
when klass == Boolean then validate_boolean value
|
111
|
+
when klass == Integer then Float(value).to_i
|
112
|
+
when klass == Float then Float(value)
|
113
|
+
when klass == Array then value.delete_if{ |v| v == nil || v == '' }
|
114
|
+
when klass == Hash then value.delete_if{ |k, v| v == nil || v == '' || v == [] }
|
115
|
+
else value
|
116
|
+
end
|
117
|
+
rescue
|
118
|
+
S.ay "`#{value}` cannot be converted to #{klass}", :error
|
119
|
+
raise
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
private
|
124
|
+
|
125
|
+
# convert back to string
|
126
|
+
# convert to lowercase
|
127
|
+
# replace non-alpha characters to underscores
|
128
|
+
# convert consecutive underscores (__) to a single underscore (_)
|
129
|
+
# remove leading underscore
|
130
|
+
# remove trailing underscore
|
131
|
+
#
|
132
|
+
def validate_symbol value
|
133
|
+
begin
|
134
|
+
symbol_name = String(value).downcase.gsub(/[^a-z_]/, '_').gsub(/_+/, '_').sub(/^_/, '').sub(/_$/, '').to_sym
|
135
|
+
raise if symbol_name.empty?
|
136
|
+
symbol_name
|
137
|
+
rescue
|
138
|
+
S.ay "`#{value}` could not be converted into a proper symbol (Check the New docs for rules)", :error
|
139
|
+
raise
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def validate_boolean value
|
144
|
+
case value.downcase
|
145
|
+
when 'true', 'yes' then true
|
146
|
+
when 'false', 'no' then false
|
147
|
+
else
|
148
|
+
S.ay "`#{value}` must be either `true/yes` or `false/no`", :error
|
149
|
+
raise
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
# check that a value matches a regexp
|
154
|
+
#
|
155
|
+
# @param option_name [Symbol] the task option name
|
156
|
+
# @param value [String] the passed user value
|
157
|
+
# @param regexp [Regexp] a regular expression object. defaults to `.*`
|
158
|
+
#
|
159
|
+
def validate_regexp option_name, value, regexp
|
160
|
+
return value unless regexp
|
161
|
+
|
162
|
+
# validate validation
|
163
|
+
raise_validation_error option_name, 'validation must be a `Regexp`' unless regexp.is_a? Regexp
|
164
|
+
|
165
|
+
# check if the value still exists after comparing to the regexp
|
166
|
+
if value[regexp]
|
167
|
+
return value
|
168
|
+
else
|
169
|
+
raise_validation_error option_name, "`#{value}` did not match the regexp `#{regexp.to_s.sub('(?-mix:', '').sub(/\)$/, '')}`."
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def validate_range option_name, value, range
|
174
|
+
# if no range is set... any value is valid
|
175
|
+
return value unless range
|
176
|
+
|
177
|
+
# validate validation
|
178
|
+
raise_validation_error option_name, 'validation must be a `Range`' unless range.is_a? Range
|
179
|
+
|
180
|
+
if range.include? value
|
181
|
+
return value
|
182
|
+
else
|
183
|
+
raise_validation_error option_name, "`#{value}` must be within `#{range.min}` and `#{range.max}`"
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def raise_validation_error option_name, message
|
188
|
+
S.ay "#{@name.to_s.upcase}: #{option_name}: #{message.white}", :preset => :error
|
189
|
+
raise
|
190
|
+
end
|
191
|
+
end
|
metadata
CHANGED
@@ -1,244 +1,198 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: new
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Brewster
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '1.7'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '1.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: cli_miami
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
33
|
+
version: '0.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
40
|
+
version: '0.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: listen
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '2.8'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '2.8'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: semantic
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '1.4'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '1.4'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: sourcerer_
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
75
|
+
version: '0.0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
82
|
+
version: '0.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: thor
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
89
|
+
version: '0.19'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.19'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: coveralls
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.7'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
110
|
+
version: '0.7'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: guard
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
|
-
- -
|
115
|
+
- - ~>
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
117
|
+
version: '2.6'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
|
-
- -
|
122
|
+
- - ~>
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
124
|
+
version: '2.6'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: guard-bundler
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
|
-
- -
|
129
|
+
- - ~>
|
116
130
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
131
|
+
version: '2.1'
|
118
132
|
type: :development
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
|
-
- -
|
136
|
+
- - ~>
|
123
137
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
138
|
+
version: '2.1'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: guard-rspec
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
|
-
- -
|
143
|
+
- - ~>
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
145
|
+
version: '4.3'
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
|
-
- -
|
150
|
+
- - ~>
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
152
|
+
version: '4.3'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: rspec
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
|
-
- -
|
157
|
+
- - ~>
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
159
|
+
version: '3.1'
|
146
160
|
type: :development
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
|
-
- -
|
164
|
+
- - ~>
|
151
165
|
- !ruby/object:Gem::Version
|
152
|
-
version: '
|
166
|
+
version: '3.1'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: terminal-notifier-guard
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
156
170
|
requirements:
|
157
|
-
- -
|
171
|
+
- - ~>
|
158
172
|
- !ruby/object:Gem::Version
|
159
|
-
version: '
|
173
|
+
version: '1.5'
|
160
174
|
type: :development
|
161
175
|
prerelease: false
|
162
176
|
version_requirements: !ruby/object:Gem::Requirement
|
163
177
|
requirements:
|
164
|
-
- -
|
178
|
+
- - ~>
|
165
179
|
- !ruby/object:Gem::Version
|
166
|
-
version: '
|
167
|
-
description:
|
168
|
-
|
169
|
-
email: brewster1134@gmail.com
|
180
|
+
version: '1.5'
|
181
|
+
description:
|
182
|
+
email:
|
170
183
|
executables:
|
171
184
|
- new
|
172
185
|
extensions: []
|
173
186
|
extra_rdoc_files: []
|
174
187
|
files:
|
175
|
-
- ".gitignore"
|
176
|
-
- ".new"
|
177
|
-
- ".rspec"
|
178
|
-
- Gemfile
|
179
|
-
- Gemfile.lock
|
180
|
-
- Guardfile
|
181
|
-
- LICENSE.txt
|
182
|
-
- README.md
|
183
188
|
- bin/new
|
184
189
|
- lib/new.rb
|
185
190
|
- lib/new/cli.rb
|
186
|
-
- lib/new/
|
187
|
-
- lib/new/dsl.rb
|
188
|
-
- lib/new/interpolate.rb
|
189
|
-
- lib/new/project.rb
|
191
|
+
- lib/new/source.rb
|
190
192
|
- lib/new/task.rb
|
191
|
-
- lib/new/
|
192
|
-
- lib/new/version.rb
|
193
|
-
- spec/fixtures/custom/.new
|
194
|
-
- spec/fixtures/custom/tasks/custom_bar_task/custom_bar_task.rb
|
195
|
-
- spec/fixtures/custom/templates/custom_bar_template/.new
|
196
|
-
- spec/fixtures/custom/templates/custom_bar_template/custom_bar.txt
|
197
|
-
- spec/fixtures/project/.new
|
198
|
-
- spec/fixtures/project/.new_cli_release_spec
|
199
|
-
- spec/fixtures/tasks/custom_bar_task/custom_bar_task.rb
|
200
|
-
- spec/fixtures/tasks/foo_task/Gemfile
|
201
|
-
- spec/fixtures/tasks/foo_task/foo_task.rb
|
202
|
-
- spec/fixtures/templates/custom_bar_template/.gitkeep
|
203
|
-
- spec/fixtures/templates/foo_template/.new
|
204
|
-
- spec/fixtures/templates/foo_template/[FOO.BAR].txt.erb
|
205
|
-
- spec/fixtures/templates/foo_template/nested_[FOO.BAR]/foo.txt.erb
|
206
|
-
- spec/lib/new/cli_spec.rb
|
207
|
-
- spec/lib/new/interpolate_spec.rb
|
208
|
-
- spec/lib/new/project_spec.rb
|
209
|
-
- spec/lib/new/task_spec.rb
|
210
|
-
- spec/lib/new/template_spec.rb
|
211
|
-
- spec/lib/new/version_spec.rb
|
212
|
-
- spec/lib/new_spec.rb
|
213
|
-
- spec/spec_helper.rb
|
214
|
-
- tasks/gem/.gemspec.erb
|
215
|
-
- tasks/gem/README.md
|
216
|
-
- tasks/gem/gem.rb
|
217
|
-
- tasks/gem/gem_spec.rb
|
218
|
-
- templates/js/.bowerrc
|
219
|
-
- templates/js/.gitignore
|
220
|
-
- templates/js/.new.erb
|
221
|
-
- templates/js/CHANGELOG.md
|
222
|
-
- templates/js/Gemfile
|
223
|
-
- templates/js/Guardfile
|
224
|
-
- templates/js/LICENSE-MIT.erb
|
225
|
-
- templates/js/README.md.erb
|
226
|
-
- templates/js/bower.json.erb
|
227
|
-
- templates/js/demo/[PROJECT.FILENAME]_demo.coffee
|
228
|
-
- templates/js/demo/[PROJECT.FILENAME]_demo.sass
|
229
|
-
- templates/js/demo/index.html.erb
|
230
|
-
- templates/js/lib/README.md
|
231
|
-
- templates/js/package.json
|
232
|
-
- templates/js/spec/[PROJECT.FILENAME]_spec.coffee.erb
|
233
|
-
- templates/js/spec/[PROJECT.FILENAME]_spec.sass
|
234
|
-
- templates/js/spec/index.html.erb
|
235
|
-
- templates/js/src/[PROJECT.FILENAME].coffee.erb
|
236
|
-
- templates/js/src/[PROJECT.FILENAME].sass
|
237
|
-
- templates/js/testem.yml
|
238
|
-
- templates/js/yuyi_menu
|
193
|
+
- lib/new/validation.rb
|
239
194
|
homepage: https://github.com/brewster1134/new
|
240
|
-
licenses:
|
241
|
-
- MIT
|
195
|
+
licenses: []
|
242
196
|
metadata: {}
|
243
197
|
post_install_message:
|
244
198
|
rdoc_options: []
|
@@ -246,29 +200,18 @@ require_paths:
|
|
246
200
|
- lib
|
247
201
|
required_ruby_version: !ruby/object:Gem::Requirement
|
248
202
|
requirements:
|
249
|
-
- -
|
203
|
+
- - ! '>='
|
250
204
|
- !ruby/object:Gem::Version
|
251
205
|
version: '0'
|
252
206
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
253
207
|
requirements:
|
254
|
-
- -
|
208
|
+
- - ! '>='
|
255
209
|
- !ruby/object:Gem::Version
|
256
210
|
version: '0'
|
257
211
|
requirements: []
|
258
212
|
rubyforge_project:
|
259
|
-
rubygems_version: 2.4.
|
213
|
+
rubygems_version: 2.4.6
|
260
214
|
signing_key:
|
261
215
|
specification_version: 4
|
262
|
-
summary: A
|
263
|
-
test_files:
|
264
|
-
- spec/fixtures/custom/tasks/custom_bar_task/custom_bar_task.rb
|
265
|
-
- spec/fixtures/tasks/custom_bar_task/custom_bar_task.rb
|
266
|
-
- spec/fixtures/tasks/foo_task/foo_task.rb
|
267
|
-
- spec/lib/new/cli_spec.rb
|
268
|
-
- spec/lib/new/interpolate_spec.rb
|
269
|
-
- spec/lib/new/project_spec.rb
|
270
|
-
- spec/lib/new/task_spec.rb
|
271
|
-
- spec/lib/new/template_spec.rb
|
272
|
-
- spec/lib/new/version_spec.rb
|
273
|
-
- spec/lib/new_spec.rb
|
274
|
-
- spec/spec_helper.rb
|
216
|
+
summary: A tool to release your software into the wild.
|
217
|
+
test_files: []
|