maccman-bowline 0.3.1 → 0.3.3
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.txt +25 -19
- data/VERSION +1 -1
- data/bowline.gemspec +18 -3
- data/examples/twitter.html +8 -10
- data/lib/bowline.rb +1 -1
- data/lib/bowline/dependencies/FAQ.markdown +6 -0
- data/lib/bowline/dependencies/MIT-LICENSE +20 -0
- data/lib/bowline/dependencies/README.markdown +51 -0
- data/lib/bowline/dependencies/Rakefile +10 -0
- data/lib/bowline/dependencies/TODO.markdown +4 -0
- data/lib/bowline/dependencies/init.rb +41 -0
- data/lib/bowline/dependencies/lib/dependencies.rb +9 -0
- data/lib/bowline/dependencies/lib/dependencies/dependency.rb +12 -0
- data/lib/bowline/dependencies/lib/dependencies/reader.rb +30 -0
- data/lib/bowline/dependencies/lib/dependencies/repository.rb +64 -0
- data/lib/bowline/dependencies/lib/ext/common.rb +68 -0
- data/lib/bowline/dependencies/lib/ext/rubygems.rb +125 -0
- data/lib/bowline/dependencies/lib/template/app_script.rb +31 -0
- data/lib/bowline/dependencies/spec/spec.opts +4 -0
- data/lib/bowline/dependencies/tasks/dependencies.rake +164 -0
- data/lib/bowline/initializer.rb +34 -31
- data/lib/bowline/tasks/app.rake +30 -7
- data/lib/bowline/tasks/gems.rake +34 -0
- data/lib/bowline/version.rb +1 -1
- data/templates/config/boot.rb +3 -2
- data/templates/config/environment.rb +2 -2
- data/templates/public/index.html +5 -4
- metadata +18 -3
- data/lib/bowline/gem_dependency.rb +0 -42
data/README.txt
CHANGED
@@ -22,8 +22,8 @@ http://twitter.com/maccman
|
|
22
22
|
|
23
23
|
= Usage - Building a basic Twitter client
|
24
24
|
|
25
|
-
|
26
|
-
http://
|
25
|
+
Install the Titanium SDK:
|
26
|
+
http://www.appcelerator.com/products/download-titanium/download/
|
27
27
|
|
28
28
|
Install the gem:
|
29
29
|
>> sudo gem install maccman-bowline --source http://gems.github.com
|
@@ -95,27 +95,33 @@ Usage for a collection (of users):
|
|
95
95
|
|
96
96
|
<html>
|
97
97
|
<head>
|
98
|
-
<script src="jquery.js"
|
99
|
-
<script src="chain.js"
|
100
|
-
|
98
|
+
<script src="javascripts/jquery.js" type="text/javascript"></script>
|
99
|
+
<script src="javascripts/jquery.chain.js" type="text/javascript"></script>
|
100
|
+
<script src="javascripts/jquery.bowline.js" type="text/javascript"></script>
|
101
|
+
<script src="javascripts/application.js" type="text/javascript"></script>
|
101
102
|
<script type="text/javascript" charset="utf-8">
|
102
103
|
jQuery(function($){
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
104
|
+
$.bowline.ready(function(){
|
105
|
+
// Bind the element users to UserBinder
|
106
|
+
var users = $('#users').bowline('users', function(){
|
107
|
+
var self = $(this);
|
108
|
+
self.find('.destroy').click(function(){
|
109
|
+
self.invoke('destroy');
|
110
|
+
return false;
|
111
|
+
})
|
112
|
+
});
|
111
113
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
114
|
+
$('#showAdmins').click(function(){
|
115
|
+
users.invoke('admins');
|
116
|
+
return false;
|
117
|
+
});
|
116
118
|
|
117
|
-
|
118
|
-
|
119
|
+
// Populate with all the users
|
120
|
+
users.invoke('index');
|
121
|
+
|
122
|
+
// Invoke a helper
|
123
|
+
var time = $.bowline.helper('current_time');
|
124
|
+
});
|
119
125
|
});
|
120
126
|
</script>
|
121
127
|
</head>
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.3
|
data/bowline.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{bowline}
|
5
|
-
s.version = "0.3.
|
5
|
+
s.version = "0.3.3"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Alex MacCaw"]
|
9
|
-
s.date = %q{2009-07-
|
9
|
+
s.date = %q{2009-07-13}
|
10
10
|
s.default_executable = %q{bowline-gen}
|
11
11
|
s.description = %q{Ruby/JS GUI framework}
|
12
12
|
s.email = %q{alex@leadthinking.com}
|
@@ -38,11 +38,25 @@ Gem::Specification.new do |s|
|
|
38
38
|
"lib/bowline/commands/console.rb",
|
39
39
|
"lib/bowline/commands/generate.rb",
|
40
40
|
"lib/bowline/commands/run.rb",
|
41
|
+
"lib/bowline/dependencies/FAQ.markdown",
|
42
|
+
"lib/bowline/dependencies/MIT-LICENSE",
|
43
|
+
"lib/bowline/dependencies/README.markdown",
|
44
|
+
"lib/bowline/dependencies/Rakefile",
|
45
|
+
"lib/bowline/dependencies/TODO.markdown",
|
46
|
+
"lib/bowline/dependencies/init.rb",
|
47
|
+
"lib/bowline/dependencies/lib/dependencies.rb",
|
48
|
+
"lib/bowline/dependencies/lib/dependencies/dependency.rb",
|
49
|
+
"lib/bowline/dependencies/lib/dependencies/reader.rb",
|
50
|
+
"lib/bowline/dependencies/lib/dependencies/repository.rb",
|
51
|
+
"lib/bowline/dependencies/lib/ext/common.rb",
|
52
|
+
"lib/bowline/dependencies/lib/ext/rubygems.rb",
|
53
|
+
"lib/bowline/dependencies/lib/template/app_script.rb",
|
54
|
+
"lib/bowline/dependencies/spec/spec.opts",
|
55
|
+
"lib/bowline/dependencies/tasks/dependencies.rake",
|
41
56
|
"lib/bowline/ext/array.rb",
|
42
57
|
"lib/bowline/ext/class.rb",
|
43
58
|
"lib/bowline/ext/object.rb",
|
44
59
|
"lib/bowline/ext/string.rb",
|
45
|
-
"lib/bowline/gem_dependency.rb",
|
46
60
|
"lib/bowline/generators.rb",
|
47
61
|
"lib/bowline/generators/application.rb",
|
48
62
|
"lib/bowline/generators/binder.rb",
|
@@ -56,6 +70,7 @@ Gem::Specification.new do |s|
|
|
56
70
|
"lib/bowline/tasks/app.rake",
|
57
71
|
"lib/bowline/tasks/bowline.rb",
|
58
72
|
"lib/bowline/tasks/database.rake",
|
73
|
+
"lib/bowline/tasks/gems.rake",
|
59
74
|
"lib/bowline/tasks/log.rake",
|
60
75
|
"lib/bowline/tasks/misc.rake",
|
61
76
|
"lib/bowline/version.rb",
|
data/examples/twitter.html
CHANGED
@@ -5,24 +5,22 @@
|
|
5
5
|
<head>
|
6
6
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
7
7
|
<title>Twitter</title>
|
8
|
-
<!--
|
9
|
-
<script src="http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js" type="text/javascript"></script>
|
10
|
-
-->
|
11
8
|
<script src="javascripts/jquery.js" type="text/javascript" charset="utf-8"></script>
|
12
9
|
<script src="javascripts/jquery.chain.js" type="text/javascript" charset="utf-8"></script>
|
13
10
|
<script src="javascripts/jquery.bowline.js" type="text/javascript" charset="utf-8"></script>
|
14
|
-
<script src="../script/init" type="text/ruby" charset="utf-8"></script>
|
15
11
|
<script src="javascripts/application.js" type="text/javascript" charset="utf-8"></script>
|
16
12
|
<link rel="stylesheet" href="stylesheets/application.css" type="text/css" charset="utf-8">
|
17
13
|
<script type="text/javascript" charset="utf-8">
|
18
14
|
jQuery(function($){
|
19
|
-
|
20
|
-
|
15
|
+
$.bowline.ready(function(){
|
16
|
+
var tweets = $('#tweets').bowline('tweets');
|
17
|
+
tweets.invoke('index');
|
21
18
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
19
|
+
$('#updateSubmit').click(function(){
|
20
|
+
tweets.invoke('update', $('#updateText').val());
|
21
|
+
return false;
|
22
|
+
});
|
23
|
+
});
|
26
24
|
});
|
27
25
|
</script>
|
28
26
|
</head>
|
data/lib/bowline.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 [name of plugin creator]
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,51 @@
|
|
1
|
+
Dependencies
|
2
|
+
============
|
3
|
+
|
4
|
+
A port of Merb's dependency system to a Rails plugin.
|
5
|
+
|
6
|
+
Usage
|
7
|
+
=====
|
8
|
+
|
9
|
+
1. Install the plugin
|
10
|
+
|
11
|
+
script/plugin install git://github.com/ddollar/dependencies.git
|
12
|
+
|
13
|
+
2. Add the following line to your config/environment.rb
|
14
|
+
|
15
|
+
config.plugins = [:dependencies, :all]
|
16
|
+
|
17
|
+
3. Add the following line to your .gitignore
|
18
|
+
|
19
|
+
gems
|
20
|
+
|
21
|
+
4. Create a config/dependencies.rb file that looks like:
|
22
|
+
|
23
|
+
dependency 'gem'
|
24
|
+
dependency 'gem', '1.0.1'
|
25
|
+
dependency 'gem', :require_as => 'Gem'
|
26
|
+
dependency 'gem', :only => %w(test staging)
|
27
|
+
dependency 'gem', :except => 'production'
|
28
|
+
|
29
|
+
with_options(:only => 'test') do |test|
|
30
|
+
test.dependency 'tester-gem'
|
31
|
+
end
|
32
|
+
|
33
|
+
5. Remove or comment out any config.gem lines from config/environment.rb or config/environments/*.rb
|
34
|
+
|
35
|
+
6. Install the gems into your project and keep them up to date using:
|
36
|
+
|
37
|
+
rake dependencies:sync
|
38
|
+
|
39
|
+
7. Alternatively you can use the following rake task to read your existing config.gem declarations and output a file suitable for this plugin. This task will appropriately handle any gems that you are currently loading on a per-environment basis as well.
|
40
|
+
|
41
|
+
rake dependencies:import
|
42
|
+
|
43
|
+
|
44
|
+
About
|
45
|
+
=====
|
46
|
+
|
47
|
+
Initial idea and Rubygems extension code from [Merb](http://merbivore.com/)
|
48
|
+
|
49
|
+
Rewritten for Rails by [David Dollar](http://daviddollar.org) ([@ddollar](http://twitter.com/ddollar))
|
50
|
+
|
51
|
+
Documentation, testing, ideas by Steven Soroka ([@ssoroka](http://twitter.com/ssoroka))
|
@@ -0,0 +1,41 @@
|
|
1
|
+
unless $block_dependencies_plugin_init
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), 'lib', 'dependencies')
|
4
|
+
|
5
|
+
Gem.clear_paths
|
6
|
+
Gem.path.unshift(File.join(Rails.root, 'gems'))
|
7
|
+
|
8
|
+
deps = ::Dependencies::Reader.read_file(File.join(Rails.root, 'config', 'dependencies.rb'))
|
9
|
+
|
10
|
+
deps.each do |dep|
|
11
|
+
current_environment = ENV['RAILS_ENV'] || 'development'
|
12
|
+
|
13
|
+
options = {
|
14
|
+
:only => [current_environment],
|
15
|
+
:except => [],
|
16
|
+
:require_as => dep.name
|
17
|
+
}.merge(dep.options)
|
18
|
+
|
19
|
+
# swap their :only and :except to an array if they used a not-Array
|
20
|
+
[ :only, :except ].each do |option|
|
21
|
+
options[option] = [options[option].to_s] unless options[option].is_a?(Array)
|
22
|
+
end
|
23
|
+
|
24
|
+
# don't run if require_as is nil or false
|
25
|
+
next if [nil, false].include?(options[:require_as])
|
26
|
+
|
27
|
+
# don't run if the dependency wants an env that is not the current one
|
28
|
+
next unless options[:only].include?(current_environment)
|
29
|
+
|
30
|
+
# don't run if the dependency does not want to load in the current env
|
31
|
+
next if options[:except].include?(current_environment)
|
32
|
+
|
33
|
+
begin
|
34
|
+
require options[:require_as]
|
35
|
+
rescue LoadError => e
|
36
|
+
puts "was unable to require #{dep.name} as '#{options[:require_as]}'
|
37
|
+
Reason: #{e.class.name} error raised with message: #{e.message}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'active_support/core_ext/hash/deep_merge'
|
2
|
+
require 'active_support/option_merger'
|
3
|
+
|
4
|
+
class Dependencies::Reader
|
5
|
+
|
6
|
+
attr_reader :dependencies
|
7
|
+
|
8
|
+
def self.read(definitions)
|
9
|
+
reader = new
|
10
|
+
reader.instance_eval(definitions)
|
11
|
+
reader.dependencies
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.read_file(filename)
|
15
|
+
self.read(File.read(filename))
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@dependencies = []
|
20
|
+
end
|
21
|
+
|
22
|
+
def dependency(name, *options)
|
23
|
+
@dependencies << ::Dependencies::Dependency.new(name, *options)
|
24
|
+
end
|
25
|
+
|
26
|
+
def with_options(options)
|
27
|
+
yield ActiveSupport::OptionMerger.new(self, options)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
class Dependencies::Repository
|
2
|
+
|
3
|
+
def initialize(base)
|
4
|
+
@paths = {
|
5
|
+
:gems => File.join(base),
|
6
|
+
:bin => File.join(base, 'bin'),
|
7
|
+
:specs => File.join(base, 'specifications')
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
def index
|
12
|
+
@index ||= reload_index!
|
13
|
+
end
|
14
|
+
|
15
|
+
def reload_index!
|
16
|
+
@index = ::Gem::SourceIndex.new.load_gems_in(@paths[:specs])
|
17
|
+
end
|
18
|
+
|
19
|
+
def gem(name, versions=[])
|
20
|
+
::Gem::Dependency.new(name, versions)
|
21
|
+
end
|
22
|
+
|
23
|
+
def search(gem)
|
24
|
+
index.search(gem)
|
25
|
+
end
|
26
|
+
|
27
|
+
def install(gem)
|
28
|
+
reload_index!
|
29
|
+
return if index.search(gem).last
|
30
|
+
|
31
|
+
installer = ::Gem::DependencyInstaller.new(
|
32
|
+
:bin_dir => @paths[:bin],
|
33
|
+
:install_dir => @paths[:gems],
|
34
|
+
:user_install => false)
|
35
|
+
|
36
|
+
begin
|
37
|
+
installer.install gem.name, gem.version_requirements
|
38
|
+
rescue ::Gem::GemNotFoundException => e
|
39
|
+
puts "Cannot find #{gem.name} #{gem.version_requirements}"
|
40
|
+
rescue ::Gem::RemoteFetcher::FetchError => e
|
41
|
+
puts "Problem with fetch, retrying..."
|
42
|
+
retry
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def uninstall(name, version)
|
47
|
+
uninstaller = ::Gem::Uninstaller.new(name,
|
48
|
+
:version => version,
|
49
|
+
:bin_dir => @paths[:bin],
|
50
|
+
:install_dir => @paths[:gems],
|
51
|
+
:ignore => true,
|
52
|
+
:executables => true
|
53
|
+
)
|
54
|
+
uninstaller.uninstall
|
55
|
+
end
|
56
|
+
|
57
|
+
def installed
|
58
|
+
Dir[File.join(@paths[:gems], 'gems', '*')].map! { |n| File.basename(n) }
|
59
|
+
end
|
60
|
+
|
61
|
+
def gems
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# This was added via Merb's bundler
|
2
|
+
|
3
|
+
require "rubygems"
|
4
|
+
require "rubygems/source_index"
|
5
|
+
|
6
|
+
module Gem
|
7
|
+
BUNDLED_SPECS = File.join(Dir.pwd, "gems", "specifications")
|
8
|
+
MAIN_INDEX = Gem::SourceIndex.from_gems_in(BUNDLED_SPECS)
|
9
|
+
FALLBACK_INDEX = Gem::SourceIndex.from_installed_gems
|
10
|
+
|
11
|
+
def self.source_index
|
12
|
+
MultiSourceIndex.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.searcher
|
16
|
+
MultiPathSearcher.new
|
17
|
+
end
|
18
|
+
|
19
|
+
class ArbitrarySearcher < GemPathSearcher
|
20
|
+
def initialize(source_index)
|
21
|
+
@source_index = source_index
|
22
|
+
super()
|
23
|
+
end
|
24
|
+
|
25
|
+
def init_gemspecs
|
26
|
+
@source_index.map { |_, spec| spec }.sort { |a,b|
|
27
|
+
(a.name <=> b.name).nonzero? || (b.version <=> a.version)
|
28
|
+
}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class MultiPathSearcher
|
33
|
+
def initialize
|
34
|
+
@main_searcher = ArbitrarySearcher.new(MAIN_INDEX)
|
35
|
+
@fallback_searcher = ArbitrarySearcher.new(FALLBACK_INDEX)
|
36
|
+
end
|
37
|
+
|
38
|
+
def find(path)
|
39
|
+
try = @main_searcher.find(path)
|
40
|
+
return try if try
|
41
|
+
@fallback_searcher.find(path)
|
42
|
+
end
|
43
|
+
|
44
|
+
def find_all(path)
|
45
|
+
try = @main_searcher.find_all(path)
|
46
|
+
return try unless try.empty?
|
47
|
+
@fallback_searcher.find_all(path)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class MultiSourceIndex
|
52
|
+
# Used by merb.thor to confirm; not needed when MSI is in use
|
53
|
+
def load_gems_in(*args)
|
54
|
+
end
|
55
|
+
|
56
|
+
def search(*args)
|
57
|
+
try = MAIN_INDEX.search(*args)
|
58
|
+
return try unless try.empty?
|
59
|
+
FALLBACK_INDEX.search(*args)
|
60
|
+
end
|
61
|
+
|
62
|
+
def find_name(*args)
|
63
|
+
try = MAIN_INDEX.find_name(*args)
|
64
|
+
return try unless try.empty?
|
65
|
+
FALLBACK_INDEX.find_name(*args)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rubygems/dependency_installer'
|
4
|
+
|
5
|
+
Gem.pre_install_hooks.push(proc do |installer|
|
6
|
+
unless File.file?(File.join(installer.bin_dir, "common.rb"))
|
7
|
+
FileUtils.mkdir_p(installer.bin_dir)
|
8
|
+
FileUtils.cp(File.join(File.dirname(__FILE__), "common.rb"),
|
9
|
+
File.join(installer.bin_dir, "common.rb"))
|
10
|
+
end
|
11
|
+
|
12
|
+
name = installer.spec.name
|
13
|
+
|
14
|
+
puts "+ #{name}"
|
15
|
+
|
16
|
+
if $GEMS && versions = ($GEMS.assoc(name) || [])[1]
|
17
|
+
dep = Gem::Dependency.new(name, versions)
|
18
|
+
unless dep.version_requirements.satisfied_by?(installer.spec.version)
|
19
|
+
raise "Cannot install #{installer.spec.full_name} " \
|
20
|
+
"for #{$INSTALLING}; " \
|
21
|
+
"you required #{dep}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end)
|
25
|
+
|
26
|
+
class ::Gem::Uninstaller
|
27
|
+
def self._with_silent_ui
|
28
|
+
|
29
|
+
ui = Gem::DefaultUserInteraction.ui
|
30
|
+
def ui.say(str)
|
31
|
+
puts "- #{str}"
|
32
|
+
end
|
33
|
+
|
34
|
+
yield
|
35
|
+
|
36
|
+
class << Gem::DefaultUserInteraction.ui
|
37
|
+
remove_method :say
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self._uninstall(source_index, name, op, version)
|
42
|
+
unless source_index.find_name(name, "#{op} #{version}").empty?
|
43
|
+
uninstaller = Gem::Uninstaller.new(
|
44
|
+
name,
|
45
|
+
:version => "#{op} #{version}",
|
46
|
+
:install_dir => Dir.pwd / "gems",
|
47
|
+
:all => true,
|
48
|
+
:ignore => true,
|
49
|
+
:executables => true
|
50
|
+
)
|
51
|
+
_with_silent_ui { uninstaller.uninstall }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def self._uninstall_others(source_index, name, version)
|
56
|
+
_uninstall(source_index, name, "<", version)
|
57
|
+
_uninstall(source_index, name, ">", version)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
Gem.post_install_hooks.push(proc do |installer|
|
62
|
+
source_index = installer.instance_variable_get("@source_index")
|
63
|
+
::Gem::Uninstaller._uninstall_others(
|
64
|
+
source_index, installer.spec.name, installer.spec.version
|
65
|
+
)
|
66
|
+
end)
|
67
|
+
|
68
|
+
class ::Gem::DependencyInstaller
|
69
|
+
alias old_fg find_gems_with_sources
|
70
|
+
|
71
|
+
def find_gems_with_sources(dep)
|
72
|
+
if @source_index.any? { |_, installed_spec|
|
73
|
+
installed_spec.satisfies_requirement?(dep)
|
74
|
+
}
|
75
|
+
return []
|
76
|
+
end
|
77
|
+
|
78
|
+
old_fg(dep)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
class ::Gem::SpecFetcher
|
83
|
+
alias old_fetch fetch
|
84
|
+
def fetch(*args) # in rubygems 1.3.2 fetch takes 4 parameters
|
85
|
+
dependency, all, matching_platform, prerelease = *args
|
86
|
+
idx = Gem::SourceIndex.from_installed_gems
|
87
|
+
|
88
|
+
reqs = dependency.version_requirements.requirements
|
89
|
+
|
90
|
+
if reqs.size == 1 && reqs[0][0] == "="
|
91
|
+
dep = idx.search(dependency).sort.last
|
92
|
+
end
|
93
|
+
|
94
|
+
if dep
|
95
|
+
file = dep.loaded_from.dup
|
96
|
+
file.gsub!(/specifications/, "cache")
|
97
|
+
file.gsub!(/gemspec$/, "gem")
|
98
|
+
spec = ::Gem::Format.from_file_by_path(file).spec
|
99
|
+
[[spec, file]]
|
100
|
+
else
|
101
|
+
old_fetch(*args)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
class ::Gem::Installer
|
107
|
+
def app_script_text(bin_file_name)
|
108
|
+
template = File.read(File.join(File.dirname(__FILE__), '..', 'template' , "app_script.rb"))
|
109
|
+
erb = ERB.new(template)
|
110
|
+
erb.result(binding)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
class ::Gem::Specification
|
115
|
+
def recursive_dependencies(from, index = Gem.source_index)
|
116
|
+
specs = self.runtime_dependencies.map do |dep|
|
117
|
+
spec = index.search(dep).last
|
118
|
+
unless spec
|
119
|
+
raise "Needed #{dep} for #{from}, but could not find it"
|
120
|
+
end
|
121
|
+
spec
|
122
|
+
end
|
123
|
+
specs + specs.map {|s| s.recursive_dependencies(self, index)}.flatten.uniq
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# This was added by Merb's bundler
|
4
|
+
|
5
|
+
require "rubygems"
|
6
|
+
require File.join(File.dirname(__FILE__), "common")
|
7
|
+
|
8
|
+
gems_dir = File.join(File.dirname(__FILE__), '..', 'gems')
|
9
|
+
|
10
|
+
if File.directory?(gems_dir)
|
11
|
+
$BUNDLE = true
|
12
|
+
Gem.clear_paths
|
13
|
+
Gem.path.replace([File.expand_path(gems_dir)])
|
14
|
+
ENV["PATH"] = "#{File.dirname(__FILE__)}:#{ENV["PATH"]}"
|
15
|
+
|
16
|
+
gem_file = File.join(gems_dir, "specifications", "<%= spec.name %>-*.gemspec")
|
17
|
+
|
18
|
+
if local_gem = Dir[gem_file].last
|
19
|
+
version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
version ||= "<%= Gem::Requirement.default %>"
|
24
|
+
|
25
|
+
if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
|
26
|
+
version = $1
|
27
|
+
ARGV.shift
|
28
|
+
end
|
29
|
+
|
30
|
+
gem '<%= @spec.name %>', version
|
31
|
+
load '<%= bin_file_name %>'
|
@@ -0,0 +1,164 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "rubygems/source_index"
|
3
|
+
require "rubygems/dependency_installer"
|
4
|
+
require "rubygems/uninstaller"
|
5
|
+
require "fileutils"
|
6
|
+
|
7
|
+
# there has got to be a better way to do this
|
8
|
+
unless ARGV.first == 'dependencies:import'
|
9
|
+
Gem.clear_paths
|
10
|
+
Gem.path.unshift(File.join(RAILS_ROOT, 'gems'))
|
11
|
+
end
|
12
|
+
|
13
|
+
namespace :dependencies do
|
14
|
+
|
15
|
+
task :setup do
|
16
|
+
# avoid requiring environment by working up from vendor/plugins/dependencies/tasks
|
17
|
+
rails_root = File.expand_path(File.join(File.dirname(__FILE__), %w(.. .. .. ..)))
|
18
|
+
|
19
|
+
# Dependencies isn't loaded when running from rake. This is a good place to load it.
|
20
|
+
require File.expand_path(File.join(File.dirname(__FILE__), %w(.. lib dependencies))) unless defined?(Dependencies)
|
21
|
+
|
22
|
+
SETTINGS = {
|
23
|
+
:dependencies_file => File.join(rails_root, 'config', 'dependencies.rb'),
|
24
|
+
:gem_dir => File.join(rails_root, 'gems')
|
25
|
+
}
|
26
|
+
FileUtils.mkdir(SETTINGS[:gem_dir]) unless File.exists?(SETTINGS[:gem_dir])
|
27
|
+
end
|
28
|
+
|
29
|
+
task :load => :setup do
|
30
|
+
SETTINGS[:dependencies] = ::Dependencies::Reader.read_file(SETTINGS[:dependencies_file])
|
31
|
+
end
|
32
|
+
|
33
|
+
namespace :transaction do
|
34
|
+
task :setup do
|
35
|
+
SETTINGS[:gem_original_dir] = SETTINGS[:gem_dir]
|
36
|
+
SETTINGS[:gem_dir] = SETTINGS[:gem_dir] + '.install'
|
37
|
+
end
|
38
|
+
|
39
|
+
task :begin => :setup do
|
40
|
+
FileUtils.rm_rf(SETTINGS[:gem_dir])
|
41
|
+
FileUtils.cp_r(SETTINGS[:gem_original_dir], SETTINGS[:gem_dir])
|
42
|
+
end
|
43
|
+
|
44
|
+
task :commit => :setup do
|
45
|
+
FileUtils.rm_rf(SETTINGS[:gem_original_dir])
|
46
|
+
FileUtils.mv(SETTINGS[:gem_dir], SETTINGS[:gem_original_dir])
|
47
|
+
end
|
48
|
+
|
49
|
+
task :rollback => :setup do
|
50
|
+
FileUtils.rm_rf(SETTINGS[:gem_dir])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
desc 'synchronize the stuff'
|
55
|
+
task :sync => [ :setup, :load ] do
|
56
|
+
Rake::Task['dependencies:transaction:begin'].invoke
|
57
|
+
|
58
|
+
begin
|
59
|
+
repo = Dependencies::Repository.new(SETTINGS[:gem_dir])
|
60
|
+
|
61
|
+
SETTINGS[:dependencies].each do |dep|
|
62
|
+
gem = repo.gem(dep.name, dep.versions)
|
63
|
+
next unless repo.search(gem).empty?
|
64
|
+
repo.install(gem)
|
65
|
+
end
|
66
|
+
|
67
|
+
repo.reload_index!
|
68
|
+
|
69
|
+
full_list = SETTINGS[:dependencies].map do |dep|
|
70
|
+
gem = repo.gem(dep.name, dep.versions)
|
71
|
+
spec = repo.index.search(gem).last
|
72
|
+
unless spec
|
73
|
+
# Rake::Task['dependencies:transaction:rollback'].invoke # gets run on rescue below.
|
74
|
+
raise Exception.new("A required dependency #{gem} was not found")
|
75
|
+
end
|
76
|
+
deps = spec.recursive_dependencies(gem, repo.index)
|
77
|
+
[spec] + deps
|
78
|
+
end.flatten.uniq.map do |spec|
|
79
|
+
"#{spec.name}-#{spec.version}"
|
80
|
+
end
|
81
|
+
|
82
|
+
(repo.installed - full_list).each do |g|
|
83
|
+
/^(.*)\-(.*)$/ =~ g
|
84
|
+
repo.uninstall($1, $2)
|
85
|
+
end
|
86
|
+
|
87
|
+
#confirm(gems)
|
88
|
+
|
89
|
+
Rake::Task['dependencies:transaction:commit'].invoke
|
90
|
+
|
91
|
+
rescue Exception => ex
|
92
|
+
puts ex.message
|
93
|
+
puts ex.backtrace
|
94
|
+
Rake::Task['dependencies:transaction:rollback'].invoke
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
desc 'Build a dependencies.rb from old config.gem style declarations'
|
99
|
+
task :import do
|
100
|
+
|
101
|
+
# gross
|
102
|
+
$block_dependencies_plugin_init = true
|
103
|
+
$gems_rake_task = true
|
104
|
+
$gems_build_rake_task = true
|
105
|
+
|
106
|
+
Rake::Task['environment'].invoke
|
107
|
+
environments = %w( development test production )
|
108
|
+
|
109
|
+
gems = environments.inject({}) do |memo, environment|
|
110
|
+
begin
|
111
|
+
ENV['RAILS_ENV'] = environment
|
112
|
+
RAILS_ENV = environment
|
113
|
+
load File.join(RAILS_ROOT, 'config', 'environment.rb')
|
114
|
+
rescue StandardError => ex
|
115
|
+
puts "Something went wrong: #{ex.message}"
|
116
|
+
exit 1
|
117
|
+
end
|
118
|
+
|
119
|
+
Rails.configuration.gems.each do |gem|
|
120
|
+
signature = [gem.name, gem.requirement.to_s]
|
121
|
+
memo[signature] ||= {
|
122
|
+
:name => gem.name,
|
123
|
+
:version => gem.requirement.to_s,
|
124
|
+
:require_as => gem.lib,
|
125
|
+
:environments => []
|
126
|
+
}
|
127
|
+
memo[signature][:environments] << environment
|
128
|
+
end
|
129
|
+
|
130
|
+
memo
|
131
|
+
end
|
132
|
+
|
133
|
+
all_environments, some_environments = gems.values.partition do |gem|
|
134
|
+
gem[:environments].sort == environments.sort
|
135
|
+
end
|
136
|
+
|
137
|
+
all_environments.each do |gem|
|
138
|
+
puts dependency_declaration_from_hash(gem)
|
139
|
+
end
|
140
|
+
|
141
|
+
environments.each do |environment|
|
142
|
+
gems = some_environments.select do |gem|
|
143
|
+
gem[:environments].include?(environment)
|
144
|
+
end
|
145
|
+
|
146
|
+
unless gems.length.zero?
|
147
|
+
puts
|
148
|
+
puts "with_options(:only => '#{environment}') do |#{environment}|"
|
149
|
+
gems.each do |gem|
|
150
|
+
puts " #{environment}." + dependency_declaration_from_hash(gem)
|
151
|
+
end
|
152
|
+
puts 'end'
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def dependency_declaration_from_hash(gem)
|
159
|
+
declaration = []
|
160
|
+
declaration << "dependency '#{gem[:name]}'"
|
161
|
+
declaration << "'#{gem[:version]}'" unless gem[:version].blank?
|
162
|
+
declaration << ":require_as => '#{gem[:lib]}'" unless gem[:lib] == nil
|
163
|
+
declaration.join(', ')
|
164
|
+
end
|
data/lib/bowline/initializer.rb
CHANGED
@@ -65,7 +65,7 @@ module Bowline
|
|
65
65
|
end
|
66
66
|
|
67
67
|
def set_load_path
|
68
|
-
load_paths = configuration.load_paths
|
68
|
+
load_paths = configuration.load_paths
|
69
69
|
load_paths.reverse_each { |dir| $LOAD_PATH.unshift(dir) if File.directory?(dir) }
|
70
70
|
$LOAD_PATH.uniq!
|
71
71
|
end
|
@@ -172,18 +172,26 @@ module Bowline
|
|
172
172
|
end
|
173
173
|
end
|
174
174
|
|
175
|
-
def
|
175
|
+
def initialize_gems
|
176
176
|
require 'rubygems'
|
177
|
-
|
178
|
-
|
179
|
-
def add_gem_load_paths
|
180
|
-
unless configuration.gems.empty?
|
181
|
-
configuration.gems.each { |gem| gem.add_load_paths }
|
182
|
-
end
|
177
|
+
Gem.clear_paths
|
178
|
+
Gem.path.unshift(configuration.gem_path)
|
183
179
|
end
|
184
180
|
|
185
181
|
def load_gems
|
186
|
-
configuration.gems.each
|
182
|
+
configuration.gems.each do |dep|
|
183
|
+
options = {
|
184
|
+
:lib => dep.name
|
185
|
+
}.merge(dep.options)
|
186
|
+
|
187
|
+
begin
|
188
|
+
gem dep.name, *dep.versions
|
189
|
+
require options[:lib]
|
190
|
+
rescue LoadError => e
|
191
|
+
puts "was unable to require #{dep.name} as '#{options[:lib]}'
|
192
|
+
Reason: #{e.class.name} error raised with message: #{e.message}"
|
193
|
+
end
|
194
|
+
end
|
187
195
|
end
|
188
196
|
|
189
197
|
def load_plugins
|
@@ -260,8 +268,7 @@ module Bowline
|
|
260
268
|
Bowline.configuration = configuration
|
261
269
|
|
262
270
|
set_load_path
|
263
|
-
|
264
|
-
add_gem_load_paths
|
271
|
+
initialize_gems
|
265
272
|
|
266
273
|
require_frameworks
|
267
274
|
set_autoload_paths
|
@@ -324,8 +331,6 @@ module Bowline
|
|
324
331
|
attr_accessor :bowline
|
325
332
|
|
326
333
|
attr_accessor :frameworks
|
327
|
-
|
328
|
-
attr_accessor :framework_paths
|
329
334
|
|
330
335
|
# Whether or not classes should be cached (set to false if you want
|
331
336
|
# application classes to be reloaded on each request)
|
@@ -378,7 +383,7 @@ module Bowline
|
|
378
383
|
# An array of gems that this Bowline application depends on. Bowline will automatically load
|
379
384
|
# these gems during installation, and allow you to install any missing gems with:
|
380
385
|
#
|
381
|
-
# rake gems:
|
386
|
+
# rake gems:sync
|
382
387
|
#
|
383
388
|
# You can add gems with the #gem method.
|
384
389
|
attr_accessor :gems
|
@@ -394,11 +399,12 @@ module Bowline
|
|
394
399
|
# To require a library be installed, but not attempt to load it, pass :lib => false
|
395
400
|
#
|
396
401
|
# config.gem 'qrp', :version => '0.4.1', :lib => false
|
397
|
-
def gem(
|
398
|
-
|
399
|
-
@gems << Bowline::GemDependency.new(name, options)
|
402
|
+
def gem(*args)
|
403
|
+
@gems << Dependencies::Dependency.new(*args)
|
400
404
|
end
|
401
405
|
|
406
|
+
attr_accessor :gem_path
|
407
|
+
|
402
408
|
# Sets the default +time_zone+. Setting this will enable +time_zone+
|
403
409
|
# awareness for Active Record models and set the Active Record default
|
404
410
|
# timezone to <tt>:utc</tt>.
|
@@ -420,13 +426,11 @@ module Bowline
|
|
420
426
|
attr_accessor :sdk
|
421
427
|
attr_accessor :copyright
|
422
428
|
|
423
|
-
# Create a new Configuration instance, initialized with the default
|
424
|
-
# values.
|
429
|
+
# Create a new Configuration instance, initialized with the default values.
|
425
430
|
def initialize
|
426
431
|
set_root_path!
|
427
432
|
|
428
433
|
self.frameworks = default_frameworks
|
429
|
-
self.framework_paths = default_framework_paths
|
430
434
|
self.load_paths = default_load_paths
|
431
435
|
self.load_once_paths = default_load_once_paths
|
432
436
|
self.eager_load_paths = default_eager_load_paths
|
@@ -438,6 +442,7 @@ module Bowline
|
|
438
442
|
self.database_configuration_file = default_database_configuration_file
|
439
443
|
self.app_config_file = default_app_config_file
|
440
444
|
self.gems = default_gems
|
445
|
+
self.gem_path = default_gem_path
|
441
446
|
self.plugin_glob = default_plugin_glob
|
442
447
|
self.helper_glob = default_helper_glob
|
443
448
|
self.initializer_glob = default_initalizer_glob
|
@@ -501,16 +506,7 @@ module Bowline
|
|
501
506
|
def default_frameworks
|
502
507
|
[:active_support, :bowline]
|
503
508
|
end
|
504
|
-
|
505
|
-
def default_framework_paths
|
506
|
-
[
|
507
|
-
File.join(root_path, 'vendor', 'bowline', 'lib'),
|
508
|
-
File.join(root_path, 'vendor', 'rails', 'activesupport', 'lib'),
|
509
|
-
File.join(root_path, 'vendor', 'rails', 'activerecord', 'lib'),
|
510
|
-
File.join(root_path, 'vendor', 'rails', 'activeresource', 'lib')
|
511
|
-
]
|
512
|
-
end
|
513
|
-
|
509
|
+
|
514
510
|
def default_load_paths
|
515
511
|
paths = []
|
516
512
|
|
@@ -571,7 +567,14 @@ module Bowline
|
|
571
567
|
end
|
572
568
|
|
573
569
|
def default_gems
|
574
|
-
[]
|
570
|
+
gems = []
|
571
|
+
gems << Dependencies::Dependency.new("bowline", Bowline::Version::STRING)
|
572
|
+
gems << Dependencies::Dependency.new("activesupport")
|
573
|
+
gems
|
574
|
+
end
|
575
|
+
|
576
|
+
def default_gem_path
|
577
|
+
File.join(root_path, *%w{ vendor gems })
|
575
578
|
end
|
576
579
|
|
577
580
|
def default_plugin_glob
|
data/lib/bowline/tasks/app.rake
CHANGED
@@ -86,7 +86,14 @@ tiprocess:0.4.4
|
|
86
86
|
Rake::Task['app:configure'].invoke
|
87
87
|
end
|
88
88
|
|
89
|
-
|
89
|
+
conf = Bowline.configuration
|
90
|
+
repo = Dependencies::Repository.new(
|
91
|
+
conf.gem_path
|
92
|
+
)
|
93
|
+
if conf.gems.length > repo.installed.length
|
94
|
+
Rake::Task['gems:sync'].invoke
|
95
|
+
end
|
96
|
+
|
90
97
|
FileUtils.rm_rf(app_path)
|
91
98
|
FileUtils.makedirs(app_path)
|
92
99
|
|
@@ -118,14 +125,30 @@ tiprocess:0.4.4
|
|
118
125
|
build_path = File.join(APP_ROOT, 'build')
|
119
126
|
app_path = File.join(build_path, 'app')
|
120
127
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
128
|
+
ti_path = ENV['TIPATH'] || begin
|
129
|
+
if RUBY_PLATFORM =~ /darwin/
|
130
|
+
'/Library/Application Support/Titanium'
|
131
|
+
elsif RUBY_PLATFORM =~ /win/
|
132
|
+
'C:/ProgramData/Titanium'
|
133
|
+
elsif RUBY_PLATFORM =~ /linux/
|
134
|
+
'/opt/titanium'
|
135
|
+
else
|
136
|
+
raise "Unknown platform"
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
unless File.directory?(ti_path)
|
141
|
+
raise "Titanium SDK not found, " \
|
142
|
+
"install the SDK or " \
|
143
|
+
"specify the ENV variable TIPATH"
|
144
|
+
end
|
145
|
+
|
146
|
+
ti_lib_path = Dir[File.join(ti_path, "sdk", "*", "*")][-1]
|
147
|
+
|
148
|
+
# Space in osx path
|
126
149
|
ti_path.gsub!(' ', '\ ')
|
127
150
|
ti_lib_path.gsub!(' ', '\ ')
|
128
|
-
|
151
|
+
|
129
152
|
command = []
|
130
153
|
command << File.join(ti_lib_path, "tibuild.py")
|
131
154
|
command << "-d #{build_path}"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
namespace :gems do
|
2
|
+
desc "Install gems locally"
|
3
|
+
task :sync => [:environment] do
|
4
|
+
conf = Bowline.configuration
|
5
|
+
repo = Dependencies::Repository.new(
|
6
|
+
conf.gem_path
|
7
|
+
)
|
8
|
+
|
9
|
+
conf.gems.each do |dep|
|
10
|
+
gem = repo.gem(dep.name, dep.versions)
|
11
|
+
next unless repo.search(gem).empty?
|
12
|
+
repo.install(gem)
|
13
|
+
end
|
14
|
+
|
15
|
+
repo.reload_index!
|
16
|
+
|
17
|
+
full_list = conf.gems.map do |dep|
|
18
|
+
gem = repo.gem(dep.name, dep.versions)
|
19
|
+
spec = repo.index.search(gem).last
|
20
|
+
unless spec
|
21
|
+
raise Exception.new("A required dependency #{gem} was not found")
|
22
|
+
end
|
23
|
+
deps = spec.recursive_dependencies(gem, repo.index)
|
24
|
+
[spec] + deps
|
25
|
+
end.flatten.uniq.map do |spec|
|
26
|
+
"#{spec.name}-#{spec.version}"
|
27
|
+
end
|
28
|
+
|
29
|
+
(repo.installed - full_list).each do |g|
|
30
|
+
/^(.*)\-(.*)$/ =~ g
|
31
|
+
repo.uninstall($1, $2)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/bowline/version.rb
CHANGED
data/templates/config/boot.rb
CHANGED
@@ -3,9 +3,10 @@
|
|
3
3
|
|
4
4
|
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), "..")) unless defined?(APP_ROOT)
|
5
5
|
|
6
|
-
|
6
|
+
gems_path = File.join(APP_ROOT, *%w{vendor gems gems})
|
7
|
+
bowline_path = Dir[File.join(gems_path, *%w{{maccman-bowline*,bowline*} lib bowline.rb})][-1]
|
7
8
|
|
8
|
-
if
|
9
|
+
if bowline_path
|
9
10
|
require bowline_path
|
10
11
|
else
|
11
12
|
require "rubygems"
|
@@ -11,6 +11,6 @@ Bowline::Initializer.run do |config|
|
|
11
11
|
# config.gem "net-mdns", :lib => 'net/dns/mdns'
|
12
12
|
# config.gem "rack"
|
13
13
|
# config.gem "rubyzip", :lib => 'zip/zip'
|
14
|
-
|
15
|
-
config.
|
14
|
+
# Bowline Edge:
|
15
|
+
# config.gem "maccman-bowline", :lib => "bowline", :source => "http://gems.github.com"
|
16
16
|
end
|
data/templates/public/index.html
CHANGED
@@ -5,17 +5,18 @@
|
|
5
5
|
<head>
|
6
6
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
7
7
|
<title><%= full_name %></title>
|
8
|
-
<!--
|
9
|
-
<script src="http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js" type="text/javascript"></script>
|
10
|
-
-->
|
11
8
|
<script src="javascripts/jquery.js" type="text/javascript" charset="utf-8"></script>
|
12
9
|
<script src="javascripts/jquery.chain.js" type="text/javascript" charset="utf-8"></script>
|
13
10
|
<script src="javascripts/jquery.bowline.js" type="text/javascript" charset="utf-8"></script>
|
14
11
|
<script src="javascripts/application.js" type="text/javascript" charset="utf-8"></script>
|
15
12
|
<link rel="stylesheet" href="stylesheets/application.css" type="text/css" charset="utf-8">
|
16
13
|
<script type="text/javascript" charset="utf-8">
|
14
|
+
// Example:
|
17
15
|
// jQuery(function($){
|
18
|
-
//
|
16
|
+
// $.bowline.ready(function(){
|
17
|
+
// $('#tweets').bowline('tweets');
|
18
|
+
// $('#tweets').invoke('index');
|
19
|
+
// })
|
19
20
|
// });
|
20
21
|
</script>
|
21
22
|
</head>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maccman-bowline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex MacCaw
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-07-
|
12
|
+
date: 2009-07-13 00:00:00 -07:00
|
13
13
|
default_executable: bowline-gen
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -64,11 +64,25 @@ files:
|
|
64
64
|
- lib/bowline/commands/console.rb
|
65
65
|
- lib/bowline/commands/generate.rb
|
66
66
|
- lib/bowline/commands/run.rb
|
67
|
+
- lib/bowline/dependencies/FAQ.markdown
|
68
|
+
- lib/bowline/dependencies/MIT-LICENSE
|
69
|
+
- lib/bowline/dependencies/README.markdown
|
70
|
+
- lib/bowline/dependencies/Rakefile
|
71
|
+
- lib/bowline/dependencies/TODO.markdown
|
72
|
+
- lib/bowline/dependencies/init.rb
|
73
|
+
- lib/bowline/dependencies/lib/dependencies.rb
|
74
|
+
- lib/bowline/dependencies/lib/dependencies/dependency.rb
|
75
|
+
- lib/bowline/dependencies/lib/dependencies/reader.rb
|
76
|
+
- lib/bowline/dependencies/lib/dependencies/repository.rb
|
77
|
+
- lib/bowline/dependencies/lib/ext/common.rb
|
78
|
+
- lib/bowline/dependencies/lib/ext/rubygems.rb
|
79
|
+
- lib/bowline/dependencies/lib/template/app_script.rb
|
80
|
+
- lib/bowline/dependencies/spec/spec.opts
|
81
|
+
- lib/bowline/dependencies/tasks/dependencies.rake
|
67
82
|
- lib/bowline/ext/array.rb
|
68
83
|
- lib/bowline/ext/class.rb
|
69
84
|
- lib/bowline/ext/object.rb
|
70
85
|
- lib/bowline/ext/string.rb
|
71
|
-
- lib/bowline/gem_dependency.rb
|
72
86
|
- lib/bowline/generators.rb
|
73
87
|
- lib/bowline/generators/application.rb
|
74
88
|
- lib/bowline/generators/binder.rb
|
@@ -82,6 +96,7 @@ files:
|
|
82
96
|
- lib/bowline/tasks/app.rake
|
83
97
|
- lib/bowline/tasks/bowline.rb
|
84
98
|
- lib/bowline/tasks/database.rake
|
99
|
+
- lib/bowline/tasks/gems.rake
|
85
100
|
- lib/bowline/tasks/log.rake
|
86
101
|
- lib/bowline/tasks/misc.rake
|
87
102
|
- lib/bowline/version.rb
|
@@ -1,42 +0,0 @@
|
|
1
|
-
module Bowline
|
2
|
-
class GemDependency
|
3
|
-
attr_accessor :lib, :source
|
4
|
-
|
5
|
-
def initialize(name, options = {})
|
6
|
-
require 'rubygems' unless Object.const_defined?(:Gem)
|
7
|
-
|
8
|
-
if options[:requirement]
|
9
|
-
req = options[:requirement]
|
10
|
-
elsif options[:version]
|
11
|
-
req = Gem::Requirement.create(options[:version])
|
12
|
-
else
|
13
|
-
req = Gem::Requirement.default
|
14
|
-
end
|
15
|
-
|
16
|
-
@dep = Gem::Dependency.new(name, req)
|
17
|
-
@lib = options[:lib]
|
18
|
-
@source = options[:source]
|
19
|
-
end
|
20
|
-
|
21
|
-
def add_load_paths
|
22
|
-
end
|
23
|
-
|
24
|
-
def name
|
25
|
-
@dep.name.to_s
|
26
|
-
end
|
27
|
-
|
28
|
-
def requirement
|
29
|
-
r = @dep.version_requirements
|
30
|
-
(r == Gem::Requirement.default) ? nil : r
|
31
|
-
end
|
32
|
-
|
33
|
-
def load
|
34
|
-
return if @loaded
|
35
|
-
require(@lib || name) unless @lib == false
|
36
|
-
@loaded = true
|
37
|
-
rescue LoadError
|
38
|
-
puts $!.to_s
|
39
|
-
$!.backtrace.each { |b| puts b }
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|