cream 0.7.0 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/Rakefile +3 -3
  2. data/VERSION +1 -1
  3. data/cream.gemspec +15 -37
  4. data/lib/cream.rb +3 -1
  5. data/lib/cream/configure/after_init/role_config.rb +19 -15
  6. data/lib/cream/configure/rails.rb +4 -12
  7. data/lib/cream/role.rb +9 -1
  8. data/lib/cream/{configure.rb → roles_config.rb} +0 -4
  9. data/lib/generators/cancan/config/config_generator.rb +13 -3
  10. data/lib/generators/cream/app/app_generator.rb +39 -18
  11. data/lib/generators/cream/full_config/full_config_generator.rb +154 -0
  12. data/lib/generators/cream/views/haml_util.rb +1 -1
  13. data/lib/generators/cream/views/views_generator.rb +1 -1
  14. data/lib/generators/devise/config/config_generator.rb +16 -7
  15. data/lib/generators/devise/users/users_generator.rb +13 -8
  16. data/lib/generators/permits/config/config_generator.rb +14 -11
  17. data/lib/generators/roles/config/config_generator.rb +12 -6
  18. data/spec/generator_spec_helper.rb +1 -1
  19. data/spec/generators/cancan/config/cancan_config_generator_spec.rb +1 -1
  20. data/spec/generators/cream/app/app_generator_spec.rb +42 -22
  21. data/spec/generators/cream/full_config/full_config_generator_spec.rb +37 -0
  22. data/spec/generators/permits/config/permits_config_generator_spec.rb +1 -1
  23. metadata +12 -35
  24. data/lib/generators/cream/config/DESIGN NOTES.markdown +0 -79
  25. data/lib/generators/cream/config/config_generator.rb +0 -86
  26. data/lib/generators/cream/config/modules/app_config.rb +0 -48
  27. data/lib/generators/cream/config/modules/cancan_config.rb +0 -27
  28. data/lib/generators/cream/config/modules/cream_config.rb +0 -36
  29. data/lib/generators/cream/config/modules/devise_config.rb +0 -58
  30. data/lib/generators/cream/config/modules/devise_users_config.rb +0 -109
  31. data/lib/generators/cream/config/modules/helper.rb +0 -79
  32. data/lib/generators/cream/config/modules/permits_config.rb +0 -15
  33. data/lib/generators/cream/config/modules/roles_config.rb +0 -39
  34. data/spec/generators/cream/config/CONFIG_GENERATOR_SPEC.markdown +0 -15
  35. data/spec/generators/cream/config/devise/existing_devise_users.rb +0 -61
  36. data/spec/generators/cream/config/empty_app/default_args_spec.rb +0 -51
  37. data/spec/generators/cream/config/permits/existing_permits_spec.rb +0 -0
  38. data/spec/generators/cream/config/permits/no_permits_spec.rb +0 -0
  39. data/spec/generators/cream/config/roles/default_roles.rb +0 -51
  40. data/spec/generators/cream/config/roles/roles_spec.rb +0 -60
  41. data/spec/generators/cream/shared_examples.rb +0 -18
@@ -1,79 +0,0 @@
1
- # Config generator
2
-
3
- Each of the following should be a module in its own right!
4
-
5
- 1. Create fresh Rails 3 app and set it up so that all the sub-systems work
6
- 2. Develop the generator so that it can mutate a Rails 3 app that matches this example app
7
-
8
- ## Code Design
9
-
10
- * Create a module for each sub-system to configure
11
- * Include modules depending on options
12
- * For each module call the config_[module_name] method, which is responsible for configuring that module!
13
-
14
- ## App config
15
-
16
- in config/application.rb
17
-
18
- If not using Active Record, substitute
19
- <pre>
20
- require 'rails/all'
21
- </pre>
22
-
23
-
24
- With
25
- <pre>
26
- require "action_controller/railtie"
27
- require "action_mailer/railtie"
28
- require "active_resource/railtie"
29
- require "rails/test_unit/railtie"
30
- </pre>
31
-
32
- ## Devise Configuration
33
-
34
- Gemfile
35
- gem 'devise'
36
- gem ORM 'devise'
37
-
38
- if app does NOT have a User model
39
- run devise generator to create User model
40
- else
41
- if User model is NOT configured with devise strategy
42
- insert default devise User strategy
43
- end
44
- end
45
-
46
- if --admin option set
47
- if app does NOT have a Admin model
48
- run devise generator to create Admin model
49
- remove any current inheritance
50
- and make Admin model inherit from User model
51
- else
52
- insert default devise Admin strategy
53
- end
54
- end
55
-
56
- ## Cream configuration
57
-
58
- copy locales and views (optional)
59
-
60
- ## CanCan Configuration
61
-
62
- Gemfile:
63
- gem 'cancan'
64
- gem 'cancan-rest-links'
65
-
66
- CanCan access denied exception handling
67
-
68
- ## Permits Configuration
69
-
70
- Gemfile:
71
- gem 'cancan-permits'
72
-
73
- Run permits generator to generate permit for each role
74
-
75
- ## Roles Configuration
76
-
77
- gem ORM 'roles'
78
-
79
- run roles generator for ORM chosen
@@ -1,86 +0,0 @@
1
- require 'sugar-high/file'
2
- require 'sugar-high/module'
3
- require 'cream'
4
- require 'rails3_artifactor'
5
- require 'logging_assist'
6
-
7
- module Cream
8
- module Generators
9
- end
10
- end
11
-
12
- require_all File.dirname(__FILE__) + '/modules'
13
-
14
- module Cream::Generators
15
- class ConfigGenerator < Rails::Generators::Base
16
- extend Rails3::Assist::UseMacro
17
-
18
- desc "Configures Devise and Users"
19
-
20
- source_root File.dirname(__FILE__)
21
-
22
- # Role Strategy
23
- class_option :strategy, :type => :string, :default => 'role_string', :desc => "Role strategy to use"
24
-
25
- # Create Admin user
26
- class_option :admin_user, :type => :boolean, :default => false, :desc => "Create admin user"
27
-
28
- # Roles
29
- class_option :default_roles, :type => :boolean, :default => true, :desc => "Create default roles :admin and :guest"
30
- class_option :roles, :type => :array, :default => [], :desc => "Roles to create"
31
-
32
- # Permits
33
- class_option :permits, :type => :boolean, :default => true, :desc => "Configure permits or not"
34
-
35
- # ORM to use
36
- class_option :orm, :type => :string, :default => 'active_record', :desc => "ORM to use"
37
-
38
- class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
39
-
40
- class_option :app_config, :type => :boolean, :default => true, :desc => "Make Rails app ready for Cream"
41
- class_option :cream_config, :type => :boolean, :default => true, :desc => "Configure app with Cream"
42
- class_option :devise_config, :type => :boolean, :default => true, :desc => "Configure app with Devise"
43
- class_option :devise_user_config, :type => :boolean, :default => true, :desc => "Configure app with Devise Users"
44
- class_option :cancan_config, :type => :boolean, :default => true, :desc => "Configure app with CanCan"
45
- class_option :permits_config, :type => :boolean, :default => true, :desc => "Configure app with Permits"
46
- class_option :roles_config, :type => :boolean, :default => true, :desc => "Configure app with Roles"
47
-
48
- def main_flow
49
- configure_logger
50
- configure_gems
51
-
52
- MODULES.each do |name|
53
- method = "configure_#{name}"
54
- send method if respond_to?(method) && options[:"#{name}_config"]
55
- end
56
- end
57
-
58
- # -----------------
59
- protected
60
-
61
- # configure which helper modules (from /modules subfolder) to include in this Generator!!!
62
-
63
- MODULES = [:app, :devise, :devise_users, :cancan, :roles, :permits, :cream]
64
-
65
- includes Cream::Generators::Config, :helper, MODULES
66
-
67
- include Rails3::Assist::BasicLogger
68
-
69
- # using helpers from rails3_artifactor gem.
70
- # A macro from rails3_assist loads appropriate modules into the class and makes various Rails 3 "mutation helper" methods available
71
- use_helpers :model, :controller, :permit, :application
72
-
73
- def configure_logger
74
- logger.add_logfile :logfile => logfile if logfile
75
- logger.debug 'main flow'
76
- end
77
-
78
- def configure_gems
79
- MODULES.each do |name|
80
- method = "#{name}_gems"
81
- send method if respond_to?(method) && options[:"#{name}_config"]
82
- end
83
- run "bundle install"
84
- end
85
- end
86
- end
@@ -1,48 +0,0 @@
1
- module Cream::Generators
2
- module Config
3
- module CanCan
4
- def configure_application
5
- app_orm
6
- app_routes
7
- app_layout
8
- end
9
-
10
- def app_orm
11
- return if orm == 'active_record'
12
- File.replace_content_from config_file(:application), :where => "require 'rails/all'" do
13
- %q{
14
- require "action_controller/railtie"
15
- require "action_mailer/railtie"
16
- require "active_resource/railtie"
17
- require "rails/test_unit/railtie"
18
- }
19
- end
20
-
21
- def app_routes
22
- routes = read_from config_file(:routes)
23
- # if no :welcome controller
24
- if !(routes =~ /root\s+:/)
25
- # create one with an 'index' view.
26
- insert_into config_file(:routes), :after => 'do', :content => 'root :to => "welcome#index"'
27
- execute "rails g controller Welcome index"
28
- end
29
- end
30
-
31
- # in 'app/views/layouts/application.html.erb'
32
- # insert special flash msg displayers after opening <body> element
33
- def app_layout
34
- layout_content = read_view :application, :folder => 'layouts' #, :type => :erb
35
-
36
- [:alert, :notice].each{|name| insert_flash_displayer name}
37
- end
38
-
39
- def insert_flash_displayer name
40
- return if layout_content =~ /<%=\s+#{name}\s+%>/
41
- insert_into_view :application, :folder => 'layouts', :after => '<body>' do
42
- '<p class="alert"><%= alert %></p>'
43
- end
44
- end
45
- end
46
- end
47
- end
48
-
@@ -1,27 +0,0 @@
1
- module Cream::Generators
2
- module Config
3
- module CanCan
4
- def cancan_configure
5
- cancan_gems
6
- cancan_exception_handling
7
- end
8
-
9
- def cancan_gems
10
- gem 'cancan'
11
- gem 'cancan-rest-links'
12
- end
13
-
14
- # CanCan access denied exception handling
15
- def cancan_exception_handling
16
- insert_into_controller :application, :after => "ActionController::Base\n" do
17
- %{
18
- rescue_from CanCan::AccessDenied do |exception|
19
- flash[:error] = exception.message
20
- redirect_to root_url
21
- end
22
- }
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,36 +0,0 @@
1
- module Cream::Generators
2
- module Config
3
- module Cream
4
- def cream_configure
5
- cream_gems
6
- cream_initializer
7
- cream_locale
8
- end
9
-
10
- def cream_gems
11
- gem_name = ORM_MAP[orm]
12
- gem gem_name if gem_name
13
-
14
- gem 'cream'
15
- run "bundle install"
16
- end
17
-
18
- def cream_initializer
19
- create_initializer_file :cream do
20
- %Q{
21
- Cream.setup do |config|
22
- config.roles = #{roles.inspect}
23
- end
24
- }
25
- end
26
-
27
- def cream_locale
28
- src = File.expand_path "config/locales/en.yml".path.up(2)
29
- # src = "config/locales/en.yml"
30
- logger.debug "configure_locale, copy from: #{src}"
31
- copy_file src, "config/locales/cream.en.yml"
32
- end
33
- end
34
- end
35
- end
36
-
@@ -1,58 +0,0 @@
1
- module Cream::Generators
2
- module Config
3
- module Devise
4
-
5
- def configure_devise
6
- initialize!
7
- [Orm, Mailer, Protection].each{|m| m.configure!}
8
- end
9
-
10
- def initialize!
11
- rgen 'devise_install'
12
- end
13
-
14
- def devise_gems
15
- gem 'devise'
16
-
17
- # Devise ORM integration
18
- case orm.to_sym
19
- when :mongoid
20
- say "Please configure Devise for Mongoid as similar to Rails 3 example app: http://github.com/fortuity/rails3-mongoid-devise"
21
- when :mongo_mapper
22
- gem 'mm-devise'
23
- when :data_mapper
24
- gem 'dm-devise'
25
- when :couch_db
26
- gem 'devise_couch'
27
- say "Please note that Couch DB does not currently have a Roles implementation. Feel free to provide one."
28
- say "Look at Roles DataMapper (roles_data_mapper) for an example ;)"
29
- else
30
- say "Orm #{orm} is not currently supported by Cream. You are most welcome to provide a Cream adapter for that ORM ;)"
31
- end
32
- end
33
-
34
- module Protection
35
- def self.configure!
36
- ## Add Devise protection to Application controller:
37
- insert_into_controller :application do
38
- "before_filter :authenticate_user!"
39
- end
40
- end
41
- end
42
-
43
- module Orm
44
- # inside 'config/initializers/devise.rb' change to:
45
- # require 'devise/orm/mongo_mapper'
46
- def self.configure!
47
- File.replace_content_from initializer_file(:devise), :where => /devise\/orm\/w+/, :content => 'devise/orm/mongo_mapper'
48
- end
49
- end
50
-
51
- module Mailer
52
- def self.configure!
53
- insert_application_config "action_mailer.default_url_options = { :host => 'localhost:3000' }"
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,109 +0,0 @@
1
- module Cream::Generators
2
- module Config
3
- module DeviseUsers
4
- attr_accessor :user_helper
5
-
6
- def configure_devise_users
7
- @user_helper = UserHelper.new user_generator
8
-
9
- devise_default_user if !has_model? :user
10
-
11
- # if User model is NOT configured with devise strategy
12
- Strategy.insert_devise_strategy :user, :defaults if !has_devise_user? :user
13
-
14
- devise_admin_user if admin_user?
15
- end
16
-
17
- def devise_default_user
18
- user_helper.create_devise_model :user
19
- end
20
-
21
- def devise_admin_user
22
- # if app does NOT have a Admin model
23
- user_helper.create_admin_user if !has_model? :admin
24
-
25
- # insert default devise Admin strategy
26
- Strategy.insert_devise_strategy :admin, :defaults if has_model? :admin
27
- end
28
-
29
- def create_admin_user
30
- logger.debug 'create_admin_user'
31
- user_helper.create_user_model :admin
32
- # remove any current inheritance
33
- Inherit.remove_inheritance :admin
34
- # and make Admin model inherit from User model
35
- Inherit.inherit_model :user => :admin
36
- end
37
-
38
- # Helpers
39
-
40
- class UserHelper
41
- attr_accessor :user_generator
42
-
43
- def initialize user_gen
44
- @user_generator = user_gen
45
- end
46
-
47
- def create_user_model user = :user
48
- rgen "#{user_generator} model #{user}"
49
- end
50
-
51
- def devise_users?
52
- has_devise_user?(:user) && has_devise_user?(:admin)
53
- end
54
-
55
- def has_devise_user? user
56
- return true if user == :admin && !admin_user?
57
- begin
58
- read_model(user) =~ /devise/
59
- rescue Exception => e
60
- logger.info "Exception for #has_devise_user? #{user}: #{e.message}"
61
- false
62
- end
63
- end
64
-
65
- # Must be ORM specific!
66
- def create_devise_model user = :user
67
- rgen "#{user_generator} #{user}"
68
- end
69
- end
70
-
71
- module Inherit
72
- self << class
73
- extend Rails3::Assist::UseMacro
74
- use_helpers :model
75
-
76
- def remove_inheritance user
77
- File.remove_from model_file user, :content => /<\s*ActiveRecord::Base/
78
- end
79
-
80
- def inherit_model hash
81
- subclass = hash.keys.first
82
- superclass = hash.values.first.to_s.camelize
83
- File.replace_content_from model_file subclass, :where => /class Admin/, :with => "class Admin < #{superclass}"
84
- end
85
- end
86
- end
87
-
88
- module Strategy
89
- self << class
90
- extend Rails3::Assist::UseMacro
91
- use_helpers :model
92
-
93
- def insert_devise_strategy model_name, *names
94
- names = devise_default_strategies if names.first == :defaults
95
- insert_into_model model_name do
96
- "devise #{*names}"
97
- end
98
- end
99
-
100
- def devise_default_strategies
101
- [:database_authenticatable, :confirmable, :recoverable, :rememberable, :trackable, :validatable]
102
- end
103
- end
104
- end
105
- end
106
- end
107
- end
108
-
109
-