cloudfactory 0.0.13
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/.gitignore +11 -0
- data/.rspec +1 -0
- data/Gemfile +10 -0
- data/README.md +44 -0
- data/Rakefile +40 -0
- data/bin/cf +8 -0
- data/cf.gemspec +76 -0
- data/example/google_translate_app/Gemfile +12 -0
- data/example/google_translate_app/config.ru +7 -0
- data/example/google_translate_app/google_translate_input.csv +4 -0
- data/example/google_translate_app/google_translator_app.rb +53 -0
- data/example/google_translate_app/views/index.haml +2 -0
- data/example/google_translate_app/views/layout.haml +7 -0
- data/example/google_translate_app/views/run.haml +4 -0
- data/example/google_translate_app/views/style.sass +2 -0
- data/example/human_worker_app/Gemfile +12 -0
- data/example/human_worker_app/config.ru +7 -0
- data/example/human_worker_app/human_worker_app.rb +55 -0
- data/example/human_worker_app/human_worker_input.csv +5 -0
- data/example/human_worker_app/public/app.js +12 -0
- data/example/human_worker_app/temp.csv +3 -0
- data/example/human_worker_app/views/index.haml +15 -0
- data/example/human_worker_app/views/layout.haml +10 -0
- data/example/human_worker_app/views/result.haml +18 -0
- data/example/human_worker_app/views/run.haml +12 -0
- data/example/human_worker_app/views/style.sass +25 -0
- data/example/sample_yaml_files/concept_tagging_robot.yaml +18 -0
- data/example/sample_yaml_files/content_scraping_robot.yaml +19 -0
- data/example/sample_yaml_files/entity_extraction_robot.yaml +18 -0
- data/example/sample_yaml_files/google_translate_robot.yaml +20 -0
- data/example/sample_yaml_files/image_processing_robot.yaml +20 -0
- data/example/sample_yaml_files/keyword_matching_and_text_extraction_robot.yaml +26 -0
- data/example/sample_yaml_files/mailer_robot.yaml +21 -0
- data/example/sample_yaml_files/media_converter_robot.yaml +21 -0
- data/example/sample_yaml_files/media_splitting_robot.yaml +20 -0
- data/example/sample_yaml_files/multiple_skill_badge.yaml +75 -0
- data/example/sample_yaml_files/sentiment_robot.yaml +19 -0
- data/example/sample_yaml_files/skill_badge.yaml +56 -0
- data/example/sample_yaml_files/stat_badge.yaml +40 -0
- data/example/sample_yaml_files/term_extraction_robot.yaml +20 -0
- data/example/sample_yaml_files/tournament_station_and_form_fields.yaml +40 -0
- data/features/form_generation.feature +46 -0
- data/features/form_preview.feature +98 -0
- data/features/line_creation.feature +99 -0
- data/features/line_deletion.feature +50 -0
- data/features/line_generation.feature +57 -0
- data/features/run.feature +141 -0
- data/features/support/cli_steps.rb +16 -0
- data/features/support/env.rb +23 -0
- data/features/target_url.feature +82 -0
- data/fixtures/api_credentials_example.yml +4 -0
- data/fixtures/input_data/media_converter_robot.csv +2 -0
- data/fixtures/input_data/test.csv +2 -0
- data/lib/cf.rb +94 -0
- data/lib/cf/account.rb +32 -0
- data/lib/cf/cli.rb +52 -0
- data/lib/cf/cli/config.rb +87 -0
- data/lib/cf/cli/form.rb +82 -0
- data/lib/cf/cli/line.rb +237 -0
- data/lib/cf/cli/production.rb +62 -0
- data/lib/cf/cli/templates/css_file.css.erb +22 -0
- data/lib/cf/cli/templates/form_preview.html.erb +17 -0
- data/lib/cf/cli/templates/html_file.html.erb +21 -0
- data/lib/cf/cli/templates/js_file.js.erb +18 -0
- data/lib/cf/cli/templates/line.tt +55 -0
- data/lib/cf/cli/templates/sample-line/form.css +27 -0
- data/lib/cf/cli/templates/sample-line/form.html +26 -0
- data/lib/cf/cli/templates/sample-line/form.js +7 -0
- data/lib/cf/cli/templates/sample-line/line.yml.erb +67 -0
- data/lib/cf/cli/templates/sample-line/sample-line.csv +3 -0
- data/lib/cf/client.rb +56 -0
- data/lib/cf/custom_task_form.rb +136 -0
- data/lib/cf/department.rb +24 -0
- data/lib/cf/final_output.rb +20 -0
- data/lib/cf/form_field.rb +62 -0
- data/lib/cf/human_worker.rb +67 -0
- data/lib/cf/input_format.rb +134 -0
- data/lib/cf/line.rb +231 -0
- data/lib/cf/robot_worker.rb +31 -0
- data/lib/cf/run.rb +158 -0
- data/lib/cf/station.rb +340 -0
- data/lib/cf/task_form.rb +147 -0
- data/lib/cf/version.rb +3 -0
- data/lib/generators/cf/form/form_generator.rb +55 -0
- data/lib/generators/cf/form/templates/cf_form.html.erb +11 -0
- data/lib/generators/cf/install/install_generator.rb +22 -0
- data/lib/generators/cf/install/templates/README +13 -0
- data/lib/generators/cf/install/templates/cloud_factory.rb +7 -0
- data/spec/account_spec.rb +11 -0
- data/spec/badge_spec.rb +88 -0
- data/spec/concept_tagging_robot_spec.rb +54 -0
- data/spec/config_spec.rb +20 -0
- data/spec/content_scraping_robot_spec.rb +58 -0
- data/spec/custom_task_form_spec.rb +190 -0
- data/spec/department_spec.rb +14 -0
- data/spec/entity_extraction_robot_spec.rb +56 -0
- data/spec/form_field_spec.rb +126 -0
- data/spec/generators/form_generator_spec.rb +60 -0
- data/spec/generators/install_generator_spec.rb +35 -0
- data/spec/google_translate_robot_spec.rb +64 -0
- data/spec/human_worker_spec.rb +118 -0
- data/spec/image_processing_robot_spec.rb +56 -0
- data/spec/input_format_spec.rb +113 -0
- data/spec/keyword_matching_and_text_extraction_robot_spec.rb +73 -0
- data/spec/line_spec.rb +338 -0
- data/spec/mailer_robot_spec.rb +62 -0
- data/spec/media_converter_robot_spec.rb +72 -0
- data/spec/media_splitting_robot_spec.rb +62 -0
- data/spec/run_spec.rb +298 -0
- data/spec/sentiment_robot_spec.rb +56 -0
- data/spec/spec_helper.rb +39 -0
- data/spec/station_spec.rb +256 -0
- data/spec/task_form_spec.rb +96 -0
- data/spec/term_extraction_robot_spec.rb +58 -0
- data/spec/text_appending_robot_spec.rb +86 -0
- metadata +472 -0
data/.gitignore
ADDED
data/.rspec
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
--color
|
data/Gemfile
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
source "http://rubygems.org"
|
|
2
|
+
|
|
3
|
+
group :development do
|
|
4
|
+
gem 'aruba', :git => 'git://github.com/cucumber/aruba.git'
|
|
5
|
+
gem 'ruby-debug', :platforms => :mri_18
|
|
6
|
+
gem 'ruby-debug19', :require => 'ruby-debug', :platforms => :mri_19
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# All the gem's dependencies are specified in cloud_factory.gemspec
|
|
10
|
+
gemspec
|
data/README.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# CloudFactory Gem
|
|
2
|
+
|
|
3
|
+
A ruby library to interact with the [CloudFactory](http://cloudfactory.com) RESTFul API.
|
|
4
|
+
|
|
5
|
+
Currently tested with:
|
|
6
|
+
* ruby-1.9.2-p180
|
|
7
|
+
|
|
8
|
+
## Getting Started
|
|
9
|
+
|
|
10
|
+
```ruby
|
|
11
|
+
gem install cloudfactory
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
After installing the gem, you will get a `cf` cmd tool.
|
|
15
|
+
|
|
16
|
+
## Generate a line
|
|
17
|
+
```bash
|
|
18
|
+
cf line generate first-line
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Change the `api_key` in the generated `first-line/line.yml` file.
|
|
22
|
+
Then run `cf production start first-line-run --input-data=first-line-run.csv`
|
|
23
|
+
This should create a line and do production run.
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
± cf
|
|
27
|
+
Tasks:
|
|
28
|
+
cf form # Commands to generate custom task forms. For more info, cf form help
|
|
29
|
+
cf help [TASK] # Describe available tasks or one specific task
|
|
30
|
+
cf line # Commands to manage the Lines. For more info, cf line help
|
|
31
|
+
cf login --url=URL # Setup the cloudfactory credentials
|
|
32
|
+
cf production # Commands to create production runs. For more info, cf production help
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
± cf line help
|
|
36
|
+
Tasks:
|
|
37
|
+
cf help [COMMAND] # Describe subcommands or one specific subcommand
|
|
38
|
+
cf line create # takes the yaml file at line.yml and creates a new line at http://cloudfactory.com
|
|
39
|
+
cf line generate LINE-TITLE # genarates a line template at <line-title>/line.yml
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Development
|
|
43
|
+
```ruby
|
|
44
|
+
RESTCLIENT_LOG=stdout TEST=1 be rspec spec/line_spec.rb -d
|
data/Rakefile
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'bundler'
|
|
2
|
+
require 'rubygems'
|
|
3
|
+
require 'rake'
|
|
4
|
+
require 'rdoc/rdoc'
|
|
5
|
+
Bundler::GemHelper.install_tasks
|
|
6
|
+
|
|
7
|
+
begin
|
|
8
|
+
task :default => :build
|
|
9
|
+
require 'rake/rdoctask'
|
|
10
|
+
|
|
11
|
+
html_dir = 'doc/rdoc'
|
|
12
|
+
library = 'CloudFactory'
|
|
13
|
+
Rake::RDocTask.new do |rdoc|
|
|
14
|
+
rdoc.rdoc_dir = "#{html_dir}"
|
|
15
|
+
rdoc.options << '--fmt' << 'darkfish'
|
|
16
|
+
rdoc.title = "#{library} Ruby Gem API Documentation"
|
|
17
|
+
rdoc.rdoc_files.include('README*')
|
|
18
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Setting up the rake task to generate and upload the documentation to remote
|
|
22
|
+
rdoc_upload_path = "/var/www"
|
|
23
|
+
user = "vagrant"
|
|
24
|
+
remote_host = "33.33.33.10"
|
|
25
|
+
|
|
26
|
+
desc 'Upload documentation to Dev CloudFactory'
|
|
27
|
+
task 'upload-docs' => ['rdoc'] do
|
|
28
|
+
sh "scp -r #{html_dir}/* #{user}@#{remote_host}:#{rdoc_upload_path}/cf-doc"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# website_dir = 'site'
|
|
32
|
+
# desc 'Update project website to RubyForge.'
|
|
33
|
+
# task 'upload-site' do
|
|
34
|
+
# sh "scp -r #{website_dir}/* " +
|
|
35
|
+
# "#{rubyforge_user}@rubyforge.org:/var/www/gforge-projects/project/"
|
|
36
|
+
# end
|
|
37
|
+
|
|
38
|
+
# desc 'Update API docs and project website to RubyForge.'
|
|
39
|
+
# task 'publish' => ['upload-docs', 'upload-site']
|
|
40
|
+
end
|
data/bin/cf
ADDED
data/cf.gemspec
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "cf/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = "cloudfactory"
|
|
7
|
+
s.version = CF::VERSION
|
|
8
|
+
s.platform = Gem::Platform::RUBY
|
|
9
|
+
s.authors = ["CloudFactory.com"]
|
|
10
|
+
s.email = ["info@cloudfactory.com"]
|
|
11
|
+
s.homepage = "http://cloudfactory.com"
|
|
12
|
+
s.summary = %q{A Ruby wrapper and CLI for Cloudfactory.com}
|
|
13
|
+
s.description = %q{A Ruby wrapper and CLI for to interact with Cloudfactory.com REST API}
|
|
14
|
+
|
|
15
|
+
s.rubyforge_project = "cloudfactory"
|
|
16
|
+
|
|
17
|
+
s.files = `git ls-files`.split("\n")
|
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
19
|
+
s.executables = ["cf"]
|
|
20
|
+
s.require_paths = ["lib"]
|
|
21
|
+
|
|
22
|
+
s.post_install_message =<<EOF
|
|
23
|
+
☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁
|
|
24
|
+
|
|
25
|
+
Sweet. You now have the 'cf' command installed. Test drive it with:
|
|
26
|
+
> cf help
|
|
27
|
+
|
|
28
|
+
1. Sign up for your CloudFactory account and get your API key
|
|
29
|
+
http://cloudfactory.com/users/sign_up
|
|
30
|
+
Get API key from welcome email or http://cloudfactory.com/account#settings
|
|
31
|
+
|
|
32
|
+
2. Generate your first assembly line...
|
|
33
|
+
> cf line generate <line-title>
|
|
34
|
+
|
|
35
|
+
3. Edit the generated line.yml to design your perfect assembly line
|
|
36
|
+
See http://developers.cloudfactory.com/lines/yaml.html
|
|
37
|
+
|
|
38
|
+
4. Create your line in CloudFactory
|
|
39
|
+
> cf line create
|
|
40
|
+
|
|
41
|
+
5. Do a test production run in the sandbox first...
|
|
42
|
+
> cf production start TITLE -i=INPUT_DATA.CSV
|
|
43
|
+
|
|
44
|
+
6. Go live! Send your production run to real workers...
|
|
45
|
+
> cf production start TITLE -i=INPUT_DATA.CSV --live
|
|
46
|
+
|
|
47
|
+
------------------------------------------------------------------------------
|
|
48
|
+
|
|
49
|
+
Follow @thecloudfactory on Twitter for announcements, updates, and news.
|
|
50
|
+
https://twitter.com/thecloudfactory
|
|
51
|
+
|
|
52
|
+
Add your project or organization to the apps wiki!
|
|
53
|
+
https://github.com/sprout/cloudfactory_ruby/wiki/Apps
|
|
54
|
+
|
|
55
|
+
☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁
|
|
56
|
+
EOF
|
|
57
|
+
|
|
58
|
+
s.add_dependency "i18n"
|
|
59
|
+
s.add_dependency "activesupport", '~> 3.0.3'
|
|
60
|
+
s.add_dependency "hashie", "~> 1.0.0"
|
|
61
|
+
s.add_dependency "rest-client"
|
|
62
|
+
s.add_dependency "json"
|
|
63
|
+
s.add_dependency "thor", "~> 0.14.6"
|
|
64
|
+
s.add_dependency "httparty", "~> 0.7.8"
|
|
65
|
+
s.add_dependency "terminal-table", "~> 1.4.2"
|
|
66
|
+
|
|
67
|
+
s.add_development_dependency "rails", "~> 3.0.3"
|
|
68
|
+
s.add_development_dependency "bundler", "~> 1.0.0"
|
|
69
|
+
s.add_development_dependency "generator_spec", "~> 0.8.3"
|
|
70
|
+
s.add_development_dependency "rspec-rails"
|
|
71
|
+
s.add_development_dependency "cucumber"
|
|
72
|
+
s.add_development_dependency "rdoc", "~> 3.5.3"
|
|
73
|
+
s.add_development_dependency "vcr"
|
|
74
|
+
s.add_development_dependency "rake"
|
|
75
|
+
s.add_development_dependency "webmock"
|
|
76
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
class GoogleTranslatorApp < Sinatra::Base
|
|
2
|
+
|
|
3
|
+
set :haml, :format => :html5
|
|
4
|
+
set :sass, :style => :compact # default Sass style is :nested
|
|
5
|
+
|
|
6
|
+
configure do
|
|
7
|
+
# CF.api_key = "133fcabc51e35903e616c25aace7ffccc819c8f0"
|
|
8
|
+
# CF.email = "sachin@sproutify.com"
|
|
9
|
+
# CF.api_url = "sprout.lvh.me:3000/api/"
|
|
10
|
+
# CF.api_version = "v1"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
get '/' do
|
|
14
|
+
haml :index
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
get '/run' do
|
|
19
|
+
# CF.api_url = "sprout.lvh.me:3000/api/"
|
|
20
|
+
response = RestClient.get 'http://sprout.lvh.me:3000/api/v1/lines.json', {:accept => :json}
|
|
21
|
+
# @categories = CF::Category.all
|
|
22
|
+
|
|
23
|
+
# @categories = RestClient.get 'http://sprout.lvh.me:3000/api/v1/categories.json', {:accept => :json}
|
|
24
|
+
# attrs = {:label => "image_url",
|
|
25
|
+
# :field_type => "text_data",
|
|
26
|
+
# :value => "http://s3.amazon.com/bizcardarmy/medium/1.jpg",
|
|
27
|
+
# :required => true,
|
|
28
|
+
# :validation_format => "url"
|
|
29
|
+
# }
|
|
30
|
+
#
|
|
31
|
+
# line = CF::Line.new("Demo Line","Survey")
|
|
32
|
+
|
|
33
|
+
# line = CF::Line.create("Demo Line","Survey") do |l|
|
|
34
|
+
# CF::InputHeader.new(line, attrs)
|
|
35
|
+
# CF::Station.create(l, :type => "work") do |s|
|
|
36
|
+
# CF::HumanWorker.new(s, 2, 0.2)
|
|
37
|
+
# CF::StandardInstruction.create(s,{:title => "Enter name of the CEO of Google", :description => "Enter name of the CEO of Google"}) do |i|
|
|
38
|
+
# CF::FormField.new(s, {:label => "First Name", :field_type => "SA", :required => "true"})
|
|
39
|
+
# CF::FormField.new(s, {:label => "Middle Name", :field_type => "SA"})
|
|
40
|
+
# CF::FormField.new(s, {:label => "Last Name", :field_type => "SA", :required => "true"})
|
|
41
|
+
# end
|
|
42
|
+
# end
|
|
43
|
+
# end
|
|
44
|
+
# run = CF::Run.create(line, "run name", File.expand_path("test.csv", __FILE__))
|
|
45
|
+
#
|
|
46
|
+
haml :run
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
get '/style.css' do
|
|
50
|
+
sass :style, :style => :expanded # overridden
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
class HumanWorkerApp < Sinatra::Base
|
|
2
|
+
|
|
3
|
+
enable :logging
|
|
4
|
+
|
|
5
|
+
set :haml, :format => :html5
|
|
6
|
+
set :sass, :style => :compact # default Sass style is :nested
|
|
7
|
+
|
|
8
|
+
configure do
|
|
9
|
+
CF.api_key = "f488a62d0307e79ec4f1e6131fa220be47e83d44"
|
|
10
|
+
CF.api_url = "http://manish.lvh.me:3000/api/"
|
|
11
|
+
CF.api_version = "v1"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
helpers do
|
|
15
|
+
include Rack::Utils
|
|
16
|
+
alias_method :h, :escape_html
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
get '/' do
|
|
20
|
+
haml :index
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
post '/run' do
|
|
24
|
+
response = RestClient.get 'http://sprout.lvh.me:3000/api/v1/lines.json', {:accept => :json}
|
|
25
|
+
line = CF::Line.create("Nepali Politicians","Survey") do |l|
|
|
26
|
+
CF::Station.create({:line => l, :type => "work"}) do |s|
|
|
27
|
+
CF::InputFormat.new({:station => s, :name => "Politician Name", :required => true, :valid_type => "general"})
|
|
28
|
+
CF::HumanWorker.new({:station => s, :number => 1, :reward => 20})
|
|
29
|
+
CF::TaskForm.create({:station => s, :title => "Gem Sinatra App -2", :instruction => "Guess the amount they have earned through bribe in Rupees"}) do |f|
|
|
30
|
+
CF::FormField.new({:form => f, :label => "Amount", :field_type => "SA", :required => "true"})
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
input_data_array = []
|
|
36
|
+
|
|
37
|
+
params['names'].each do |data|
|
|
38
|
+
input_data_array << {"Politician Name" => data, "meta_data_name" => data}
|
|
39
|
+
end.join(",")
|
|
40
|
+
@run = CF::Run.create(line, "2011 Ghotala", input_data_array)
|
|
41
|
+
|
|
42
|
+
haml :run
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
get '/result/:run' do
|
|
46
|
+
run_id = params[:run]
|
|
47
|
+
@got_result = CF::Run.get_final_output(run_id)
|
|
48
|
+
haml :result
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
get '/style.css' do
|
|
52
|
+
sass :style, :style => :expanded # overridden
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
%h1
|
|
2
|
+
Bribery App
|
|
3
|
+
|
|
4
|
+
#container
|
|
5
|
+
%form{:action => "/run", :method => :post, :name => :the_form}
|
|
6
|
+
%p
|
|
7
|
+
%label Enter the politician name
|
|
8
|
+
%input{:type => :text, :name => "names[]"}
|
|
9
|
+
%span.remove Remove
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
%span.add Add More Politician
|
|
13
|
+
|
|
14
|
+
%p
|
|
15
|
+
%input{:type => :submit, :value => "Find It"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
!!!
|
|
2
|
+
%html
|
|
3
|
+
%title CloudFactory App
|
|
4
|
+
%link{:rel => "stylesheet", :type=> "text/css", :href => "/style.css"}
|
|
5
|
+
|
|
6
|
+
%script{:type => "text/javascript", :src => "http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"}
|
|
7
|
+
%script{:type => "text/javascript", :src => "/app.js"}
|
|
8
|
+
|
|
9
|
+
%body
|
|
10
|
+
= yield
|