Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

hello-appbar is gone, welcome mynu.

  • Loading branch information...
commit f3d0c856dcf274c47c9a4f6c1a2ff8151cb7468a 1 parent bbdc097
@RobertLowe authored
View
2  .gitignore
@@ -0,0 +1,2 @@
+.rvmrc
+pkg/
View
1  .rvmrc
@@ -0,0 +1 @@
+rvm use macruby@mynu
View
1  CHANGES
@@ -0,0 +1 @@
+None yet!
View
3  Gemfile
@@ -0,0 +1,3 @@
+source :rubygems
+
+gemspec
View
17 Gemfile.lock
@@ -0,0 +1,17 @@
+PATH
+ remote: .
+ specs:
+ mynu (0.1.0)
+ bundler (~> 1.0.0)
+ rake
+
+GEM
+ remote: http://rubygems.org/
+ specs:
+ rake (0.9.0)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ mynu!
View
19 LICENSE
@@ -0,0 +1,19 @@
+Copyright (C) 2011 by Robert Lowe <rob[!]iblargz.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
View
5 README
@@ -1,5 +0,0 @@
-Just messing around with MacRuby and Ruby Blocks
-
-macruby hello-appbar.rb
-
-# Copyright (C) 2011 by Robert Lowe <rob[!]iblargz.com> - MIT
View
72 README.md
@@ -0,0 +1,72 @@
+Mynu
+=====
+
+A simple DSL to create a systembar menu with macruby in OSX
+
+
+1. `gem install mynu`
+2. `macruby examples/hello-mynu.rb`
+
+Or if your feeling bohemian:
+
+`macruby examples/queen.rb`
+
+
+ require 'rubygems'
+ require 'mynu'
+
+ mynu = Mynu.new
+
+ mynu.item "Hello World!" do |menu|
+ puts "Inside menu setup!"
+ menu.title = "Good Bye World!"
+ menu.item "Option 1" do |sub_menu|
+ sub_menu.execute do
+ puts "Execution block"
+ sub_menu.title = "Dynamically changed!"
+ end
+ end
+ menu.item "Option 2" do |sub_menu|
+ sub_menu.item "Option 2a" do
+ puts "Option 2a clicked!"
+ end
+ sub_menu.item "Option 2b" do
+ puts "Option 2b clicked!"
+ end
+ sub_menu.execute do
+ puts "Execution block and items"
+ sub_menu.title = "Dynamically changed!"
+ end
+ end
+ capture_menu_item = menu.item "Disabled" do |sub_menu|
+ sub_menu.disabled
+ end
+ menu.item "Enable `Disabled`" do |sub_menu|
+ sub_menu.execute do
+ capture_menu_item.enabled
+ capture_menu_item.execute do
+ capture_menu_item.title = "Disabled (Again)!"
+ capture_menu_item.disabled
+ end
+ end
+ end
+ end
+
+ mynu.item "Simple Item" do
+ puts "Hello World!"
+ end
+
+ mynu.run
+
+
+
+Todo
+=====
+ * Lots
+ * Reloading
+ * Crash Handling
+ * FileMenuItem
+ * Improved API
+ * Simple Dialogs?
+
+# Copyright (C) 2011 by Robert Lowe <rob[!]iblargz.com> - MIT
View
40 Rakefile
@@ -0,0 +1,40 @@
+require 'rake/clean'
+require 'rake/testtask'
+require 'fileutils'
+require 'date'
+
+require 'lib/mynu/version.rb'
+
+# task :default => :test
+# task :spec => :test
+
+# PACKAGING ============================================================
+
+if defined?(Gem)
+ # Load the gemspec using the same limitations as github
+ def spec
+ require 'rubygems' unless defined? Gem::Specification
+ @spec ||= eval(File.read('mynu.gemspec'))
+ end
+
+ def package(ext='')
+ "pkg/mynu-#{spec.version}" + ext
+ end
+
+ desc 'Build packages'
+ task :package => %w[.gem].map {|e| package(e)}
+
+ desc 'Build and install as local gem'
+ task :install => package('.gem') do
+ `gem install #{package('.gem')}`
+ end
+
+ directory 'pkg/'
+ CLOBBER.include('pkg')
+
+ file package('.gem') => %w[pkg/ mynu.gemspec] + spec.files do |f|
+ `gem build mynu.gemspec`
+ mv File.basename(f.name), f.name
+ end
+
+end
View
65 examples/hello-mynu.rb
@@ -0,0 +1,65 @@
+# Copyright (C) 2011 by Robert Lowe <rob[!]iblargz.com>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+require 'rubygems'
+require 'mynu'
+
+mynu = Mynu.new
+
+mynu.item "Hello World!" do |menu|
+ puts "Inside menu setup!"
+ menu.title = "Good Bye World!"
+ menu.item "Option 1" do |sub_menu|
+ sub_menu.execute do
+ puts "Execution block"
+ sub_menu.title = "Dynamically changed!"
+ end
+ end
+ menu.item "Option 2" do |sub_menu|
+ sub_menu.item "Option 2a" do
+ puts "Option 2a clicked!"
+ end
+ sub_menu.item "Option 2b" do
+ puts "Option 2b clicked!"
+ end
+ sub_menu.execute do
+ puts "Execution block and items"
+ sub_menu.title = "Dynamically changed!"
+ end
+ end
+ capture_menu_item = menu.item "Disabled" do |sub_menu|
+ sub_menu.disabled
+ end
+ menu.item "Enable `Disabled`" do |sub_menu|
+ sub_menu.execute do
+ capture_menu_item.enabled
+ capture_menu_item.execute do
+ capture_menu_item.title = "Disabled (Again)!"
+ capture_menu_item.disabled
+ end
+ end
+ end
+end
+
+mynu.item "Simple Item" do
+ puts "Hello World!"
+end
+
+mynu.run
View
148 examples/queen.rb
@@ -0,0 +1,148 @@
+# Copyright (C) 2011 by Robert Lowe <rob[!]iblargz.com>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+require 'rubygems'
+require 'mynu'
+
+mynu = Mynu.new
+
+# context: http://www.reddit.com/r/videos/comments/hny86/reddit_performs_bohemian_rhapsody/
+mynu.item "Is this the real life?" do |menu|
+ menu.item "Is this just fantasy?" do |menu|
+ menu.item "Caught in a landslide" do |menu|
+ menu.item "No escape from reality" do |menu|
+ menu.item "Open your eyes" do |menu|
+ menu.item "Look up to the skies and see" do |menu|
+ menu.item "I'm just a poor boy (poor boy), I need no sympathy" do |menu|
+ menu.item "Because I'm easy come, easy go" do |menu|
+ menu.item "little high, little low" do |menu|
+ menu.item "Anyway the wind blows, doesn't really matter to me, to me" do |menu|
+ menu.item "Mama, just killed a man" do |menu|
+ menu.item "Put a gun against his head" do |menu|
+ menu.item "Pulled my trigger, now he's dead" do |menu|
+ menu.item "Mama, life had just begun" do |menu|
+ menu.item "But now I've gone and thrown it all away" do |menu|
+ menu.item "Mama, ooo" do |menu|
+ menu.item "Didn't mean to make you cry" do |menu|
+ menu.item "If I'm not back again this time tomorrow" do |menu|
+ menu.item "Carry on, carry on, as if nothing really matters" do |menu|
+ menu.item "It's too late, my time has come" do |menu|
+ menu.item "Sends shivers down my spine" do |menu|
+ menu.item "Body's aching all the time" do |menu|
+ menu.item "Goodbye everybody - I've got to go" do |menu|
+ menu.item "Gotta leave you all behind and face the truth" do |menu|
+ menu.item "Mama, ooo - (anyway the wind blows)" do |menu|
+ menu.item "I don't want to die" do |menu|
+ menu.item "I sometimes wish I'd never been born at all" do |menu|
+ menu.item "I see a little silhouetto of a man" do |menu|
+ menu.item "Scaramouche, scaramouche, will you do the fandango?" do |menu|
+ menu.item "Thunderbolts and lightning - very very frightening me" do |menu|
+ menu.item "Galileo, Galileo," do |menu|
+ menu.item "Galileo, Galileo," do |menu|
+ menu.item "Galileo Figaro - magnifico-o-o-o" do |menu|
+ menu.item "I'm just a poor boy nobody loves me" do |menu|
+ menu.item "He's just a poor boy from a poor family" do |menu|
+ menu.item "Spare him his life from this monstrosity" do |menu|
+ menu.item "Easy come easy go - will you let me go" do |menu|
+ menu.item "It's the LAW! No - we will not let you go - let him go" do |menu|
+ menu.item "It's the LAW! We will not let you go - let him go" do |menu|
+ menu.item "It's the LAW! We will not let you go - let me go" do |menu|
+ menu.item "Will not let you go - let me go (never)" do |menu|
+ menu.item "Never let you go - let me go" do |menu|
+ menu.item "Never let me go - ooo" do |menu|
+ menu.item "No, no, no, no, no, no, no" do |menu|
+ menu.item "Oh mama mia, mama mia, mama mia let me go" do |menu|
+ menu.item "Beelzebub has the devil put aside for me" do |menu|
+ menu.item "for me" do |menu|
+ menu.item "for me" do |menu|
+ menu.item "for me" do |menu|
+ menu.item "So you think you can stone me and spit in my eye?" do |menu|
+ menu.item "So you think you can love me and leave me to die?" do |menu|
+ menu.item "Oh baby - can't do this to me baby" do |menu|
+ menu.item "Just gotta get out - just gotta get right outta here" do |menu|
+ menu.item "Ooh yeah, ooh yeah" do |menu|
+ menu.item "Nothing really matters" do |menu|
+ menu.item "Anyone can see" do |menu|
+ menu.item "Nothing really matters, nothing really matters, to me" do |menu|
+ menu.item "Anyway the wind blows..." do |menu|
+ menu.execute do
+ puts "Exit stage left"
+ Process.exit
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+mynu.run
View
123 hello-appbar.rb
@@ -1,123 +0,0 @@
-# Copyright (C) 2011 by Robert Lowe <rob[!]iblargz.com>
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-framework 'AppKit'
-
-class App
- attr_accessor :app # the sharedApplication
- attr_accessor :status_item # the new bar icon
- attr_accessor :menu # menu options
- attr_accessor :items # menu items
- attr_accessor :blocks # ruby blocks
-
-
- # Prepare the application
- def initialize(icon = 'logo.png', menu_title = 'Hacks')
- @app = NSApplication.sharedApplication
-
- @status_item = status_bar.statusItemWithLength(NSVariableStatusItemLength)
- @status_item.setImage NSImage.new.initWithContentsOfFile(icon)
-
- @menu = NSMenu.new
- @menu.initWithTitle menu_title
-
- @items = []
- @blocks ||= {}
- end
-
- def add_ruby_block(title, &block)
- if block_given?
- item = NSMenuItem.new
- item.title = title
- item.action = 'run_ruby_block:'
- item.target = self
- @items << item
-
- @blocks[title] = block
- else
- raise
- end
- end
-
- def run_ruby_block(sender)
- get_ruby_block(sender.title).call(self)
- end
-
- def get_ruby_block(title)
- @blocks[title]
- end
-
- def run
- @status_item.setMenu loadMenu
- @app.run
- end
-
- def quit(sender)
- puts "Quitting :: BlockApp"
- @app.terminate(self)
- end
-
- def blocks
- @blocks
- end
-
-protected
-
- def status_bar
- NSStatusBar.systemStatusBar
- end
-
- def loadMenu
- @items.each do |item|
- @menu.addItem item
- end
-
- quit = NSMenuItem.new
- quit.title = 'Quit'
- quit.action = 'quit:'
- quit.target = self
- @menu.addItem quit
-
- @menu
- end
-
-end
-
-
-application = App.new
-
-application.add_ruby_block "Hello World!" do |app, title|
- title = "Hello World!" if title.nil?
-
- puts "from inside '#{title}'"
-
- alert = NSAlert.new
- alert.messageText = 'MacRuby StatusBar Application'
- alert.informativeText = "Cool, huh?\n#{title}"
- alert.alertStyle = NSInformationalAlertStyle
- alert.addButtonWithTitle("Ohhhhhhhh, Yeah!")
- response = alert.runModal
-end
-
-application.add_ruby_block "Good bye world!" do |app|
- app.get_ruby_block("Hello World!").call(app, "Good bye world!")
-end
-
-application.run
View
69 lib/mynu.rb
@@ -0,0 +1,69 @@
+unless RUBY_ENGINE =~ /macruby/
+ raise NotImplementedError, "Mynu only runs on macruby! ;)"
+end
+
+$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
+
+framework 'AppKit'
+
+class Mynu
+ autoload :Version, 'mynu/version'
+
+ autoload :Menu, 'mynu/menu' # wrapping NSMenu
+ autoload :Dsl, 'mynu/dsl' # dsl modules
+
+ include Dsl::Block
+
+ attr_accessor :app # the sharedApplication
+ attr_accessor :status_item # the new bar icon
+ attr_accessor :menu # menu container
+ attr_accessor :items # root items
+
+ # Prepare the application
+ def initialize(icon = nil, menu_title = 'Mynu')
+ @app = NSApplication.sharedApplication
+
+ icon = File.join(File.dirname(__FILE__), '..', 'lib') + '/mynu/assets/logo.png' if icon.nil?
+
+ @status_item = status_bar.statusItemWithLength(NSVariableStatusItemLength)
+ @status_item.setImage NSImage.new.initWithContentsOfFile(icon)
+
+ @menu = Menu.new
+ @menu.initWithTitle menu_title
+ @menu.setAutoenablesItems false
+
+ @items = []
+ end
+
+ def run
+ @status_item.setMenu loadMenu
+ @app.run
+ end
+
+ def quit(sender)
+ puts "Quitting :: Mynu"
+ @app.terminate(self)
+ end
+
+protected
+
+ def status_bar
+ NSStatusBar.systemStatusBar
+ end
+
+ def loadMenu
+ @items.each do |item|
+ @menu.addItem item
+ end
+
+ quit = Menu::MenuItem.new
+ quit.title = 'Quit'
+ quit.action = 'quit:'
+ quit.target = self
+ @menu.addItem quit
+
+ @menu
+ end
+
+end
+
View
BIN  lib/mynu/assets/logo.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
5 lib/mynu/dsl.rb
@@ -0,0 +1,5 @@
+class Mynu
+ module Dsl
+ autoload :Block, 'mynu/dsl/block'
+ end
+end
View
16 lib/mynu/dsl/block.rb
@@ -0,0 +1,16 @@
+class Mynu
+ module Dsl
+ module Block
+ def item(title, &block)
+ if block_given?
+ item = Menu::BlockMenuItem.new(title, block)
+ @items << item
+ item
+ else
+ raise
+ end
+ end
+ end
+ end
+end
+
View
6 lib/mynu/menu.rb
@@ -0,0 +1,6 @@
+class Mynu
+ class Menu < NSMenu
+ autoload :MenuItem, 'mynu/menu/menu_item'
+ autoload :BlockMenuItem, 'mynu/menu/block_menu_item'
+ end
+end
View
53 lib/mynu/menu/block_menu_item.rb
@@ -0,0 +1,53 @@
+class Mynu
+ module Menu
+ class BlockMenuItem < MenuItem
+ include Dsl::Block
+
+ def execute(&block)
+ self.action = 'call:'
+ self.target = block
+ end
+
+ def initialize(title, block)
+ super # thanks for asking
+
+ self.title = title
+
+ case block.arity
+ when 0
+ # regular item
+ self.action = 'call:'
+ self.target = block
+ when 1
+ block.call(self)
+
+ if @items.length > 0
+ menu = Menu.new
+ menu.setAutoenablesItems false
+
+ self.setSubmenu menu
+
+ @items.each do |item|
+ menu.addItem item
+ end
+ end
+ else
+ raise
+ end
+ end
+
+ def disabled
+ self.setEnabled(false)
+ self.isEnabled
+ end
+
+ def enabled
+ self.setEnabled(true)
+ self.isEnabled
+ end
+
+ end
+
+ end
+end
+
View
12 lib/mynu/menu/menu_item.rb
@@ -0,0 +1,12 @@
+class Mynu
+ module Menu
+ class MenuItem < NSMenuItem
+ attr_accessor :items
+ # def initialize; @items = []; end # replacement
+ define_method(:initialize) do |*params|
+ @items = []
+ end
+ end
+ end
+end
+
View
10 lib/mynu/version.rb
@@ -0,0 +1,10 @@
+class Mynu
+ module Version
+ MAJOR = 0
+ MINOR = 2
+ PATCH = 4
+ BUILD = nil
+
+ STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
+ end
+end
View
BIN  logo.png
Deleted file not rendered
View
56 mynu.gemspec
@@ -0,0 +1,56 @@
+require 'lib/mynu/version'
+
+Gem::Specification.new do |s|
+ s.name = %q{mynu}
+ s.version = "#{Mynu::Version::STRING}"
+
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
+ s.authors = ["Rob Lowe"]
+ s.date = %q{2011-05-29}
+ s.description = %q{A simple DSL to create a systembar menu with macruby in OSX}
+ s.email = %q{rob@iblargz.com}
+ s.extra_rdoc_files = [
+ "LICENSE",
+ "CHANGES",
+ "README.md"
+ ]
+ s.files = [
+ "Gemfile",
+ "Gemfile.lock",
+ "LICENSE",
+ "README.md",
+ "Rakefile",
+ "mynu.gemspec",
+ "lib/mynu.rb",
+ "lib/mynu/assets/logo.png",
+ "lib/mynu/menu.rb",
+ "lib/mynu/menu/menu_item.rb",
+ "lib/mynu/menu/block_menu_item.rb",
+ "lib/mynu/dsl.rb",
+ "lib/mynu/dsl/block.rb",
+ "lib/mynu/version.rb"
+ ]
+ s.homepage = %q{http://github.com/RobertLowe/mynu}
+ s.licenses = ["MIT"]
+ s.require_paths = ["lib"]
+ s.rubygems_version = %q{1.4.2}
+ s.summary = %q{Opinionated tool for creating and managing a system menu in osx}
+
+ if s.respond_to? :specification_version then
+ s.specification_version = 3
+
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
+ s.add_runtime_dependency(%q<rake>, [">= 0"])
+ s.add_runtime_dependency(%q<bundler>, ["~> 1.0.0"])
+ # s.add_development_dependency(%q<shoulda>, [">= 0"])
+ else
+ s.add_dependency(%q<rake>, [">= 0"])
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
+ # s.add_dependency(%q<shoulda>, [">= 0"])
+ end
+ else
+ s.add_dependency(%q<rake>, [">= 0"])
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
+ # s.add_dependency(%q<shoulda>, [">= 0"])
+ end
+end
Please sign in to comment.
Something went wrong with that request. Please try again.