crud_generator 0.0.1
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.
- checksums.yaml +7 -0
- data/lib/crud_generator.rb +127 -0
- data/spec/crud_generator_spec.rb +114 -0
- metadata +73 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b6f1a188657cfb454a7092a607c62c6a778136f3
|
4
|
+
data.tar.gz: af92e39bb0328fcb160815136cdfc6cf3f3eee55
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3a4788111b43e68c01c25b730e7ce564c649cfcf75d724f1d7561f3cdb29245ed345eb80c6e19090db83ebb08ce79c6484c76702123efcdbedb8ba82bc983b1d
|
7
|
+
data.tar.gz: de9c3d04bac7117cd6c9986daafbba5b8d167ad52f776201a1e19d56394b66c6068bbefdbf2de20ecba48fbb431f27c4f62d4fb12ac277f9ebb7d292cef39a92
|
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module CRUDGenerator
|
4
|
+
def generate_crud_actions(*args)
|
5
|
+
actions = [:index, :show, :new, :create, :edit, :update, :destroy]
|
6
|
+
|
7
|
+
#Allows user input to set the methods one of two ways
|
8
|
+
if args.length == 1 && args[0].is_a?(Hash)
|
9
|
+
actions = args[0].values.flatten if args[0].keys.first == :only
|
10
|
+
actions -= args[0].values.flatten if args[0].keys.first == :except
|
11
|
+
elsif !args.empty?
|
12
|
+
actions = args
|
13
|
+
end
|
14
|
+
|
15
|
+
actions.each do |action|
|
16
|
+
send("define_#{action}")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def define_index
|
21
|
+
define_method(:index) do
|
22
|
+
instance_name = self.class.instance_name
|
23
|
+
model_class = self.class.model_class
|
24
|
+
instance_variable_set(
|
25
|
+
"@#{instance_name.pluralize}",
|
26
|
+
model_class.all
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def define_show
|
32
|
+
define_method(:show) do
|
33
|
+
instance_name = self.class.instance_name
|
34
|
+
model_class = self.class.model_class
|
35
|
+
instance_variable_set(
|
36
|
+
"@#{instance_name}",
|
37
|
+
model_class.find(params[:id])
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def define_new
|
43
|
+
define_method(:new) do
|
44
|
+
instance_name = self.class.instance_name
|
45
|
+
model_class = self.class.model_class
|
46
|
+
instance_variable_set(
|
47
|
+
"@#{instance_name}",
|
48
|
+
model_class.new
|
49
|
+
)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def define_edit
|
54
|
+
define_method(:edit) do
|
55
|
+
instance_name = self.class.instance_name
|
56
|
+
model_class = self.class.model_class
|
57
|
+
instance_variable_set(
|
58
|
+
"@#{instance_name}",
|
59
|
+
model_class.find(params[:id])
|
60
|
+
)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def define_create
|
65
|
+
define_method(:create) do
|
66
|
+
instance_name = self.class.instance_name
|
67
|
+
model_class = self.class.model_class
|
68
|
+
instance_variable_set(
|
69
|
+
"@#{instance_name}",
|
70
|
+
model_class.new(params[instance_name.to_sym])
|
71
|
+
)
|
72
|
+
|
73
|
+
obj = instance_variable_get("@#{instance_name}")
|
74
|
+
|
75
|
+
if obj.save
|
76
|
+
redirect_to obj
|
77
|
+
else
|
78
|
+
flash.now[:errors] = obj.errors.full_messages
|
79
|
+
render :new
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def define_update
|
85
|
+
define_method(:update) do
|
86
|
+
instance_name = self.class.instance_name
|
87
|
+
model_class = self.class.model_class
|
88
|
+
instance_variable_set(
|
89
|
+
"@#{instance_name}",
|
90
|
+
model_class.find(params[:id])
|
91
|
+
)
|
92
|
+
|
93
|
+
obj = instance_variable_get("@#{instance_name}")
|
94
|
+
|
95
|
+
if obj.update_attributes(params[instance_name.to_sym])
|
96
|
+
redirect_to obj
|
97
|
+
else
|
98
|
+
flash.now[:errors] = obj.errors.full_messages
|
99
|
+
render :edit
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def define_destroy
|
105
|
+
define_method(:destroy) do
|
106
|
+
index_url = self.class.index_url
|
107
|
+
model_class = self.class.model_class
|
108
|
+
obj = model_class.find(params[:id])
|
109
|
+
|
110
|
+
obj.destroy
|
111
|
+
redirect_to index_url
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def instance_name
|
116
|
+
self.to_s.underscore[0..-12].singularize
|
117
|
+
end
|
118
|
+
|
119
|
+
def model_class
|
120
|
+
instance_name.camelize.constantize
|
121
|
+
end
|
122
|
+
|
123
|
+
def index_url
|
124
|
+
url = root_url
|
125
|
+
url += "/#{instance_name.pluralize}"
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'crud_generator'
|
3
|
+
|
4
|
+
describe CRUDGenerator do
|
5
|
+
context "Controller variables" do
|
6
|
+
before(:each) do
|
7
|
+
class ParentsController
|
8
|
+
extend CRUDGenerator
|
9
|
+
|
10
|
+
def self.root_url
|
11
|
+
"localhost:3000"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class ChildrenController < ParentsController
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it "has the right instance name" do
|
20
|
+
name1 = ParentsController.instance_name
|
21
|
+
name2 = ChildrenController.instance_name
|
22
|
+
|
23
|
+
name1.should == "parent"
|
24
|
+
name2.should == "child"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "has the right model class" do
|
28
|
+
Parent = Struct.new(:name)
|
29
|
+
Child = Struct.new(:name)
|
30
|
+
model1 = ParentsController.model_class
|
31
|
+
model2 = ChildrenController.model_class
|
32
|
+
|
33
|
+
model1.should == (Parent)
|
34
|
+
model2.should == (Child)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "has the right index_url" do
|
38
|
+
index1 = ParentsController.index_url
|
39
|
+
index2 = ChildrenController.index_url
|
40
|
+
|
41
|
+
index1.should == "localhost:3000/parents"
|
42
|
+
index2.should == "localhost:3000/children"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "Controller actions" do
|
47
|
+
before(:each) do
|
48
|
+
class ParentsController
|
49
|
+
extend CRUDGenerator
|
50
|
+
include CRUDGenerator
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
it "creates all crud methods automatically" do
|
55
|
+
class ChildrenController
|
56
|
+
generate_crud_actions
|
57
|
+
end
|
58
|
+
child1 = ChildrenController.new
|
59
|
+
|
60
|
+
child1.methods.should include(:index)
|
61
|
+
child1.methods.should include(:show)
|
62
|
+
child1.methods.should include(:new)
|
63
|
+
child1.methods.should include(:create)
|
64
|
+
child1.methods.should include(:edit)
|
65
|
+
child1.methods.should include(:update)
|
66
|
+
child1.methods.should include(:destroy)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "add all and only specified crud methods (when specified)" do
|
70
|
+
class MoreChildrenController < ParentsController
|
71
|
+
generate_crud_actions :index, :show
|
72
|
+
end
|
73
|
+
child2 = MoreChildrenController.new
|
74
|
+
|
75
|
+
child2.methods.should include(:index)
|
76
|
+
child2.methods.should include(:show)
|
77
|
+
child2.methods.should_not include(:new)
|
78
|
+
child2.methods.should_not include(:create)
|
79
|
+
child2.methods.should_not include(:edit)
|
80
|
+
child2.methods.should_not include(:update)
|
81
|
+
child2.methods.should_not include(:destroy)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "only creates included crud methods" do
|
85
|
+
class EvenMoreChildrenController < ParentsController
|
86
|
+
generate_crud_actions :only => [:index, :show]
|
87
|
+
end
|
88
|
+
child3 = EvenMoreChildrenController.new
|
89
|
+
|
90
|
+
child3.methods.should include(:index)
|
91
|
+
child3.methods.should include(:show)
|
92
|
+
child3.methods.should_not include(:new)
|
93
|
+
child3.methods.should_not include(:create)
|
94
|
+
child3.methods.should_not include(:edit)
|
95
|
+
child3.methods.should_not include(:update)
|
96
|
+
child3.methods.should_not include(:destroy)
|
97
|
+
end
|
98
|
+
|
99
|
+
it "creates all crud methods except ones that are excluded" do
|
100
|
+
class LastChildrenController < ParentsController
|
101
|
+
generate_crud_actions :except => [:index, :show]
|
102
|
+
end
|
103
|
+
child4 = LastChildrenController.new
|
104
|
+
|
105
|
+
child4.methods.should_not include(:index)
|
106
|
+
child4.methods.should_not include(:show)
|
107
|
+
child4.methods.should include(:new)
|
108
|
+
child4.methods.should include(:create)
|
109
|
+
child4.methods.should include(:edit)
|
110
|
+
child4.methods.should include(:update)
|
111
|
+
child4.methods.should include(:destroy)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: crud_generator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Natasha Hull-Richter
|
8
|
+
autorequire: crud_generator
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-10-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: active_support/inflector
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: CRUD generator generates CRUD dynamically in controllers
|
42
|
+
email: natashaalex.hull@gmail.com
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- lib/crud_generator.rb
|
48
|
+
- spec/crud_generator_spec.rb
|
49
|
+
homepage: http://github.com/NatashaHull/crud_generator
|
50
|
+
licenses: []
|
51
|
+
metadata: {}
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
requirements: []
|
67
|
+
rubyforge_project:
|
68
|
+
rubygems_version: 2.0.3
|
69
|
+
signing_key:
|
70
|
+
specification_version: 4
|
71
|
+
summary: CRUD generator generates CRUD dynamically in controllers
|
72
|
+
test_files:
|
73
|
+
- spec/crud_generator_spec.rb
|