jammer 0.0.1 → 0.8.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.
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