dejavu 0.2.1 → 0.3.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.
- data/lib/dejavu/version.rb +1 -1
- data/lib/dejavu.rb +11 -4
- data/spec/integration/dejavu_spec.rb +32 -2
- data/test_app/app/controllers/products_controller.rb +25 -1
- data/test_app/app/views/products/_form.html.erb +1 -0
- data/test_app/app/views/products/new_only_name.html.erb +26 -0
- data/test_app/config/routes.rb +4 -1
- metadata +27 -11
data/lib/dejavu/version.rb
CHANGED
data/lib/dejavu.rb
CHANGED
@@ -39,14 +39,21 @@ module Dejavu
|
|
39
39
|
|
40
40
|
module ControllerMethods
|
41
41
|
def save_for_dejavu(obj, opts = {})
|
42
|
-
attrs =
|
42
|
+
attrs = if opts[:only] && opts[:only].is_a?(Array)
|
43
|
+
obj.attributes.slice(*opts[:only].map(&:to_s))
|
44
|
+
else
|
45
|
+
obj.attributes
|
46
|
+
end
|
43
47
|
|
44
|
-
missing_keys =
|
48
|
+
missing_keys = []
|
45
49
|
|
46
50
|
if keys = opts[:nested]
|
47
|
-
keys = [keys]
|
51
|
+
keys = [keys].flatten
|
48
52
|
keys.each { |key| attrs = save_nested_for_dejavu(obj, key, attrs) }
|
49
|
-
|
53
|
+
end
|
54
|
+
|
55
|
+
if virtual = opts[:virtual]
|
56
|
+
missing_keys += [virtual].flatten
|
50
57
|
end
|
51
58
|
|
52
59
|
missing_keys.each do |key|
|
@@ -71,15 +71,45 @@ describe "Dejavu" do
|
|
71
71
|
fill_in "Name", :with => "Mug"
|
72
72
|
fill_in "Code", :with => "PT"
|
73
73
|
fill_in "Virtual", :with => "ou"
|
74
|
-
click_button "Create Product"
|
75
74
|
end
|
76
75
|
|
77
|
-
it "should be prefilled" do
|
76
|
+
it "should be prefilled on errors" do
|
77
|
+
click_button "Create Product"
|
78
78
|
field_should_have "product_virtual", "ou"
|
79
79
|
end
|
80
80
|
|
81
|
+
it "should be prefilled if the virtual attribute is ok but there is an error in the form" do
|
82
|
+
fill_in "Virtual", :with => "correct"
|
83
|
+
click_button "Create Product"
|
84
|
+
field_should_have "product_virtual", "correct"
|
85
|
+
end
|
86
|
+
|
81
87
|
it "should show existing errors" do
|
88
|
+
click_button "Create Product"
|
82
89
|
page.should have_content("Virtual is too short")
|
83
90
|
end
|
84
91
|
end
|
92
|
+
|
93
|
+
describe "only option" do
|
94
|
+
it "should not remember errors on code" do
|
95
|
+
visit new_only_name_products_path
|
96
|
+
|
97
|
+
fill_in "Create only: name", :with => "Mug"
|
98
|
+
fill_in "Create only: code", :with => "PT"
|
99
|
+
click_button "Create only name"
|
100
|
+
|
101
|
+
# Blank error is still there because we don't reset the PT
|
102
|
+
page.should have_content("Code can't be blank")
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should remember errors on name" do
|
106
|
+
visit new_only_name_products_path
|
107
|
+
|
108
|
+
fill_in "Create only: name", :with => "pt"
|
109
|
+
fill_in "Create only: code", :with => "PTujarsa"
|
110
|
+
click_button "Create only name"
|
111
|
+
|
112
|
+
page.should have_no_content("Name can't be blank")
|
113
|
+
end
|
114
|
+
end
|
85
115
|
end
|
@@ -34,6 +34,15 @@ class ProductsController < ApplicationController
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
+
def new_only_name
|
38
|
+
@product = Product.new
|
39
|
+
|
40
|
+
respond_to do |format|
|
41
|
+
format.html # new.html.erb
|
42
|
+
format.json { render json: @product }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
37
46
|
# GET /products/1/edit
|
38
47
|
def edit
|
39
48
|
@product = Product.find(params[:id])
|
@@ -49,13 +58,28 @@ class ProductsController < ApplicationController
|
|
49
58
|
format.html { redirect_to @product, notice: 'Product was successfully created.' }
|
50
59
|
format.json { render json: @product, status: :created, location: @product }
|
51
60
|
else
|
52
|
-
save_for_dejavu @product, :nested => [:category, :colors]
|
61
|
+
save_for_dejavu @product, :nested => [:category, :colors], :virtual => :virtual
|
53
62
|
format.html { redirect_to new_product_url }
|
54
63
|
format.json { render json: @product.errors, status: :unprocessable_entity }
|
55
64
|
end
|
56
65
|
end
|
57
66
|
end
|
58
67
|
|
68
|
+
def create_only_name
|
69
|
+
@product = Product.new(params[:product])
|
70
|
+
|
71
|
+
respond_to do |format|
|
72
|
+
if @product.save
|
73
|
+
format.html { redirect_to :back, notice: 'Product was successfully created.' }
|
74
|
+
format.json { render json: @product, status: :created, location: @product }
|
75
|
+
else
|
76
|
+
save_for_dejavu @product, :only => [:name]
|
77
|
+
format.html { redirect_to :back }
|
78
|
+
format.json { render json: @product.errors, status: :unprocessable_entity }
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
59
83
|
# PUT /products/1
|
60
84
|
# PUT /products/1.json
|
61
85
|
def update
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<%= form_for(get_dejavu_for(@product), :url => create_only_name_products_path) do |f| %>
|
2
|
+
<% if @product.errors.any? %>
|
3
|
+
<div id="error_explanation">
|
4
|
+
<h2><%= pluralize(@product.errors.count, "error") %> prohibited this product from being saved:</h2>
|
5
|
+
|
6
|
+
<ul>
|
7
|
+
<% @product.errors.full_messages.each do |msg| %>
|
8
|
+
<li><%= msg %></li>
|
9
|
+
<% end %>
|
10
|
+
</ul>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<div class="field">
|
15
|
+
<%= f.label :name, "Create only: name" %><br />
|
16
|
+
<%= f.text_field :name %>
|
17
|
+
</div>
|
18
|
+
<div class="field">
|
19
|
+
<%= f.label :code, "Create only: code" %><br />
|
20
|
+
<%= f.text_field :code %>
|
21
|
+
</div>
|
22
|
+
<div class="actions">
|
23
|
+
<%= f.submit "Create only name" %>
|
24
|
+
</div>
|
25
|
+
<% end %>
|
26
|
+
|
data/test_app/config/routes.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dejavu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
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-
|
12
|
+
date: 2012-08-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rspec-rails
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '2.7'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '2.7'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: capybara
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,7 +53,12 @@ dependencies:
|
|
43
53
|
version: 1.1.1
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.1.1
|
47
62
|
description: Remember your object after a redirect
|
48
63
|
email:
|
49
64
|
- roger@itnig.net
|
@@ -87,6 +102,7 @@ files:
|
|
87
102
|
- test_app/app/views/products/edit.html.erb
|
88
103
|
- test_app/app/views/products/index.html.erb
|
89
104
|
- test_app/app/views/products/new.html.erb
|
105
|
+
- test_app/app/views/products/new_only_name.html.erb
|
90
106
|
- test_app/app/views/products/show.html.erb
|
91
107
|
- test_app/config.ru
|
92
108
|
- test_app/config/application.rb
|
@@ -148,7 +164,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
148
164
|
version: '0'
|
149
165
|
segments:
|
150
166
|
- 0
|
151
|
-
hash:
|
167
|
+
hash: 995488367
|
152
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
169
|
none: false
|
154
170
|
requirements:
|
@@ -157,10 +173,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
173
|
version: '0'
|
158
174
|
segments:
|
159
175
|
- 0
|
160
|
-
hash:
|
176
|
+
hash: 995488367
|
161
177
|
requirements: []
|
162
178
|
rubyforge_project:
|
163
|
-
rubygems_version: 1.8.
|
179
|
+
rubygems_version: 1.8.24
|
164
180
|
signing_key:
|
165
181
|
specification_version: 3
|
166
182
|
summary: Remember your object after a redirect
|