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.
Files changed (68) hide show
  1. checksums.yaml +13 -5
  2. data/bin/new +0 -2
  3. data/lib/new.rb +125 -52
  4. data/lib/new/cli.rb +514 -67
  5. data/lib/new/source.rb +110 -0
  6. data/lib/new/task.rb +67 -24
  7. data/lib/new/validation.rb +191 -0
  8. metadata +75 -132
  9. data/.gitignore +0 -6
  10. data/.new +0 -23
  11. data/.rspec +0 -2
  12. data/Gemfile +0 -16
  13. data/Gemfile.lock +0 -82
  14. data/Guardfile +0 -16
  15. data/LICENSE.txt +0 -22
  16. data/README.md +0 -128
  17. data/lib/new/core.rb +0 -7
  18. data/lib/new/dsl.rb +0 -42
  19. data/lib/new/interpolate.rb +0 -106
  20. data/lib/new/project.rb +0 -34
  21. data/lib/new/template.rb +0 -67
  22. data/lib/new/version.rb +0 -54
  23. data/spec/fixtures/custom/.new +0 -16
  24. data/spec/fixtures/custom/tasks/custom_bar_task/custom_bar_task.rb +0 -3
  25. data/spec/fixtures/custom/templates/custom_bar_template/.new +0 -3
  26. data/spec/fixtures/custom/templates/custom_bar_template/custom_bar.txt +0 -0
  27. data/spec/fixtures/project/.new +0 -4
  28. data/spec/fixtures/project/.new_cli_release_spec +0 -2
  29. data/spec/fixtures/tasks/custom_bar_task/custom_bar_task.rb +0 -1
  30. data/spec/fixtures/tasks/foo_task/Gemfile +0 -5
  31. data/spec/fixtures/tasks/foo_task/foo_task.rb +0 -7
  32. data/spec/fixtures/templates/custom_bar_template/.gitkeep +0 -0
  33. data/spec/fixtures/templates/foo_template/.new +0 -1
  34. data/spec/fixtures/templates/foo_template/[FOO.BAR].txt.erb +0 -1
  35. data/spec/fixtures/templates/foo_template/nested_[FOO.BAR]/foo.txt.erb +0 -1
  36. data/spec/lib/new/cli_spec.rb +0 -107
  37. data/spec/lib/new/interpolate_spec.rb +0 -43
  38. data/spec/lib/new/project_spec.rb +0 -33
  39. data/spec/lib/new/task_spec.rb +0 -39
  40. data/spec/lib/new/template_spec.rb +0 -59
  41. data/spec/lib/new/version_spec.rb +0 -26
  42. data/spec/lib/new_spec.rb +0 -19
  43. data/spec/spec_helper.rb +0 -46
  44. data/tasks/gem/.gemspec.erb +0 -4
  45. data/tasks/gem/README.md +0 -36
  46. data/tasks/gem/gem.rb +0 -170
  47. data/tasks/gem/gem_spec.rb +0 -138
  48. data/templates/js/.bowerrc +0 -3
  49. data/templates/js/.gitignore +0 -3
  50. data/templates/js/.new.erb +0 -11
  51. data/templates/js/CHANGELOG.md +0 -3
  52. data/templates/js/Gemfile +0 -2
  53. data/templates/js/Guardfile +0 -7
  54. data/templates/js/LICENSE-MIT.erb +0 -22
  55. data/templates/js/README.md.erb +0 -41
  56. data/templates/js/bower.json.erb +0 -11
  57. data/templates/js/demo/[PROJECT.FILENAME]_demo.coffee +0 -0
  58. data/templates/js/demo/[PROJECT.FILENAME]_demo.sass +0 -0
  59. data/templates/js/demo/index.html.erb +0 -12
  60. data/templates/js/lib/README.md +0 -2
  61. data/templates/js/package.json +0 -5
  62. data/templates/js/spec/[PROJECT.FILENAME]_spec.coffee.erb +0 -1
  63. data/templates/js/spec/[PROJECT.FILENAME]_spec.sass +0 -0
  64. data/templates/js/spec/index.html.erb +0 -35
  65. data/templates/js/src/[PROJECT.FILENAME].coffee.erb +0 -18
  66. data/templates/js/src/[PROJECT.FILENAME].sass +0 -0
  67. data/templates/js/testem.yml +0 -23
  68. 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
- def self.inherited task_class
5
- task_class.name = caller.first[/[a-z_]+?(?=\.rb)/].to_sym
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
- def initialize project_config
9
- @project_config = project_config
10
- run
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 self.name= name
14
- @name = name
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
- # Return ALL available options
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 project_options
22
- custom_options = New.custom_config
23
- all_options = custom_options.deep_merge(@project_config)
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
- # Groom tasks (prevent tasks from the custom config from polluting the project config)
26
- all_options[:tasks].each_key do |task|
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
- @project_options ||= all_options
72
+ # run the command
73
+ Kernel.system command
31
74
  end
32
75
 
33
- # Return only the options for the given task
34
- #
35
- def options
36
- default_options = self.class::OPTIONS rescue {}
37
- @options ||= default_options.deep_merge(project_options[:tasks][name])
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.1.1
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: 2014-08-02 00:00:00.000000000 Z
11
+ date: 2015-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
14
+ name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '4.0'
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: '4.0'
26
+ version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
- name: colorize
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: rake
42
+ name: listen
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
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: '0'
54
+ version: '2.8'
55
55
  - !ruby/object:Gem::Dependency
56
- name: recursive-open-struct
56
+ name: semantic
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
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: '0'
68
+ version: '1.4'
69
69
  - !ruby/object:Gem::Dependency
70
- name: semantic
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
167
- description: With custom templates and tasks, quickly create a new project and release
168
- it to the world.
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/core.rb
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/template.rb
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.1
213
+ rubygems_version: 2.4.6
260
214
  signing_key:
261
215
  specification_version: 4
262
- summary: A Quick & Custom Project Creation & Release Tool
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: []