toy-locomotive 0.0.2 → 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.
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