cream 0.7.0 → 0.7.2

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.
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
-