hem 1.0.1.beta6 → 1.1.0

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +32 -45
  3. data/Hemfile +4 -2
  4. data/README.md +4 -0
  5. data/bin/hem +5 -6
  6. data/hem.gemspec +15 -15
  7. data/lib/hem.rb +47 -45
  8. data/lib/hem/asset_applicators/files.rb +1 -1
  9. data/lib/hem/cli.rb +36 -29
  10. data/lib/hem/error_handlers/debug.rb +1 -1
  11. data/lib/hem/error_handlers/friendly.rb +3 -3
  12. data/lib/hem/errors.rb +23 -12
  13. data/lib/hem/help_formatter.rb +12 -3
  14. data/lib/hem/helper/argument_parser.rb +30 -0
  15. data/lib/hem/helper/command.rb +2 -1
  16. data/lib/hem/helper/file_locator.rb +34 -7
  17. data/lib/hem/helper/shell.rb +0 -1
  18. data/lib/hem/helper/vm_command.rb +2 -2
  19. data/lib/hem/lib/host_check/vagrant.rb +2 -3
  20. data/lib/hem/lib/s3/sync.rb +2 -2
  21. data/lib/hem/lib/seed/project.rb +10 -13
  22. data/lib/hem/lib/seed/replacer.rb +9 -31
  23. data/lib/hem/lib/seed/template.rb +21 -0
  24. data/lib/hem/lib/vm/inspector.rb +1 -1
  25. data/lib/hem/patches/deepstruct.rb +4 -0
  26. data/lib/hem/patches/rake.rb +42 -11
  27. data/lib/hem/plugins.rb +129 -0
  28. data/lib/hem/setup.rb +6 -0
  29. data/lib/hem/tasks.rb +15 -0
  30. data/lib/hem/tasks/deps.rb +13 -14
  31. data/lib/hem/tasks/exec.rb +4 -2
  32. data/lib/hem/tasks/magento.rb +13 -275
  33. data/lib/hem/tasks/mysql.rb +16 -0
  34. data/lib/hem/tasks/ops.rb +2 -1
  35. data/lib/hem/tasks/plugin.rb +16 -0
  36. data/lib/hem/tasks/redis.rb +26 -0
  37. data/lib/hem/tasks/seed.rb +4 -2
  38. data/lib/hem/tasks/self.rb +7 -6
  39. data/lib/hem/tasks/tools.rb +1 -1
  40. data/lib/hem/tasks/vm.rb +8 -16
  41. data/lib/hem/util.rb +6 -16
  42. data/lib/hem/version.rb +12 -1
  43. data/lib/hobo/tasks/magento.rb +2 -1
  44. data/spec/hem/cli_spec.rb +1 -0
  45. data/spec/hem/helpers/argument_parser_spec.rb +57 -0
  46. data/spec/hem/lib/seed/project_spec.rb +1 -0
  47. data/spec/hem/lib/seed/replacer_spec.rb +12 -13
  48. data/spec/hem/lib/seed/seed_spec.rb +1 -0
  49. metadata +50 -42
  50. data/lib/hem/lib/github/api.rb +0 -48
  51. data/lib/hem/lib/github/client.rb +0 -52
  52. data/lib/hem/tasks/pr.rb +0 -45
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 464afc8e551b0a00daad552544ab7d939d0fb0f0
4
- data.tar.gz: c36788f90cb8a124df6fd45efb8f2872ef05093d
3
+ metadata.gz: 9f00e9f984cfc0962397a24b9bdf60183723a957
4
+ data.tar.gz: c7d3b06d842443da2b534f83fb751b7b2ae89858
5
5
  SHA512:
6
- metadata.gz: 5126f005b480789a700e71c442aca4f9443ee45bec148abb7bacd2abdb81b3dd6396381384af602127c410cce5aebdc7231932e3dfd5a100db64b86034b12d91
7
- data.tar.gz: ad45a6aba07525e19a4d2c5a6c3de35a0eb3932e826e8d8b8ec5f04d3a87fa04a0b42b3cfd8ba21589300ff96125b72bf84b6639d50e57ac4c1648a4ce29693f
6
+ metadata.gz: 41f8b0a2edda8503154da2fde23b87ee507c0da76f6b5d737b874ae242bb55cccdcb4b66a18ef31138619ae643155a17dea1769c327ed3b4a07b29b115dace99
7
+ data.tar.gz: ad3771fc35f6a0e76495904e1205d6afda03bfb79bfa2acc1d3c1890a53eb0d547da22948683cdd9e39b056647eef3f1057d505b8fa53bada45ab2a2c6fd2539
@@ -1,64 +1,51 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hem (1.0.1.beta6)
5
- aws-sdk (~> 2.0.24)
6
- deepstruct (~> 0.0.5)
7
- highline (~> 1.6.20)
4
+ hem (1.1.0)
5
+ aws-sdk (~> 2.3.8)
6
+ deepstruct (~> 0.0.7)
7
+ highline (~> 1.7.3)
8
+ jmespath (~> 1.1.3)
9
+ json (~> 1.8.1)
8
10
  net-ssh-simple (~> 1.6.3)
9
- octokit (~> 3.0)
10
- pry (~> 0.9.12)
11
- rake (~> 10.1.1)
12
- ruby-progressbar (~> 1.4.1)
13
- semantic (~> 1.3.0)
14
- slop (~> 3.4.7)
11
+ pry (~> 0.10.3)
12
+ rake (~> 11.1.2)
13
+ ruby-progressbar (~> 1.8.1)
14
+ slop (~> 3.6.0)
15
15
  teerb (~> 0.0.1)
16
16
 
17
17
  GEM
18
18
  remote: https://rubygems.org/
19
19
  specs:
20
- addressable (2.3.8)
21
- aws-sdk (2.0.48)
22
- aws-sdk-resources (= 2.0.48)
23
- aws-sdk-core (2.0.48)
24
- builder (~> 3.0)
20
+ aws-sdk (2.3.8)
21
+ aws-sdk-resources (= 2.3.8)
22
+ aws-sdk-core (2.3.8)
25
23
  jmespath (~> 1.0)
26
- multi_json (~> 1.0)
27
- aws-sdk-resources (2.0.48)
28
- aws-sdk-core (= 2.0.48)
29
- blockenspiel (0.4.5)
30
- builder (3.2.2)
31
- coderay (1.1.0)
24
+ aws-sdk-resources (2.3.8)
25
+ aws-sdk-core (= 2.3.8)
26
+ blockenspiel (0.5.0)
27
+ coderay (1.1.1)
32
28
  deepstruct (0.0.7)
33
- faraday (0.9.2)
34
- multipart-post (>= 1.2, < 3)
35
- hashie (3.4.3)
36
- highline (1.6.21)
29
+ hashie (3.4.4)
30
+ highline (1.7.8)
37
31
  jmespath (1.1.3)
32
+ json (1.8.3)
38
33
  method_source (0.8.2)
39
- multi_json (1.11.2)
40
- multipart-post (2.0.0)
41
34
  net-scp (1.2.1)
42
35
  net-ssh (>= 2.6.5)
43
- net-ssh (3.0.1)
44
- net-ssh-simple (1.6.12)
45
- blockenspiel (= 0.4.5)
46
- hashie (= 3.4.3)
36
+ net-ssh (3.1.1)
37
+ net-ssh-simple (1.6.15)
38
+ blockenspiel (= 0.5.0)
39
+ hashie (= 3.4.4)
47
40
  net-scp (= 1.2.1)
48
- net-ssh (= 3.0.1)
49
- octokit (3.8.0)
50
- sawyer (~> 0.6.0, >= 0.5.3)
51
- pry (0.9.12.6)
52
- coderay (~> 1.0)
53
- method_source (~> 0.8)
41
+ net-ssh (= 3.1.1)
42
+ pry (0.10.3)
43
+ coderay (~> 1.1.0)
44
+ method_source (~> 0.8.1)
54
45
  slop (~> 3.4)
55
- rake (10.1.1)
56
- ruby-progressbar (1.4.2)
57
- sawyer (0.6.0)
58
- addressable (~> 2.3.5)
59
- faraday (~> 0.8, < 0.10)
60
- semantic (1.3.1)
61
- slop (3.4.7)
46
+ rake (11.1.2)
47
+ ruby-progressbar (1.8.1)
48
+ slop (3.6.0)
62
49
  teerb (0.0.1)
63
50
 
64
51
  PLATFORMS
@@ -68,4 +55,4 @@ DEPENDENCIES
68
55
  hem!
69
56
 
70
57
  BUNDLED WITH
71
- 1.10.6
58
+ 1.12.4
data/Hemfile CHANGED
@@ -24,7 +24,8 @@ namespace :test do
24
24
  long_desc "long description"
25
25
  option "-o", "--option", "Option description"
26
26
  hidden true
27
- task "metadata", [ :arg ] do
27
+ argument 'arg'
28
+ task "metadata" do
28
29
  Hem.ui.info "metadata"
29
30
  end
30
31
 
@@ -33,7 +34,8 @@ namespace :test do
33
34
  Hem.ui.info task.opts[:testing]
34
35
  end
35
36
 
36
- task 'argument-test', [ :test ] do |task, args|
37
+ argument 'test'
38
+ task 'argument-test' do |task, args|
37
39
  Hem.ui.info args[:test]
38
40
  end
39
41
 
data/README.md CHANGED
@@ -10,6 +10,10 @@ Many more features are planned including assisting with host machine configurati
10
10
 
11
11
  # Installing & using
12
12
 
13
+ * [OSX](https://github.com/inviqa/hem/wiki/Installing-on-OSX)
14
+ * [Linux](https://github.com/inviqa/hem/wiki/Installing-on-Linux)
15
+ * [Windows](https://github.com/inviqa/hem/wiki/Installing-on-Windows)
16
+
13
17
  Full instructions for installing and using hem are available in the [User guide](https://github.com/inviqa/hem/wiki/User-guide). For information on the task DSL, see the [DSL guide](https://github.com/inviqa/hem/wiki/Hemfile-DSL).
14
18
 
15
19
  Please ensure that you run the following command after installing and that it does not raise any issues:
data/bin/hem CHANGED
@@ -1,10 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # Hack to allow testing with Aruba (for now)
4
- $:.push File.expand_path(File.join("..", "..", "lib"), __FILE__)
5
-
6
3
  def init_hem
7
- require 'hem'
4
+ require_relative '../lib/hem/setup'
8
5
 
9
6
  # Default main classes
10
7
  error_handler = Hem::ErrorHandlers::Friendly.new
@@ -12,6 +9,8 @@ def init_hem
12
9
  Hem.logger = Logger.new(STDOUT)
13
10
  Hem.logger.level = Logger::WARN
14
11
 
12
+ Hem.plugins = Hem::Plugins.new(Hem.project_path || Hem.config_path, Hem.project_dsl_file)
13
+
15
14
  # Low level / early arg parsing
16
15
  # Anything that can alter ui / logger / cli should be here
17
16
  # Early termination args should also go here
@@ -49,13 +48,13 @@ def init_hem
49
48
  Hem.cli = Hem::Cli.new(slop: slop)
50
49
  Hem.cli.start
51
50
  rescue Exception => error
52
- exit error_handler.handle(error)
51
+ exit error_handler.handle(Hem.cli, error)
53
52
  end
54
53
  end
55
54
 
56
55
  Gem.configuration.verbose = false
57
56
 
58
- require 'hem/patches/rubygems'
57
+ require_relative '../lib/hem/patches/rubygems'
59
58
 
60
59
  # Suppress Net/SSH/Simple warning on windows
61
60
  $SUPPRESS_32BIT_WARNING=1
@@ -6,9 +6,9 @@ require 'hem/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = "hem"
9
- spec.version = Hem::VERSION.gsub('-', '.')
10
- spec.authors = ["Mike Simons"]
11
- spec.email = ["msimons@inviqa.com"]
9
+ spec.version = Hem::VERSION
10
+ spec.authors = ["Mike Simons", "Andy Thompson"]
11
+ spec.email = ["athompson@inviqa.com"]
12
12
  spec.description = %q{Inviqan toolbelt}
13
13
  spec.summary = %q{Inviqan toolbelt}
14
14
  spec.homepage = ""
@@ -20,28 +20,28 @@ Gem::Specification.new do |spec|
20
20
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_dependency "slop", "~> 3.4.7"
24
- spec.add_dependency "highline", "~> 1.6.20"
25
- spec.add_dependency "rake", "~> 10.1.1"
26
- spec.add_dependency "deepstruct", "~> 0.0.5"
27
- spec.add_dependency "semantic", "~> 1.3.0"
28
- spec.add_dependency "aws-sdk", "~> 2.0.24"
29
- spec.add_dependency "ruby-progressbar", "~> 1.4.1"
30
- spec.add_dependency "teerb", "~> 0.0.1"
23
+ spec.add_dependency "aws-sdk", "~> 2.3.8"
24
+ spec.add_dependency "deepstruct", "~> 0.0.7"
25
+ spec.add_dependency "highline", "~> 1.7.3"
26
+ spec.add_dependency "jmespath", "~> 1.1.3"
27
+ spec.add_dependency "json", "~> 1.8.1"
31
28
  spec.add_dependency "net-ssh-simple", "~> 1.6.3"
32
- spec.add_dependency "pry", "~> 0.9.12"
33
- spec.add_dependency "octokit", "~> 3.0"
29
+ spec.add_dependency "pry", "~> 0.10.3"
30
+ spec.add_dependency "rake", "~> 11.1.2"
31
+ spec.add_dependency "ruby-progressbar", "~> 1.8.1"
32
+ spec.add_dependency "slop", "~> 3.6.0"
33
+ spec.add_dependency "teerb", "~> 0.0.1"
34
34
 
35
35
  # This prevents Bundler.setup from complaining that rubygems did not install dev deps
36
36
  # If you want to run dev deps you need to ensure HEM_ENV=dev is set for bundle install & bundle exec
37
37
  if ENV['HEM_ENV'] == 'dev'
38
38
  spec.add_development_dependency "aruba", "~> 0.5.4"
39
- spec.add_development_dependency "rspec", "~> 2.14.1"
40
39
  spec.add_development_dependency "fakefs", "~> 0.5.0"
41
- spec.add_development_dependency "rr", "~> 1.1.2"
42
40
  spec.add_development_dependency "guard", "~> 2.2.5"
43
41
  spec.add_development_dependency "guard-rspec", "~> 4.2.4"
44
42
  spec.add_development_dependency "guard-cucumber", "~> 1.4.1"
43
+ spec.add_development_dependency "rr", "~> 1.1.2"
44
+ spec.add_development_dependency "rspec", "~> 2.14.1"
45
45
  spec.add_development_dependency "simplecov", "~> 0.7.1"
46
46
  end
47
47
  end
data/lib/hem.rb CHANGED
@@ -3,72 +3,74 @@ require 'slop'
3
3
  require 'rake'
4
4
  require 'deepstruct'
5
5
  require 'logger'
6
+ require 'json'
6
7
 
7
8
  require 'shellwords'
8
9
  require 'fileutils'
9
10
 
10
11
  # DSL enhancements
11
- require 'hem/metadata'
12
- require 'hem/patches/rake'
13
- require 'hem/patches/slop'
14
- require 'hem/patches/deepstruct'
12
+ require_relative 'hem/metadata'
13
+ require_relative 'hem/patches/rake'
14
+ require_relative 'hem/patches/slop'
15
+ require_relative 'hem/patches/deepstruct'
15
16
 
16
17
  # Basics
17
- require 'hem/version'
18
- require 'hem/null'
19
- require 'hem/paths'
20
- require 'hem/errors'
21
- require 'hem/logging'
22
- require 'hem/ui'
23
- require 'hem/util'
24
- require 'hem/help_formatter'
25
- require 'hem/error_handlers/exit_code_map'
26
- require 'hem/error_handlers/debug'
27
- require 'hem/error_handlers/friendly'
28
- require 'hem/config/file'
29
- require 'hem/config'
18
+ require_relative 'hem/version'
19
+ require_relative 'hem/null'
20
+ require_relative 'hem/paths'
21
+ require_relative 'hem/errors'
22
+ require_relative 'hem/logging'
23
+ require_relative 'hem/plugins'
24
+ require_relative 'hem/ui'
25
+ require_relative 'hem/util'
26
+ require_relative 'hem/help_formatter'
27
+ require_relative 'hem/error_handlers/exit_code_map'
28
+ require_relative 'hem/error_handlers/debug'
29
+ require_relative 'hem/error_handlers/friendly'
30
+ require_relative 'hem/config/file'
31
+ require_relative 'hem/config'
30
32
 
31
33
  # Asset sync
32
- require 'hem/lib/s3/sync'
33
- require 'hem/lib/s3/local/file'
34
- require 'hem/lib/s3/local/iohandler'
35
- require 'hem/lib/s3/remote/file'
36
- require 'hem/lib/s3/remote/iohandler'
34
+ require_relative 'hem/lib/s3/sync'
35
+ require_relative 'hem/lib/s3/local/file'
36
+ require_relative 'hem/lib/s3/local/iohandler'
37
+ require_relative 'hem/lib/s3/remote/file'
38
+ require_relative 'hem/lib/s3/remote/iohandler'
37
39
 
38
40
  # Task helpers
39
- require 'hem/helper/command'
40
- require 'hem/helper/shell'
41
- require 'hem/helper/file_locator'
42
- require 'hem/helper/github'
43
- require 'hem/helper/http_download'
44
- require 'hem/helper/vm_command'
41
+ require_relative 'hem/helper/argument_parser'
42
+ require_relative 'hem/helper/command'
43
+ require_relative 'hem/helper/shell'
44
+ require_relative 'hem/helper/file_locator'
45
+ require_relative 'hem/helper/github'
46
+ require_relative 'hem/helper/http_download'
47
+ require_relative 'hem/helper/vm_command'
45
48
 
46
- require 'hem/lib/local/command'
49
+ require_relative 'hem/lib/local/command'
47
50
 
48
- require 'hem/lib/vm/inspector'
49
- require 'hem/lib/vm/command'
51
+ require_relative 'hem/lib/vm/inspector'
52
+ require_relative 'hem/lib/vm/command'
50
53
 
51
54
  # Asset applicators
52
- require 'hem/asset_applicator'
53
- require 'hem/asset_applicators/sqldump'
54
- require 'hem/asset_applicators/files'
55
+ require_relative 'hem/asset_applicator'
56
+ require_relative 'hem/asset_applicators/sqldump'
57
+ require_relative 'hem/asset_applicators/files'
55
58
 
56
59
  # Libs
57
- require 'hem/lib/seed/project'
58
- require 'hem/lib/seed/replacer'
59
- require 'hem/lib/seed/seed'
60
- require 'hem/lib/self_signed_cert_generator'
61
- require 'hem/lib/github/api'
62
- require 'hem/lib/github/client'
60
+ require_relative 'hem/lib/seed/project'
61
+ require_relative 'hem/lib/seed/replacer'
62
+ require_relative 'hem/lib/seed/seed'
63
+ require_relative 'hem/lib/seed/template'
64
+ require_relative 'hem/lib/self_signed_cert_generator'
63
65
 
64
66
  # Host checks
65
- require 'hem/lib/host_check/git'
66
- require 'hem/lib/host_check/vagrant'
67
- require 'hem/lib/host_check/deps'
68
- require 'hem/lib/host_check'
67
+ require_relative 'hem/lib/host_check/git'
68
+ require_relative 'hem/lib/host_check/vagrant'
69
+ require_relative 'hem/lib/host_check/deps'
70
+ require_relative 'hem/lib/host_check'
69
71
 
70
72
  # App
71
- require 'hem/cli'
73
+ require_relative 'hem/cli'
72
74
 
73
75
  # Hobo BC
74
76
  Hobo = Hem
@@ -1,5 +1,5 @@
1
1
  # Built in applicators
2
2
  Hem.asset_applicators.register 'files', /.*\.files\.(tgz|tar\.gz|tar\.bz2)/ do |file, _|
3
3
  Hem.ui.title "Applying file dump (#{file})"
4
- run_command "tar -xvf #{file.shellescape}"
4
+ run "tar -xvf #{file.shellescape}"
5
5
  end
@@ -27,6 +27,7 @@ module Hem
27
27
  @help_formatter = opts[:help] || Hem::HelpFormatter.new(@slop)
28
28
  @help_opts = {}
29
29
  @host_check = opts[:host_check] || Hem::Lib::HostCheck
30
+ @pre_task_namespaces = ['shell-init', 'plugin']
30
31
  end
31
32
 
32
33
  # entry point for application
@@ -36,9 +37,7 @@ module Hem
36
37
  load_builtin_tasks
37
38
  load_hemfiles
38
39
  load_project_config
39
- Hem.chefdk_compat
40
40
 
41
- tasks = structure_tasks Hem::Metadata.metadata.keys
42
41
  define_global_opts @slop
43
42
 
44
43
  begin
@@ -46,21 +45,22 @@ module Hem
46
45
  @slop.parse! args
47
46
  opts = @slop.to_hash
48
47
 
49
- perform_host_checks unless opts[:'skip-host-checks']
50
-
51
48
  @help_opts[:all] = opts[:all]
52
49
 
53
- @slop.add_callback :empty do
54
- show_help
55
- end
56
-
57
50
  # Necessary to make command level help work
58
- args.push "--help" if @slop.help?
51
+ args.push "--help" if @slop.help? || args.empty?
59
52
 
60
- @help_formatter.command_map = define_tasks(tasks, @slop)
53
+ include_pre_tasks
54
+ remaining = @slop.parse! args.dup
55
+ remaining.push "--help" if @slop.help?
61
56
 
62
- remaining = @slop.parse! args
63
- raise Hem::InvalidCommandOrOpt.new remaining.join(" "), self if remaining.size > 0
57
+ if remaining == args
58
+ include_post_tasks opts
59
+
60
+ remaining = @slop.parse! remaining
61
+ end
62
+
63
+ raise Hem::InvalidCommandOrOpt.new remaining.join(" ") if remaining.size > 0
64
64
 
65
65
  show_help if @slop.help?
66
66
  rescue Halt
@@ -80,20 +80,24 @@ module Hem
80
80
 
81
81
  private
82
82
 
83
+ def include_pre_tasks
84
+ tasks = structure_tasks Hem::Metadata.metadata.keys
85
+ pre_tasks = tasks.select { |k,_| @pre_task_namespaces.include? k }
86
+ @help_formatter.command_map = define_tasks(pre_tasks, @slop)
87
+ end
88
+
89
+ def include_post_tasks opts
90
+ load_plugins
91
+ perform_host_checks unless opts[:'skip-host-checks']
92
+
93
+ tasks = structure_tasks Hem::Metadata.metadata.keys
94
+ post_tasks = tasks.reject { |k,_| @pre_task_namespaces.include? k }
95
+
96
+ @help_formatter.command_map.merge! define_tasks(post_tasks, @slop)
97
+ end
98
+
83
99
  def load_builtin_tasks
84
- require 'hem/tasks/assets'
85
- require 'hem/tasks/config'
86
- require 'hem/tasks/deps'
87
- require 'hem/tasks/exec'
88
- require 'hem/tasks/ops'
89
- require 'hem/tasks/pr'
90
- require 'hem/tasks/seed'
91
- require 'hem/tasks/self'
92
- require 'hem/tasks/shell_init'
93
- require 'hem/tasks/system'
94
- require 'hem/tasks/system/completions'
95
- require 'hem/tasks/tools'
96
- require 'hem/tasks/vm'
100
+ require_relative 'tasks'
97
101
  end
98
102
 
99
103
  def load_user_config
@@ -120,6 +124,10 @@ module Hem
120
124
  end
121
125
  end
122
126
 
127
+ def load_plugins
128
+ Hem.plugins.setup unless Hem.plugins.setup?
129
+ end
130
+
123
131
  def perform_host_checks
124
132
  checks = [
125
133
  'vagrant.*',
@@ -207,7 +215,7 @@ module Hem
207
215
 
208
216
  description metadata[:desc]
209
217
  long_description metadata[:long_desc]
210
- arg_list task.arg_names
218
+ arg_list metadata[:arg_list]
211
219
  hidden metadata[:hidden]
212
220
  project_only metadata[:project_only]
213
221
 
@@ -223,9 +231,8 @@ module Hem
223
231
  Dir.chdir Hem.project_path if Hem.in_project?
224
232
  raise ::Hem::ProjectOnlyError.new if opts.project_only && !Hem.in_project?
225
233
  task.opts = opts.to_hash.merge({:_unparsed => hem.slop.unparsed})
226
- raise ::Hem::MissingArgumentsError.new(name, args, hem) if args && task.arg_names.length > args.length
227
- task.invoke *args
228
- args.pop(task.arg_names.size)
234
+
235
+ task.invoke *Helper::convert_args(name, args, metadata[:arg_list])
229
236
  task.opts = nil
230
237
  end
231
238
  end