jammer 0.0.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -0,0 +1,100 @@
1
+ Jammer
2
+ ======
3
+
4
+ Jammer provides a Ruby-based executable for managing Jam packages, 'cause let's be honest: JS is nice, but JS wrapped up with some Ruby is at least twice as nice. Jammer provides the ability to easily create, update, and publish Jam packages with a convenient command line interface. Jammer expects you to manage your source code using Git, so if you aren't, fork away and add other scm support.
5
+
6
+ Dependencies
7
+ ------------
8
+
9
+ * Ruby 1.9+ - http://ruby-lang.org
10
+ * Jam - http://jamjs.org
11
+ * Git - http://git-scm.com
12
+
13
+ Installation
14
+ ------------
15
+
16
+ 0. Install Jam. NPM is recommended. `npm install -g jamjs` will install it globally if you have NPM.
17
+
18
+ 1. `gem install jammer` *You may need to preface this commmand with `sudo` depending on your Ruby installation*
19
+
20
+
21
+ Usage
22
+ -----
23
+
24
+ ### Creating a New Package
25
+
26
+ To create a new jam package:
27
+
28
+ jammer new [package_name]
29
+
30
+ This will prompt you for some basic information about the package (which you can always change later) and then create a new directory with the given name. Inside that directory will be the necessary structure for a basic jam package. The most important file created by this command is the `package.json` file.
31
+
32
+ Running `jammer new test-lib` and providing responses for the following prompts:
33
+
34
+ Package description ('The test-lib package'): This is a description for the test-lib.
35
+ Package homepage (''): http://github.com/crymer11/test-lib
36
+
37
+ would result in a `package.json` file that looks like this:
38
+
39
+ {
40
+ "name": "test-lib",
41
+ "version": "0.0.1",
42
+ "description": "This is a description for the test-lib.",
43
+ "homepage": "http://github.com/crymer11/test-lib",
44
+ "jam": {
45
+ "dependencies": {
46
+ },
47
+ "main": "test-lib.js",
48
+ "include": [
49
+ "test-lib.js",
50
+ "README"
51
+ ]
52
+ },
53
+ "maintainers": [
54
+ {
55
+ "name": "Colin Rymer",
56
+ "email": "colin.rymer@gmail.com"
57
+ }
58
+ ],
59
+ "contributors": [
60
+ {
61
+ "name": "Colin Rymer",
62
+ "email": "colin.rymer@gmail.com"
63
+ }
64
+ ],
65
+ "repositories": [
66
+ {
67
+ "type": "git",
68
+ "url": "http://github.com/crymer11/test-lib.git"
69
+ }
70
+ ],
71
+ "github": "http://github.com/crymer11/test-lib"
72
+ }
73
+
74
+ Note that the github attribute was set based on the detection of a github package homepage. If the homepage is not a github url, then the repositories attribute will be left empty and the github attribute will not be added.
75
+
76
+ ### Publishing a Package
77
+
78
+ To publish the package, run `jammer publish`. This command will exit with an error message if not on the master branch of a repository. If it is on the master branch, it will create a tag for the version number and publish the code to the repository specified in your `.jamrc` file.
79
+
80
+ If the `jammer publish` command is run and the version number has not been updated, either manually or with `jammer bump major`, `jammer bump minor`, or `jammer bump patch`, then the command will exit with an error message specifying the version issue.
81
+
82
+ ### Updating a Package
83
+
84
+ Contributing
85
+ ------------
86
+
87
+ 1. Fork it
88
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
89
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
90
+ 4. Push to the branch (`git push origin my-new-feature`)
91
+ 5. Create new Pull Request
92
+
93
+ Authors
94
+ -------
95
+
96
+ * [Colin Rymer](http://github.com/crymer11)
97
+
98
+ Acknowledgement
99
+ ---------------
100
+ Huge thanks [Primedia](http://primedia.com) for encouraging open source contributions.
data/bin/jammer ADDED
@@ -0,0 +1,149 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'methadone'
5
+ require 'jammer'
6
+ require 'ostruct'
7
+ require 'json'
8
+
9
+ class App
10
+ include Methadone::Main
11
+ include Methadone::CLILogging
12
+
13
+ main do |command, arg|
14
+ if command
15
+ process_command command, arg
16
+ else
17
+ install_jamfile
18
+ end
19
+ end
20
+
21
+ class << self
22
+ VERSION_LEVELS = ['major', 'minor', 'patch']
23
+
24
+ def process_command(command, arg)
25
+ case command.downcase
26
+ when "new"
27
+ create_package arg
28
+ when "install"
29
+ install_jamfile
30
+ when "publish"
31
+ location = arg ? arg : '.'
32
+ publish_package location
33
+ when "bump"
34
+ bump_package arg
35
+ end
36
+ end
37
+
38
+ def create_package(name)
39
+ if name && valid_name(name)
40
+ Jammer.create_package package_info(name)
41
+ else
42
+ exit_now! 64, "Whoops! A package name must be provided for the 'new' command."
43
+ end
44
+ end
45
+
46
+ def publish_package(package_location)
47
+ begin
48
+ if publishable_package(package_location)
49
+ repository = options[:repository] if options[:repository]
50
+ package_json_file = File.join package_location, 'package.json'
51
+ package_info = Jammer::PackageInfo.fromJSON(File.read(package_json_file))
52
+ Jammer.publish_package package_location, package_info, repository
53
+ end
54
+ rescue StandardError => e
55
+ exit_now! 1, e.message
56
+ end
57
+ end
58
+
59
+ def bump_package(version_level)
60
+ if VERSION_LEVELS.include? version_level
61
+ Jammer.bump_package version_level
62
+ else
63
+ exit_now! 1, "A valid version level (#{version_levels.join('|')}) must be provided."
64
+ end
65
+ end
66
+
67
+ def install_jamfile
68
+ Jammer.install_packages
69
+ end
70
+
71
+ def valid_name(name)
72
+ force || check_directory(name)
73
+ end
74
+
75
+ def force
76
+ options[:force]
77
+ end
78
+
79
+ def package_info(name, info = Jammer::PackageInfo, url = '')
80
+ info.new(name, package_description("The #{name} package."), package_url(url))
81
+ end
82
+
83
+ def package_description(default)
84
+ user_response "Package description", default
85
+ end
86
+
87
+ def package_url(default)
88
+ user_response "Package homepage", default
89
+ end
90
+
91
+ def user_response(query, default)
92
+ print "#{query} ('#{default}'):"
93
+ response = STDIN.gets.chomp
94
+ response.empty? ? default : response
95
+ end
96
+
97
+ def check_directory(name)
98
+ if file_exists(name)
99
+ exit_now! 1, "A directory named '#{name}' already exists. Use '--force' to overwrite the existing directory."
100
+ else
101
+ true
102
+ end
103
+ end
104
+
105
+ def file_exists(name)
106
+ File.exists? name
107
+ end
108
+
109
+ def publishable_package(package_location)
110
+ Dir.chdir(package_location) do
111
+ raise(StandardError, 'You must be in a package directory to publish a package.') unless file_exists 'package.json'
112
+
113
+ package = JSON.parse(File.read('package.json'))
114
+
115
+ package['jam']['include'].each do |included|
116
+ raise(StandardError, "#{included} was listed to be included but could not be found") unless file_or_source_exists(included)
117
+ end
118
+
119
+ git = File.exists?(File.join(package_location, '.git'))
120
+ raise(StandardError, "Package must be a git repository to publish") unless git
121
+
122
+ branch = `git rev-parse --abbrev-ref HEAD`
123
+ raise(StandardError, "You must be on the master branch for the package you want to publish.") unless branch == "master"
124
+
125
+ tag = "#{package['name']}-v#{package['version']}"
126
+ raise(StandardError, "#{package['version']} has already been tagged. Please increment the version number.") if `git tag`.match tag
127
+
128
+ return true
129
+ end
130
+ end
131
+
132
+ def file_or_source_exists(name)
133
+ file_exists name.match('js') ? "./src/#{name.sub('js', '')}coffee" : name
134
+ end
135
+ end
136
+
137
+ on "-f", "--force", "Force package creation on specified directory."
138
+ on "-r", "--repository", "Use specified repository for publishing"
139
+
140
+ arg :command, :optional
141
+ arg :arg, :optional
142
+
143
+ version Jammer::VERSION
144
+ description "Jam Package Creator"
145
+
146
+ use_log_level_option
147
+
148
+ go!
149
+ end
@@ -0,0 +1,37 @@
1
+ Feature: My bootstrapped app kinda works
2
+ In order to get going on coding my awesome app
3
+ I want to have aruba and cucumber setup
4
+ So I don't have to do it myself
5
+
6
+ Scenario: App just runs
7
+ When I get help for "jammer"
8
+ Then the exit status should be 0
9
+ And the banner should be present
10
+ And the banner should document that this app takes options
11
+ And the following options should be documented:
12
+ |--version|
13
+
14
+ Scenario: App creates new Jam packages
15
+ When I run `jammer new test` interactively
16
+ And I type "test description"
17
+ And I type "test.url"
18
+ Then the exit status should be 0
19
+ And a directory named "test" should exist
20
+ And the following files should exist:
21
+ | test/package.json |
22
+ | test/test.js |
23
+ | test/README.md |
24
+
25
+ Scenario: App doesn't overwrite directories
26
+ Given a directory named "test"
27
+ When I run `jammer new test`
28
+ Then the exit status should be 1
29
+
30
+ Scenario: App overwrites directories when forced
31
+ Given a directory named "test"
32
+ When I run `jammer --force new test` interactively
33
+ And I type ""
34
+ And I type ""
35
+ Then a directory named "test" should exist
36
+ And the following files should exist:
37
+ | test/package.json |
File without changes
@@ -0,0 +1,17 @@
1
+ require 'aruba/cucumber'
2
+ require 'methadone/cucumber'
3
+
4
+ ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
5
+ LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)),'..','..','lib')
6
+
7
+ Before do
8
+ # Using "announce" causes massive warnings on 1.9.2
9
+ @puts = true
10
+ @original_rubylib = ENV['RUBYLIB']
11
+ ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
12
+ end
13
+
14
+ After do
15
+ ENV['RUBYLIB'] = @original_rubylib
16
+ end
17
+
data/lib/jammer.rb CHANGED
@@ -1,5 +1,42 @@
1
1
  require 'jammer/version'
2
+ require 'jammer/package_info'
3
+ require 'jammer/package_creator'
4
+ require 'jammer/package_installer'
5
+ require 'jammer/package_manager'
6
+ require 'jammer/package_publisher'
2
7
 
3
8
  module Jammer
9
+ class << self
10
+ def create_package(package_info)
11
+ creator.create_package package_info
12
+ end
4
13
 
14
+ def bump_package(version_level)
15
+ puts "TODO: implement version bumping"
16
+ end
17
+
18
+ def publish_package(package_location, package_info, repository = nil)
19
+ publisher.publish_package package_location, package_info, repository
20
+ end
21
+
22
+ def install_packages
23
+ installer.install_packages
24
+ end
25
+
26
+ def creator(default = Jammer::PackageCreator.new)
27
+ @creator ||= default
28
+ end
29
+
30
+ def installer(default = Jammer::PackageInstaller.new)
31
+ @installer ||= default
32
+ end
33
+
34
+ def manager(default = Jammer::PackageManager.new)
35
+ @manager ||= default
36
+ end
37
+
38
+ def publisher(default = Jammer::PackagePublisher.new)
39
+ @publisher ||= default
40
+ end
41
+ end
5
42
  end
@@ -0,0 +1,100 @@
1
+ require 'erb'
2
+ require 'fileutils'
3
+ require 'jammer/user'
4
+
5
+ module Jammer
6
+ class PackageCreator
7
+ attr_reader :package
8
+
9
+ def initialize(file_utils = FileUtils, user = Jammer::User.new)
10
+ @file_utils = file_utils
11
+ @user = user
12
+ end
13
+
14
+ def create_package(package_info)
15
+ @package = package_info
16
+ prepare_directory
17
+ create_files
18
+ end
19
+
20
+ def prepare_directory
21
+ remove_dir(package.name) if File.exists? package.name
22
+ end
23
+
24
+ def remove_dir(name)
25
+ @file_utils.rm_rf name, verbose: false, secure: true
26
+ end
27
+
28
+ def create_files
29
+ create_directory base_destination_dir, base_template_dir
30
+ end
31
+
32
+ def create_directory(destination, template_dir)
33
+ make_dir destination
34
+ write_files destination, template_dir
35
+ end
36
+
37
+ def make_dir(name)
38
+ @file_utils.mkdir_p name
39
+ end
40
+
41
+ def write_files(destination, template_dir)
42
+ templates(template_dir).each do |template|
43
+ template_file = File.join(template_dir, template)
44
+ if File.directory?(template_file)
45
+ dir = file_path(destination, template)
46
+ create_directory(dir, template_file)
47
+ else
48
+ create_file destination, template_file
49
+ end
50
+ end
51
+ end
52
+
53
+ def create_file(destination, template_file)
54
+ file_destination = file_path(destination, file_name(template_file))
55
+ template = ERB.new(File.read(template_file))
56
+ write_file(file_destination, render(template))
57
+ end
58
+
59
+ def render(template)
60
+ template.result(template_binding)
61
+ end
62
+
63
+ def template_binding
64
+ @binding ||= get_binding(@package, @user)
65
+ end
66
+
67
+ def get_binding(package, user)
68
+ Kernel.binding
69
+ end
70
+
71
+ def file_name(file)
72
+ File.basename file, '.erb' #strip ".erb" off template file name
73
+ end
74
+
75
+ def file_path(dir, file_name)
76
+ file_name.sub! 'main', package.name
77
+ File.join dir, file_name
78
+ end
79
+
80
+ def templates(dir)
81
+ Dir.entries(dir).delete_if(&dot_dir)
82
+ end
83
+
84
+ def base_template_dir
85
+ File.join(File.dirname(__FILE__), 'templates')
86
+ end
87
+
88
+ def base_destination_dir
89
+ File.join Dir.pwd, package.name
90
+ end
91
+
92
+ def dot_dir
93
+ ->(dir) { dir == '.' || dir == '..' }
94
+ end
95
+
96
+ def write_file(file_destination, file_contents)
97
+ File.open(file_destination, 'w') { |file| file.write file_contents }
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,26 @@
1
+ module Jammer
2
+ class PackageInfo
3
+ attr_reader :name, :description, :version, :url
4
+
5
+ def initialize(package_name, package_desc, package_url, package_version = nil)
6
+ @name, @description, @version, @url = package_name, package_desc, package_version, package_url
7
+ end
8
+
9
+ def repo_url
10
+ on_github? ? "#{url}.git" : ''
11
+ end
12
+
13
+ def repo_type
14
+ on_github? ? 'git' : ''
15
+ end
16
+
17
+ def on_github?
18
+ url.include? 'github.com'
19
+ end
20
+
21
+ def self.fromJSON(json_string)
22
+ package = JSON.parse json_string
23
+ new(package['name'], package['description'], nil, package['version'])
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ module Jammer
2
+ class PackageInstaller
3
+
4
+ JAM_PACKAGE_REGEX = /jam\s[\'\"](\w+)[\'\"](?:,\s['"](.*)['"])?/
5
+
6
+ def install_packages
7
+ packages.each do |package|
8
+ puts "installing #{package}"
9
+ `jam install #{package.first}#{"@" + package.last if package.last}`
10
+ end
11
+ end
12
+
13
+ def packages
14
+ @packages ||= get_packages
15
+ end
16
+
17
+ def get_packages
18
+ package_file.scan(JAM_PACKAGE_REGEX)
19
+ end
20
+
21
+ def package_file
22
+ @package_file ||= File.read('Jamfile')
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,6 @@
1
+ module Jammer
2
+ class PackageManager
3
+ def bump_package(version_level)
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,20 @@
1
+ require 'json'
2
+
3
+ module Jammer
4
+ class PackagePublisher
5
+
6
+ def publish_package(package_location, package_info, repository = nil)
7
+ tag_name = "#{package_info.name}-v#{package_info.version}"
8
+ tag_message = "#{package_info.name} version #{package_info.version}"
9
+ repository_string = repository ? " --repository #{repository}" : ''
10
+ puts 'Compiling coffeescript...'
11
+ `coffee -c --output #{package_location} #{package_location}/src`
12
+
13
+ puts `jam publish --no-auth #{package_location}#{repository_string}`
14
+ puts "Creating tag: #{tag_name}"
15
+ `git tag -a #{tag_name} -m '#{tag_message}'`
16
+ puts `git push --tags`
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ # <%= package.name %>
2
+
3
+ <%= package.description %>
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "<%= package.name %>",
3
+ "version": "0.0.1",
4
+ "description": "<%= package.description %>",
5
+ "homepage": "<%= package.url %>",
6
+ "jam": {
7
+ "dependencies": {
8
+ },
9
+ "main": "<%= package.name %>.js",
10
+ "include": [
11
+ "<%= package.name %>.js",
12
+ "README.md"
13
+ ]
14
+ },
15
+ "maintainers": [
16
+ {
17
+ "name": "<%= user.name %>",
18
+ "email": "<%= user.email %>"
19
+ }
20
+ ],
21
+ "contributors": [
22
+ {
23
+ "name": "<%= user.name %>",
24
+ "email": "<%= user.email %>"
25
+ }
26
+ ],
27
+ "repositories": [
28
+ {
29
+ "type": "<%= package.repo_type %>",
30
+ "url": "<%= package.repo_url %>"
31
+ }
32
+ ]
33
+ <% if package.on_github? %>
34
+ , <%# JSON needs the comma for additional key/value pairs %>
35
+ "github": "<%= package.repo_url %>"
36
+ <% end %>
37
+ }
@@ -0,0 +1 @@
1
+ define [], () ->
@@ -0,0 +1,15 @@
1
+ module Jammer
2
+ class User
3
+ def name
4
+ git_user_attribute 'name'
5
+ end
6
+
7
+ def email
8
+ git_user_attribute 'email'
9
+ end
10
+
11
+ def git_user_attribute(attribute)
12
+ `git config --get user.#{attribute}`.strip
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module Jammer
2
- VERSION = '0.0.1'
2
+ VERSION = '0.8.0'
3
3
  end
@@ -0,0 +1,12 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+ require 'rspec'
7
+ require 'jammer'
8
+
9
+ # Requires supporting files with custom matchers and macros, etc,
10
+ # in ./support/ and its subdirectories.
11
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
12
+
metadata CHANGED
@@ -2,46 +2,30 @@
2
2
  name: jammer
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.8.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Colin Rymer
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-02 00:00:00.000000000 Z
12
+ date: 2013-02-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  version_requirements: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- none: false
21
- name: rake
22
- type: :development
23
- prerelease: false
24
- requirement: !ruby/object:Gem::Requirement
25
- requirements:
26
- - - ! '>='
27
- - !ruby/object:Gem::Version
28
- version: '0'
29
- none: false
30
- - !ruby/object:Gem::Dependency
31
- version_requirements: !ruby/object:Gem::Requirement
32
- requirements:
33
- - - ! '>='
17
+ - - ~>
34
18
  - !ruby/object:Gem::Version
35
- version: '0'
19
+ version: 1.2.4
36
20
  none: false
37
- name: rspec
38
- type: :development
21
+ name: methadone
22
+ type: :runtime
39
23
  prerelease: false
40
24
  requirement: !ruby/object:Gem::Requirement
41
25
  requirements:
42
- - - ! '>='
26
+ - - ~>
43
27
  - !ruby/object:Gem::Version
44
- version: '0'
28
+ version: 1.2.4
45
29
  none: false
46
30
  - !ruby/object:Gem::Dependency
47
31
  version_requirements: !ruby/object:Gem::Requirement
@@ -50,7 +34,7 @@ dependencies:
50
34
  - !ruby/object:Gem::Version
51
35
  version: '0'
52
36
  none: false
53
- name: cucumber
37
+ name: rdoc
54
38
  type: :development
55
39
  prerelease: false
56
40
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +50,7 @@ dependencies:
66
50
  - !ruby/object:Gem::Version
67
51
  version: '0'
68
52
  none: false
69
- name: aruba
53
+ name: rake
70
54
  type: :development
71
55
  prerelease: false
72
56
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +66,7 @@ dependencies:
82
66
  - !ruby/object:Gem::Version
83
67
  version: '0'
84
68
  none: false
85
- name: guard-rspec
69
+ name: rspec
86
70
  type: :development
87
71
  prerelease: false
88
72
  requirement: !ruby/object:Gem::Requirement
@@ -98,7 +82,7 @@ dependencies:
98
82
  - !ruby/object:Gem::Version
99
83
  version: '0'
100
84
  none: false
101
- name: guard-cucumber
85
+ name: cucumber
102
86
  type: :development
103
87
  prerelease: false
104
88
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +98,7 @@ dependencies:
114
98
  - !ruby/object:Gem::Version
115
99
  version: '0'
116
100
  none: false
117
- name: rb-fsevent
101
+ name: aruba
118
102
  type: :development
119
103
  prerelease: false
120
104
  requirement: !ruby/object:Gem::Requirement
@@ -130,7 +114,7 @@ dependencies:
130
114
  - !ruby/object:Gem::Version
131
115
  version: '0'
132
116
  none: false
133
- name: rb-inotify
117
+ name: simplecov
134
118
  type: :development
135
119
  prerelease: false
136
120
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +126,29 @@ dependencies:
142
126
  description: Create, publish, and maintain jam packages.
143
127
  email:
144
128
  - colin.rymer@gmail.com
145
- executables: []
129
+ executables:
130
+ - jammer
146
131
  extensions: []
147
132
  extra_rdoc_files: []
148
133
  files:
134
+ - bin/jammer
135
+ - lib/jammer/package_creator.rb
136
+ - lib/jammer/package_info.rb
137
+ - lib/jammer/package_installer.rb
138
+ - lib/jammer/package_manager.rb
139
+ - lib/jammer/package_publisher.rb
140
+ - lib/jammer/templates/package.json.erb
141
+ - lib/jammer/templates/README.md.erb
142
+ - lib/jammer/templates/src/main.coffee.erb
143
+ - lib/jammer/user.rb
149
144
  - lib/jammer/version.rb
150
145
  - lib/jammer.rb
151
- - README.md
146
+ - features/jammer.feature
147
+ - features/step_definitions/jammer_steps.rb
148
+ - features/support/env.rb
149
+ - spec/spec_helper.rb
152
150
  - LICENSE
151
+ - README.md
153
152
  homepage: http://github.com/primedia/jammer
154
153
  licenses:
155
154
  - MIT
@@ -169,10 +168,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
168
  - !ruby/object:Gem::Version
170
169
  version: '0'
171
170
  none: false
172
- requirements: []
171
+ requirements:
172
+ - Jam, the JS package manager available via NPM
173
173
  rubyforge_project:
174
174
  rubygems_version: 1.8.23
175
175
  signing_key:
176
176
  specification_version: 3
177
177
  summary: Create, publish, and maintain jam packages.
178
- test_files: []
178
+ test_files:
179
+ - features/jammer.feature
180
+ - features/step_definitions/jammer_steps.rb
181
+ - features/support/env.rb
182
+ - spec/spec_helper.rb