rails3_assist 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. data/README.markdown +10 -3
  2. data/VERSION +1 -1
  3. data/lib/rails3_assist/app.rb +7 -41
  4. data/lib/rails3_assist/artifact/directory.rb +42 -0
  5. data/lib/rails3_assist/artifact/files.rb +63 -0
  6. data/lib/rails3_assist/artifact/path.rb +16 -0
  7. data/lib/rails3_assist/artifact.rb +34 -0
  8. data/lib/rails3_assist/directory/app.rb +17 -0
  9. data/lib/rails3_assist/directory/container.rb +24 -0
  10. data/lib/rails3_assist/directory/root.rb +20 -0
  11. data/lib/rails3_assist/directory.rb +55 -0
  12. data/lib/rails3_assist/file/application.rb +14 -0
  13. data/lib/rails3_assist/file/environment.rb +15 -0
  14. data/lib/rails3_assist/file/special.rb +48 -0
  15. data/lib/rails3_assist/file.rb +38 -0
  16. data/lib/rails3_assist/files.rb +83 -0
  17. data/lib/rails3_assist/namespaces.rb +11 -0
  18. data/lib/rails3_assist/rspec/configure.rb +2 -0
  19. data/lib/rails3_assist/rspec/matchers/have_app_config.rb +49 -0
  20. data/{spec/rails3_assist/app/app_file_names_spec.rb → lib/rails3_assist/rspec/matchers/have_special_file.rb} +0 -0
  21. data/lib/rails3_assist.rb +20 -11
  22. data/rails3_assist.gemspec +140 -49
  23. data/spec/fixtures/.gitignore +4 -0
  24. data/spec/fixtures/Gemfile +30 -0
  25. data/spec/fixtures/Gemfile.lock +73 -0
  26. data/spec/fixtures/README +256 -0
  27. data/spec/fixtures/Rakefile +7 -0
  28. data/spec/fixtures/app/controllers/application_controller.rb +3 -0
  29. data/spec/fixtures/app/controllers/users_controller.rb +83 -0
  30. data/spec/fixtures/app/helpers/application_helper.rb +2 -0
  31. data/spec/fixtures/app/helpers/users_helper.rb +2 -0
  32. data/spec/{rails3_assist/app/app_files_spec.rb → fixtures/app/mailers/user_mailer.rb} +0 -0
  33. data/spec/fixtures/app/models/user.rb +2 -0
  34. data/spec/fixtures/app/models/user_observer.rb +0 -0
  35. data/spec/fixtures/app/permits/user_permit.rb +0 -0
  36. data/spec/fixtures/app/views/layouts/application.html.erb +14 -0
  37. data/spec/fixtures/app/views/users/_form.html.erb +21 -0
  38. data/spec/fixtures/app/views/users/edit.html.erb +6 -0
  39. data/spec/fixtures/app/views/users/index.html.erb +23 -0
  40. data/spec/fixtures/app/views/users/new.html.erb +5 -0
  41. data/spec/fixtures/app/views/users/show.html.erb +10 -0
  42. data/spec/fixtures/config/application.rb +42 -0
  43. data/spec/fixtures/config/boot.rb +13 -0
  44. data/spec/fixtures/config/database.yml +22 -0
  45. data/spec/fixtures/config/environment.rb +5 -0
  46. data/spec/fixtures/config/environments/development.rb +26 -0
  47. data/spec/fixtures/config/environments/production.rb +49 -0
  48. data/spec/fixtures/config/environments/test.rb +35 -0
  49. data/spec/fixtures/config/initializers/backtrace_silencers.rb +7 -0
  50. data/spec/fixtures/config/initializers/inflections.rb +10 -0
  51. data/spec/fixtures/config/initializers/mime_types.rb +5 -0
  52. data/spec/fixtures/config/initializers/secret_token.rb +7 -0
  53. data/spec/fixtures/config/initializers/session_store.rb +8 -0
  54. data/spec/fixtures/config/locales/en.yml +5 -0
  55. data/spec/fixtures/config/routes.rb +60 -0
  56. data/spec/fixtures/config.ru +4 -0
  57. data/spec/fixtures/db/migrate/20100831135208_create_users.rb +13 -0
  58. data/spec/fixtures/db/seeds.rb +7 -0
  59. data/spec/fixtures/doc/README_FOR_APP +2 -0
  60. data/spec/fixtures/lib/tasks/.gitkeep +0 -0
  61. data/spec/fixtures/public/404.html +26 -0
  62. data/spec/fixtures/public/422.html +26 -0
  63. data/spec/fixtures/public/500.html +26 -0
  64. data/spec/fixtures/public/favicon.ico +0 -0
  65. data/spec/fixtures/public/images/rails.png +0 -0
  66. data/spec/fixtures/public/index.html +239 -0
  67. data/spec/fixtures/public/javascripts/application.js +2 -0
  68. data/spec/fixtures/public/javascripts/controls.js +965 -0
  69. data/spec/fixtures/public/javascripts/dragdrop.js +974 -0
  70. data/spec/fixtures/public/javascripts/effects.js +1123 -0
  71. data/spec/fixtures/public/javascripts/prototype.js +6001 -0
  72. data/spec/fixtures/public/javascripts/rails.js +175 -0
  73. data/spec/fixtures/public/robots.txt +5 -0
  74. data/spec/fixtures/public/stylesheets/.gitkeep +0 -0
  75. data/spec/fixtures/public/stylesheets/scaffold.css +56 -0
  76. data/spec/fixtures/script/rails +6 -0
  77. data/spec/fixtures/test/fixtures/users.yml +7 -0
  78. data/spec/fixtures/test/functional/users_controller_test.rb +49 -0
  79. data/spec/fixtures/test/performance/browsing_test.rb +9 -0
  80. data/spec/fixtures/test/test_helper.rb +13 -0
  81. data/spec/fixtures/test/unit/helpers/users_helper_test.rb +4 -0
  82. data/spec/fixtures/test/unit/user_test.rb +8 -0
  83. data/spec/fixtures/vendor/plugins/.gitkeep +0 -0
  84. data/spec/fixtures.rb +3 -0
  85. data/spec/rails3_assist/app_spec.rb +30 -0
  86. data/spec/rails3_assist/artifact/directory_spec.rb +66 -0
  87. data/spec/rails3_assist/artifact/files_spec.rb +64 -0
  88. data/spec/rails3_assist/artifact/path_spec.rb +23 -0
  89. data/spec/rails3_assist/artifact_spec.rb +33 -0
  90. data/spec/rails3_assist/directory/app_spec.rb +41 -0
  91. data/spec/rails3_assist/directory/container_spec.rb +63 -0
  92. data/spec/rails3_assist/directory/root_spec.rb +41 -0
  93. data/spec/rails3_assist/directory_spec.rb +59 -0
  94. data/spec/rails3_assist/file/application_spec.rb +33 -0
  95. data/spec/rails3_assist/file/environment_spec.rb +49 -0
  96. data/spec/rails3_assist/file/special_spec.rb +61 -0
  97. data/spec/rails3_assist/file_spec.rb +48 -0
  98. data/spec/rails3_assist/files_spec.rb +128 -0
  99. data/spec/rails3_assist/rspec/have_app_config_spec.rb +0 -0
  100. data/spec/spec_helper.rb +4 -2
  101. metadata +140 -49
  102. data/lib/rails3_assist/app/file_names.rb +0 -97
  103. data/lib/rails3_assist/app/methods/crud.rb +0 -31
  104. data/lib/rails3_assist/app/methods/new_content.rb +0 -11
  105. data/lib/rails3_assist/app/rails_dirs.rb +0 -106
  106. data/lib/rails3_assist/app/rails_files.rb +0 -128
  107. data/lib/rails3_assist/artifact/markers.rb +0 -45
  108. data/lib/rails3_assist/artifact/migration.rb +0 -10
  109. data/lib/rails3_assist/artifact/orm.rb +0 -136
  110. data/lib/rails3_assist/artifact/view.rb +0 -70
  111. data/lib/rails3_assist/base/class_methods.rb +0 -11
  112. data/lib/rails3_assist/base/create.rb +0 -48
  113. data/lib/rails3_assist/base/file_name.rb +0 -40
  114. data/lib/rails3_assist/base/insert.rb +0 -57
  115. data/lib/rails3_assist/base/read.rb +0 -19
  116. data/lib/rails3_assist/base/remove.rb +0 -14
  117. data/lib/rails3_assist/base.rb +0 -49
  118. data/lib/rails3_assist/extensions/core_ext.rb +0 -29
  119. data/lib/rails3_assist/rspec/macro.rb +0 -34
  120. data/spec/rails3_assist/app/app_dirs_spec.rb +0 -23
  121. data/spec/rails3_assist/artifact/controller/controller_spec.rb +0 -33
  122. data/spec/rails3_assist/artifact/helper/helper_spec.rb +0 -33
  123. data/spec/rails3_assist/artifact/mailer/mailer_spec.rb +0 -33
  124. data/spec/rails3_assist/artifact/migration/migration_spec.rb +0 -49
  125. data/spec/rails3_assist/artifact/model/model_spec.rb +0 -34
  126. data/spec/rails3_assist/artifact/observer/observer_spec.rb +0 -34
  127. data/spec/rails3_assist/artifact/orm/active_record_spec.rb +0 -33
  128. data/spec/rails3_assist/artifact/orm/mongo_mapper_spec.rb +0 -63
  129. data/spec/rails3_assist/artifact/orm/mongoid_spec.rb +0 -63
  130. data/spec/rails3_assist/artifact/view_spec/view_controller_action_spec.rb +0 -65
  131. data/spec/rails3_assist/artifact/view_spec/view_controller_default_action_specc.rb +0 -32
data/README.markdown CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  Includes various helpers to assist operating on a Rails 3 application, including various Rails 3 artifacts, such as migrations etc.
4
4
 
5
+ ## Development status
6
+
7
+ TODO specs: artifact
8
+
9
+ * files
10
+ * directory
11
+
5
12
  ## Rails Artifacts
6
13
 
7
14
  Rails assist also includes various artifact libraries to help operate on different Rails 3 artifacts.
@@ -24,6 +31,7 @@ Rails 3 artifacts that have a CRUD assistant:
24
31
  * model (insert bug!)
25
32
  * observer
26
33
  * view
34
+ * permit (NEW - used with cancan)
27
35
 
28
36
  ## Model
29
37
 
@@ -60,10 +68,9 @@ Example:
60
68
 
61
69
  Aliases: *use_helpers* and *use_helper*
62
70
 
63
- ## Known issues
71
+ ## TODO
64
72
 
65
- * View generation fails when action arg supplied :( To be fixed ASAP
66
- - rails3_assist/artifact/view.rb:7:in `[]' can't convert Symbol into Integer
73
+ Refactor: split it up into smaller gems and modules to be loaded individually as the need arises.
67
74
 
68
75
  ## Note on Patches/Pull Requests
69
76
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.4
1
+ 0.2.5
@@ -1,47 +1,13 @@
1
- module Rails::Assist
2
- def self.helper_list
3
- self.artifacts + [:view]
4
- end
5
-
6
- module ArtifactPath
7
- def artifact_path name, type, options={}
8
- dir = send :"#{type}_dir", options[:root_path]
9
- File.join(dir, "#{name}#{type_postfix type}.rb")
10
- end
11
-
12
- def type_postfix type
13
- "_#{type}" if ![:model].include?(type)
14
- end
15
- end
16
-
17
- module App
18
- include ArtifactPath
19
-
1
+ module Rails3::Assist
2
+ module App
20
3
  def create_empty_tmp *dir_types
21
4
  dir_types.flatten.each do |dir_type|
22
- dir = rails_dir_for(dir_type)
5
+ dir = Rails3::Assist::Directory.rails_dir_for(dir_type)
23
6
  FileUtils.mkdir_p dir
24
7
  end
25
- end
26
- end
27
-
8
+ end
9
+
10
+ extend self
11
+ end
28
12
  end
29
13
 
30
- # first load all base modules that the app helper will build upon
31
- require 'rails3_assist/base'
32
-
33
- # then load the app 'modules'
34
- require_all File.dirname(__FILE__) + '/app'
35
-
36
- # into App
37
- module Rails::Assist::App
38
- include RailsFiles
39
- include RailsDirs
40
-
41
- # put all FileName modules into App
42
- Rails::Assist.helper_list.each do |name|
43
- class_eval %{
44
- include Rails::Assist::#{name.to_s.camelize}::FileName
45
- }
46
- end
47
- end
@@ -0,0 +1,42 @@
1
+ module Rails3::Assist::Artifact
2
+ module Directory
3
+ module Methods
4
+ DIR = Rails3::Assist::Directory
5
+ APP_DIR = Rails3::Assist::Directory::App
6
+
7
+ # :controller, :mailer, :helper, :view, :model, :permit
8
+ #
9
+ # controller_dir, mailer_dir ...
10
+ Rails3::Assist::Artifact.app_artifacts.each do |name|
11
+ class_eval %{
12
+ def #{name}_dir options={}
13
+ File.join(APP_DIR.app_dir(options), '#{name.to_s.pluralize}')
14
+ end
15
+ }
16
+ end
17
+
18
+ # initializer_dir, locale_dir
19
+ # stylesheet_dir, javascript_dir
20
+ {:config => [:initializer, :locale], :public => [:stylesheet, :javascript]}.each_pair do |container, names|
21
+ names.each do |name|
22
+ class_eval %{
23
+ def #{name}_dir options={}
24
+ Rails3::Assist::Directory.#{container}_dir_for :#{name.to_s.pluralize}, options
25
+ end
26
+ }
27
+ end
28
+ end
29
+
30
+ def migration_dir options={}
31
+ File.join(DIR.db_dir(options), 'migrations')
32
+ end
33
+
34
+ def observer_dir options={}
35
+ model_dir options
36
+ end
37
+ end
38
+
39
+ extend Methods
40
+ include Methods
41
+ end
42
+ end
@@ -0,0 +1,63 @@
1
+ require 'sugar-high/regexp'
2
+
3
+ module Rails3::Assist::Artifact
4
+ module Files
5
+ module Methods
6
+ [:model].each do |name|
7
+ class_eval %{
8
+ def #{name}_files expr=nil
9
+ files = Rails3::Assist::Files.rails_app_files(:#{name.to_s.pluralize}).grep_it expr
10
+ yield files if block_given?
11
+ files
12
+ end
13
+ }
14
+ end
15
+
16
+ # artifact files using xxx_[artifact].rb convention, i.e postfixing with type of artifact
17
+ [:mailer, :observer, :permit, :controller, :helper].each do |name|
18
+ class_eval %{
19
+ def #{name}_files expr=nil
20
+ files = Rails3::Assist::Files.rails_app_files(:#{name.to_s.pluralize}, :pattern => '**/*_#{name}.rb').grep_it expr
21
+ yield files if block_given?
22
+ files
23
+ end
24
+ }
25
+ end
26
+
27
+ def view_files *args
28
+ expr, model_name = Helper.get_view_args args
29
+ ext = last_option(args)[:template_language] || 'erb'
30
+ pattern = model_name ? "#{model_name.to_s.pluralize}/*.#{ext}*" : "**/*.#{ext}*"
31
+ files = Rails3::Assist::Files.rails_app_files(:views, :pattern => pattern).grep_it expr
32
+ yield files if block_given?
33
+ files
34
+ end
35
+
36
+
37
+ [:erb, :haml].each do |name|
38
+ class_eval %{
39
+ def #{name}_view_files *args
40
+ view_files args, :template_language => :#{name}
41
+ end
42
+ }
43
+ end
44
+ end
45
+ extend Methods
46
+ include Methods
47
+
48
+ module Helper
49
+ def self.get_view_args args
50
+ args = args.flatten
51
+ first_arg = args.first
52
+ case first_arg
53
+ when Regexp
54
+ expr = first_arg
55
+ when String, Symbol
56
+ _model = first_arg
57
+ end
58
+ expr = args[1] if args.size > 1 && args[1].kind_of?(Regexp)
59
+ [expr, _model]
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,16 @@
1
+ module Rails3::Assist::Artifact
2
+ module Path
3
+ include Rails3::Assist::Artifact::Directory
4
+
5
+ def artifact_path name, type, options={}
6
+ dir = send :"#{type}_dir", options
7
+ File.join(dir, "#{name}#{type_postfix type}.rb")
8
+ end
9
+
10
+ protected
11
+
12
+ def type_postfix type
13
+ "_#{type}" if ![:model].include?(type)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,34 @@
1
+ module Rails3::Assist::Artifact
2
+ module Methods
3
+ def helper_list
4
+ Rails3::Assist.artifacts + [:view]
5
+ end
6
+
7
+ def app_artifacts
8
+ [:controller, :mailer, :helper, :view, :model, :permit]
9
+ end
10
+
11
+ def rails_artifacts
12
+ @rails_artifacts ||= begin
13
+ files_methods = Rails3::Assist::Artifact::Files.instance_methods
14
+ files_symbols = files_methods.grep(/_files$/).map{|f| f.to_s.gsub(/^(.*)_files/, '\1').to_sym }
15
+
16
+ # dir_methods = Rails3::Assist::Artifact::Directory.instance_methods
17
+ # dir_symbols = dir_methods.map{|dir| dir.to_s.gsub(/^(.*)_dir/, '\1').to_sym }
18
+ dir_symbols = []
19
+
20
+ (files_symbols + dir_symbols).uniq
21
+ end
22
+ end
23
+
24
+ def valid_artifact? type
25
+ rails_artifacts.include?(type)
26
+ end
27
+ end
28
+
29
+ extend Methods
30
+ include Methods
31
+ end
32
+
33
+
34
+ require_all File.dirname(__FILE__) + '/artifact'
@@ -0,0 +1,17 @@
1
+ module Rails3::Assist::Directory
2
+ module App
3
+ module Methods
4
+ def app_directories
5
+ Rails3::Assist::Artifact::app_artifacts.map {|a| a.to_s.pluralize.to_sym}
6
+ end
7
+
8
+ def app_dir options={}
9
+ rails_root_dir = Rails3::Assist::Directory::Root.root_dir(options)
10
+ File.join(rails_root_dir, 'app')
11
+ end
12
+ end
13
+
14
+ include Methods
15
+ extend Methods
16
+ end
17
+ end
@@ -0,0 +1,24 @@
1
+ module Rails3::Assist::Directory
2
+ module Container
3
+
4
+ # return list of symbols for all kinds of supported Rails 3 containers
5
+ # (those that have a [container]_dir method)
6
+
7
+ module Methods
8
+ def rails_containers
9
+ app_methods = Rails3::Assist::Directory.instance_methods
10
+ artifact_methods = Rails3::Assist::Artifact::Directory.instance_methods
11
+ all_methods = app_methods + artifact_methods
12
+
13
+ all_methods.grep(/_dir$/).map{|dir| dir.to_s.gsub(/^(.*)_dir/, '\1').to_sym }
14
+ end
15
+
16
+ def valid_container? type
17
+ rails_containers.include?(type)
18
+ end
19
+ end
20
+
21
+ include Methods
22
+ extend Methods
23
+ end
24
+ end
@@ -0,0 +1,20 @@
1
+ module Rails3::Assist::Directory
2
+ module Root
3
+ module Methods
4
+ def root_directories
5
+ [:app, :config, :db, :public, :lib, :log, :doc, :test, :spec]
6
+ end
7
+
8
+ def root_dir options={}
9
+ raise ArgumentError, "options argument to root_dir must be a hash, was: #{options.inspect}" if options && !options.kind_of?(Hash)
10
+ dir = options[:root_path] if options
11
+ dir ||= Rails3::Assist::Directory.rails_root || Rails.root
12
+ raise "You must set the Rails app root dir: Rails::Assist::App.root_dir = '/my/root/dir'" if !dir
13
+ dir
14
+ end
15
+ end
16
+
17
+ include Methods
18
+ extend Methods
19
+ end
20
+ end
@@ -0,0 +1,55 @@
1
+ require_all File.dirname(__FILE__) + '/directory'
2
+ require 'rails3_assist/artifact'
3
+
4
+ module Rails3::Assist
5
+ module Directory
6
+ class << self
7
+ attr_accessor :rails_root
8
+ end
9
+
10
+ include Root
11
+ include App
12
+ include Container
13
+
14
+ # dir_for helpers
15
+ # -------------------
16
+
17
+ module Methods
18
+ DIR = Rails3::Assist::Artifact::Directory
19
+
20
+ # :app, :config, :db, :public, :lib, :log, :doc, :test, :spec
21
+ #
22
+ # app_dir, config_dir ...
23
+ Rails3::Assist::Directory::Root.root_directories.each do |name|
24
+ class_eval %{
25
+ def #{name}_dir options={}
26
+ ::File.join(Rails3::Assist::Directory::Root.root_dir(options), '#{name}')
27
+ end
28
+ }
29
+ end
30
+
31
+ def rails_dir_for type, options={}
32
+ raise ArgumentError, '#rails_dir_for takes a dir type argument' if !type
33
+ dir_method = "#{type}_dir"
34
+ return send(dir_method, options) if respond_to?(dir_method)
35
+ DIR.send(dir_method, options) if DIR.respond_to?(dir_method)
36
+ end
37
+
38
+ def app_dir_for type, options={}
39
+ ::File.join(app_dir(options), type.to_s.pluralize)
40
+ end
41
+
42
+ def config_dir_for type, options={}
43
+ ::File.join(config_dir(options), type.to_s.pluralize)
44
+ end
45
+
46
+ def public_dir_for type, options={}
47
+ ::File.join(public_dir(options), type.to_s.pluralize)
48
+ end
49
+ end
50
+
51
+ include Methods
52
+ extend Methods
53
+
54
+ end # Directories
55
+ end
@@ -0,0 +1,14 @@
1
+ require 'sugar-high/file'
2
+
3
+ module Rails3::Assist::File
4
+ module Application
5
+ module Methods
6
+ def insert_application_config statement=nil, &block
7
+ statement = block ? yield : "config.#{statement}"
8
+ File.insert_into application_file, statement, :after => 'Rails::Application', &block
9
+ end
10
+ end
11
+ include Methods
12
+ extend Methods
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ module Rails3::Assist::File
2
+ module Environment
3
+ def insert_before_application_init content=nil, &block
4
+ insert_application_init :before, content, &block
5
+ end
6
+
7
+ def insert_after_application_init content=nil, &block
8
+ insert_application_init :after, content, &block
9
+ end
10
+
11
+ def insert_application_init place, statement=nil, &block
12
+ File.insert_into environment_file, statement, place => /\w+::Application.initialize!/
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,48 @@
1
+ require_all File.dirname(__FILE__)
2
+
3
+ module Rails3::Assist::File
4
+ module Special
5
+ module Methods
6
+ # application_file, environment_file
7
+ [:application, :environment].each do |name|
8
+ class_eval %{
9
+ def #{name}_file
10
+ File.join(Rails3::Assist::Directory.config_dir, '#{name}.rb')
11
+ end
12
+ }
13
+ end
14
+
15
+ def seed_file
16
+ File.join(Rails3::Assist::Directory.db_dir, 'seeds.rb')
17
+ end
18
+
19
+ # read_application_file
20
+ # append_to_application_file
21
+ [:application, :environment, :seed].each do |name|
22
+ class_eval %{
23
+ def read_#{name}_file
24
+ fname = #{name}_file
25
+ File.read(fname) if File.file?(fname)
26
+ end
27
+
28
+ def remove_#{name}_file
29
+ File.delete #{name}_file
30
+ end
31
+
32
+ def append_to_#{name}_file content=nil, &block
33
+ File.append(#{name}_file, content, &block)
34
+ end
35
+ }
36
+ end
37
+ end
38
+
39
+ include Methods
40
+ extend Methods
41
+
42
+ include Rails3::Assist::File::Application
43
+ include Rails3::Assist::File::Environment
44
+
45
+ extend Rails3::Assist::File::Application
46
+ extend Rails3::Assist::File::Environment
47
+ end
48
+ end
@@ -0,0 +1,38 @@
1
+ module Rails3::Assist
2
+ module File
3
+ module Methods
4
+ {:initializer => '.rb', :db => '.rb', :migration => '.rb', :locale => '.yml', :javascript => 'js', :stylesheet => 'css'}.each_pair do |name, ext|
5
+ plural_name = name.to_s.pluralize
6
+
7
+ class_eval %{
8
+ def #{name}_file name
9
+ name = (name =~ /.rb$/) ? name : name + '#{ext}'
10
+ ::File.join(Rails3::Assist::Artifact::Directory.#{name}_dir, name)
11
+ end
12
+
13
+ def create_#{name} name, &block
14
+ ::File.overwrite #{name}_file(name) do
15
+ yield
16
+ end
17
+ end
18
+
19
+ def remove_all_#{plural_name}
20
+ #{name}_files.each{|f| ::File.delete_file! f}
21
+ end
22
+
23
+ def remove_#{plural_name} *names
24
+ return remove_all_#{plural_name} if names.empty?
25
+ names.each do |name|
26
+ ::File.delete #{name}_file(name)
27
+ end
28
+ end
29
+ alias_method :remove_#{name}, :remove_#{plural_name}
30
+ }
31
+ end
32
+ end
33
+
34
+ include Methods
35
+ extend Methods
36
+ end
37
+ end
38
+
@@ -0,0 +1,83 @@
1
+ require 'rake'
2
+ require 'rails3_assist/directory'
3
+ require 'sugar-high/regexp'
4
+
5
+ require_all File.dirname(__FILE__) + '/file'
6
+
7
+ module Rails3::Assist
8
+ module Files
9
+ # we depend on the Directories module doing some of the hard work!
10
+ module Methods
11
+ RYBY_FILES = '**/*.rb'
12
+
13
+ def rails_app_files type = :app, options = {}
14
+ dir = Rails3::Assist::Artifact::Directory.send "#{type.to_s.singularize}_dir"
15
+ expr = options[:expr]
16
+ file_pattern = options[:pattern] || RYBY_FILES
17
+ pattern = "#{dir}/#{file_pattern}"
18
+ FileList[pattern].to_a.grep_it expr
19
+ end
20
+
21
+ def all_files expr=nil
22
+ pattern = "#{Rails3::Assist::Directory::Root.root_dir}/**/*.*"
23
+ FileList[pattern].to_a.grep_it expr
24
+ end
25
+
26
+ def app_files expr=nil
27
+ rails_app_files(:app).grep_it expr
28
+ end
29
+
30
+ # files_from :model, :controller, :matching => /user/
31
+ def files_from *types, &block
32
+ expr = last_option(types)[:matching]
33
+ the_files = types.inject([]) do |files, type|
34
+ method = :"#{type}_files"
35
+ files_found = send(method, expr) if respond_to?(method)
36
+ files_found = Rails3::Assist::Artifact::Files.send(method, expr) if Rails3::Assist::Artifact::Files.respond_to?(method)
37
+ files + files_found
38
+ end.compact
39
+ yield the_files if block
40
+ the_files
41
+ end
42
+
43
+ def with_files_from type, expr=nil, &block
44
+ method = "#{type}_files"
45
+ send method, expr, &block if respond_to?(method)
46
+ end
47
+
48
+
49
+ [:initializer, :db, :migration].each do |name|
50
+ class_eval %{
51
+ def #{name}_files expr=nil
52
+ files = rails_app_files :#{name}, :expr => expr
53
+ yield files if block_given?
54
+ files
55
+ end
56
+ }
57
+ end
58
+
59
+ {:locale => :yml, :javascript => :js}.each_pair do |name, ext|
60
+ class_eval %{
61
+ def #{name}_files expr=nil
62
+ files = rails_app_files(:#{name}, :pattern => '**/*.#{ext}', :expr => expr)
63
+ yield files if block_given?
64
+ files
65
+ end
66
+ }
67
+ end
68
+
69
+ [:css, :sass].each do |ext|
70
+ class_eval %{
71
+ def #{ext}_files expr=nil
72
+ files = rails_app_files :stylesheets, :pattern => '**/*.#{ext}', :expr => expr
73
+ yield files if block_given?
74
+ files
75
+ end
76
+ }
77
+ end
78
+ end
79
+
80
+ include Methods
81
+ extend Methods
82
+ end # Files
83
+ end # App
@@ -0,0 +1,11 @@
1
+ require 'sugar-high/module'
2
+
3
+ module Rails3
4
+ module Assist
5
+ modules :app, :directory, :files, :file
6
+ modules :artifact do
7
+ nested_modules :directory, :files, :path
8
+ end
9
+ end
10
+ end
11
+
@@ -0,0 +1,2 @@
1
+ require 'require_all'
2
+ require_all File.dirname(__FILE__) + '/matchers'
@@ -0,0 +1,49 @@
1
+ # open application_file
2
+ # see if there is the config.[statement] = [expr]
3
+
4
+ module RSpec::Rails::ContentMatchers
5
+ class HaveAppConfig
6
+
7
+ use_rails_file_helpers :special # TODO !!!
8
+
9
+ attr_reader :left_side, :right_side, :operator
10
+
11
+ def initialize statement_hash
12
+ @left_side, @right_side = *statement.first
13
+ @operator = statement.last[:op] || '='
14
+ end
15
+
16
+ # TODO: relative to root_path ?
17
+ def matches?(root_path=nil)
18
+ content = read_application_file
19
+ return nil if content.empty?
20
+
21
+ ls, rs, op = escape_all(left_side, right_side, operator)
22
+ (content =~ /config.#{ls}\s*#{op}\s*#{rs}/)
23
+ end
24
+
25
+ def escape_all *texts
26
+ texts.map{|t| Regexp.escape(t) }
27
+ end
28
+
29
+ def msg
30
+ "there to be the Application config statement '#{left_side} #{operator} #{right_side}' in config/application.rb"
31
+ end
32
+
33
+ def failure_message
34
+ "Expected #{msg}"
35
+ end
36
+
37
+ def negative_failure_message
38
+ super
39
+ "Did not expect #{msg}"
40
+ end
41
+ end
42
+
43
+ # config.autoload_paths += %W(#{Rails.root}/lib)
44
+ # have_app_config :autoload_paths => '%W(#{Rails.root}/lib)', :op => '+='
45
+ def have_app_config statement_hash
46
+ HaveAppConfig.new statement_hash
47
+ end
48
+
49
+ end
data/lib/rails3_assist.rb CHANGED
@@ -1,21 +1,30 @@
1
1
  require 'thor'
2
2
  require 'require_all'
3
+ require 'fileutils'
4
+ require 'rake'
3
5
  require 'active_support/inflector'
4
6
 
5
- module Rails
6
- module Assist
7
- def self.artifacts
8
- [:observer, :controller, :helper, :mailer, :model, :migration]
9
- end
10
-
11
- class << self
12
- attr_accessor :debug_on
13
- end
7
+ require 'sugar-high/alias'
8
+ require 'sugar-high/file'
9
+ require 'sugar-high/regexp'
10
+
11
+ require 'rails3_assist/namespaces'
12
+
13
+ module Rails3::Assist
14
+ def self.artifacts
15
+ [:observer, :controller, :helper, :mailer, :model, :migration, :permit]
16
+ end
17
+
18
+ class << self
19
+ attr_accessor :debug_on
14
20
  end
15
21
  end
16
22
 
17
- require 'rails3_assist/extensions/core_ext'
18
23
  require 'rails3_assist/rspec/macro'
24
+
19
25
  require 'rails3_assist/app'
20
- require_all File.dirname(__FILE__) + '/rails3_assist/artifact'
26
+ require 'rails3_assist/directory'
27
+ require 'rails3_assist/file'
28
+ require 'rails3_assist/files'
29
+ require 'rails3_assist/artifact'
21
30