page_record 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.md +5 -3
- data/Gemfile.lock +34 -1
- data/lib/page_record/base.rb +1 -1
- data/lib/page_record/formtastic.rb +69 -0
- data/lib/page_record/helpers.rb +4 -2
- data/lib/page_record/version.rb +1 -1
- data/lib/page_record.rb +8 -5
- data/page_record.gemspec +3 -0
- data/spec/helpers_spec.rb +149 -0
- data/spec/spec_helper.rb +7 -0
- metadata +55 -4
data/CHANGES.md
CHANGED
@@ -8,8 +8,10 @@
|
|
8
8
|
##V0.2.1
|
9
9
|
* Fixed a bug. PageRecord stack dumped when the class contained the name `Page`
|
10
10
|
|
11
|
-
|
12
11
|
##V0.3.0
|
13
|
-
* Fixed a bug. PageRecord stack dumped when the class contained the name `Page`
|
14
12
|
* Added rails helpers to make it easy in rails to have a form, recognised by PageRecord
|
15
|
-
* Added other helpers to mke it easy to add `actions` and `attribute` tags
|
13
|
+
* Added other helpers to mke it easy to add `actions` and `attribute` tags
|
14
|
+
|
15
|
+
##V0.4.0
|
16
|
+
* Added support for Formtasic
|
17
|
+
* Added spec's for rails helpers
|
data/Gemfile.lock
CHANGED
@@ -1,20 +1,37 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
page_record (0.
|
4
|
+
page_record (0.4.0)
|
5
5
|
activesupport
|
6
6
|
capybara (~> 2.1.0)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
+
actionpack (4.0.0)
|
12
|
+
activesupport (= 4.0.0)
|
13
|
+
builder (~> 3.1.0)
|
14
|
+
erubis (~> 2.7.0)
|
15
|
+
rack (~> 1.5.2)
|
16
|
+
rack-test (~> 0.6.2)
|
17
|
+
activemodel (4.0.0)
|
18
|
+
activesupport (= 4.0.0)
|
19
|
+
builder (~> 3.1.0)
|
20
|
+
activerecord (4.0.0)
|
21
|
+
activemodel (= 4.0.0)
|
22
|
+
activerecord-deprecated_finders (~> 1.0.2)
|
23
|
+
activesupport (= 4.0.0)
|
24
|
+
arel (~> 4.0.0)
|
25
|
+
activerecord-deprecated_finders (1.0.3)
|
11
26
|
activesupport (4.0.0)
|
12
27
|
i18n (~> 0.6, >= 0.6.4)
|
13
28
|
minitest (~> 4.2)
|
14
29
|
multi_json (~> 1.3)
|
15
30
|
thread_safe (~> 0.1)
|
16
31
|
tzinfo (~> 0.3.37)
|
32
|
+
arel (4.0.0)
|
17
33
|
atomic (1.1.10)
|
34
|
+
builder (3.1.4)
|
18
35
|
capybara (2.1.0)
|
19
36
|
mime-types (>= 1.16)
|
20
37
|
nokogiri (>= 1.3.3)
|
@@ -29,6 +46,7 @@ GEM
|
|
29
46
|
simplecov (>= 0.7)
|
30
47
|
thor
|
31
48
|
diff-lcs (1.2.4)
|
49
|
+
erubis (2.7.0)
|
32
50
|
i18n (0.6.4)
|
33
51
|
mime-types (1.23)
|
34
52
|
mini_portile (0.5.0)
|
@@ -41,6 +59,11 @@ GEM
|
|
41
59
|
rack
|
42
60
|
rack-test (0.6.2)
|
43
61
|
rack (>= 1.0)
|
62
|
+
railties (4.0.0)
|
63
|
+
actionpack (= 4.0.0)
|
64
|
+
activesupport (= 4.0.0)
|
65
|
+
rake (>= 0.8.7)
|
66
|
+
thor (>= 0.18.1, < 2.0)
|
44
67
|
rake (10.1.0)
|
45
68
|
rest-client (1.6.7)
|
46
69
|
mime-types (>= 1.16)
|
@@ -52,6 +75,13 @@ GEM
|
|
52
75
|
rspec-expectations (2.13.0)
|
53
76
|
diff-lcs (>= 1.1.3, < 2.0)
|
54
77
|
rspec-mocks (2.13.1)
|
78
|
+
rspec-rails (2.13.2)
|
79
|
+
actionpack (>= 3.0)
|
80
|
+
activesupport (>= 3.0)
|
81
|
+
railties (>= 3.0)
|
82
|
+
rspec-core (~> 2.13.0)
|
83
|
+
rspec-expectations (~> 2.13.0)
|
84
|
+
rspec-mocks (~> 2.13.0)
|
55
85
|
simplecov (0.7.1)
|
56
86
|
multi_json (~> 1.0)
|
57
87
|
simplecov-html (~> 0.7.1)
|
@@ -72,9 +102,12 @@ PLATFORMS
|
|
72
102
|
ruby
|
73
103
|
|
74
104
|
DEPENDENCIES
|
105
|
+
actionpack
|
106
|
+
activerecord
|
75
107
|
bundler (~> 1.3)
|
76
108
|
coveralls
|
77
109
|
page_record!
|
78
110
|
rake
|
79
111
|
rspec
|
112
|
+
rspec-rails
|
80
113
|
sinatra
|
data/lib/page_record/base.rb
CHANGED
@@ -0,0 +1,69 @@
|
|
1
|
+
module Formtastic
|
2
|
+
|
3
|
+
module Inputs
|
4
|
+
module Base
|
5
|
+
module Html
|
6
|
+
|
7
|
+
alias_method :input_html_options_org, :input_html_options
|
8
|
+
|
9
|
+
#
|
10
|
+
# This is a replacement method for the original `input_html_options` method from `Formtastic`
|
11
|
+
# The only thing it does, is merge the `attribute_for` into the output. The `input_html_options` is called
|
12
|
+
# for all input methods
|
13
|
+
#
|
14
|
+
|
15
|
+
def input_html_options
|
16
|
+
self.extend(PageRecord::Helpers)
|
17
|
+
input_html_options_org.merge(attribute_for(@method))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
module Actions
|
25
|
+
module Buttonish
|
26
|
+
|
27
|
+
alias_method :extra_button_html_options_org, :extra_button_html_options
|
28
|
+
|
29
|
+
#
|
30
|
+
# This is a replacement method for the original `extra_button_html_options` method from `Formtastic`
|
31
|
+
# The only thing it does, is merge the `action_for` into the output. The `extra_button_html_options` is called
|
32
|
+
# for all action methods
|
33
|
+
#
|
34
|
+
def extra_button_html_options
|
35
|
+
self.extend(PageRecord::Helpers)
|
36
|
+
extra_button_html_options_org.merge(action_for(@method))
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
module Helpers
|
43
|
+
module FormHelper
|
44
|
+
|
45
|
+
alias_method :semantic_form_for_org, :semantic_form_for
|
46
|
+
|
47
|
+
#
|
48
|
+
# This is a replacement method for the original `semantic_form_for` method from `Formtastic`.
|
49
|
+
# The only thing it does, is merge the `form_record_for` into the output.
|
50
|
+
#
|
51
|
+
def semantic_form_for(record_or_name_or_array, *args, &proc)
|
52
|
+
self.extend(PageRecord::Helpers)
|
53
|
+
options = args.extract_options!
|
54
|
+
options||= {}
|
55
|
+
case record_or_name_or_array
|
56
|
+
when String, Symbol
|
57
|
+
object_name = record_or_name_or_array
|
58
|
+
else
|
59
|
+
object = record_or_name_or_array.is_a?(Array) ? record_or_name_or_array.last : record_or_name_or_array
|
60
|
+
raise ArgumentError, "First argument in form cannot contain nil or be empty" unless object
|
61
|
+
object_name = options[:as] || model_name_from_record_or_class(object).param_key
|
62
|
+
end
|
63
|
+
options = options.merge(html:form_record_for(object_name))
|
64
|
+
args << options
|
65
|
+
semantic_form_for_org(record_or_name_or_array, *args, &proc)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/page_record/helpers.rb
CHANGED
@@ -33,7 +33,6 @@ module PageRecord
|
|
33
33
|
id = instance_eval("@#{type}.id")
|
34
34
|
end
|
35
35
|
id ||= 'new'
|
36
|
-
@type = type
|
37
36
|
Hash["data-#{type}-id",id]
|
38
37
|
end
|
39
38
|
|
@@ -172,4 +171,7 @@ module PageRecord
|
|
172
171
|
|
173
172
|
end
|
174
173
|
|
175
|
-
|
174
|
+
begin
|
175
|
+
ActionView::Base.send :include, PageRecord::Helpers
|
176
|
+
rescue NameError
|
177
|
+
end
|
data/lib/page_record/version.rb
CHANGED
data/lib/page_record.rb
CHANGED
@@ -7,10 +7,13 @@ require "page_record/attribute_accessors"
|
|
7
7
|
require "page_record/class_actions"
|
8
8
|
require "page_record/class_methods"
|
9
9
|
require "page_record/errors"
|
10
|
-
|
10
|
+
if defined?(ActionView::Base)
|
11
11
|
require "page_record/helpers"
|
12
12
|
require "page_record/form_builder"
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
13
|
+
end
|
14
|
+
if defined?(Formtastic::Helpers::FormHelper)
|
15
|
+
require "page_record/formtastic"
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
|
data/page_record.gemspec
CHANGED
@@ -21,7 +21,10 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
23
|
spec.add_development_dependency "rspec"
|
24
|
+
spec.add_development_dependency "rspec-rails"
|
24
25
|
spec.add_development_dependency "sinatra"
|
26
|
+
spec.add_development_dependency "actionpack"
|
27
|
+
spec.add_development_dependency "activerecord"
|
25
28
|
# spec.add_development_dependency "debugger"
|
26
29
|
|
27
30
|
spec.add_dependency "capybara" , '~>2.1.0'
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require 'action_view'
|
2
|
+
require_relative './spec_helper'
|
3
|
+
|
4
|
+
describe "Rails helpers" do
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
self.extend PageRecord::Helpers
|
8
|
+
self.extend ActionView::Helpers
|
9
|
+
self.extend ActionView::Helpers::FormHelper
|
10
|
+
self.extend ActionView::Helpers::FormTagHelper
|
11
|
+
self.extend ActionView::Helpers::UrlHelper
|
12
|
+
self.extend ActionView::Context
|
13
|
+
class Car; end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#form_record_for' do
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
context "without a variable argument" do
|
21
|
+
|
22
|
+
subject { form_record_for(:car)}
|
23
|
+
|
24
|
+
context "with a new record" do
|
25
|
+
|
26
|
+
before do
|
27
|
+
@car = stub_model(Car, :id => nil)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "returns a Hash with data-`type`-name=`new`" do
|
31
|
+
expect(subject).to eq( {'data-car-id' => 'new' })
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "with a saved record" do
|
36
|
+
|
37
|
+
before do
|
38
|
+
@car = stub_model(Car, :id => 10)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns a Hash with data-`type`-name=id" do
|
42
|
+
expect(subject).to eq( {'data-car-id' => 10 })
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
context "with a variable argument" do
|
49
|
+
|
50
|
+
subject { form_record_for(:car, other_car)}
|
51
|
+
let(:other_car) { @other_car = stub_model(Car, :id => nil) }
|
52
|
+
|
53
|
+
context "with a new record" do
|
54
|
+
|
55
|
+
it "returns a Hash with data-`type`-name=`new`" do
|
56
|
+
expect(subject).to eq( {'data-car-id' => 'new' })
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "with a saved record" do
|
61
|
+
|
62
|
+
let(:other_car) { @other_car = stub_model(Car, :id => 10) }
|
63
|
+
|
64
|
+
it "returns a Hash with data-`type`-name=id" do
|
65
|
+
expect(subject).to eq( {'data-car-id' => 10 })
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '#attribute_for' do
|
74
|
+
subject { attribute_for('name')}
|
75
|
+
|
76
|
+
it "returns a Hash with data-attribute-for => 'attribute' " do
|
77
|
+
expect(subject).to eq({'data-attribute-for' => 'name'})
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "#action_for" do
|
83
|
+
subject { action_for('submit')}
|
84
|
+
|
85
|
+
it "returns a Hash with data-action-for => 'attribute' " do
|
86
|
+
expect(subject).to eq({'data-action-for' => 'submit'})
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "#attribute_tag_for" do
|
92
|
+
subject { attribute_tag_for(:td, :name)}
|
93
|
+
|
94
|
+
it "returns a tag with data-attribute-for='name' set" do
|
95
|
+
expect(subject).to eq "<td data-attribute-for=\"name\"></td>"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "#record_form_for" do
|
100
|
+
|
101
|
+
before do
|
102
|
+
@car = stub_model(Car, :id => 20)
|
103
|
+
def protect_against_forgery?; end
|
104
|
+
end
|
105
|
+
|
106
|
+
subject {record_form_for(@car, :as => :car, :url => "/") {}}
|
107
|
+
|
108
|
+
it "returns a PageRecordFormBuilder" do
|
109
|
+
expect(subject).to include " data-car-id=\"20\" "
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
describe PageRecord::FormBuilder do
|
115
|
+
|
116
|
+
before do
|
117
|
+
@car = stub_model(Car, :id => 20, :name => 'Piet')
|
118
|
+
def protect_against_forgery?; end
|
119
|
+
end
|
120
|
+
|
121
|
+
|
122
|
+
describe "#text_field" do
|
123
|
+
subject do
|
124
|
+
record_form_for(@car, :as => :car, :url => "/") do |f|
|
125
|
+
f.text_field :name
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
it "automaticaly renders the data-attribute-for='name' html-tag" do
|
130
|
+
expect(subject).to include " data-attribute-for=\"name\" "
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
describe "#submit" do
|
136
|
+
subject do
|
137
|
+
record_form_for(@car, :as => :car, :url => "/") do |f|
|
138
|
+
f.submit "Save"
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
it "automaticaly renders the data-action-for='submit' html-tag" do
|
143
|
+
expect(subject).to include " data-action-for=\"save\" "
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: page_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-07-
|
12
|
+
date: 2013-07-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -59,6 +59,22 @@ dependencies:
|
|
59
59
|
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec-rails
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
62
78
|
- !ruby/object:Gem::Dependency
|
63
79
|
name: sinatra
|
64
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -75,6 +91,38 @@ dependencies:
|
|
75
91
|
- - ! '>='
|
76
92
|
- !ruby/object:Gem::Version
|
77
93
|
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: actionpack
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: activerecord
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
78
126
|
- !ruby/object:Gem::Dependency
|
79
127
|
name: capybara
|
80
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,11 +184,13 @@ files:
|
|
136
184
|
- lib/page_record/errors.rb
|
137
185
|
- lib/page_record/finders.rb
|
138
186
|
- lib/page_record/form_builder.rb
|
187
|
+
- lib/page_record/formtastic.rb
|
139
188
|
- lib/page_record/helpers.rb
|
140
189
|
- lib/page_record/instance_actions.rb
|
141
190
|
- lib/page_record/rspec.rb
|
142
191
|
- lib/page_record/version.rb
|
143
192
|
- page_record.gemspec
|
193
|
+
- spec/helpers_spec.rb
|
144
194
|
- spec/page_record_spec.rb
|
145
195
|
- spec/spec_helper.rb
|
146
196
|
- spec/support/shared_contexts.rb
|
@@ -168,7 +218,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
168
218
|
version: '0'
|
169
219
|
segments:
|
170
220
|
- 0
|
171
|
-
hash:
|
221
|
+
hash: 3628440066479554934
|
172
222
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
223
|
none: false
|
174
224
|
requirements:
|
@@ -177,7 +227,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
227
|
version: '0'
|
178
228
|
segments:
|
179
229
|
- 0
|
180
|
-
hash:
|
230
|
+
hash: 3628440066479554934
|
181
231
|
requirements: []
|
182
232
|
rubyforge_project:
|
183
233
|
rubygems_version: 1.8.24
|
@@ -186,6 +236,7 @@ specification_version: 3
|
|
186
236
|
summary: Page Object implementation. Using some specialy formatted 'data-...' tags
|
187
237
|
you can read records from HTML pages like an ActiveRecord page
|
188
238
|
test_files:
|
239
|
+
- spec/helpers_spec.rb
|
189
240
|
- spec/page_record_spec.rb
|
190
241
|
- spec/spec_helper.rb
|
191
242
|
- spec/support/shared_contexts.rb
|