page_record 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitmodules ADDED
@@ -0,0 +1,3 @@
1
+ [submodule "example"]
2
+ path = example
3
+ url = https://github.com/appdrones/page_record_example.git
data/Gemfile.lock CHANGED
@@ -1,16 +1,20 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- page_record (0.2.1)
4
+ page_record (0.3.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
- activesupport (3.2.13)
12
- i18n (= 0.6.1)
13
- multi_json (~> 1.0)
11
+ activesupport (4.0.0)
12
+ i18n (~> 0.6, >= 0.6.4)
13
+ minitest (~> 4.2)
14
+ multi_json (~> 1.3)
15
+ thread_safe (~> 0.1)
16
+ tzinfo (~> 0.3.37)
17
+ atomic (1.1.10)
14
18
  capybara (2.1.0)
15
19
  mime-types (>= 1.16)
16
20
  nokogiri (>= 1.3.3)
@@ -25,9 +29,10 @@ GEM
25
29
  simplecov (>= 0.7)
26
30
  thor
27
31
  diff-lcs (1.2.4)
28
- i18n (0.6.1)
32
+ i18n (0.6.4)
29
33
  mime-types (1.23)
30
34
  mini_portile (0.5.0)
35
+ minitest (4.7.5)
31
36
  multi_json (1.7.7)
32
37
  nokogiri (1.6.0)
33
38
  mini_portile (~> 0.5.0)
@@ -56,7 +61,10 @@ GEM
56
61
  rack-protection (~> 1.4)
57
62
  tilt (~> 1.3, >= 1.3.4)
58
63
  thor (0.18.1)
64
+ thread_safe (0.1.0)
65
+ atomic
59
66
  tilt (1.4.1)
67
+ tzinfo (0.3.37)
60
68
  xpath (2.0.0)
61
69
  nokogiri (~> 1.3)
62
70
 
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Code Climate](https://codeclimate.com/github/appdrones/page_record.png)](https://codeclimate.com/github/appdrones/page_record) [![Build Status](https://travis-ci.org/appdrones/page_record.png)](https://travis-ci.org/appdrones/page_record) [![Dependency Status](https://gemnasium.com/appdrones/page_record.png)](https://gemnasium.com/appdrones/page_record) [![Coverage Status](https://coveralls.io/repos/appdrones/page_record/badge.png)](https://coveralls.io/r/appdrones/page_record)
1
+ [![Gem Version](https://badge.fury.io/rb/page_record.png)](http://badge.fury.io/rb/page_record)[![Code Climate](https://codeclimate.com/github/appdrones/page_record.png)](https://codeclimate.com/github/appdrones/page_record) [![Build Status](https://travis-ci.org/appdrones/page_record.png)](https://travis-ci.org/appdrones/page_record) [![Dependency Status](https://gemnasium.com/appdrones/page_record.png)](https://gemnasium.com/appdrones/page_record) [![Coverage Status](https://coveralls.io/repos/appdrones/page_record/badge.png)](https://coveralls.io/r/appdrones/page_record)
2
2
 
3
3
  # PageRecord
4
4
 
data/lib/page_record.rb CHANGED
@@ -7,3 +7,10 @@ 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
11
+ require "page_record/helpers"
12
+ require "page_record/form_builder"
13
+ rescue
14
+ # probably not in rails. Leave it like this
15
+ # TODO make this beter
16
+ end
@@ -0,0 +1,23 @@
1
+ module PageRecord
2
+
3
+ class FormBuilder < ActionView::Helpers::FormBuilder
4
+ include PageRecord::Helpers
5
+
6
+ helpers = field_helpers + %w(time_zone_select date_select) - %w(hidden_field fields_for label)
7
+ helpers.each do |helper|
8
+ define_method helper do |field, *args|
9
+ options = args.detect{ |a| a.is_a?(Hash) } || {}
10
+ super field, options.merge(attribute_for(field))
11
+ end
12
+ end
13
+
14
+ actions = ['submit','button']
15
+ actions.each do |helper|
16
+ define_method helper do |field, *args|
17
+ options = args.detect{ |a| a.is_a?(Hash) } || {}
18
+ super field, options.merge(action_for(field.downcase))
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,175 @@
1
+ module PageRecord
2
+
3
+ module Helpers
4
+
5
+ ##
6
+ #
7
+ # returns a hash containing the record-type and the id. The id is based on the type. For example when
8
+ # you specify `:team` as the type, it will search for the `@type` instance variable.
9
+ #
10
+ # example:
11
+ #
12
+ # ```ruby
13
+ # <%= form_for(@team, html:form_record_for(:team)) do |f| %>
14
+ # <% end %>
15
+ # ```
16
+ # this returns the follwing HTML:
17
+ #
18
+ # ```html
19
+ # <form accept-charset="UTF-8" action="/teams/2" class="edit_team" data-team-id="2" id="edit_team_2" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"><input name="_method" type="hidden" value="patch"><input name="authenticity_token" type="hidden" value="QXIbPXH65Ek+8i0j2R8akdHX2WXLo2MuDFuUVL8CQpY="></div>
20
+ # </form>
21
+ # ```
22
+ #
23
+ # @param type Symbol identifying the type of record and the variable to use
24
+ # @param var the variable to use. This is optional
25
+ #
26
+ # @return Hash
27
+ #
28
+ #
29
+ def form_record_for(type, var=nil)
30
+ if var
31
+ id = var.id
32
+ else
33
+ id = instance_eval("@#{type}.id")
34
+ end
35
+ id ||= 'new'
36
+ @type = type
37
+ Hash["data-#{type}-id",id]
38
+ end
39
+
40
+ ##
41
+ #
42
+ # Returns a hash containing the attribute name. This can be used as html options in rails helpers
43
+ #
44
+ # example in a form builder block:
45
+ #
46
+ # ```ruby
47
+ #<%= f.text_field :name, attribute_for(:name) %>
48
+ # ```
49
+ #
50
+ # this returns the follwing HTML:
51
+ #
52
+ # ```html
53
+ # <input data-attribute-for="name" id="team_name" name="team[name]" type="text">
54
+ # ```
55
+ #
56
+ # @param name Symbol or String identifying the name
57
+ #
58
+ # @return Hash
59
+ #
60
+ #
61
+ def attribute_for(name)
62
+ Hash["data-attribute-for",name]
63
+ end
64
+
65
+ ##
66
+ #
67
+ # Returns a hash containing the action name. This can be used as html options in rails helpers
68
+ #
69
+ # example in a form builder block:
70
+ #
71
+ # ```ruby
72
+ # <%= f.submit "Submit", action_for(:save)%>
73
+ # ```
74
+ #
75
+ # this returns the follwing HTML:
76
+ #
77
+ # ```html
78
+ # <input data-action-for="submit" name="commit" type="submit" value="Submit">
79
+ # ```
80
+ #
81
+ # @param name Symbol or String identifying the action name
82
+ #
83
+ # @return Hash
84
+ #
85
+ #
86
+ def action_for(name)
87
+ Hash["data-action-for",name]
88
+ end
89
+
90
+ ##
91
+ #
92
+ # Writes a tag containing the specified PageRecord attribute
93
+ #
94
+ # example:
95
+ #
96
+ # ```ruby
97
+ # <% @teams.each do |team| %>
98
+ # <tr>
99
+ # <%= attribute_tag_for(:td, :name) { team.name} %>
100
+ # <%= attribute_tag_for(:td, :competition) { team.competition} %>
101
+ # <%= attribute_tag_for(:td, :point) { team.point} %>
102
+ # <%= attribute_tag_for(:td, :ranking) { team.ranking} %>
103
+ # <td><%= link_to 'Show', team, action_for(:show) %></td>
104
+ # <td><%= link_to 'Edit', edit_team_path(team), action_for(:edit) %></td>
105
+ # <td><%= link_to 'Destroy', team, {method: :delete, data: { confirm: 'Are you sure?' }}.merge(action_for(:destroy)) %></td>
106
+ # </tr>
107
+ # ```
108
+ #
109
+ # the first `attribute_tag_for` lines returns the follwing HTML:
110
+ #
111
+ # ```html
112
+ #<td data-attribute-for="name">aa</td>
113
+ # ```
114
+ #
115
+ #
116
+ def attribute_tag_for(name, attribute, content_or_options_with_block = nil, options = nil, escape = true, &block)
117
+ options||= options ? options << {'data-attribute-for' => attribute} :{'data-attribute-for' => attribute}
118
+ if block_given?
119
+ options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash)
120
+ content_tag_string(name, capture(&block), options, escape)
121
+ else
122
+ content_tag_string(name, content_or_options_with_block, options, escape)
123
+ end
124
+ end
125
+
126
+ alias_method :atf, :attribute_tag_for
127
+
128
+
129
+ ##
130
+ #
131
+ # build a form that automagicaly identifies a form as a PageRecord recognisable form
132
+ # The form is identified by the id of the given record or `new` if the record is new.
133
+ #
134
+ # All the elements in the form are labeled according to there field name. And thus easy
135
+ # recognisable by PageRecord
136
+ #
137
+ # example:
138
+ #
139
+ # ```ruby
140
+ # <%= record_form_for(@team) do |f| %>
141
+ # <div class="field" >
142
+ # <%= f.label :name %><br>
143
+ # <%= f.text_field :name %>
144
+ # </div>
145
+ # <div class="field"%>
146
+ # <%= f.label :competition %><br>
147
+ # <%= f.text_field :competition%>
148
+ # </div>
149
+ # <div class="actions">
150
+ # <%= f.submit "Submit"%>
151
+ # </div>
152
+ # <% end %>
153
+ # ```
154
+ # @see
155
+ #
156
+ # @return formBuilder object
157
+ #
158
+ #
159
+ def record_form_for(record, options = {}, &block)
160
+ case record
161
+ when String, Symbol
162
+ object_name = record
163
+ else
164
+ object = record.is_a?(Array) ? record.last : record
165
+ raise ArgumentError, "First argument in form cannot contain nil or be empty" unless object
166
+ object_name = options[:as] || model_name_from_record_or_class(object).param_key
167
+ end
168
+ options = options.merge(html:form_record_for(object_name), builder:PageRecord::FormBuilder)
169
+ form_for(record, options, &block)
170
+ end
171
+ end
172
+
173
+ end
174
+
175
+ ActionView::Base.send :include, PageRecord::Helpers
@@ -1,3 +1,3 @@
1
1
  module PageRecord
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
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.2.1
4
+ version: 0.3.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-06-25 00:00:00.000000000 Z
12
+ date: 2013-07-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -116,6 +116,7 @@ extra_rdoc_files: []
116
116
  files:
117
117
  - .coveralls.yml
118
118
  - .gitignore
119
+ - .gitmodules
119
120
  - .rspec
120
121
  - .travis.yml
121
122
  - .yardopts
@@ -133,6 +134,8 @@ files:
133
134
  - lib/page_record/cucumber.rb
134
135
  - lib/page_record/errors.rb
135
136
  - lib/page_record/finders.rb
137
+ - lib/page_record/form_builder.rb
138
+ - lib/page_record/helpers.rb
136
139
  - lib/page_record/instance_actions.rb
137
140
  - lib/page_record/rspec.rb
138
141
  - lib/page_record/version.rb
@@ -162,12 +165,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
162
165
  - - ! '>='
163
166
  - !ruby/object:Gem::Version
164
167
  version: '0'
168
+ segments:
169
+ - 0
170
+ hash: 3410867289688860735
165
171
  required_rubygems_version: !ruby/object:Gem::Requirement
166
172
  none: false
167
173
  requirements:
168
174
  - - ! '>='
169
175
  - !ruby/object:Gem::Version
170
176
  version: '0'
177
+ segments:
178
+ - 0
179
+ hash: 3410867289688860735
171
180
  requirements: []
172
181
  rubyforge_project:
173
182
  rubygems_version: 1.8.24