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
@@ -1,59 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe New::Template do
4
- subject(:template){ New::Template.new type, 'new_template' }
5
- let(:type){ :foo_template }
6
-
7
- before do
8
- allow_any_instance_of(New::Template).to receive :interpolate
9
- end
10
-
11
- after do
12
- allow_any_instance_of(New::Template).to receive :interpolate
13
- end
14
-
15
- describe '#template_dir' do
16
- context 'with a default template' do
17
- let(:type){ :foo_template }
18
-
19
- it 'should return the default template path' do
20
- expect(template.send(:template_dir)).to eq File.join(New::DEFAULT_DIR, New::TEMPLATES_DIR_NAME, type.to_s)
21
- end
22
- end
23
-
24
- context 'with a custom template' do
25
- let(:type){ :custom_bar_template }
26
-
27
- it 'should return the custom template path' do
28
- expect(template.send(:template_dir)).to eq File.join(New::CUSTOM_DIR, New::TEMPLATES_DIR_NAME, type.to_s)
29
- end
30
-
31
- it 'should set the custom flag' do
32
- expect(template.instance_variable_get('@custom')).to eq true
33
- end
34
- end
35
- end
36
-
37
- describe '#options' do
38
- before do
39
- stub_const('New::Template::CUSTOM_CONFIG_TEMPLATE', { default: true })
40
- end
41
-
42
- it 'should build complete options' do
43
- options = template.send(:options)
44
-
45
- # check default template options
46
- expect(options[:default]).to eq true
47
-
48
- # check template options
49
- expect(options[:template]).to eq true
50
-
51
- # check custom config options
52
- expect(options[:custom]).to eq true
53
-
54
- # check project specific options
55
- expect(options[:type]).to eq('foo_template')
56
- expect(options[:project][:name]).to eq('new_template')
57
- end
58
- end
59
- end
@@ -1,26 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class VersionSpec
4
- include New::Version
5
- end
6
-
7
- describe New::Version do
8
- let(:version){ VersionSpec.new }
9
-
10
- describe '#bump_version' do
11
- it 'should bump the major version' do
12
- version.bump_version('1.2.3', :major)
13
- expect(version.version.to_s).to eq '2.0.0'
14
- end
15
-
16
- it 'should bump the minor version' do
17
- version.bump_version('1.2.3', :minor)
18
- expect(version.version.to_s).to eq '1.3.0'
19
- end
20
-
21
- it 'should bump the patch version' do
22
- version.bump_version('1.2.3', :patch)
23
- expect(version.version.to_s).to eq '1.2.4'
24
- end
25
- end
26
- end
data/spec/lib/new_spec.rb DELETED
@@ -1,19 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe New do
4
- it 'should return a version' do
5
- expect(New::VERSION).to match /[0-9]+.[0-9]+.[0-9]+/
6
- end
7
-
8
- it 'should return an array of available tasks' do
9
- expect(New.tasks).to match_array [:foo_task, :custom_bar_task]
10
- expect(New.default_tasks).to match_array [:foo_task, :custom_bar_task]
11
- expect(New.custom_tasks).to match_array [:custom_bar_task]
12
- end
13
-
14
- it 'should return an array of available templates' do
15
- expect(New.templates).to match_array [:foo_template, :custom_bar_template]
16
- expect(New.default_templates).to match_array [:foo_template, :custom_bar_template]
17
- expect(New.custom_templates).to match_array [:custom_bar_template]
18
- end
19
- end
data/spec/spec_helper.rb DELETED
@@ -1,46 +0,0 @@
1
- $: << File.expand_path('../../lib', __FILE__)
2
- $: << File.expand_path('../../tasks', __FILE__)
3
- $: << File.expand_path('../fixtures', __FILE__)
4
- require 'new'
5
- $: << File.expand_path('tasks', New::CUSTOM_DIR)
6
-
7
- # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
8
- RSpec.configure do |config|
9
- config.run_all_when_everything_filtered = true
10
- config.filter_run :focus
11
- config.order = :random
12
-
13
- config.before do
14
- allow(New).to receive :say
15
- stub_const 'New::DEFAULT_DIR', root('spec', 'fixtures')
16
- stub_const 'New::CUSTOM_DIR', root('spec', 'fixtures', 'custom')
17
- end
18
-
19
- config.before :each do
20
- # Force specs to always lookup new templates and tasks
21
- New.instance_variables.each{ |v| New.instance_variable_set(v, nil) }
22
- end
23
- end
24
-
25
- def root *paths
26
- paths.unshift(File.expand_path('../../', __FILE__)).compact.join '/'
27
- end
28
-
29
- def require_task task
30
- require "#{task}/#{task}"
31
- end
32
-
33
- def new_task task, options = {}
34
- task_class = "New::Task::#{task.to_s.classify}".constantize
35
-
36
- allow_any_instance_of(task_class).to receive(:get_part).and_return(:patch)
37
- allow_any_instance_of(task_class).to receive(:run)
38
-
39
- task_hash = {}
40
- task_hash[task] = {}
41
- task_options = {
42
- tasks: task_hash
43
- }.merge(options)
44
-
45
- task_class.new task_options
46
- end
@@ -1,4 +0,0 @@
1
- # coding: utf-8
2
- Gem::Specification.new do |s|
3
- <%= gemspec_string %>
4
- end
data/tasks/gem/README.md DELETED
@@ -1,36 +0,0 @@
1
- # GEM TASK
2
-
3
- ###### gemspec attributes
4
-
5
- You can add any of the supported gemspec attributes to your project's `.new` configuration file.
6
-
7
- ```yaml
8
- tasks:
9
- gem:
10
- summary: My gem summary
11
- test_files: <%= Dir.glob('spec/*.rb') %> # use erb rules for inline ruby
12
- ```
13
-
14
- A full list can be found here http://guides.rubygems.org/specification-reference
15
-
16
- The following attributes expect arrays of unix glob patterns
17
-
18
- * files
19
- * test_files
20
- * extra_rdoc_files
21
-
22
- ```yaml
23
- tasks:
24
- gem:
25
- gemspec:
26
- files:
27
- - 'lib/**/*.rb'
28
- test_files:
29
- - 'spec/**/*.rb'
30
- ```
31
-
32
- The following attributes are automatically set.
33
-
34
- * name
35
- * version
36
- * date
data/tasks/gem/gem.rb DELETED
@@ -1,170 +0,0 @@
1
- require 'bundler'
2
- require 'rake'
3
- require 'yaml'
4
-
5
- class New::Task::Gem < New::Task
6
- include New::Interpolate
7
- include New::Version
8
-
9
- GLOB_ATTRIBUTES = [:files, :test_files, :extra_rdoc_files]
10
- GEMFILE = File.expand_path(File.join(Dir.pwd, 'Gemfile'))
11
- OPTIONS = {
12
- gemspec: {
13
- summary: "A short summary of this gem's description. Displayed in `gem list -d`",
14
- files: ['**/*','**/.*']
15
- }
16
- }
17
-
18
- def run
19
- @gemspec = options[:gemspec]
20
-
21
- set_version
22
- validate_files
23
- render_gemspec_options
24
- write_gemspec
25
- write_config
26
- deploy
27
-
28
- New.say "Version #{project_options[:version].green} of the #{project_options[:project][:name].green} gem successfully published."
29
- end
30
-
31
- private
32
-
33
- def set_version
34
- # bump version
35
- bump_version project_options[:version]
36
-
37
- # set new version to config
38
- project_options[:version] = version.to_s
39
- end
40
-
41
- # Check that any glob pattern attributes match existing files
42
- #
43
- def validate_files
44
- GLOB_ATTRIBUTES.each do |file_attr|
45
- next if @gemspec[file_attr].nil?
46
-
47
- files = []
48
- @gemspec[file_attr].each do |glob|
49
- matching_files = FileList.new(glob).select{ |f| File.file? f }
50
- matching_files.delete '.gemspec'
51
-
52
- if matching_files.empty?
53
- New.say "The pattern `#{glob}` in `tasks.gem.gemspec.#{file_attr}` did not match any files."
54
- New.say 'Please check your configuration file.'
55
- exit
56
- else
57
- files << matching_files
58
- end
59
- end
60
-
61
- @gemspec[file_attr] = files.flatten
62
- end
63
- end
64
-
65
- def render_gemspec_options
66
- array = []
67
-
68
- # set defaults
69
- @gemspec[:date] = Date.today.to_s
70
- @gemspec[:name] = project_options[:project][:name]
71
- @gemspec[:version] = project_options[:version]
72
- @gemspec[:author] ||= project_options[:developer][:name]
73
- @gemspec[:email] ||= project_options[:developer][:email]
74
- @gemspec[:license] ||= project_options[:license]
75
-
76
- # remove singular attributes if plural attribute is specified
77
- if @gemspec[:authors]
78
- @gemspec.delete(:author)
79
- @gemspec[:authors] = @gemspec[:authors]
80
- end
81
- if @gemspec[:licenses]
82
- @gemspec.delete(:license)
83
- @gemspec[:licenses] = @gemspec[:licenses]
84
- end
85
-
86
- @gemspec.sort.each do |k,v|
87
- val = case v
88
- when String then "'#{v}'"
89
- else v
90
- end
91
-
92
- array << " s.#{k} = #{val}"
93
- end
94
-
95
- array += extract_gem_dependencies
96
-
97
- project_options[:gemspec_string] = array.join("\n")
98
- end
99
-
100
- # Extract dependencies based on the Gemfile to be used in the gemspec
101
- #
102
- def extract_gem_dependencies
103
- b = Bundler::Dsl.new
104
- b.eval_gemfile(GEMFILE)
105
-
106
- array = []
107
- runtime = []
108
- development = []
109
-
110
- # loop through the required gems and find default and development gems
111
- b.dependencies.each do |g|
112
- requirements = g.requirements_list.map{ |r| "'#{r}'" }.join(',')
113
- data = {
114
- name: g.name,
115
- requirements: requirements
116
- }
117
-
118
- groups = g.groups
119
- runtime << data if groups.include? :default
120
- development << data if groups.include? :development
121
- end
122
-
123
- # create .gemspec friendly string of requirements
124
- runtime.each do |r|
125
- array << " s.add_runtime_dependency '#{r[:name]}', #{r[:requirements]}"
126
- end
127
- development.each do |r|
128
- array << " s.add_development_dependency '#{r[:name]}', #{r[:requirements]}"
129
- end
130
-
131
- return array
132
- end
133
-
134
- def write_gemspec
135
- New.say 'Updating `.gemspec` file...', type: :success
136
-
137
- # process gemspec
138
- interpolate File.join(File.dirname(__FILE__), '.gemspec.erb'), project_options
139
-
140
- # copy it to the project
141
- FileUtils.cp File.join(@dest_path, '.gemspec'), Dir.pwd
142
-
143
- # cleanup the tmp
144
- FileUtils.rm_rf @dest_path
145
- end
146
-
147
- def write_config
148
- New.say 'Updating `.new` file...', type: :success
149
-
150
- writeable_options = project_options.dup
151
- writeable_options.delete(:gemspec_string)
152
- GLOB_ATTRIBUTES.each{ |a| writeable_options.delete(a) }
153
-
154
- File.open(New::CONFIG_FILE, 'w+') do |f|
155
- f.write writeable_options.deep_stringify_keys.to_yaml
156
- end
157
- end
158
-
159
- def deploy
160
- New.say 'Pushing new gem version to rubygems...', type: :success
161
- New.say ' ...This may take a bit', type: :warn
162
-
163
- `gem update --system`
164
- `gem build .gemspec`
165
- `gem push #{@gemspec[:name]}-#{@gemspec[:version]}.gem`
166
- FileUtils.rm_rf "#{@gemspec[:name]}-#{@gemspec[:version]}.gem"
167
-
168
- New.say "#{@gemspec[:name]}-#{@gemspec[:version]} released".green
169
- end
170
- end
@@ -1,138 +0,0 @@
1
- require 'spec_helper'
2
- require_task :gem
3
-
4
- describe New::Task::Gem do
5
- before do
6
- stub_const 'New::CONFIG_FILE', New::CONFIG_FILE
7
- stub_const 'New::Task::Gem::GLOB_ATTRIBUTES', [:foo_files]
8
- @gem = new_task :gem, { version: '1.2.3' }
9
- @pwd = Dir.pwd
10
- @tmp_dir = Dir.mktmpdir
11
-
12
- Dir.chdir @tmp_dir
13
- end
14
-
15
- after do
16
- Dir.chdir @pwd
17
- end
18
-
19
- describe '#set_version' do
20
- before do
21
- @gem.send(:set_version)
22
- end
23
-
24
- it 'should set the version for project options' do
25
- expect(@gem.project_options[:version]).to eq '1.2.4'
26
- end
27
- end
28
-
29
- describe '#validate_files' do
30
- before do
31
- # temporarily change the current directory to the gem task folder to test for valid files
32
- Dir.chdir File.dirname(__FILE__)
33
-
34
- @gem.instance_variable_set(:@gemspec, { foo_files: ['*.rb', '*.md'] })
35
- @gem.send(:validate_files)
36
- end
37
-
38
- after do
39
- # go back to the original root dir
40
- Dir.chdir @tmp_dir
41
- end
42
-
43
- it 'should replace the file_attr array of globs with an array of files' do
44
- files = @gem.instance_variable_get(:@gemspec)[:foo_files]
45
- expect(files.all?{ |f| files.include? f }).to eq true
46
- end
47
- end
48
-
49
- describe '#render_gemspec_options' do
50
- before do
51
- allow(@gem).to receive(:extract_gem_dependencies).and_return([' s.extract_gem_dependencies'])
52
- @gem.instance_variable_set(:@gemspec, {})
53
- @gem.send(:render_gemspec_options)
54
- end
55
-
56
- after do
57
- allow(@gem).to receive(:extract_gem_dependencies).and_call_original
58
- end
59
-
60
- it 'should create the gemspec_string option' do
61
- gemspec_string = @gem.project_options[:gemspec_string]
62
- expect(gemspec_string).to include "s.author = 'Foo Bar'"
63
- expect(gemspec_string).to include "s.license = 'MIT'"
64
- expect(gemspec_string).to include "s.extract_gem_dependencies"
65
- end
66
-
67
- context 'when plurals are set' do
68
- before do
69
- @gem.instance_variable_set(:@gemspec, {
70
- authors: ['Foo Author'],
71
- licenses: ['Foo License'],
72
- })
73
- @gem.send(:render_gemspec_options)
74
- end
75
-
76
- it 'should replace the singulars' do
77
- expect(@gem.project_options[:gemspec_string]).to include 's.authors = ["Foo Author"]'
78
- expect(@gem.project_options[:gemspec_string]).to_not include 's.author = '
79
- expect(@gem.project_options[:gemspec_string]).to include 's.licenses = ["Foo License"]'
80
- expect(@gem.project_options[:gemspec_string]).to_not include 's.license = '
81
- end
82
- end
83
- end
84
-
85
- describe '#extract_gem_dependencies' do
86
- before do
87
- stub_const 'New::Task::Gem::GEMFILE', root('spec', 'fixtures', 'tasks', 'foo_task', 'Gemfile')
88
- end
89
-
90
- it 'should set dependencies' do
91
- gem_dependencies = @gem.send(:extract_gem_dependencies)
92
- expect(gem_dependencies).to include " s.add_runtime_dependency 'foo', '~> 1.2.3'"
93
- expect(gem_dependencies).to include " s.add_development_dependency 'bar', '>= 0'"
94
- end
95
- end
96
-
97
- describe '#write_gemspec' do
98
- before do
99
- allow(@gem).to receive(:project_options).and_return({ gemspec_string: 'foo' })
100
- @gem.send(:write_gemspec)
101
- end
102
-
103
- after do
104
- allow(@gem).to receive(:project_options).and_call_original
105
- end
106
-
107
- it 'should write a gemspec file' do
108
- expect(File.exist?('.gemspec')).to eq true
109
- end
110
-
111
- it 'should be a valid gemspec file' do
112
- gemspec = File.read('.gemspec')
113
- expect(gemspec).to include 'Gem::Specification.new'
114
- expect(gemspec).to include 'foo'
115
- end
116
- end
117
-
118
- describe '#write_config' do
119
- before do
120
- allow(@gem).to receive(:project_options).and_return({
121
- gemspec_string: 'foo',
122
- foo_files: 'foo',
123
- bar: 'bar'
124
- })
125
- @gem.send(:write_config)
126
- end
127
-
128
- after do
129
- allow(@gem).to receive(:project_options).and_call_original
130
- end
131
-
132
- it 'should update the config file' do
133
- config = File.read(New::CONFIG_FILE)
134
- expect(config).to_not include 'foo'
135
- expect(config).to include 'bar: bar'
136
- end
137
- end
138
- end