page_record 0.3.1 → 0.4.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/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