cruddy 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 90532271103c41782049c9aacbf400c7bb0f105f
4
+ data.tar.gz: e80c4957c57cc26a7608fb9e40d877525513bd44
5
+ SHA512:
6
+ metadata.gz: b19f3d7791769e403a280a21cea95c9fa2143a7af369eccfd3d84d0183e44012acd512833b654a0a32c4ba6d1400979cd7679982011195ec31dbea17ba249770
7
+ data.tar.gz: b71a8574acccce1523c931e7c39776e687efcffa7468f12184683a3aa8b2b21087b5828943928081f12921f57f87d5d2f50df7f1ba4c6f580255a6dfa25d1ebd
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2014 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Cruddy'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+
18
+
19
+
20
+ Bundler::GemHelper.install_tasks
21
+
data/lib/cruddy.rb ADDED
@@ -0,0 +1,4 @@
1
+ require "cruddy/controller"
2
+
3
+ module Cruddy
4
+ end
@@ -0,0 +1,127 @@
1
+ module Cruddy::Controller
2
+ module ClassMethods
3
+
4
+ end
5
+
6
+ module InstanceMethods
7
+ # the class this controller manages
8
+ def resource_class
9
+ controller_name.classify.constantize
10
+ end
11
+
12
+ # the name of the resource collection
13
+ def resource_collection_name
14
+ controller_name
15
+ end
16
+
17
+ # the name of the singular resource
18
+ def resource_instance_name
19
+ controller_name.singularize
20
+ end
21
+
22
+ # get instance variable for singluar resource instance
23
+ def resource
24
+ instance_variable_get("@#{resource_instance_name}")
25
+ end
26
+
27
+ # set instance variable for singluar resource instance
28
+ def resource=(resource)
29
+ instance_variable_set("@#{resource_instance_name}", resource)
30
+ end
31
+
32
+ # get instance variable for collection of resource instances
33
+ def resources
34
+ instance_variable_get("@#{resource_collection_name}")
35
+ end
36
+
37
+ # set instance variable for collection of resource instances
38
+ def resources=(collection)
39
+ instance_variable_set("@#{resource_collection_name}", collection)
40
+ end
41
+
42
+ # require the resource and permit all params by default
43
+ def resource_params
44
+ params.require(resource_instance_name).permit!
45
+ end
46
+
47
+ # get the path to a singular resource
48
+ def resource_path(resource)
49
+ send("#{resource_instance_name}_path", resource)
50
+ end
51
+
52
+ # get the path to index resources
53
+ def resources_path
54
+ send("#{resource_collection_name}_path")
55
+ end
56
+
57
+ def find_resource_instance
58
+ self.resource = resource_class.find(params[:id])
59
+ end
60
+
61
+ def find_resource_collection
62
+ self.resources = resource_class.all
63
+ end
64
+
65
+ # index action
66
+ def index
67
+ find_resource_collection
68
+ respond_with resources
69
+ end
70
+
71
+ # show action
72
+ def show
73
+ find_resource_instance
74
+ respond_with resource
75
+ end
76
+
77
+ # new action
78
+ def new
79
+ self.resource = resource_class.new
80
+ respond_with resource
81
+ end
82
+
83
+ # create action
84
+ def create
85
+ self.resource = resource_class.new(resource_params)
86
+
87
+ if resource.save
88
+ redirect_to resource_path(resource)
89
+ else
90
+ respond_with(resource) do |format|
91
+ format.html { render :new }
92
+ end
93
+ end
94
+ end
95
+
96
+ # edit action
97
+ def edit
98
+ find_resource_instance
99
+ respond_with resource
100
+ end
101
+
102
+ # update action
103
+ def update
104
+ find_resource_instance
105
+
106
+ if resource.update_attributes(resource_params)
107
+ redirect_to resource_path(resource)
108
+ else
109
+ respond_with(resource) do |format|
110
+ format.html { render :edit }
111
+ end
112
+ end
113
+ end
114
+
115
+ # destroy action
116
+ def destroy
117
+ find_resource_instance
118
+ resource.destroy
119
+ redirect_to resources_path
120
+ end
121
+ end
122
+
123
+ def self.included(receiver)
124
+ receiver.extend ClassMethods
125
+ receiver.send :include, InstanceMethods
126
+ end
127
+ end
@@ -0,0 +1,2 @@
1
+ # require all spec support files
2
+ Dir[File.join(File.dirname(__FILE__), 'spec_support', '*.rb')].each {|file| require file }
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples "cruddy::controller#create" do
4
+ let(:resource_instance_name) { resource_class.to_s.downcase }
5
+ let(:resource_collection_name) { resource_instance_name.pluralize }
6
+
7
+ describe "POST create" do
8
+ context "when saved successfully" do
9
+ let(:instance) { mock_model resource_class, valid_resource_params.merge({save: true}) }
10
+ let(:instance_path_method) { "#{resource_instance_name}_path" }
11
+ let(:instance_path) { send(instance_path_method, instance) }
12
+
13
+ before do
14
+ resource_class.stub(:new).with(valid_resource_params) { instance }
15
+ end
16
+
17
+ it "assigns the newly created resource" do
18
+ post :create, resource_instance_name => valid_resource_params
19
+ assigns(resource_instance_name).should eq(instance)
20
+ end
21
+
22
+ it "redirects to the newly created resource" do
23
+ post :create, resource_instance_name => valid_resource_params
24
+ response.should redirect_to(instance_path)
25
+ end
26
+ end
27
+
28
+ context "when save fails" do
29
+ let(:instance) { mock_model resource_class, valid_resource_params.merge({save: false}) }
30
+ let(:instance_path_method) { "#{resource_instance_name}_path" }
31
+
32
+ before do
33
+ resource_class.stub(:new).with(valid_resource_params) { instance }
34
+ end
35
+
36
+ it "assigns the newly created resource" do
37
+ post :create, resource_instance_name => valid_resource_params
38
+ assigns(resource_instance_name).should eq(instance)
39
+ end
40
+
41
+ it "renders the new view" do
42
+ post :create, resource_instance_name => valid_resource_params
43
+ response.should render_template(:new)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples "cruddy::controller" do
4
+ # Create
5
+ it_behaves_like "cruddy::controller#new"
6
+ it_behaves_like "cruddy::controller#create"
7
+
8
+ # Read
9
+ it_behaves_like "cruddy::controller#index"
10
+ it_behaves_like "cruddy::controller#show"
11
+
12
+ # Update
13
+ it_behaves_like "cruddy::controller#edit"
14
+ it_behaves_like "cruddy::controller#update"
15
+
16
+ # Delete
17
+ it_behaves_like "cruddy::controller#destroy"
18
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples "cruddy::controller#destroy" do
4
+ let(:resource_instance_name) { resource_class.to_s.downcase }
5
+ let(:resource_collection_name) { resource_instance_name.pluralize }
6
+
7
+ describe "DELETE destroy" do
8
+ let(:instance) { mock_model resource_class, destroy: true }
9
+ let(:collection_path_method) { "#{resource_collection_name}_path" }
10
+ let(:collection_path) { send(collection_path_method) }
11
+
12
+ before do
13
+ resource_class.stub(:find).with(instance.id.to_s) { instance }
14
+ end
15
+
16
+ it "finds the resource instance" do
17
+ delete :destroy, id: instance.id
18
+ assigns(resource_instance_name).should eq(instance)
19
+ end
20
+
21
+ it "destroys the resource" do
22
+ delete :destroy, id: instance.id
23
+ expect(instance).to have_received(:destroy)
24
+ end
25
+
26
+ it "redirects to the resource collection path" do
27
+ delete :destroy, id: instance.id
28
+ response.should redirect_to(collection_path)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples "cruddy::controller#edit" do
4
+ let(:resource_instance_name) { resource_class.to_s.downcase }
5
+ let(:resource_collection_name) { resource_instance_name.pluralize }
6
+
7
+ describe "GET edit" do
8
+ let(:instance) { mock_model resource_class }
9
+
10
+ before do
11
+ resource_class.stub(:find).with(instance.id.to_s) { instance }
12
+ end
13
+
14
+ it "finds the instance" do
15
+ get :edit, id: instance.id
16
+ assigns(resource_instance_name).should eq(instance)
17
+ end
18
+
19
+ it "renders the edit view" do
20
+ get :edit, id: instance.id
21
+ response.should render_template(:edit)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples "cruddy::controller#index" do
4
+ let(:resource_instance_name) { resource_class.to_s.downcase }
5
+ let(:resource_collection_name) { resource_instance_name.pluralize }
6
+
7
+ describe "GET index" do
8
+ let(:instance) { mock_model resource_class }
9
+
10
+ before do
11
+ resource_class.stub(:all) { [instance] }
12
+ end
13
+
14
+ it "finds the collection" do
15
+ get :index
16
+ assigns(resource_collection_name).should eq(resource_class.all)
17
+ end
18
+
19
+ it "renders the index view" do
20
+ get :index
21
+ response.should render_template(:index)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples "cruddy::controller#new" do
4
+ let(:resource_instance_name) { resource_class.to_s.downcase }
5
+ let(:resource_collection_name) { resource_instance_name.pluralize }
6
+
7
+ describe "GET new" do
8
+ it "initializes a resource instance" do
9
+ get :new
10
+ assigns(resource_instance_name).should be_a_kind_of(resource_class)
11
+ assigns(resource_instance_name).should be_new_record
12
+ end
13
+
14
+ it "renders the new view" do
15
+ get :new
16
+ response.should render_template(:new)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples "cruddy::controller#show" do
4
+ let(:resource_instance_name) { resource_class.to_s.downcase }
5
+ let(:resource_collection_name) { resource_instance_name.pluralize }
6
+
7
+ describe "GET show" do
8
+ let(:instance) { mock_model resource_class }
9
+
10
+ before do
11
+ resource_class.stub(:find).with(instance.id.to_s) { instance }
12
+ end
13
+
14
+ it "finds the instance" do
15
+ get :show, id: instance.id
16
+ assigns(resource_instance_name).should eq(instance)
17
+ end
18
+
19
+ it "renders the show view" do
20
+ get :show, id: instance.id
21
+ response.should render_template(:show)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples "cruddy::controller#update" do
4
+ let(:resource_instance_name) { resource_class.to_s.downcase }
5
+ let(:resource_collection_name) { resource_instance_name.pluralize }
6
+
7
+ describe "PATCH update" do
8
+ let(:instance) { mock_model resource_class, update_attributes: true }
9
+ let(:instance_path_method) { "#{resource_instance_name}_path" }
10
+ let(:instance_path) { send(instance_path_method, instance) }
11
+
12
+ before do
13
+ resource_class.stub(:find).with(instance.id.to_s) { instance }
14
+ end
15
+
16
+ it "finds the instance" do
17
+ patch :update, id: instance.id, resource_instance_name => valid_resource_params
18
+ assigns(resource_instance_name).should eq(instance)
19
+ end
20
+
21
+ context "when saved successfully" do
22
+ before do
23
+ instance.stub(:update_attributes).with(valid_resource_params) { true }
24
+ end
25
+
26
+ it "redirects to the newly created resource" do
27
+ patch :update, id: instance.id, resource_instance_name => valid_resource_params
28
+ response.should redirect_to(instance_path)
29
+ end
30
+ end
31
+
32
+ context "when save fails" do
33
+ before do
34
+ instance.stub(:update_attributes).with(valid_resource_params) { false }
35
+ end
36
+
37
+ it "renders the edit view" do
38
+ patch :update, id: instance.id, resource_instance_name => valid_resource_params
39
+ response.should render_template(:edit)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,3 @@
1
+ module Cruddy
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :cruddy do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cruddy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Alex Rehberg
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec-rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.14'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.14'
55
+ description: Cruddy is intended to DRY up basic CRUD in rails controllers.
56
+ email:
57
+ - hi@alexrehberg.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - MIT-LICENSE
63
+ - Rakefile
64
+ - lib/cruddy.rb
65
+ - lib/cruddy/controller.rb
66
+ - lib/cruddy/spec_support.rb
67
+ - lib/cruddy/spec_support/create_examples.rb
68
+ - lib/cruddy/spec_support/cruddy_examples.rb
69
+ - lib/cruddy/spec_support/destroy_examples.rb
70
+ - lib/cruddy/spec_support/edit_examples.rb
71
+ - lib/cruddy/spec_support/index_examples.rb
72
+ - lib/cruddy/spec_support/new_examples.rb
73
+ - lib/cruddy/spec_support/show_examples.rb
74
+ - lib/cruddy/spec_support/update_examples.rb
75
+ - lib/cruddy/version.rb
76
+ - lib/tasks/cruddy_tasks.rake
77
+ homepage: http://github.com/arehberg/cruddy
78
+ licenses: []
79
+ metadata: {}
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubyforge_project:
96
+ rubygems_version: 2.2.0
97
+ signing_key:
98
+ specification_version: 4
99
+ summary: Basic crud stuff for rails
100
+ test_files: []