Rakefile in claide-plugins-0.9.0 vs Rakefile in claide-plugins-0.9.1

- old
+ new

@@ -27,10 +27,11 @@ start_time = Time.now sh "bundle exec bacon #{specs('**')}" duration = Time.now - start_time puts "Tests completed in #{duration}s" Rake::Task['rubocop'].invoke + Rake::Task['validate_json'].invoke end def specs(dir) FileList["spec/#{dir}/*_spec.rb"].shuffle.join(' ') end @@ -44,9 +45,41 @@ cli = RuboCop::CLI.new result = cli.run(FileList['{spec,lib}/**/*.rb']) abort('RuboCop failed!') unless result == 0 end + # plugins.json + #----------------------------------------------------------------------------# + + desc 'Validates plugins.json' + task :validate_json do + require 'json' + require 'pathname' + + puts 'Validating plugins.json' + + json_file = Pathname(__FILE__).parent + 'plugins.json' + json = json_file.read + plugins = JSON.load(json) + abort('Invalid JSON in plugins.json') unless plugins + keys = %w(gem name author social_media_url url description) + optional_keys = %w(social_media_url) + errors = plugins['plugins'].reduce([]) do |errors, plugin| + extra_keys = plugin.keys - keys + unless extra_keys.empty? + errors << "plugin `#{plugin['name']}` has extra keys #{extra_keys}" + end + (keys - optional_keys).each do |key| + unless plugin[key] + errors << "plugin `#{plugin['name']}` is missing key `#{key}`" + end + end + errors + end + unless errors.empty? + abort("Invalid plugins.json:\n\n#{errors.join("\n")}") + end + end rescue LoadError $stderr.puts "\033[0;31m" \ '[!] Some Rake tasks haven been disabled because the environment' \ ' couldn’t be loaded. Be sure to run `rake bootstrap` first.' \