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,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,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
|
+
|