new 0.1.1 → 1.0.9
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 +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: []
|