foam 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Explain the generator
3
+
4
+ Example:
5
+ rails generate resource_layout --generator=ingoweiss:scaffold
6
+
7
+ This will create:
8
+ scaffold for application with resource layout as described in config/resource_layout.rb
@@ -0,0 +1,41 @@
1
+ require 'resource_layout'
2
+
3
+ class ResourceLayoutGenerator < Rails::Generators::Base
4
+
5
+ class_option :generator, :type => :string
6
+
7
+ def self.source_root
8
+ @source_root ||= File.join(File.dirname(__FILE__), 'templates')
9
+ end
10
+
11
+ def run_generators_or_create_resource_layout_file
12
+ resource_layout_file_exists? ? run_generators : create_resource_layout_file
13
+ end
14
+
15
+ protected
16
+
17
+ def create_resource_layout_file
18
+ if yes? 'Create resource layout file?'
19
+ copy_file 'resource_layout_file.txt', 'config/resource_layout.rb'
20
+ end
21
+ end
22
+
23
+ def run_generators
24
+ ResourceLayout.load(destination_root)
25
+ generator_class = Rails::Generators.find_by_namespace(options[:generator].to_s)
26
+ ResourceLayout.resources.each do |(resource_name, resource_attributes, resource_options)|
27
+ generator_class.new([resource_name, resource_attributes_array(resource_attributes)], resource_options.merge(:skip_route => true)).invoke
28
+ sleep 1.1 # Hack to prevent 'Multiple migrations have the version number' errors
29
+ end
30
+ route ResourceLayout.routes_definition
31
+ end
32
+
33
+ def resource_attributes_array(resource_attributes)
34
+ resource_attributes.collect{ |name, type| "#{name}:#{type}" }
35
+ end
36
+
37
+ def resource_layout_file_exists?
38
+ File.exists?(File.join(destination_root, 'config/resource_layout.rb'))
39
+ end
40
+
41
+ end
@@ -0,0 +1,3 @@
1
+ ResourceLayout.define do
2
+
3
+ end
@@ -0,0 +1,56 @@
1
+ class ResourceLayout
2
+
3
+ def initialize(&block)
4
+ @scope = []
5
+ self.instance_exec(&block)
6
+ end
7
+
8
+ class << self
9
+ alias_method :define, :new
10
+
11
+ def resources
12
+ @@resources ||= []
13
+ end
14
+
15
+ def routes_definition
16
+ @@route_definition ||= "\n"
17
+ end
18
+
19
+ def add_to_routes_definition(line, scope)
20
+ routes_definition << ' '*(scope.length+2) + line + "\n"
21
+ end
22
+
23
+ def load(root)
24
+ require root + '/config/resource_layout'
25
+ end
26
+ end
27
+
28
+ def many(resource, attributes={})
29
+ current_scope = @scope.dup
30
+ self.class.resources << [resource.to_s, attributes, {:scope => current_scope, :singleton => false}]
31
+ if block_given?
32
+ @scope << resource.to_s
33
+ self.class.add_to_routes_definition "resources :#{resource}, :controller => '#{current_scope.collect{|s| s.to_s.singularize + '_'}.join}#{resource.to_s.pluralize}' do", current_scope
34
+ yield
35
+ self.class.add_to_routes_definition "end", current_scope
36
+ @scope = current_scope
37
+ else
38
+ self.class.add_to_routes_definition "resources :#{resource}, :controller => '#{current_scope.collect{|s| s.to_s.singularize + '_'}.join}#{resource.to_s.pluralize}'", current_scope
39
+ end
40
+ end
41
+
42
+ def one(resource, attributes={})
43
+ current_scope = @scope.dup
44
+ self.class.resources << [resource.to_s, attributes, {:scope => current_scope, :singleton => true}]
45
+ if block_given?
46
+ @scope << resource.to_s
47
+ self.class.add_to_routes_definition "resource :#{resource}, :controller => '#{current_scope.collect{|s| s.to_s.singularize + '_'}.join}#{resource.to_s.singularize}' do", current_scope
48
+ yield
49
+ self.class.add_to_routes_definition "end", current_scope
50
+ @scope = current_scope
51
+ else
52
+ self.class.add_to_routes_definition "resource :#{resource}, :controller => '#{current_scope.collect{|s| s.to_s.singularize + '_'}.join}#{resource.to_s.singularize}'", current_scope
53
+ end
54
+ end
55
+
56
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: foam
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 3
9
+ version: 0.0.3
10
+ platform: ruby
11
+ authors:
12
+ - Ingo Weiss
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-05-09 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rails
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 3
29
+ - 0
30
+ - 0
31
+ - beta1
32
+ version: 3.0.0.beta1
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ description: Foam is a meta generator for generating scaffold for a Rails application from a description of the application's resource layout
36
+ email: ingo@ingoweiss.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - lib/generators/resource_layout/resource_layout_generator.rb
45
+ - lib/generators/resource_layout/templates/resource_layout_file.txt
46
+ - lib/generators/resource_layout/USAGE
47
+ - lib/resource_layout.rb
48
+ has_rdoc: true
49
+ homepage: http://www.github.com/ingoweiss/foam
50
+ licenses: []
51
+
52
+ post_install_message:
53
+ rdoc_options: []
54
+
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ segments:
69
+ - 0
70
+ version: "0"
71
+ requirements: []
72
+
73
+ rubyforge_project:
74
+ rubygems_version: 1.3.6
75
+ signing_key:
76
+ specification_version: 3
77
+ summary: A scaffold meta-generator
78
+ test_files: []
79
+