new 0.1.1 → 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
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: []