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 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.3.1)
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
@@ -1,4 +1,3 @@
1
-
2
1
  module PageRecord
3
2
 
4
3
  class Base
@@ -27,3 +26,4 @@ module PageRecord
27
26
 
28
27
  end
29
28
  end
29
+
@@ -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
@@ -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
- ActionView::Base.send :include, PageRecord::Helpers
174
+ begin
175
+ ActionView::Base.send :include, PageRecord::Helpers
176
+ rescue NameError
177
+ end
@@ -1,3 +1,3 @@
1
1
  module PageRecord
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
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
- begin
10
+ if defined?(ActionView::Base)
11
11
  require "page_record/helpers"
12
12
  require "page_record/form_builder"
13
- rescue
14
- # probably not in rails. Leave it like this
15
- # TODO make this beter
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
@@ -7,6 +7,13 @@
7
7
  require 'coveralls'
8
8
  Coveralls.wear!
9
9
 
10
+ if defined?(ActionView::Base)
11
+ require 'rails'
12
+ require 'rspec/rails/mocks'
13
+ include RSpec::Rails::Mocks
14
+ end
15
+
16
+
10
17
  require 'page_record'
11
18
  require 'capybara'
12
19
  require 'capybara/dsl'
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.3.1
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-05 00:00:00.000000000 Z
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: 3837164145200733235
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: 3837164145200733235
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