toy-locomotive 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- toy-locomotive (0.0.1)
4
+ toy-locomotive (0.0.3)
5
5
  rails
6
6
 
7
7
  GEM
@@ -0,0 +1,76 @@
1
+ module ToyLocomotive::Resources::Controller
2
+
3
+ module ClassMethods
4
+ def extract_resources args
5
+ actions = [:index, :new, :create, :show, :edit, :update, :destroy]
6
+ return actions if args == :all
7
+ return args[:only] if args[:only]
8
+ actions - args[:except]
9
+ end
10
+
11
+ def resources args
12
+ extract_resources(args).each{|action| send :"set_action_#{action}"}
13
+ end
14
+
15
+ def set_action_new
16
+ get 'new' do
17
+ extract_parent_vars
18
+ parent = instance_variable_get (model = self.class.extract_model).belongs_chain.reverse.pop.to_member_var
19
+ instance_variable_set model.to_member_var, (parent ? parent.send(model.to_s.underscore.pluralize) : model).new
20
+ end
21
+ end
22
+
23
+ def set_action_index
24
+ get 'index' do
25
+ extract_parent_vars
26
+ extract_collection_var
27
+ end
28
+ end
29
+
30
+ def set_action_show
31
+ get 'show' do
32
+ extract_parent_vars
33
+ extract_member_var
34
+ end
35
+ end
36
+
37
+ def set_action_edit
38
+ get 'edit' do
39
+ extract_parent_vars
40
+ extract_member_var
41
+ end
42
+ end
43
+
44
+ def set_action_create
45
+ post 'create' do
46
+ vars = extract_parent_vars
47
+ parent = instance_variable_get (model = self.class.extract_model).belongs_chain.reverse.pop.to_member_var
48
+ member = (parent ? parent.send(model.to_s.underscore.pluralize) : model).new(params[model.to_params])
49
+ instance_variable_set model.to_member_var, member
50
+ vars = vars << member
51
+ return redirect_to vars, notice: 'Burrito was successfully created.' if member.save
52
+ render action: 'new'
53
+ end
54
+ end
55
+
56
+ def set_action_update
57
+ put 'update' do
58
+ vars = extract_parent_vars
59
+ vars = vars << (member = extract_member_var)
60
+ return redirect_to vars, notice: 'Burrito was successfully updated.' if member.update_attributes(params[member.class.to_s.underscore.to_sym])
61
+ render action: 'edit'
62
+ end
63
+ end
64
+
65
+ def set_action_destroy
66
+ delete 'destroy' do
67
+ vars = extract_parent_vars
68
+ extract_member_var.destroy
69
+ redirect_to action: :index, notice: 'Burrito was successfully deleted'
70
+ end
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+ ActionController::Base.extend ToyLocomotive::Resources::Controller::ClassMethods
@@ -5,10 +5,10 @@ module ToyLocomotive::Router::Controller
5
5
  %w(get put post delete).each {|via| eval "def #{via} path, opts={}, &blk; match_action \"#{via}\", path, opts, blk; end"}
6
6
 
7
7
  def match_action method, path, opts, blk
8
- action = extract_action path, opts
9
- extract_filter action, path, opts
8
+ action = extract_action path, opts, method
9
+ extract_filter action, path, opts, method
10
+ as = extract_as path, opts, method
10
11
  path = extract_path path, opts
11
- as = extract_as path, opts
12
12
  controller = extract_controller
13
13
  add_route method, action, path, as, controller
14
14
  define_method action, blk
@@ -17,6 +17,7 @@ module ToyLocomotive::Router::Controller
17
17
  def add_route method, action, path, as, controller
18
18
  ToyLocomotive.routes ||= []
19
19
  ToyLocomotive.routes << {method: method, action: action, path: path, controller: controller, as: as}
20
+ puts ({method: method, action: action, path: path, controller: controller, as: as}.inspect)
20
21
  end
21
22
 
22
23
  def add_member_filter action
@@ -30,15 +31,22 @@ module ToyLocomotive::Router::Controller
30
31
  end
31
32
 
32
33
  def extract_path path, opts={}
33
- path[0] == '/' ? path : "#{extract_model.route_chain}#{opts[:on] == 'member' ? extract_model.to_route : "/#{extract_model.to_s.underscore.pluralize}"}/#{path.parameterize}"
34
+ return path if path[0] == '/'
35
+ return "#{extract_model.route_chain}#{extract_model.to_route}/#{path.parameterize}" if opts[:on] == 'member' || ['edit','new'].include?(path)
36
+ return "#{extract_model.route_chain}#{extract_model.to_route}" if ['show','update','destroy'].include?(path)
37
+ return "#{extract_model.route_chain}/#{extract_model.to_s.underscore.pluralize}" if ['create', 'index'].include?(path)
38
+ "#{extract_model.route_chain}/#{extract_model.to_s.underscore.pluralize}/#{path.parameterize}"
34
39
  end
35
40
 
36
- def extract_as path, opts={}
41
+ def extract_as path, opts={}, method='get'
42
+ return extract_model.to_as.pluralize if path == 'index'
43
+ return extract_model.to_as if path == 'show'
44
+ return nil if method != 'get'
37
45
  action = extract_action path, opts
38
46
  path[0] == '/' ? action : "#{action}_#{extract_model.to_as}"
39
47
  end
40
48
 
41
- def extract_action path, opts={}
49
+ def extract_action path, opts={}, method='get'
42
50
  (opts[:as] || (path == '/' ? 'root' : path)).parameterize.underscore
43
51
  end
44
52
 
@@ -50,8 +58,9 @@ module ToyLocomotive::Router::Controller
50
58
  extract_controller.singularize.camelize.constantize
51
59
  end
52
60
 
53
- def extract_filter action, path, opts
61
+ def extract_filter action, path, opts, method
54
62
  return if path[0] == '/'
63
+ return if %w(index show new edit destroy update create).include? path
55
64
  send :"add_#{opts[:on]}_filter", action
56
65
  end
57
66
 
@@ -1,3 +1,3 @@
1
1
  module ToyLocomotive
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -4,10 +4,12 @@ require "toy-locomotive/version"
4
4
  module ToyLocomotive
5
5
 
6
6
  module Router; end
7
+ module Resources; end
7
8
  mattr_accessor :routes
8
9
 
9
10
  end
10
11
 
11
12
  require "toy-locomotive/router/model"
12
13
  require "toy-locomotive/router/controller"
14
+ require "toy-locomotive/resources/controller"
13
15
  require "toy-locomotive/initializer"
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe DogsController do
4
+ describe 'extract_resources' do
5
+
6
+ it 'acepts :all as param' do
7
+ DogsController.extract_resources(:all).should == [:index, :new, :create, :show, :edit, :update, :destroy]
8
+ end
9
+ it 'acepts :only as param' do
10
+ DogsController.extract_resources(only: [:index, :show]).should == [:index, :show]
11
+ end
12
+ it 'acepts :except as param' do
13
+ DogsController.extract_resources(except: [:index, :destroy]).should == [:new, :create, :show, :edit, :update]
14
+ end
15
+ end
16
+
17
+ describe 'set_action' do
18
+ it "executes index" do
19
+ DogsController.resources(only: [:index])
20
+ DogsController.new.index.class.should == Array
21
+ end
22
+
23
+ it "executes new" do
24
+ DogsController.resources(only: [:new])
25
+ DogsController.new.new.human.should == Human.first
26
+ end
27
+
28
+ it "executes show" do
29
+ DogsController.resources(only: [:show])
30
+ DogsController.new.show.should == Dog.first
31
+ end
32
+
33
+ it "executes edit" do
34
+ DogsController.resources(only: [:edit])
35
+ DogsController.new.show.should == Dog.first
36
+ end
37
+
38
+ end
39
+ end
@@ -68,4 +68,41 @@ describe DogsController do
68
68
  end
69
69
  end
70
70
 
71
+ describe 'resources' do
72
+ it "gets an index" do
73
+ DogsController.get('index') { 'index' }
74
+ DogsController.new.index.should == 'index'
75
+ end
76
+
77
+ it "gets a show" do
78
+ DogsController.get('show') { 'show' }
79
+ DogsController.new.show.should == 'show'
80
+ end
81
+
82
+ it "gets a new" do
83
+ DogsController.get('new') { 'new' }
84
+ DogsController.new.new.should == 'new'
85
+ end
86
+
87
+ it "gets a edit" do
88
+ DogsController.get('edit') { 'edit' }
89
+ DogsController.new.edit.should == 'edit'
90
+ end
91
+
92
+ it "puts a update" do
93
+ DogsController.put('update') { 'update' }
94
+ DogsController.new.update.should == 'update'
95
+ end
96
+
97
+ it "posts a create" do
98
+ DogsController.post('create') { 'create' }
99
+ DogsController.new.create.should == 'create'
100
+ end
101
+
102
+ it "deletes a destroy" do
103
+ DogsController.delete('destroy') { 'destroy' }
104
+ DogsController.new.destroy.should == 'destroy'
105
+ end
106
+ end
107
+
71
108
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toy-locomotive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-09 00:00:00.000000000 Z
12
+ date: 2012-05-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &26691096 !ruby/object:Gem::Requirement
16
+ requirement: &25866492 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *26691096
24
+ version_requirements: *25866492
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec-rails
27
- requirement: &26690760 !ruby/object:Gem::Requirement
27
+ requirement: &25865832 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *26690760
35
+ version_requirements: *25865832
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: sqlite3
38
- requirement: &26690316 !ruby/object:Gem::Requirement
38
+ requirement: &25865424 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *26690316
46
+ version_requirements: *25865424
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: shoulda
49
- requirement: &26689824 !ruby/object:Gem::Requirement
49
+ requirement: &25864668 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *26689824
57
+ version_requirements: *25864668
58
58
  description: a Different aproach to Rails applications
59
59
  email:
60
60
  - mortaro@towsta.com
@@ -68,10 +68,12 @@ files:
68
68
  - Rakefile
69
69
  - lib/toy-locomotive.rb
70
70
  - lib/toy-locomotive/initializer.rb
71
+ - lib/toy-locomotive/resources/controller.rb
71
72
  - lib/toy-locomotive/router/controller.rb
72
73
  - lib/toy-locomotive/router/model.rb
73
74
  - lib/toy-locomotive/version.rb
74
75
  - readme
76
+ - spec/lib/resources_controller_spec.rb
75
77
  - spec/lib/router_controller_spec.rb
76
78
  - spec/lib/router_model_spec.rb
77
79
  - spec/lib/toy_locomotive_spec.rb