├── lib
├── tasks
│ ├── .gitkeep
│ └── cookbook.rake
└── api_doc_loader.rb
├── public
├── favicon.ico
├── flash
│ ├── flowplayer-3.1.5.swf
│ └── flowplayer.controls-3.1.5.swf
├── robots.txt
├── 422.html
├── 404.html
└── 500.html
├── vendor
└── plugins
│ └── .gitkeep
├── gitorials
├── index.markdown
├── screencast.markdown
├── two-minutes.markdown
├── gitorial.markdown
└── subsite.markdown
├── manual
└── generators
│ ├── .gitkeep
│ ├── i18n.markdown
│ ├── assets.markdown
│ ├── routes.markdown
│ ├── resource.markdown
│ ├── user_resource.markdown
│ ├── controller.markdown
│ ├── user_mailer.markdown
│ ├── user_controller.markdown
│ ├── user_model.markdown
│ ├── test_framework.markdown
│ ├── subsite_taglib.markdown
│ ├── model.markdown
│ ├── install_plugin.markdown
│ ├── front_controller.markdown
│ ├── subsite.markdown
│ ├── admin_subsite.markdown
│ ├── migration.markdown
│ └── setup_wizard.markdown
├── app
├── assets
│ ├── javascripts
│ │ ├── admin
│ │ │ └── .gitkeep
│ │ ├── front
│ │ │ └── .gitkeep
│ │ ├── application
│ │ │ ├── .gitkeep
│ │ │ ├── highlighters
│ │ │ │ ├── diff.js
│ │ │ │ ├── css.js
│ │ │ │ ├── ruby.js
│ │ │ │ ├── javascript.js
│ │ │ │ └── dryml.js
│ │ │ ├── switcher.js
│ │ │ └── code_highlighter.js
│ │ ├── admin.js
│ │ ├── application.js
│ │ └── front.js
│ ├── stylesheets
│ │ ├── admin
│ │ │ └── .gitkeep
│ │ ├── front
│ │ │ └── .gitkeep
│ │ ├── application
│ │ │ └── .gitkeep
│ │ ├── admin.css
│ │ ├── application.css.orig
│ │ ├── front.css
│ │ └── application.css
│ └── images
│ │ ├── rss.png
│ │ ├── rails.png
│ │ ├── body_bg.png
│ │ ├── search_bg.png
│ │ ├── app_name_bg.png
│ │ ├── comment_bg.png
│ │ ├── nicEditorIcons.gif
│ │ ├── page_header_bg.png
│ │ └── manual
│ │ └── friendship-lifecycle.png
├── helpers
│ ├── front_helper.rb
│ ├── users_helper.rb
│ ├── answers_helper.rb
│ ├── images_helper.rb
│ ├── manual_helper.rb
│ ├── recipes_helper.rb
│ ├── comments_helper.rb
│ ├── questions_helper.rb
│ ├── api_tag_defs_helper.rb
│ ├── api_taglibs_helper.rb
│ ├── application_helper.rb
│ └── api_tag_comments_helper.rb
├── views
│ ├── users
│ │ ├── login.dryml
│ │ └── show.dryml
│ ├── questions
│ │ ├── answered.dryml
│ │ ├── open.dryml
│ │ ├── index_for_recipe.dryml
│ │ ├── new_for_user.dryml
│ │ ├── atom.builder
│ │ ├── index.dryml
│ │ └── show.dryml
│ ├── recipes
│ │ ├── index.dryml
│ │ ├── atom.builder
│ │ ├── new_for_user.dryml
│ │ ├── show.dryml
│ │ └── edit.dryml
│ ├── user_mailer
│ │ └── forgot_password.erb
│ ├── taglibs
│ │ └── themes
│ │ │ ├── clean
│ │ │ └── clean.dryml
│ │ │ └── clean-sidemenu
│ │ │ └── clean-sidemenu.dryml
│ ├── tutorials
│ │ ├── index.dryml
│ │ └── show.dryml
│ ├── manual
│ │ ├── index.dryml
│ │ ├── manual_section.dryml
│ │ └── manual_subsection.dryml
│ ├── api_plugins
│ │ ├── index.dryml
│ │ └── show.dryml
│ ├── api_taglibs
│ │ └── show.dryml
│ ├── comments
│ │ └── atom.builder
│ ├── api_tag_defs
│ │ ├── show.dryml
│ │ └── tagdef.dryml
│ └── front
│ │ └── index.dryml
├── controllers
│ ├── api_taglibs_controller.rb
│ ├── answers_controller.rb
│ ├── api_tag_comments_controller.rb
│ ├── api_plugins_controller.rb
│ ├── front_controller.rb
│ ├── images_controller.rb
│ ├── users_controller.rb
│ ├── agility_controller.rb
│ ├── application_controller.rb
│ ├── api_tag_defs_controller.rb
│ ├── comments_controller.rb
│ ├── recipes_controller.rb
│ ├── questions_controller.rb
│ ├── tutorials_controller.rb
│ └── manual_controller.rb
├── models
│ ├── comment.rb
│ ├── user_mailer.rb
│ ├── answer.rb
│ ├── guest.rb
│ ├── api_tag_comment.rb
│ ├── question.rb
│ ├── owned_model.rb
│ ├── tagging.rb
│ ├── recipe.rb
│ ├── tag.rb
│ ├── image.rb
│ ├── api_taglib.rb
│ ├── api_plugin.rb
│ ├── api_tag_def.rb
│ ├── user.rb
│ └── gitorial.rb
└── rich_types
│ └── optional_markdown.rb
├── taglibs
└── paperclip_with_hobo
├── test
├── fixtures
│ ├── images.yml
│ ├── tags.yml
│ ├── answers.yml
│ ├── api_taglibs.yml
│ ├── api_tags.yml
│ ├── comments.yml
│ ├── questions.yml
│ ├── recipes.yml
│ ├── taggings.yml
│ ├── api_tag_comments.yml
│ └── users.yml
├── unit
│ ├── tag_test.rb
│ ├── answer_test.rb
│ ├── image_test.rb
│ ├── recipe_test.rb
│ ├── user_test.rb
│ ├── api_tag_test.rb
│ ├── comment_test.rb
│ ├── question_test.rb
│ ├── tagging_test.rb
│ ├── api_taglib_test.rb
│ └── api_tag_comment_test.rb
├── functional
│ ├── manual_controller_test.rb
│ ├── images_controller_test.rb
│ ├── users_controller_test.rb
│ ├── answers_controller_test.rb
│ ├── api_tags_controller_test.rb
│ ├── comments_controller_test.rb
│ ├── recipes_controller_test.rb
│ ├── api_taglibs_controller_test.rb
│ ├── questions_controller_test.rb
│ ├── api_tag_comments_controller_test.rb
│ └── front_controller_test.rb
├── performance
│ └── browsing_test.rb
└── test_helper.rb
├── .gitignore
├── config
├── environment.rb
├── boot.rb
├── initializers
│ ├── mime_types.rb
│ ├── hobo.rb
│ ├── inflections.rb
│ ├── backtrace_silencers.rb
│ ├── secret_token.rb
│ ├── session_store.rb
│ └── new_rails_defaults.rb
├── database.yml
├── locales
│ └── en.yml
├── setup_load_paths.rb
├── environments
│ ├── development-old.rb
│ ├── production-old.rb
│ ├── test-old.rb
│ ├── development.rb
│ ├── test.rb
│ └── production.rb
├── deploy.rb
├── application.rb
├── boot-old.rb
├── environment-old.rb
└── routes.rb
├── doc
└── README_FOR_APP
├── db
├── migrate
│ ├── 20090512210544_add_library_to_taglibs.rb
│ ├── 20081024151700_add_source_code_to_tag_defs.rb
│ ├── 20081021144306_change_tag_name_field_to_tag.rb
│ ├── 20120311165826_add_position_to_plugins.rb
│ ├── 20081017074334_allow_optional_markdown_in_answers.rb
│ ├── 20090112154358_add_short_description_to_taglibs.rb
│ ├── 20081024131133_add_short_description_to_tag_defs.rb
│ ├── 20081016075217_add_subject_to_questions_and_body_to_answers.rb
│ ├── 20091029175503_hobo_migration_image_file_size_to_integer.rb
│ ├── 20081021160838_add_description_to_taglibs_and_rename_on_tagdefs.rb
│ ├── 20081024161219_add_comments_for_api_tags.rb
│ ├── 20081027152829_add_paperclip_fields_for_images.rb
│ ├── 20081021123705_adding_models_for_api_referece.rb
│ ├── 20120311060921_add_missing_indices.rb
│ ├── 20120311061300_move_tag_defs_to_14.rb
│ └── 20081015130022_initial_models.rb
├── seeds.rb
└── schema.rb
├── script
└── rails
├── .project
├── Rakefile
├── .gitmodules
├── README
├── Gemfile
└── Gemfile.lock
/lib/tasks/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/vendor/plugins/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/gitorials/index.markdown:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/manual/generators/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/assets/javascripts/admin/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/assets/javascripts/front/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/assets/stylesheets/admin/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/assets/stylesheets/front/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/assets/javascripts/application/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/assets/stylesheets/application/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/helpers/front_helper.rb:
--------------------------------------------------------------------------------
1 | module FrontHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/helpers/users_helper.rb:
--------------------------------------------------------------------------------
1 | module UsersHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/helpers/answers_helper.rb:
--------------------------------------------------------------------------------
1 | module AnswersHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/helpers/images_helper.rb:
--------------------------------------------------------------------------------
1 | module ImagesHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/helpers/manual_helper.rb:
--------------------------------------------------------------------------------
1 | module ManualHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/helpers/recipes_helper.rb:
--------------------------------------------------------------------------------
1 | module RecipesHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/helpers/comments_helper.rb:
--------------------------------------------------------------------------------
1 | module CommentsHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/helpers/questions_helper.rb:
--------------------------------------------------------------------------------
1 | module QuestionsHelper
2 | end
3 |
--------------------------------------------------------------------------------
/taglibs/paperclip_with_hobo:
--------------------------------------------------------------------------------
1 | ../vendor/plugins/paperclip_with_hobo
--------------------------------------------------------------------------------
/app/helpers/api_tag_defs_helper.rb:
--------------------------------------------------------------------------------
1 | module ApiTagDefsHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/helpers/api_taglibs_helper.rb:
--------------------------------------------------------------------------------
1 | module ApiTaglibsHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/helpers/application_helper.rb:
--------------------------------------------------------------------------------
1 | module ApplicationHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/helpers/api_tag_comments_helper.rb:
--------------------------------------------------------------------------------
1 | module ApiTagCommentsHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/assets/images/rss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tslocke/hobocookbook/HEAD/app/assets/images/rss.png
--------------------------------------------------------------------------------
/app/views/users/login.dryml:
--------------------------------------------------------------------------------
1 | <-- look over there! Being very much a work in progress... <-- look over there! If you have an idea for a recipe that you think would be generally useful to Hobo programmers, please post your request
6 | here. If you have a more specific question about something you're stuck with, the
7 | Hobo Users group is probably the best place for that. To upload an image, you first need to "Save and continue editing" The notes are a place for users to contribute to the documention. If you have a question, bug report, feature request or a general
15 | comment, please use the Hobo Users group. If you have a quick answer you can post it here. Better still, post a new
11 | recipe, then return here and link to it below.Hobo Tutorials
9 |
10 | The Hobo Manual
9 |
10 | <%= this.name.titleize %>
13 | <%= this.name.titleize %>
10 | <%= this.name.titleize %>
10 | Images
18 |
5 | Posted by
Maybe you tried to change something you didn't have access to.
24 |You may have mistyped the address or the page may have moved.
24 |We've been notified about this issue and we'll take a look at it shortly.
24 ||
20 | |
22 | 23 | 24 | | 25 |
With answers
Without answers
19 | Show Source 20 |
21 | 24 |19 | Show Source 20 |
21 | 24 |<([-a-zA-Z0-9]*)[!:]*?\/?><\/code>/
125 | tag.short_description = tag.short_description.gsub(re, &b)
126 | tag.description = tag.description.gsub(re, &b)
127 | tag.save!
128 | end
129 | end
130 |
131 | def self.clear
132 | ApiPlugin.delete_all
133 | ApiTaglib.delete_all
134 | ApiTagDef.delete_all
135 | end
136 |
137 | end
138 |
139 |
--------------------------------------------------------------------------------
/gitorials/subsite.markdown:
--------------------------------------------------------------------------------
1 | # Adding an Administration subsite to an existing Rails 3 application
2 |
3 | This tutorial will show how you can create an administrative subsite
4 | for an existing Rails application. This will allow the administrator
5 | to create, update and destroy any database row without writing any
6 | view code -- only three lines of controller code for each model!
7 |
8 | It should also be useful for those who wish to add a subsite to a Hobo
9 | application. If you already have a Hobo application, some of the
10 | steps mentioned here will be unnecessary.
11 |
12 | In this tutorial, we've placed the Hobofied controllers and views in a
13 | subsite. However, it is certainly possible to mix Hobo code
14 | into your existing controllers. If you have any questions, [the
15 | mailing list](http://groups.google.com/group/hobousers) is probably
16 | your best resource.
17 |
18 | ## Install Hobo
19 |
20 | The application that I'm going to convert is called **scheduler**.
21 | Let's add a Hobo dependency to it.
22 |
23 | $ gem install hobo
24 |
25 | Inside the Gemfile add:
26 |
27 | gem 'hobo'
28 |
29 | It might be a good idea to run your application and confirm that
30 | everything still works.
31 |
32 | Now might also be a good time to make sure you have your source code
33 | backed up, preferably in an SCM tool like git or subversion. We're
34 | going to be running some generators: they will ask you before eventually
35 | overwriting some existing file, but just in case you make any mistake.
36 |
37 | Notice: When you run in a conflict with an existing file you can see the diffs
38 | by typing 'd'. Check also the other options.
39 |
40 | ## Run the Hobo generators
41 |
42 | Now we'll ask Hobo to copy it's shared files into your application.
43 | These are mostly javascript, css and dryml files
44 |
45 | $ hobo g assets
46 | $ hobo g rapid
47 |
48 | Now let's create our admin subsite:
49 |
50 | $ hobo g subsite admin --make-front-site
51 | $ hobo g front_controller admin::front --add-routes
52 |
53 | Note that if you use `admin_subsite` rather than `subsite`, the
54 | subsite will be limited to the administrator. For this to work, you
55 | will need to complete the section labelled "Updating your User Model",
56 | below.
57 |
58 | ## Hobofying a model
59 |
60 | Adding the Hobo magic to a model requires two things:
61 |
62 | Add this to the top of your model:
63 |
64 | Class Event < ActiveRecord::Base
65 | hobo_model # Don't put anything above this
66 | ...
67 |
68 | Secondly, all Hobo models require four permission functions. Here is
69 | what I use in my user model:
70 |
71 | # --- Permissions --- #
72 |
73 | def create_permitted?
74 | false
75 | end
76 |
77 | def update_permitted?
78 | acting_user.administrator? || (acting_user == self && only_changed?(:crypted_password, :email_address))
79 | # Note: crypted_password has attr_protected so although it is permitted to change, it cannot be changed
80 | # directly from a form submission.
81 | end
82 |
83 | def destroy_permitted?
84 | acting_user.administrator?
85 | end
86 |
87 | def view_permitted?(field)
88 | true
89 | end
90 |
91 | For now, I recommend returning _true_ from all of these permission
92 | functions. After hobofying your User model, these functions will
93 | become easier to write.
94 |
95 | If your model does not have a column called "name", I recommend
96 | defining a function on your model that returns a human readable
97 | summary of the row.
98 |
99 | ## Creating a controller for the hobofied model:
100 |
101 | I'm going to create an Admin::Event controller for my event model.
102 | This file goes in `app/controllers/admin/events_controller.rb`:
103 |
104 | class Admin::EventsController < Admin::AdminSiteController
105 | hobo_model_controller Event
106 | auto_actions :all
107 | end
108 |
109 | At this stage you should be able to run your application. If you
110 | browse to "/admin/events", you can create, remove, update and destroy
111 | any events you have permission to access.
112 |
113 | ## Modifying the views
114 |
115 | If you need to modify the views for your subsite, you may create
116 | subdirectories in `app/views/admin`. For example,
117 | `app/views/admin/foos/show.dryml` is the show view for the foos
118 | controller.
119 |
120 | `app/views/taglibs/admin_site.dryml` is the equivalent of
121 | application.dryml for your subsite.
122 |
123 | ## Updating your User model
124 |
125 | At this stage you have created an administrator interface, and could
126 | stop here. However, as far as Hobo is concerned, any users are
127 | logged in as a guest. To distinguish administrators from normal users
128 | from random surfers, hackers and bots, we will need to set up an
129 | authentication system.
130 |
131 | ### If you don't have one
132 |
133 | If you don't currently have a User model, type:
134 |
135 | $ hobo g user_resource User
136 | $ hobo g migration
137 |
138 | The last generator will ask if you wish to run the migration immediately. Enter "m" to tell it to do so.
139 |
140 | The following pages will now be available:
141 |
142 | * `/users/signup`
143 | * `/forgot_password`
144 | * `/login`
145 | * `/logout`
146 |
147 | ### If you have a User model
148 |
149 | Most likely, you already have a User model and authentication system.
150 | In most cases, it is quite easy to make this Hobo compatible.
151 |
152 | First of all, you should add the following line to the top of your
153 | model:
154 |
155 | hobo_model # Don't put anything above this
156 |
157 | Do not use `hobo_user_model` -- this will pull in authentication
158 | functions and database columns.
159 |
160 | Many User models have the columns *name:string* and
161 | *administrator:boolean*. If your model does not, create appropriate functions to
162 | mimic this behaviour. For example:
163 |
164 | def name
165 | "#{first_name} #{last_name}"
166 | end
167 |
168 | def administrator
169 | role == "administrator"
170 | end
171 |
172 | Also, Hobo requires the following functions to be defined on your
173 | User model. Define appropriately. Here is what I used:
174 |
175 | def to_s
176 | name
177 | end
178 |
179 | def guest?
180 | false
181 | end
182 |
183 | def signed_up?
184 | true
185 | end
186 |
187 | def login
188 | email_address
189 | end
190 |
191 | Finally, you need to let Hobo know who the current user is. This is
192 | done by setting a session variable when the user logs in:
193 |
194 | session[:user] = user.typed_id
195 |
196 | In my case, a very similar line was placed in `SessionsController::create`
197 |
198 | From now on, an instantiated User or Guest object will be available in
199 | `current_user` in your controllers and views. It will also be
200 | available in `acting_user` in your permission functions in your
201 | hobofied models.
202 |
--------------------------------------------------------------------------------
/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is auto-generated from the current state of the database. Instead
2 | # of editing this file, please use the migrations feature of Active Record to
3 | # incrementally modify your database, and then regenerate this schema definition.
4 | #
5 | # Note that this schema.rb definition is the authoritative source for your
6 | # database schema. If you need to create the application database on another
7 | # system, you should be using db:schema:load, not running all the migrations
8 | # from scratch. The latter is a flawed and unsustainable approach (the more migrations
9 | # you'll amass, the slower it'll run and the greater likelihood for issues).
10 | #
11 | # It's strongly recommended to check this file into your version control system.
12 |
13 | ActiveRecord::Schema.define(:version => 20120311165826) do
14 |
15 | create_table "answers", :force => true do |t|
16 | t.datetime "created_at"
17 | t.datetime "updated_at"
18 | t.integer "user_id"
19 | t.integer "recipe_id"
20 | t.integer "question_id"
21 | t.text "body"
22 | t.boolean "markdown"
23 | end
24 |
25 | add_index "answers", ["question_id"], :name => "index_answers_on_question_id"
26 | add_index "answers", ["recipe_id"], :name => "index_answers_on_recipe_id"
27 | add_index "answers", ["user_id"], :name => "index_answers_on_user_id"
28 |
29 | create_table "api_plugins_14", :force => true do |t|
30 | t.string "name"
31 | t.text "short_description"
32 | t.text "description"
33 | t.string "edit_link_base"
34 | t.string "edit_link"
35 | t.datetime "created_at"
36 | t.datetime "updated_at"
37 | t.integer "position"
38 | end
39 |
40 | create_table "api_tag_comments", :force => true do |t|
41 | t.text "body"
42 | t.boolean "markdown"
43 | t.datetime "created_at"
44 | t.datetime "updated_at"
45 | t.integer "api_tag_def_id"
46 | t.integer "user_id"
47 | end
48 |
49 | create_table "api_tag_comments_14", :force => true do |t|
50 | t.text "body"
51 | t.boolean "markdown"
52 | t.datetime "created_at"
53 | t.datetime "updated_at"
54 | t.integer "api_tag_def_id"
55 | t.integer "user_id"
56 | end
57 |
58 | add_index "api_tag_comments_14", ["api_tag_def_id"], :name => "index_api_tag_comments_14_on_api_tag_def_id"
59 | add_index "api_tag_comments_14", ["user_id"], :name => "index_api_tag_comments_14_on_user_id"
60 |
61 | create_table "api_tag_defs", :force => true do |t|
62 | t.string "tag"
63 | t.boolean "extension"
64 | t.boolean "polymorphic"
65 | t.string "for_type"
66 | t.text "description"
67 | t.text "tag_attributes"
68 | t.text "tag_parameters"
69 | t.string "merge_attrs"
70 | t.string "merge_params"
71 | t.datetime "created_at"
72 | t.datetime "updated_at"
73 | t.integer "taglib_id"
74 | t.text "short_description"
75 | t.text "source"
76 | end
77 |
78 | create_table "api_tag_defs_14", :force => true do |t|
79 | t.string "tag"
80 | t.boolean "extension"
81 | t.boolean "polymorphic"
82 | t.string "for_type"
83 | t.text "short_description"
84 | t.text "description"
85 | t.text "tag_attributes"
86 | t.text "tag_parameters"
87 | t.string "merge_attrs"
88 | t.string "merge_params"
89 | t.text "source"
90 | t.string "edit_link"
91 | t.datetime "created_at"
92 | t.datetime "updated_at"
93 | t.integer "taglib_id"
94 | end
95 |
96 | add_index "api_tag_defs_14", ["taglib_id"], :name => "index_api_tag_defs_14_on_taglib_id"
97 |
98 | create_table "api_taglibs", :force => true do |t|
99 | t.string "name"
100 | t.datetime "created_at"
101 | t.datetime "updated_at"
102 | t.text "description"
103 | t.text "short_description"
104 | t.string "library"
105 | end
106 |
107 | create_table "api_taglibs_14", :force => true do |t|
108 | t.string "name"
109 | t.text "short_description"
110 | t.text "description"
111 | t.string "edit_link"
112 | t.datetime "created_at"
113 | t.datetime "updated_at"
114 | t.integer "plugin_id"
115 | end
116 |
117 | add_index "api_taglibs_14", ["plugin_id"], :name => "index_api_taglibs_14_on_plugin_id"
118 |
119 | create_table "comments", :force => true do |t|
120 | t.text "body"
121 | t.boolean "markdown"
122 | t.datetime "created_at"
123 | t.datetime "updated_at"
124 | t.integer "user_id"
125 | t.integer "recipe_id"
126 | end
127 |
128 | add_index "comments", ["recipe_id"], :name => "index_comments_on_recipe_id"
129 | add_index "comments", ["user_id"], :name => "index_comments_on_user_id"
130 |
131 | create_table "images", :force => true do |t|
132 | t.datetime "created_at"
133 | t.datetime "updated_at"
134 | t.integer "recipe_id"
135 | t.string "image_file_name"
136 | t.string "image_content_type"
137 | t.integer "image_file_size", :limit => 4
138 | t.datetime "image_updated_at"
139 | end
140 |
141 | add_index "images", ["recipe_id"], :name => "index_images_on_recipe_id"
142 |
143 | create_table "questions", :force => true do |t|
144 | t.text "description"
145 | t.boolean "markdown"
146 | t.datetime "created_at"
147 | t.datetime "updated_at"
148 | t.integer "user_id"
149 | t.string "subject"
150 | end
151 |
152 | add_index "questions", ["user_id"], :name => "index_questions_on_user_id"
153 |
154 | create_table "recipes", :force => true do |t|
155 | t.string "name"
156 | t.text "body"
157 | t.datetime "created_at"
158 | t.datetime "updated_at"
159 | t.integer "user_id"
160 | end
161 |
162 | add_index "recipes", ["user_id"], :name => "index_recipes_on_user_id"
163 |
164 | create_table "taggings", :force => true do |t|
165 | t.datetime "created_at"
166 | t.datetime "updated_at"
167 | t.integer "tag_id"
168 | t.integer "recipe_id"
169 | end
170 |
171 | add_index "taggings", ["recipe_id"], :name => "index_taggings_on_recipe_id"
172 | add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
173 |
174 | create_table "tags", :force => true do |t|
175 | t.string "name"
176 | t.datetime "created_at"
177 | t.datetime "updated_at"
178 | end
179 |
180 | create_table "users", :force => true do |t|
181 | t.string "crypted_password", :limit => 40
182 | t.string "salt", :limit => 40
183 | t.string "remember_token"
184 | t.datetime "remember_token_expires_at"
185 | t.string "username"
186 | t.string "email_address"
187 | t.boolean "administrator", :default => false
188 | t.datetime "created_at"
189 | t.datetime "updated_at"
190 | t.string "state", :default => "active"
191 | t.datetime "key_timestamp"
192 | end
193 |
194 | add_index "users", ["state"], :name => "index_users_on_state"
195 |
196 | end
197 |
--------------------------------------------------------------------------------
/app/assets/javascripts/application/code_highlighter.js:
--------------------------------------------------------------------------------
1 | /* Unobtrustive Code Highlighter By Dan Webb 11/2005
2 | Version: 0.4
3 |
4 | Usage:
5 | Add a script tag for this script and any stylesets you need to use
6 | to the page in question, add correct class names to CODE elements,
7 | define CSS styles for elements. That's it!
8 |
9 | Known to work on:
10 | IE 5.5+ PC
11 | Firefox/Mozilla PC/Mac
12 | Opera 7.23 + PC
13 | Safari 2
14 |
15 | Known to degrade gracefully on:
16 | IE5.0 PC
17 |
18 | Note: IE5.0 fails due to the use of lookahead in some stylesets. To avoid script errors
19 | in older browsers use expressions that use lookahead in string format when defining stylesets.
20 |
21 | This script is inspired by star-light by entirely cunning Dean Edwards
22 | http://dean.edwards.name/star-light/.
23 | */
24 |
25 | // replace callback support for safari.
26 | if ("a".replace(/a/, function() {return "b"}) != "b") (function(){
27 | var default_replace = String.prototype.replace;
28 | String.prototype.replace = function(search,replace){
29 | // replace is not function
30 | if(typeof replace != "function"){
31 | return default_replace.apply(this,arguments)
32 | }
33 | var str = "" + this;
34 | var callback = replace;
35 | // search string is not RegExp
36 | if(!(search instanceof RegExp)){
37 | var idx = str.indexOf(search);
38 | return (
39 | idx == -1 ? str :
40 | default_replace.apply(str,[search,callback(search, idx, str)])
41 | )
42 | }
43 | var reg = search;
44 | var result = [];
45 | var lastidx = reg.lastIndex;
46 | var re;
47 | while((re = reg.exec(str)) != null){
48 | var idx = re.index;
49 | var args = re.concat(idx, str);
50 | result.push(
51 | str.slice(lastidx,idx),
52 | callback.apply(null,args).toString()
53 | );
54 | if(!reg.global){
55 | lastidx += RegExp.lastMatch.length;
56 | break
57 | }else{
58 | lastidx = reg.lastIndex;
59 | }
60 | }
61 | result.push(str.slice(lastidx));
62 | return result.join("")
63 | }
64 | })();
65 |
66 | var CodeHighlighter = { styleSets : new Array };
67 |
68 | CodeHighlighter.addStyle = function(name, rules) {
69 | // using push test to disallow older browsers from adding styleSets
70 | if ([].push) this.styleSets.push({
71 | name : name,
72 | rules : rules,
73 | ignoreCase : arguments[2] || false
74 | })
75 |
76 | function setEvent() {
77 | // set highlighter to run on load (use LowPro if present)
78 | if (typeof Event != 'undefined' && typeof Event.onReady == 'function')
79 | return Event.onReady(CodeHighlighter.init.bind(CodeHighlighter));
80 |
81 | var old = window.onload;
82 |
83 | if (typeof window.onload != 'function') {
84 | window.onload = function() { CodeHighlighter.init() };
85 | } else {
86 | window.onload = function() {
87 | old();
88 | CodeHighlighter.init();
89 | }
90 | }
91 | }
92 |
93 | // only set the event when the first style is added
94 | if (this.styleSets.length==1) setEvent();
95 | }
96 |
97 | CodeHighlighter.init = function() {
98 | if (!document.getElementsByTagName) return;
99 | if ("a".replace(/a/, function() {return "b"}) != "b") return; // throw out Safari versions that don't support replace function
100 | // throw out older browsers
101 |
102 | var codeEls = document.getElementsByTagName("CODE");
103 | // collect array of all pre elements
104 | codeEls.filter = function(f) {
105 | var a = new Array;
106 | for (var i = 0; i < this.length; i++) if (f(this[i])) a[a.length] = this[i];
107 | return a;
108 | }
109 |
110 | var rules = new Array;
111 | rules.toString = function() {
112 | // joins regexes into one big parallel regex
113 | var exps = new Array;
114 | for (var i = 0; i < this.length; i++) exps.push(this[i].exp);
115 | return exps.join("|");
116 | }
117 |
118 | function addRule(className, rule) {
119 | // add a replace rule
120 | var exp = (typeof rule.exp != "string")?String(rule.exp).substr(1, String(rule.exp).length-2):rule.exp;
121 | // converts regex rules to strings and chops of the slashes
122 | rules.push({
123 | className : className,
124 | exp : "(" + exp + ")",
125 | length : (exp.match(/(^|[^\\])\([^?]/g) || "").length + 1, // number of subexps in rule
126 | replacement : rule.replacement || null
127 | });
128 | }
129 |
130 | function parse(text, ignoreCase) {
131 | // main text parsing and replacement
132 | return text.replace(new RegExp(rules, (ignoreCase)?"gi":"g"), function() {
133 | var i = 0, j = 1, rule;
134 | while (rule = rules[i++]) {
135 | if (arguments[j]) {
136 | // if no custom replacement defined do the simple replacement
137 | if (!rule.replacement) return "" + arguments[0] + "";
138 | else {
139 | // replace $0 with the className then do normal replaces
140 | var str = rule.replacement.replace("$0", rule.className);
141 | for (var k = 1; k <= rule.length - 1; k++) str = str.replace("$" + k, arguments[j + k]);
142 | return str;
143 | }
144 | } else j+= rule.length;
145 | }
146 | });
147 | }
148 |
149 | function highlightCode(styleSet) {
150 | // clear rules array
151 | var parsed, clsRx = new RegExp("(\\s|^)" + styleSet.name + "(\\s|$)");
152 | rules.length = 0;
153 |
154 | // get stylable elements by filtering out all code elements without the correct className
155 | var stylableEls = codeEls.filter(function(item) { return clsRx.test(item.parentNode.className) });
156 |
157 | // add style rules to parser
158 | for (var className in styleSet.rules) addRule(className, styleSet.rules[className]);
159 |
160 |
161 | // replace for all elements
162 | for (var i = 0; i < stylableEls.length; i++) {
163 | // EVIL hack to fix IE whitespace badness if it's inside a
164 | if (/MSIE/.test(navigator.appVersion) && stylableEls[i].parentNode.nodeName == 'PRE') {
165 | stylableEls[i] = stylableEls[i].parentNode;
166 |
167 | parsed = stylableEls[i].innerHTML.replace(/(]*>)([^<]*)<\/code>/i, function() {
168 | return arguments[1] + parse(arguments[2], styleSet.ignoreCase) + ""
169 | });
170 | parsed = parsed.replace(/\n( *)/g, function() {
171 | var spaces = "";
172 | for (var i = 0; i < arguments[1].length; i++) spaces+= " ";
173 | return "\n" + spaces;
174 | });
175 | parsed = parsed.replace(/\t/g, " ");
176 | parsed = parsed.replace(/\n(<\/\w+>)?/g, "
$1").replace(/
[\n\r\s]*
/g, "
");
177 |
178 | } else parsed = parse(stylableEls[i].innerHTML, styleSet.ignoreCase);
179 |
180 | stylableEls[i].innerHTML = parsed;
181 | }
182 | }
183 |
184 | // run highlighter on all stylesets
185 | for (var i=0; i < this.styleSets.length; i++) {
186 | highlightCode(this.styleSets[i]);
187 | }
188 | }
--------------------------------------------------------------------------------
/app/controllers/manual_controller.rb:
--------------------------------------------------------------------------------
1 | class ManualController < ApplicationController
2 |
3 | caches_page :manual_section, :manual_subsection
4 | def self.create_ordered_hash(llist)
5 | ActiveSupport::OrderedHash[llist]
6 | end
7 |
8 | DOC_GITHUB = "https://github.com/Hobo/hobodoc/edit/master/doc"
9 | HOBO_GITHUB = "https://github.com/Hobo/hobodoc/edit/master/hobo"
10 | HOBOFIELDS_GITHUB = "https://github.com/Hobo/hobodoc/edit/master/hobo_fields"
11 | HOBOSUPPORT_GITHUB ="https://github.com/Hobo/hobodoc/edit/master/hobo_support"
12 | DOC_ROOT = `bundle show doc`.strip
13 |
14 | TITLES = self.create_ordered_hash(
15 | [# ['to-do', "To Do List"],
16 | ["toc", ["Table of Contents", "manual/toc.markdown", DOC_ROOT, DOC_GITHUB]],
17 | ["download", ["Download and Install", "manual/download.markdown", DOC_ROOT, DOC_GITHUB]],
18 | ["changes13", ["Changes in 1.3", "CHANGES-1.3.txt", Hobo.root, HOBO_GITHUB]],
19 | ["changes20", ["Changes in 2.0", "CHANGES-2.0.markdown", Hobo.root, HOBO_GITHUB]],
20 | ["faq", ["FAQ and Misunderstandings", "manual/FAQ.markdown", DOC_ROOT, DOC_GITHUB]],
21 | ["hobo_support", ["Hobo Support", "test/hobosupport.rdoctest", HoboSupport.root, HOBOSUPPORT_GITHUB]],
22 | ["hobo_fields", ["Hobo Fields", "test/doc-only.rdoctest", HoboFields.root, HOBOFIELDS_GITHUB]],
23 | ["scopes", ["Automatic Named Scopes", "test/doctest/hobo/scopes.rdoctest", Hobo.root, HOBO_GITHUB]],
24 | ["permissions", ["The Permission System", "manual/permissions.markdown", DOC_ROOT, DOC_GITHUB]],
25 | ["multi_model_forms", ["Accessible Associations", "test/doctest/hobo/multi_model_forms.rdoctest", Hobo.root, HOBO_GITHUB]],
26 | ["users_and_authentication", ["Users and Authentication", "manual/users_and_authentication.markdown", DOC_ROOT, DOC_GITHUB]],
27 | ["model", ["Miscellaneous Model Extensions", "test/doctest/hobo/model.rdoctest", Hobo.root, HOBO_GITHUB]],
28 | ["controllers", ["Controllers and Routing", "manual/controllers.markdown", DOC_ROOT, DOC_GITHUB]],
29 | ["controller", ["Miscellaneous Controller Extensions", "test/doctest/hobo/controller.rdoctest", Hobo.root, HOBO_GITHUB]],
30 | ["dryml-guide", ["The DRYML Guide", "manual/dryml-guide.markdown", DOC_ROOT, DOC_GITHUB]],
31 | ["ajax", ["Ajax in Hobo", "manual/ajax.markdown", DOC_ROOT, DOC_GITHUB]],
32 | ["lifecycles", ["Lifecycles", "manual/lifecycles.markdown", DOC_ROOT, DOC_GITHUB]],
33 | ["viewhints", ["View Hints", "manual/viewhints.markdown", DOC_ROOT, DOC_GITHUB]],
34 | ["generators", ["Generators", "manual/generators.markdown", DOC_ROOT, DOC_GITHUB]],
35 | ["i18n", ["Internationalization", "manual/i18n.markdown", DOC_ROOT, DOC_GITHUB]],
36 | ["plugins", ["Creating Plugins", "manual/plugins.markdown", DOC_ROOT, DOC_GITHUB]],
37 | ["gems", ["The Hobo Gem Stack and UI Plugins", "manual/gems.markdown", DOC_ROOT, DOC_GITHUB]],
38 | ])
39 |
40 | SUBTITLES = {
41 | "hobo_fields" => self.create_ordered_hash(
42 | [["rich_types", ["Rich Types", "test/rich_types.rdoctest", HoboFields.root, HOBOFIELDS_GITHUB]],
43 | ["api", ["API", "test/api.rdoctest", HoboFields.root, HOBOFIELDS_GITHUB]],
44 | ["migration_generator",["Migration Generator", "test/migration_generator.rdoctest", HoboFields.root, HOBOFIELDS_GITHUB]],
45 | #["generators", "Generators"],
46 | #["interactive_primary_key", "Interactive Primary Key"],
47 | #["migration_generator_comments", ["Migration Generator Comments", "test/migration_generator_comments.rdoctest", HoboFields.root, HOBOFIELDS_GITHUB]]
48 | ]),
49 | "hobo_support" => self.create_ordered_hash(
50 | [["chronic", ["Chronic", "test/hobosupport/chronic.rdoctest", HoboSupport.root, HOBOSUPPORT_GITHUB]],
51 | ["enumerable", ["Enumerable", "test/hobosupport/enumerable.rdoctest", HoboSupport.root, HOBOSUPPORT_GITHUB]],
52 | ["hash", ["Hash", "test/hobosupport/hash.rdoctest", HoboSupport.root, HOBOSUPPORT_GITHUB]],
53 | ["implies", ["Implies", "test/hobosupport/implies.rdoctest", HoboSupport.root, HOBOSUPPORT_GITHUB]],
54 | ["metaid", ["Metaid", "test/hobosupport/metaid.rdoctest", HoboSupport.root, HOBOSUPPORT_GITHUB]],
55 | ["methodphitamine", ["Methodphitamine", "test/hobosupport/methodphitamine.rdoctest", HoboSupport.root, HOBOSUPPORT_GITHUB]],
56 | ["module", ["Module", "test/hobosupport/module.rdoctest", HoboSupport.root, HOBOSUPPORT_GITHUB]],
57 | ["xss", ["XSS", "test/hobosupport/xss.rdoctest", HoboSupport.root, HOBOSUPPORT_GITHUB]],
58 | ]),
59 | "generators" => self.create_ordered_hash(
60 | [["admin_subsite", ["admin_subsite", "manual/generators/admin_subsite.markdown", Rails.root, nil]],
61 | ["assets", ["assets", "manual/generators/assets.markdown", Rails.root, nil]],
62 | ["controller", ["controller", "manual/generators/controller.markdown", Rails.root, nil]],
63 | ["front_controller", ["front_controller", "manual/generators/front_controller.markdown", Rails.root, nil]],
64 | ["i18n", ["i18n", "manual/generators/i18n.markdown", Rails.root, nil]],
65 | ["install_plugin", ["install_plugin", "manual/generators/install_plugin.markdown", Rails.root, nil]],
66 | ["migration", ["migration", "manual/generators/migration.markdown", Rails.root, nil]],
67 | ["model", ["model", "manual/generators/model.markdown", Rails.root, nil]],
68 | ["resource", ["resource", "manual/generators/resource.markdown", Rails.root, nil]],
69 | ["routes", ["routes", "manual/generators/routes.markdown", Rails.root, nil]],
70 | ["setup_wizard", ["setup_wizard", "manual/generators/setup_wizard.markdown", Rails.root, nil]],
71 | ["subsite", ["subsite", "manual/generators/subsite.markdown", Rails.root, nil]],
72 | ["subsite_taglib", ["subsite_taglib", "manual/generators/subsite_taglib.markdown", Rails.root, nil]],
73 | ["test_framework", ["test_framework", "manual/generators/test_framework.markdown", Rails.root, nil]],
74 | ["user_controller", ["user_controller", "manual/generators/user_controller.markdown", Rails.root, nil]],
75 | ["user_mailer", ["user_mailer", "manual/generators/user_mailer.markdown", Rails.root, nil]],
76 | ["user_model", ["user_model", "manual/generators/user_model.markdown", Rails.root, nil]],
77 | ["user_resource", ["user_resource", "manual/generators/user_resource.markdown", Rails.root, nil]]])
78 |
79 | }
80 |
81 | def manual_section
82 | section = params[:section].gsub(/[^a-z0-9_\-]/, '')
83 | if TITLES[section].nil?
84 | redirect_to :action => :index
85 | return
86 | end
87 | filename = "#{TITLES[section][2]}/#{TITLES[section][1]}"
88 | @title = TITLES[section][0]
89 | @subtitles = SUBTITLES[section].nil? ? nil : ActiveSupport::OrderedHash[*SUBTITLES[section].map {|k,v| [k, v[0]]}.flatten]
90 | @content = HoboFields::Types::MarkdownString.new(File.read(filename))
91 | @last_update = last_update filename
92 | @edit_link = "#{TITLES[section][3]}/#{TITLES[section][1]}"
93 | end
94 |
95 | def manual_subsection
96 | section = params[:section].gsub(/[^a-z0-9_\-]/, '')
97 | subsection = params[:subsection].gsub(/[^a-z0-9_\-]/, '')
98 | if SUBTITLES[section].nil? || SUBTITLES[section][subsection].nil?
99 | redirect_to :action => :index
100 | return
101 | end
102 | filename = "#{SUBTITLES[section][subsection][2]}/#{SUBTITLES[section][subsection][1]}"
103 | @title = TITLES[section][0]
104 | @subtitles = ActiveSupport::OrderedHash[*SUBTITLES[section].map {|k,v| [k, v[0]]}.flatten]
105 | @current_subtitle = SUBTITLES[section][subsection][0]
106 | @content = HoboFields::Types::MarkdownString.new(File.read(filename))
107 | @last_update = last_update filename
108 | @edit_link = "#{SUBTITLES[section][subsection][3]}/#{SUBTITLES[section][subsection][1]}" if SUBTITLES[section][subsection][3]
109 | render :manual_subsection
110 | end
111 |
112 | def index
113 | redirect_to :action => "manual_section", :section => "toc"
114 | end
115 |
116 | def self.titles
117 | ActiveSupport::OrderedHash[*TITLES.map {|k,v| [k, v[0]]}.flatten]
118 | end
119 |
120 | end
121 |
122 |
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GIT
2 | remote: git://github.com/Hobo/hobo.git
3 | revision: 1f253d667850a7063c146fb8e704e4706a10eac5
4 | specs:
5 | doc (0.0.1)
6 | dryml (2.0.0.pre7)
7 | actionpack (~> 3.2.0)
8 | hobo_support (= 2.0.0.pre7)
9 | hobo (2.0.0.pre7)
10 | dryml (= 2.0.0.pre7)
11 | hobo_fields (= 2.0.0.pre7)
12 | hobo_support (= 2.0.0.pre7)
13 | will_paginate (~> 3.0.0)
14 | hobo_clean (2.0.0.pre7)
15 | hobo (= 2.0.0.pre7)
16 | hobo_jquery (= 2.0.0.pre7)
17 | hobo_clean_admin (2.0.0.pre7)
18 | hobo_clean (= 2.0.0.pre7)
19 | hobo_clean_sidemenu (2.0.0.pre7)
20 | hobo_clean (= 2.0.0.pre7)
21 | hobo_fields (2.0.0.pre7)
22 | hobo_support (= 2.0.0.pre7)
23 | hobo_jquery (2.0.0.pre7)
24 | hobo_rapid (= 2.0.0.pre7)
25 | jquery-rails (~> 2.0)
26 | hobo_jquery_ui (2.0.0.pre7)
27 | hobo (= 2.0.0.pre7)
28 | hobo_jquery (= 2.0.0.pre7)
29 | jquery-ui-themes (~> 0.0.4)
30 | hobo_rapid (2.0.0.pre7)
31 | hobo (= 2.0.0.pre7)
32 | hobo_support (2.0.0.pre7)
33 | rails (~> 3.2.0)
34 |
35 | GIT
36 | remote: git://github.com/Hobo/hobo_bootstrap.git
37 | revision: 854c5ae38bd31a437ed9d9d39c3691b46aa77e48
38 | specs:
39 | hobo_bootstrap (2.0.0.pre7)
40 | bootstrap-sass (~> 2.1)
41 | hobo (~> 2.0.0.pre6)
42 | hobo_jquery (~> 2.0.0.pre6)
43 | will_paginate-bootstrap (~> 0.2.1)
44 |
45 | GIT
46 | remote: git://github.com/Hobo/hobo_bootstrap_ui.git
47 | revision: e73a58727b186f0bd674e1ff84470716862ad70c
48 | specs:
49 | hobo_bootstrap_ui (2.0.0.pre7)
50 | bootstrap-datepicker-rails
51 | hobo_bootstrap (~> 2.0.0.pre1)
52 |
53 | GIT
54 | remote: git://github.com/Hobo/hobo_data_tables.git
55 | revision: 89a5a882b938c8cb775eb50e79ea6c3ab3d1dbaa
56 | specs:
57 | hobo_data_tables (0.0.1)
58 | hobo (> 1.4.0.pre5)
59 | jquery-datatables-rails
60 |
61 | GIT
62 | remote: git://github.com/Hobo/hobo_mapstraction.git
63 | revision: 3df6c1c70ab593db0d04f1233bb3b1199bd60b68
64 | specs:
65 | hobo_mapstraction (0.0.1)
66 | hobo (> 1.4.0.pre6)
67 |
68 | GIT
69 | remote: git://github.com/Hobo/hobo_omniauth.git
70 | revision: cb9d74aaa98e20dfaf08dee6dfd8963a9468e244
71 | specs:
72 | hobo_omniauth (0.0.1)
73 | hobo (~> 2.0.0.pre7)
74 | omniauth (~> 1.1)
75 |
76 | GIT
77 | remote: git://github.com/Hobo/hobo_paperclip.git
78 | revision: 47e37cdb9e55547da3a3fd8c75ba949d846fb215
79 | specs:
80 | hobo_paperclip (0.0.4)
81 | hobo
82 | paperclip
83 |
84 | GIT
85 | remote: git://github.com/Hobo/hobo_simple_color.git
86 | revision: 35dea062d760c39dbcff521f1377afbbed2f10b1
87 | specs:
88 | hobo_simple_color (0.0.2)
89 | hobo (> 1.4.0.pre4)
90 |
91 | GIT
92 | remote: git://github.com/Hobo/hobo_tokeninput.git
93 | revision: 271317004e0a3c6fd6083405b30193e3fbbae0ba
94 | specs:
95 | hobo_tokeninput (0.0.1)
96 | hobo (> 1.4.0.pre5)
97 |
98 | GIT
99 | remote: git://github.com/Hobo/hobo_tree_table.git
100 | revision: f3533062ae8f8051daeb82292d31735cdee7b697
101 | specs:
102 | hobo_tree_table (0.0.1)
103 | hobo (> 1.4.0.pre1)
104 |
105 | GIT
106 | remote: git://github.com/Hobo/select_one_or_new_dialog.git
107 | revision: 238312c2d032e40c899215835c220fc338c0f472
108 | specs:
109 | select_one_or_new_dialog (0.0.1)
110 | hobo (> 1.4.0.pre1)
111 | hobo_jquery_ui (> 1.4.0.pre1)
112 |
113 | GIT
114 | remote: git://github.com/Hobo/will_paginate.git
115 | revision: cc7ef01551b94fe4f607e38929037234dc70bb62
116 | specs:
117 | will_paginate (3.0.4.hobo)
118 |
119 | GIT
120 | remote: git://github.com/bryanlarsen/vlad-git.git
121 | revision: 0fa91ca93089003779aa564b4cdef238f08385cf
122 | specs:
123 | vlad-git (2.2.0)
124 | vlad (>= 2.1.0)
125 |
126 | GEM
127 | remote: http://rubygems.org/
128 | specs:
129 | actionmailer (3.2.8)
130 | actionpack (= 3.2.8)
131 | mail (~> 2.4.4)
132 | actionpack (3.2.8)
133 | activemodel (= 3.2.8)
134 | activesupport (= 3.2.8)
135 | builder (~> 3.0.0)
136 | erubis (~> 2.7.0)
137 | journey (~> 1.0.4)
138 | rack (~> 1.4.0)
139 | rack-cache (~> 1.2)
140 | rack-test (~> 0.6.1)
141 | sprockets (~> 2.1.3)
142 | activemodel (3.2.8)
143 | activesupport (= 3.2.8)
144 | builder (~> 3.0.0)
145 | activerecord (3.2.8)
146 | activemodel (= 3.2.8)
147 | activesupport (= 3.2.8)
148 | arel (~> 3.0.2)
149 | tzinfo (~> 0.3.29)
150 | activeresource (3.2.8)
151 | activemodel (= 3.2.8)
152 | activesupport (= 3.2.8)
153 | activesupport (3.2.8)
154 | i18n (~> 0.6)
155 | multi_json (~> 1.0)
156 | arel (3.0.2)
157 | awesome_print (1.1.0)
158 | bootstrap-datepicker-rails (0.6.32)
159 | railties (>= 3.0)
160 | bootstrap-sass (2.2.1.1)
161 | sass (~> 3.2)
162 | builder (3.0.4)
163 | cocaine (0.4.2)
164 | coffee-rails (3.2.2)
165 | coffee-script (>= 2.2.0)
166 | railties (~> 3.2.0)
167 | coffee-script (2.2.0)
168 | coffee-script-source
169 | execjs
170 | coffee-script-source (1.4.0)
171 | erubis (2.7.0)
172 | execjs (1.4.0)
173 | multi_json (~> 1.0)
174 | hashie (1.2.0)
175 | hike (1.2.1)
176 | httparty (0.9.0)
177 | multi_json (~> 1.0)
178 | multi_xml
179 | i18n (0.6.1)
180 | journey (1.0.4)
181 | jquery-datatables-rails (1.11.2)
182 | jquery-rails
183 | jquery-rails (2.1.4)
184 | railties (>= 3.0, < 5.0)
185 | thor (>= 0.14, < 2.0)
186 | jquery-ui-themes (0.0.8)
187 | httparty
188 | json (1.7.5)
189 | libv8 (3.3.10.4)
190 | mail (2.4.4)
191 | i18n (>= 0.4.0)
192 | mime-types (~> 1.16)
193 | treetop (~> 1.4.8)
194 | maruku (0.6.1)
195 | syntax (>= 1.0.0)
196 | mime-types (1.19)
197 | multi_json (1.5.0)
198 | multi_xml (0.5.1)
199 | mysql (2.8.1)
200 | omniauth (1.1.1)
201 | hashie (~> 1.2)
202 | rack
203 | open4 (1.3.0)
204 | paperclip (2.8.0)
205 | activerecord (>= 2.3.0)
206 | activesupport (>= 2.3.2)
207 | cocaine (>= 0.0.2)
208 | mime-types
209 | polyglot (0.3.3)
210 | quiet_assets (1.0.1)
211 | railties (~> 3.1)
212 | rack (1.4.1)
213 | rack-cache (1.2)
214 | rack (>= 0.4)
215 | rack-ssl (1.3.2)
216 | rack
217 | rack-test (0.6.2)
218 | rack (>= 1.0)
219 | rails (3.2.8)
220 | actionmailer (= 3.2.8)
221 | actionpack (= 3.2.8)
222 | activerecord (= 3.2.8)
223 | activeresource (= 3.2.8)
224 | activesupport (= 3.2.8)
225 | bundler (~> 1.0)
226 | railties (= 3.2.8)
227 | railties (3.2.8)
228 | actionpack (= 3.2.8)
229 | activesupport (= 3.2.8)
230 | rack-ssl (~> 1.3.2)
231 | rake (>= 0.8.7)
232 | rdoc (~> 3.4)
233 | thor (>= 0.14.6, < 2.0)
234 | rake (10.0.3)
235 | rake-remote_task (2.1.0)
236 | open4 (~> 1.0)
237 | rake (>= 0.8, < 11.0)
238 | rdoc (3.12)
239 | json (~> 1.4)
240 | recaptcha (0.3.4)
241 | sass (3.2.3)
242 | sass-rails (3.2.5)
243 | railties (~> 3.2.0)
244 | sass (>= 3.1.10)
245 | tilt (~> 1.3)
246 | sprockets (2.1.3)
247 | hike (~> 1.2)
248 | rack (~> 1.0)
249 | tilt (~> 1.1, != 1.3.0)
250 | syntax (1.0.0)
251 | therubyracer (0.10.2)
252 | libv8 (~> 3.3.10)
253 | thor (0.16.0)
254 | tilt (1.3.3)
255 | treetop (1.4.12)
256 | polyglot
257 | polyglot (>= 0.3.1)
258 | tzinfo (0.3.35)
259 | uglifier (1.3.0)
260 | execjs (>= 0.3.0)
261 | multi_json (~> 1.0, >= 1.0.2)
262 | vlad (2.3.1)
263 | rake (>= 0.8, < 11.0)
264 | rake-remote_task (~> 2.1)
265 | will_paginate-bootstrap (0.2.1)
266 | will_paginate (>= 3.0.3)
267 | yard (0.8.3)
268 |
269 | PLATFORMS
270 | ruby
271 |
272 | DEPENDENCIES
273 | awesome_print
274 | cocaine
275 | coffee-rails (~> 3.2.1)
276 | doc!
277 | dryml!
278 | execjs
279 | hobo!
280 | hobo_bootstrap!
281 | hobo_bootstrap_ui!
282 | hobo_clean!
283 | hobo_clean_admin!
284 | hobo_clean_sidemenu!
285 | hobo_data_tables!
286 | hobo_fields!
287 | hobo_jquery!
288 | hobo_jquery_ui!
289 | hobo_mapstraction!
290 | hobo_omniauth!
291 | hobo_paperclip!
292 | hobo_rapid!
293 | hobo_simple_color!
294 | hobo_support!
295 | hobo_tokeninput!
296 | hobo_tree_table!
297 | jquery-rails
298 | jquery-ui-themes
299 | maruku
300 | mysql
301 | paperclip (~> 2.7)
302 | quiet_assets
303 | rails (= 3.2.8)
304 | recaptcha
305 | sass-rails (~> 3.2.3)
306 | select_one_or_new_dialog!
307 | therubyracer (~> 0.10.2)
308 | uglifier (>= 1.0.3)
309 | vlad
310 | vlad-git!
311 | will_paginate!
312 | yard
313 |
--------------------------------------------------------------------------------