wheels 0.0.17 → 0.0.18
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/app/controllers/blogs_controller.rb +7 -6
- data/app/controllers/galleries_controller.rb +3 -3
- data/app/controllers/pages_controller.rb +11 -0
- data/app/controllers/profiles_controller.rb +1 -1
- data/app/helpers/blogs_helper.rb +10 -0
- data/app/helpers/pages_helper.rb +11 -0
- data/app/models/ability.rb +20 -3
- data/app/models/blog.rb +2 -1
- data/app/models/image.rb +3 -1
- data/app/models/page.rb +5 -0
- data/app/models/page_revision.rb +2 -0
- data/app/models/profile.rb +1 -0
- data/app/models/tagging.rb +4 -0
- data/app/models/user.rb +17 -12
- data/app/views/blogs/_form.html.haml +4 -10
- data/app/views/blogs/index.html.haml +4 -0
- data/app/views/blogs/show.html.haml +3 -4
- data/app/views/galleries/_form.html.haml +3 -2
- data/app/views/galleries/_show.html.haml +2 -2
- data/app/views/galleries/show.html.haml +2 -2
- data/app/views/layouts/application.html.haml +48 -0
- data/app/views/pages/_form.html.haml +19 -0
- data/app/views/pages/edit.html.haml +7 -0
- data/app/views/pages/index.html.haml +21 -0
- data/app/views/pages/new.html.haml +5 -0
- data/app/views/pages/show.html.haml +6 -0
- data/db/migrate/create_blogs.rb +1 -1
- data/db/migrate/create_roles.rb +0 -3
- data/db/migrate/insert_admin_user_and_roles.rb +4 -4
- data/lib/generators/app_layout/LICENCE +20 -0
- data/lib/generators/app_layout/USAGE +8 -0
- data/lib/generators/app_layout/app_layout_generator.rb +18 -0
- data/lib/generators/app_layout/core_extensions.rb +51 -0
- data/lib/generators/update_wheels/LICENCE +20 -0
- data/lib/generators/update_wheels/USAGE +8 -0
- data/lib/generators/update_wheels/core_extensions.rb +51 -0
- data/lib/generators/update_wheels/recipes/wheels.rb +11 -0
- data/lib/generators/update_wheels/templates/cancan/ability.rb +13 -0
- data/lib/generators/update_wheels/templates/database/postgresql.yml +19 -0
- data/lib/generators/update_wheels/templates/git/gitignore +8 -0
- data/lib/generators/update_wheels/templates/haml/app/views/layouts/application.html.haml +9 -0
- data/lib/generators/update_wheels/templates/mongoid/features/step_definitions/mongoid_steps.rb +4 -0
- data/lib/generators/update_wheels/templates/mongoid/features/support/hooks.rb +3 -0
- data/lib/generators/update_wheels/update_wheels_generator.rb +43 -0
- data/lib/generators/wheels/recipes/cancan.rb +3 -3
- data/lib/generators/wheels/recipes/haml.rb +2 -2
- data/lib/generators/wheels/recipes/recipes.rb +164 -0
- data/lib/generators/wheels/recipes/wheels.rb +41 -35
- data/lib/generators/wheels/templates/haml/app/views/layouts/application.html.haml +0 -9
- data/lib/generators/wheels/views_generator.rb +15 -0
- data/lib/generators/wheels/wheels_generator.rb +1 -1
- data/lib/generators/wheels_views/LICENCE +20 -0
- data/lib/generators/wheels_views/USAGE +8 -0
- data/lib/generators/wheels_views/wheels_views_generator.rb +15 -0
- data/lib/wheels/action_view_helper_extensions.rb +9 -0
- data/lib/wheels/active_record_extensions.rb +44 -0
- data/lib/wheels/active_record_user_extensions.rb +34 -0
- data/lib/wheels/user.rb +32 -0
- data/lib/wheels/wheels_engine.rb +7 -0
- data/lib/wheels.rb +2 -0
- data/public/javascripts/galleries/configure_ckeditor.js +8 -0
- data/public/javascripts/jqUrl.js +28 -0
- data/public/stylesheets/dreamy.css +3 -1
- data/public/stylesheets/sass/dreamy.sass +3 -0
- data/public/stylesheets/sass/wheels.sass +25 -0
- data/wheels.gemspec +42 -2
- metadata +44 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.18
|
@@ -1,17 +1,18 @@
|
|
1
1
|
class BlogsController < InheritedResources::Base
|
2
2
|
respond_to :html, :xml
|
3
|
-
|
4
|
-
|
3
|
+
before_filter
|
4
|
+
has_scope :tagged_with, :as => :tag
|
5
|
+
belongs_to :user, :optional => true
|
5
6
|
|
6
7
|
def collection
|
7
8
|
@blogs ||= end_of_association_chain.
|
8
9
|
paginate(:page => params[:page], :order => 'created_at DESC' )
|
9
10
|
end
|
10
11
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
def begin_of_association_chain
|
13
|
+
@user ||= (current_user ? User.find(current_user.id) : super_user)
|
14
|
+
@tags = Blog.where(:user_id=>@user.id).tag_counts.sort{|t, u| t.count <=> u.count}
|
15
|
+
return @user
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
@@ -24,10 +24,10 @@ class GalleriesController < InheritedResources::Base
|
|
24
24
|
|
25
25
|
def show
|
26
26
|
show! do |format|
|
27
|
-
images = paginated_images_for(@gallery)
|
27
|
+
@images = paginated_images_for(@gallery)
|
28
28
|
if params[:CKEditorFuncNum]
|
29
29
|
format.html{
|
30
|
-
render :action=>:show, :layout=>"image_dialog"
|
30
|
+
render :action=>:show, :layout=>"image_dialog"
|
31
31
|
}
|
32
32
|
end
|
33
33
|
end
|
@@ -44,7 +44,7 @@ class GalleriesController < InheritedResources::Base
|
|
44
44
|
|
45
45
|
def load_user
|
46
46
|
unless params[:user_id]
|
47
|
-
@user ||= (current_user ? User.find(current_user.id) :
|
47
|
+
@user ||= (current_user ? User.find(current_user.id) : super_user)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
helper_method :ckeditor_params, :paginated_images_for
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class PagesController < InheritedResources::Base
|
2
|
+
def resource
|
3
|
+
page_id = params[:id] || Layout.current[:default_page]
|
4
|
+
if page_id.is_numeric?
|
5
|
+
@page ||= Page.find(page_id)
|
6
|
+
else
|
7
|
+
@page ||= Page.where(["pages.title.tolower() = ?", page_id.downcase])
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
data/app/models/ability.rb
CHANGED
@@ -1,23 +1,40 @@
|
|
1
1
|
class Ability
|
2
2
|
include CanCan::Ability
|
3
|
+
initializer :init_wheels
|
3
4
|
|
4
5
|
def initialize(user)
|
6
|
+
initializers.each{|t| self.send(t, user)}
|
7
|
+
end
|
8
|
+
|
9
|
+
def init_wheels(user)
|
5
10
|
can :read, :all
|
6
11
|
return cannot :read, User unless user
|
12
|
+
roles = Role.all
|
7
13
|
user ||= User.new
|
14
|
+
def roles.find_by_name(name); self.select{|t| t.name==name}[0]; end;
|
8
15
|
case user.role_id
|
9
|
-
when
|
16
|
+
when roles.find_by_name("Super")
|
10
17
|
can :manage, :all
|
11
|
-
when
|
18
|
+
when roles.find_by_name("Admin")
|
12
19
|
can :manage, :all
|
13
|
-
when
|
20
|
+
when roles.find_by_name("User")
|
14
21
|
can :manage, Gallery, :user_id => user.id
|
15
22
|
can :manage, Blog, :user_id => user.id
|
16
23
|
can :edit, Profile, :user_id => user.id
|
17
24
|
cannot :read, User
|
18
25
|
end
|
19
26
|
can :read, :all
|
27
|
+
end
|
28
|
+
|
20
29
|
|
30
|
+
def self.initializer(*method_names)
|
31
|
+
method_names.each{|t| initializers << t}
|
21
32
|
end
|
33
|
+
|
34
|
+
def initializers
|
35
|
+
@initializers ||= []
|
36
|
+
end
|
37
|
+
|
38
|
+
|
22
39
|
end
|
23
40
|
|
data/app/models/blog.rb
CHANGED
data/app/models/image.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
class Image < ActiveRecord::Base
|
2
2
|
belongs_to :gallery
|
3
|
+
acts_as_taggable
|
3
4
|
has_attached_file :image,
|
4
5
|
:storage => :s3,
|
5
6
|
:s3_credentials => "#{Rails.root}/config/amazon_s3.yml",
|
6
|
-
:path => "/:style/:filename"
|
7
|
+
:path => "/images/:style/:filename",
|
8
|
+
:styles => { :medium => "300x300>", :thumb => "100x100>" }
|
7
9
|
end
|
8
10
|
|
data/app/models/page.rb
ADDED
data/app/models/profile.rb
CHANGED
data/app/models/user.rb
CHANGED
@@ -1,16 +1,6 @@
|
|
1
1
|
class User < ActiveRecord::Base
|
2
2
|
before_create :create_profile
|
3
3
|
belongs_to :role
|
4
|
-
|
5
|
-
# Include default devise modules. Others available are:
|
6
|
-
# :token_authenticatable, :confirmable, :lockable and :timeoutable
|
7
|
-
devise :database_authenticatable, :registerable, :confirmable, :token_authenticatable,
|
8
|
-
:recoverable, :rememberable, :trackable, :validatable
|
9
|
-
|
10
|
-
def self.super_user
|
11
|
-
@@super_user ||= User.where(:role_id=>Role::SUPER).first
|
12
|
-
end
|
13
|
-
|
14
4
|
has_many :blogs, :dependent => :destroy
|
15
5
|
has_one :profile, :dependent => :destroy
|
16
6
|
has_many :galleries, :dependent => :destroy
|
@@ -19,6 +9,16 @@ class User < ActiveRecord::Base
|
|
19
9
|
self.profile ||= Profile.create(:user => self)
|
20
10
|
end
|
21
11
|
|
12
|
+
def role?(role)
|
13
|
+
if role.kind_of?(Role)
|
14
|
+
return role==self.role
|
15
|
+
elsif role.is_numeric?
|
16
|
+
return self.role_id==role
|
17
|
+
else
|
18
|
+
return self.role.name.underscore==role.underscore
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
22
|
def role=(role)
|
23
23
|
if role.kind_of? Role
|
24
24
|
self.role_id = role.id
|
@@ -37,8 +37,13 @@ class User < ActiveRecord::Base
|
|
37
37
|
save
|
38
38
|
end
|
39
39
|
|
40
|
+
# Include default devise modules. Others available are:
|
41
|
+
# :token_authenticatable, :confirmable, :lockable and :timeoutable
|
42
|
+
devise :database_authenticatable, :registerable,
|
43
|
+
:recoverable, :rememberable, :trackable, :validatable,
|
44
|
+
:token_authenticatable, :confirmable, :lockable, :timeoutable
|
45
|
+
|
40
46
|
# Setup accessible (or protected) attributes for your model
|
41
|
-
attr_accessible :email, :password, :password_confirmation
|
42
|
-
:blogs, :profile, :role, :galleries
|
47
|
+
attr_accessible :email, :password, :password_confirmation
|
43
48
|
end
|
44
49
|
|
@@ -1,13 +1,4 @@
|
|
1
|
-
|
2
|
-
= javascript_include_tag '/ckeditor/ckeditor.js'
|
3
|
-
= javascript_include_tag '/ckeditor/adapters/jquery.js'
|
4
|
-
:javascript
|
5
|
-
$(function(){
|
6
|
-
config = {
|
7
|
-
filebrowserBrowseUrl : '#{galleries_path}'
|
8
|
-
};
|
9
|
-
$('.ckeditor_textarea').ckeditor(config);
|
10
|
-
});
|
1
|
+
- include_ckeditor
|
11
2
|
|
12
3
|
= form_for [@blog.user, @blog], :html=>{:multipart=>true} do |f|
|
13
4
|
-if @blog.errors.any?
|
@@ -20,6 +11,9 @@
|
|
20
11
|
.field
|
21
12
|
= f.label :title
|
22
13
|
= f.text_field :title
|
14
|
+
.field
|
15
|
+
= f.label "tag_list"
|
16
|
+
.tag_list= f.text_area :tag_list
|
23
17
|
.field
|
24
18
|
= f.label :body
|
25
19
|
= f.text_area :body, :class=>'ckeditor_textarea'
|
@@ -24,6 +24,7 @@
|
|
24
24
|
= form_for [@gallery, Image.new(:gallery=>@gallery)], :html=>{:id=>'upload', :multipart=>true} do |f|
|
25
25
|
- params.slice(:CKEditor, :CKEditorFuncNum, :langCode).each do |key, val|
|
26
26
|
= hidden_field_tag key, val
|
27
|
-
= f.file_field :image
|
28
|
-
= f.
|
27
|
+
.upload_field= f.file_field :image
|
28
|
+
.tag_field= f.text_field :tag_list
|
29
|
+
= f.submit "Upload Image", :disable_with=>"Uploading..."
|
29
30
|
|
@@ -11,9 +11,9 @@
|
|
11
11
|
|
12
12
|
%h1= gallery.name.empty? ? "Name your gallery" : gallery.name
|
13
13
|
- if can? :update, gallery
|
14
|
-
= link_to 'Edit', edit_gallery_path(gallery)
|
14
|
+
= link_to 'Edit', edit_gallery_path(gallery, ckeditor_params)
|
15
15
|
- if can? :manage, gallery
|
16
|
-
= link_to 'Destroy', gallery, "data-confirm"=>"You'll shoot your eye out!", :method=>"delete"
|
16
|
+
= link_to 'Destroy', gallery_path(gallery, ckeditor_params), "data-confirm"=>"You'll shoot your eye out!", :method=>"delete"
|
17
17
|
%ul#image_gallery
|
18
18
|
- images.each do |image|
|
19
19
|
%li
|
@@ -0,0 +1,48 @@
|
|
1
|
+
!!! 5
|
2
|
+
%html
|
3
|
+
%head
|
4
|
+
%title Your Awesome Web Site
|
5
|
+
= csrf_meta_tag
|
6
|
+
/[if lt IE 9]
|
7
|
+
= javascript_include_tag 'html5'
|
8
|
+
= javascript_include_tag :defaults, "loadbehind.js", "jquery.growl.js"
|
9
|
+
= stylesheet_link_tag 'menu.css','dreamy'
|
10
|
+
= yield(:head)
|
11
|
+
|
12
|
+
:javascript
|
13
|
+
function setTitle(title){
|
14
|
+
$('title').html(title);
|
15
|
+
}
|
16
|
+
%body
|
17
|
+
#wrapper
|
18
|
+
#header
|
19
|
+
%h1 Artful Dodgin
|
20
|
+
#menu
|
21
|
+
%ul
|
22
|
+
%li
|
23
|
+
%a{:href => "/profile"} Profile
|
24
|
+
%li
|
25
|
+
%a{:href => "/blog"} Blog
|
26
|
+
%li
|
27
|
+
%a{:href => "/galleries"} Galleries
|
28
|
+
#sidebar
|
29
|
+
#feed
|
30
|
+
%a.feed-button{:href=>'/blog.xml'}
|
31
|
+
%ul
|
32
|
+
= yield(:tags)
|
33
|
+
#sidebar-bottom
|
34
|
+
\
|
35
|
+
#content
|
36
|
+
= yield
|
37
|
+
#footer
|
38
|
+
#footer-valid
|
39
|
+
%a{:href => "http://validator.w3.org/check/referer"} xhtml
|
40
|
+
|
|
41
|
+
%a{:href => "http://www.ginger-ninja.net/"} ginger ninja!
|
42
|
+
- if user_signed_in?
|
43
|
+
Hi #{link_to current_user.profile.alias, user_profile_path(current_user)}#{link_to('Logout', destroy_user_session_path)}
|
44
|
+
- else
|
45
|
+
= link_to('Log in', new_user_session_path)
|
46
|
+
#copyright
|
47
|
+
Copyright © 2010 #{link_to "Apycom jQuery Menus", "http://apycom.com/"}
|
48
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
- include_ckeditor
|
2
|
+
|
3
|
+
= form_for @page do |f|
|
4
|
+
-if @page.errors.any?
|
5
|
+
#errorExplanation
|
6
|
+
%h2= "#{pluralize(@page.errors.count, "error")} prohibited this page from being saved:"
|
7
|
+
%ul
|
8
|
+
- @page.errors.full_messages.each do |msg|
|
9
|
+
%li= msg
|
10
|
+
|
11
|
+
.field
|
12
|
+
= f.label :title
|
13
|
+
= f.text_field :title
|
14
|
+
.field
|
15
|
+
= f.label :body
|
16
|
+
= f.text_area :body, :class=>'ckeditor_textarea'
|
17
|
+
.actions
|
18
|
+
= f.submit 'Save'
|
19
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
%h1 Listing pages
|
2
|
+
|
3
|
+
%table
|
4
|
+
%tr
|
5
|
+
%th Title
|
6
|
+
%th Body
|
7
|
+
%th
|
8
|
+
%th
|
9
|
+
%th
|
10
|
+
|
11
|
+
- @pages.each do |page|
|
12
|
+
%tr
|
13
|
+
%td= page.title
|
14
|
+
%td= page.body
|
15
|
+
%td= link_to 'Show', page
|
16
|
+
%td= link_to 'Edit', edit_page_path(page)
|
17
|
+
%td= link_to 'Destroy', page, :confirm => 'Are you sure?', :method => :delete
|
18
|
+
|
19
|
+
%br
|
20
|
+
|
21
|
+
= link_to 'New page', new_page_path
|
data/db/migrate/create_blogs.rb
CHANGED
data/db/migrate/create_roles.rb
CHANGED
@@ -7,13 +7,13 @@ class InsertAdminUserAndRoles < ActiveRecord::Migration
|
|
7
7
|
:password=>"<%= user_password %>",
|
8
8
|
:confirmed_at=>DateTime::now,
|
9
9
|
:role=>:super)
|
10
|
-
|
10
|
+
Profile.create(
|
11
11
|
:first_name => "<%= user_first_name %>",
|
12
12
|
:last_name => "<%= user_last_name %>",
|
13
13
|
:blog_title => "<%= user_blog_title %>",
|
14
|
-
:alias => "<%= user_alias %>"
|
15
|
-
|
16
|
-
|
14
|
+
:alias => "<%= user_alias %>",
|
15
|
+
:user => user
|
16
|
+
)
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.down
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Kevin Faustino
|
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,18 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
require 'rails/generators/generated_attribute'
|
4
|
+
require 'rails/generators/active_record'
|
5
|
+
|
6
|
+
|
7
|
+
class AppLayoutGenerator < Rails::Generators::Base
|
8
|
+
include Rails::Generators::Migration
|
9
|
+
source_root File.expand_path('../../../../', __FILE__)
|
10
|
+
require File.join(File.dirname(__FILE__), 'core_extensions.rb')
|
11
|
+
desc "Installs files needed for App Template gem."
|
12
|
+
|
13
|
+
def copy_files
|
14
|
+
template a= 'app/views/layouts/application.html.haml',
|
15
|
+
a
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Rails
|
2
|
+
module Generators
|
3
|
+
module Actions
|
4
|
+
|
5
|
+
attr_accessor :stategies
|
6
|
+
attr_accessor :recipes
|
7
|
+
attr_reader :template_options
|
8
|
+
|
9
|
+
def initialize_templater
|
10
|
+
self.recipes = []
|
11
|
+
@stategies = []
|
12
|
+
@template_options = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
def execute_stategies
|
16
|
+
stategies.each {|stategy| stategy.call }
|
17
|
+
end
|
18
|
+
|
19
|
+
def recipe(name)
|
20
|
+
recipes << name
|
21
|
+
File.join File.dirname(__FILE__), 'recipes', "#{name}.rb"
|
22
|
+
end
|
23
|
+
|
24
|
+
# TODO: Refactor loading of files
|
25
|
+
|
26
|
+
def load_snippet(name, group)
|
27
|
+
path = File.expand_path name, snippet_path(group)
|
28
|
+
File.read path
|
29
|
+
end
|
30
|
+
|
31
|
+
def load_template(name, group, match={})
|
32
|
+
path = File.expand_path name, template_path(group)
|
33
|
+
contents = File.read path
|
34
|
+
match.each do |key, value|
|
35
|
+
contents.gsub! "\%#{key.to_s}\%", value
|
36
|
+
end
|
37
|
+
contents
|
38
|
+
end
|
39
|
+
|
40
|
+
def snippet_path(name)
|
41
|
+
File.join(File.dirname(__FILE__), 'snippets', name)
|
42
|
+
end
|
43
|
+
|
44
|
+
def template_path(name)
|
45
|
+
File.join(File.dirname(__FILE__), 'templates', name)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Kevin Faustino
|
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
|
+
module Rails
|
2
|
+
module Generators
|
3
|
+
module Actions
|
4
|
+
|
5
|
+
attr_accessor :stategies
|
6
|
+
attr_accessor :recipes
|
7
|
+
attr_reader :template_options
|
8
|
+
|
9
|
+
def initialize_templater
|
10
|
+
self.recipes = []
|
11
|
+
@stategies = []
|
12
|
+
@template_options = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
def execute_stategies
|
16
|
+
stategies.each {|stategy| stategy.call }
|
17
|
+
end
|
18
|
+
|
19
|
+
def recipe(name)
|
20
|
+
recipes << name
|
21
|
+
File.join File.dirname(__FILE__), 'recipes', "#{name}.rb"
|
22
|
+
end
|
23
|
+
|
24
|
+
# TODO: Refactor loading of files
|
25
|
+
|
26
|
+
def load_snippet(name, group)
|
27
|
+
path = File.expand_path name, snippet_path(group)
|
28
|
+
File.read path
|
29
|
+
end
|
30
|
+
|
31
|
+
def load_template(name, group, match={})
|
32
|
+
path = File.expand_path name, template_path(group)
|
33
|
+
contents = File.read path
|
34
|
+
match.each do |key, value|
|
35
|
+
contents.gsub! "\%#{key.to_s}\%", value
|
36
|
+
end
|
37
|
+
contents
|
38
|
+
end
|
39
|
+
|
40
|
+
def snippet_path(name)
|
41
|
+
File.join(File.dirname(__FILE__), 'snippets', name)
|
42
|
+
end
|
43
|
+
|
44
|
+
def template_path(name)
|
45
|
+
File.join(File.dirname(__FILE__), 'templates', name)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|