foam 0.0.3

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