formtastic 3.1.0 → 3.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +6 -0
- data/README.textile +1 -1
- data/Rakefile +4 -7
- data/formtastic.gemspec +3 -3
- data/lib/formtastic.rb +1 -1
- data/lib/formtastic/action_class_finder.rb +4 -4
- data/lib/formtastic/actions/button_action.rb +55 -53
- data/lib/formtastic/actions/input_action.rb +59 -57
- data/lib/formtastic/actions/link_action.rb +68 -67
- data/lib/formtastic/deprecation.rb +2 -2
- data/lib/formtastic/form_builder.rb +17 -4
- data/lib/formtastic/helpers/action_helper.rb +5 -5
- data/lib/formtastic/helpers/fieldset_wrapper.rb +2 -2
- data/lib/formtastic/helpers/input_helper.rb +7 -6
- data/lib/formtastic/helpers/inputs_helper.rb +4 -4
- data/lib/formtastic/helpers/reflection.rb +4 -4
- data/lib/formtastic/input_class_finder.rb +4 -4
- data/lib/formtastic/localized_string.rb +1 -1
- data/lib/formtastic/localizer.rb +2 -2
- data/lib/formtastic/namespaced_class_finder.rb +22 -12
- data/lib/formtastic/version.rb +1 -1
- data/lib/generators/formtastic/form/form_generator.rb +6 -1
- data/lib/generators/formtastic/install/install_generator.rb +1 -0
- metadata +7 -7
data/CHANGELOG
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
3.1.1
|
2
|
+
|
3
|
+
* Fixed class custom input & action class loading in test environments
|
4
|
+
* Added documentation of custom input & action class finders
|
5
|
+
* Added a link to documentation & wiki from custom class deprecation warnings
|
6
|
+
|
1
7
|
3.1.0
|
2
8
|
|
3
9
|
* Performance and documentation improvements
|
data/README.textile
CHANGED
data/Rakefile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'bundler/setup'
|
3
3
|
require 'appraisal'
|
4
|
-
require '
|
4
|
+
require 'yard'
|
5
5
|
require 'rspec/core/rake_task'
|
6
6
|
|
7
7
|
Bundler::GemHelper.install_tasks
|
@@ -14,13 +14,10 @@ else
|
|
14
14
|
end
|
15
15
|
|
16
16
|
desc 'Generate documentation for the formtastic plugin.'
|
17
|
-
Rake::
|
18
|
-
|
19
|
-
rdoc.title = 'Formtastic'
|
20
|
-
rdoc.options << '--line-numbers' << '--inline-source'
|
21
|
-
rdoc.rdoc_files.include('README.textile')
|
22
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
17
|
+
YARD::Rake::YardocTask.new(:yard) do |t|
|
18
|
+
|
23
19
|
end
|
20
|
+
task doc: :yard
|
24
21
|
|
25
22
|
desc 'Test the formtastic plugin.'
|
26
23
|
RSpec::Core::RakeTask.new('spec') do |t|
|
data/formtastic.gemspec
CHANGED
@@ -27,12 +27,12 @@ Gem::Specification.new do |s|
|
|
27
27
|
|
28
28
|
s.add_dependency(%q<actionpack>, [">= 3.2.13"])
|
29
29
|
|
30
|
-
s.add_development_dependency(%q<nokogiri>)
|
30
|
+
s.add_development_dependency(%q<nokogiri>)
|
31
31
|
s.add_development_dependency(%q<rspec-rails>, ["~> 2.14"])
|
32
32
|
s.add_development_dependency(%q<rspec_tag_matchers>, ["~> 1.0"])
|
33
33
|
s.add_development_dependency(%q<hpricot>, ["~> 0.8.3"])
|
34
|
-
s.add_development_dependency(%q<
|
35
|
-
s.add_development_dependency(%q<yard>, ["~> 0.
|
34
|
+
s.add_development_dependency(%q<RedCloth>, ["~> 4.2"]) # for YARD Textile formatting
|
35
|
+
s.add_development_dependency(%q<yard>, ["~> 0.8"])
|
36
36
|
s.add_development_dependency(%q<colored>, ["~> 1.2"])
|
37
37
|
s.add_development_dependency(%q<tzinfo>)
|
38
38
|
s.add_development_dependency(%q<ammeter>, ["1.1.1"])
|
data/lib/formtastic.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
module Formtastic
|
2
2
|
|
3
|
-
# Uses the
|
3
|
+
# Uses the {NamespacedClassFinder} to look up action class names.
|
4
4
|
#
|
5
|
-
# See
|
5
|
+
# See {Formtastic::Helpers::ActionHelper#namespaced_action_class} for details.
|
6
6
|
#
|
7
7
|
class ActionClassFinder < NamespacedClassFinder
|
8
|
+
|
9
|
+
# @param builder [FormBuilder]
|
8
10
|
def initialize(builder)
|
9
11
|
super builder.action_namespaces
|
10
12
|
end
|
11
13
|
|
12
|
-
private
|
13
|
-
|
14
14
|
def class_name(as)
|
15
15
|
"#{super}Action"
|
16
16
|
end
|
@@ -1,59 +1,61 @@
|
|
1
|
-
# Outputs a `<button type="submit">` or `<button type="reset">` wrapped in the standard `<li>`
|
2
|
-
# wrapper. This is an alternative choice for `:submit` and `:reset` actions, which render with
|
3
|
-
# `<input type="submit">` and `<input type="reset">` by default.
|
4
|
-
#
|
5
|
-
# @example Full form context and output
|
6
|
-
#
|
7
|
-
# <%= semantic_form_for(@post) do |f| %>
|
8
|
-
# <%= f.actions do %>
|
9
|
-
# <%= f.action :reset, :as => :button %>
|
10
|
-
# <%= f.action :submit, :as => :button %>
|
11
|
-
# <% end %>
|
12
|
-
# <% end %>
|
13
|
-
#
|
14
|
-
# <form...>
|
15
|
-
# <fieldset class="actions">
|
16
|
-
# <ol>
|
17
|
-
# <li class="action button_action" id="post_reset_action">
|
18
|
-
# <button type="reset" value="Reset">
|
19
|
-
# </li>
|
20
|
-
# <li class="action button_action" id="post_submit_action">
|
21
|
-
# <button type="submit" value="Create Post">
|
22
|
-
# </li>
|
23
|
-
# </ol>
|
24
|
-
# </fieldset>
|
25
|
-
# </form>
|
26
|
-
#
|
27
|
-
# @example Specifying a label with a String
|
28
|
-
# <%= f.action :submit, :as => :button, :label => "Go" %>
|
29
|
-
#
|
30
|
-
# @example Pass HTML attributes down to the `<button>`
|
31
|
-
# <%= f.action :submit, :as => :button, :button_html => { :class => 'pretty', :accesskey => 'g', :disable_with => "Wait..." } %>
|
32
|
-
#
|
33
|
-
# @example Access key can also be set as a top-level option
|
34
|
-
# <%= f.action :submit, :as => :button, :accesskey => 'g' %>
|
35
|
-
#
|
36
|
-
# @example Pass HTML attributes down to the `<li>` wrapper (classes are appended to the existing classes)
|
37
|
-
# <%= f.action :submit, :as => :button, :wrapper_html => { :class => 'special', :id => 'whatever' } %>
|
38
|
-
# <%= f.action :submit, :as => :button, :wrapper_html => { :class => ['extra', 'special'], :id => 'whatever' } %>
|
39
|
-
#
|
40
|
-
# @option *args :label [String, Symbol]
|
41
|
-
# Override the label text with a String or a symbol for an i18n translation key
|
42
|
-
#
|
43
|
-
# @option *args :button_html [Hash]
|
44
|
-
# Override or add to the HTML attributes to be passed down to the `<input>` tag
|
45
|
-
#
|
46
|
-
# @option *args :wrapper_html [Hash]
|
47
|
-
# Override or add to the HTML attributes to be passed down to the wrapping `<li>` tag
|
48
|
-
#
|
49
|
-
# @todo document i18n keys
|
50
|
-
# @todo document i18n translation with :label (?)
|
51
1
|
module Formtastic
|
52
2
|
module Actions
|
53
|
-
|
3
|
+
|
4
|
+
# Outputs a `<button type="submit">` or `<button type="reset">` wrapped in the standard `<li>`
|
5
|
+
# wrapper. This is an alternative choice for `:submit` and `:reset` actions, which render with
|
6
|
+
# `<input type="submit">` and `<input type="reset">` by default.
|
7
|
+
#
|
8
|
+
# @example Full form context and output
|
9
|
+
#
|
10
|
+
# <%= semantic_form_for(@post) do |f| %>
|
11
|
+
# <%= f.actions do %>
|
12
|
+
# <%= f.action :reset, :as => :button %>
|
13
|
+
# <%= f.action :submit, :as => :button %>
|
14
|
+
# <% end %>
|
15
|
+
# <% end %>
|
16
|
+
#
|
17
|
+
# <form...>
|
18
|
+
# <fieldset class="actions">
|
19
|
+
# <ol>
|
20
|
+
# <li class="action button_action" id="post_reset_action">
|
21
|
+
# <button type="reset" value="Reset">
|
22
|
+
# </li>
|
23
|
+
# <li class="action button_action" id="post_submit_action">
|
24
|
+
# <button type="submit" value="Create Post">
|
25
|
+
# </li>
|
26
|
+
# </ol>
|
27
|
+
# </fieldset>
|
28
|
+
# </form>
|
29
|
+
#
|
30
|
+
# @example Specifying a label with a String
|
31
|
+
# <%= f.action :submit, :as => :button, :label => "Go" %>
|
32
|
+
#
|
33
|
+
# @example Pass HTML attributes down to the `<button>`
|
34
|
+
# <%= f.action :submit, :as => :button, :button_html => { :class => 'pretty', :accesskey => 'g', :disable_with => "Wait..." } %>
|
35
|
+
#
|
36
|
+
# @example Access key can also be set as a top-level option
|
37
|
+
# <%= f.action :submit, :as => :button, :accesskey => 'g' %>
|
38
|
+
#
|
39
|
+
# @example Pass HTML attributes down to the `<li>` wrapper (classes are appended to the existing classes)
|
40
|
+
# <%= f.action :submit, :as => :button, :wrapper_html => { :class => 'special', :id => 'whatever' } %>
|
41
|
+
# <%= f.action :submit, :as => :button, :wrapper_html => { :class => ['extra', 'special'], :id => 'whatever' } %>
|
42
|
+
#
|
43
|
+
# @todo document i18n keys
|
44
|
+
# @todo document i18n translation with :label (?)
|
45
|
+
class ButtonAction
|
54
46
|
include Base
|
55
47
|
include Buttonish
|
56
|
-
|
48
|
+
|
49
|
+
# @see Formtastic::Helpers::ActionHelper#action
|
50
|
+
# @option *args :label [String, Symbol]
|
51
|
+
# Override the label text with a String or a symbol for an i18n translation key
|
52
|
+
#
|
53
|
+
# @option *args :button_html [Hash]
|
54
|
+
# Override or add to the HTML attributes to be passed down to the `<input>` tag
|
55
|
+
#
|
56
|
+
# @option *args :wrapper_html [Hash]
|
57
|
+
# Override or add to the HTML attributes to be passed down to the wrapping `<li>` tag
|
58
|
+
|
57
59
|
# TODO reset_action class?
|
58
60
|
def to_html
|
59
61
|
wrapper do
|
@@ -62,4 +64,4 @@ module Formtastic
|
|
62
64
|
end
|
63
65
|
end
|
64
66
|
end
|
65
|
-
end
|
67
|
+
end
|
@@ -1,63 +1,65 @@
|
|
1
|
-
# Outputs an `<input type="submit">` or `<input type="reset">` wrapped in the standard `<li>`
|
2
|
-
# wrapper. This the default for `:submit` and `:reset` actions, but `:as => :button` is also
|
3
|
-
# available as an alternative.
|
4
|
-
#
|
5
|
-
# @example The `:as` can be ommitted, these are functionally equivalent
|
6
|
-
# <%= f.action :submit, :as => :input %>
|
7
|
-
# <%= f.action :submit %>
|
8
|
-
#
|
9
|
-
# @example Full form context and output
|
10
|
-
#
|
11
|
-
# <%= semantic_form_for(@post) do |f| %>
|
12
|
-
# <%= f.actions do %>
|
13
|
-
# <%= f.action :reset, :as => :input %>
|
14
|
-
# <%= f.action :submit, :as => :input %>
|
15
|
-
# <% end %>
|
16
|
-
# <% end %>
|
17
|
-
#
|
18
|
-
# <form...>
|
19
|
-
# <fieldset class="actions">
|
20
|
-
# <ol>
|
21
|
-
# <li class="action input_action" id="post_reset_action">
|
22
|
-
# <input type="reset" value="Reset">
|
23
|
-
# </li>
|
24
|
-
# <li class="action input_action" id="post_submit_action">
|
25
|
-
# <input type="submit" value="Create Post">
|
26
|
-
# </li>
|
27
|
-
# </ol>
|
28
|
-
# </fieldset>
|
29
|
-
# </form>
|
30
|
-
#
|
31
|
-
# @example Specifying a label with a String
|
32
|
-
# <%= f.action :submit, :as => :input, :label => "Go" %>
|
33
|
-
#
|
34
|
-
# @example Pass HTML attributes down to the `<input>`
|
35
|
-
# <%= f.action :submit, :as => :input, :button_html => { :class => 'pretty', :accesskey => 'g', :disable_with => "Wait..." } %>
|
36
|
-
#
|
37
|
-
# @example Access key can also be set as a top-level option
|
38
|
-
# <%= f.action :submit, :as => :input, :accesskey => 'g' %>
|
39
|
-
#
|
40
|
-
# @example Pass HTML attributes down to the `<li>` wrapper (classes are appended to the existing classes)
|
41
|
-
# <%= f.action :submit, :as => :input, :wrapper_html => { :class => 'special', :id => 'whatever' } %>
|
42
|
-
# <%= f.action :submit, :as => :input, :wrapper_html => { :class => ['extra', 'special'], :id => 'whatever' } %>
|
43
|
-
#
|
44
|
-
# @option *args :label [String, Symbol]
|
45
|
-
# Override the label text with a String or a symbol for an i18n translation key
|
46
|
-
#
|
47
|
-
# @option *args :button_html [Hash]
|
48
|
-
# Override or add to the HTML attributes to be passed down to the `<input>` tag
|
49
|
-
#
|
50
|
-
# @option *args :wrapper_html [Hash]
|
51
|
-
# Override or add to the HTML attributes to be passed down to the wrapping `<li>` tag
|
52
|
-
#
|
53
|
-
# @todo document i18n keys
|
54
|
-
# @todo document i18n translation with :label (?)
|
55
1
|
module Formtastic
|
56
2
|
module Actions
|
57
|
-
|
3
|
+
|
4
|
+
# Outputs an `<input type="submit">` or `<input type="reset">` wrapped in the standard `<li>`
|
5
|
+
# wrapper. This the default for `:submit` and `:reset` actions, but `:as => :button` is also
|
6
|
+
# available as an alternative.
|
7
|
+
#
|
8
|
+
# @example The `:as` can be ommitted, these are functionally equivalent
|
9
|
+
# <%= f.action :submit, :as => :input %>
|
10
|
+
# <%= f.action :submit %>
|
11
|
+
#
|
12
|
+
# @example Full form context and output
|
13
|
+
#
|
14
|
+
# <%= semantic_form_for(@post) do |f| %>
|
15
|
+
# <%= f.actions do %>
|
16
|
+
# <%= f.action :reset, :as => :input %>
|
17
|
+
# <%= f.action :submit, :as => :input %>
|
18
|
+
# <% end %>
|
19
|
+
# <% end %>
|
20
|
+
#
|
21
|
+
# <form...>
|
22
|
+
# <fieldset class="actions">
|
23
|
+
# <ol>
|
24
|
+
# <li class="action input_action" id="post_reset_action">
|
25
|
+
# <input type="reset" value="Reset">
|
26
|
+
# </li>
|
27
|
+
# <li class="action input_action" id="post_submit_action">
|
28
|
+
# <input type="submit" value="Create Post">
|
29
|
+
# </li>
|
30
|
+
# </ol>
|
31
|
+
# </fieldset>
|
32
|
+
# </form>
|
33
|
+
#
|
34
|
+
# @example Specifying a label with a String
|
35
|
+
# <%= f.action :submit, :as => :input, :label => "Go" %>
|
36
|
+
#
|
37
|
+
# @example Pass HTML attributes down to the `<input>`
|
38
|
+
# <%= f.action :submit, :as => :input, :button_html => { :class => 'pretty', :accesskey => 'g', :disable_with => "Wait..." } %>
|
39
|
+
#
|
40
|
+
# @example Access key can also be set as a top-level option
|
41
|
+
# <%= f.action :submit, :as => :input, :accesskey => 'g' %>
|
42
|
+
#
|
43
|
+
# @example Pass HTML attributes down to the `<li>` wrapper (classes are appended to the existing classes)
|
44
|
+
# <%= f.action :submit, :as => :input, :wrapper_html => { :class => 'special', :id => 'whatever' } %>
|
45
|
+
# <%= f.action :submit, :as => :input, :wrapper_html => { :class => ['extra', 'special'], :id => 'whatever' } %>
|
46
|
+
# @todo document i18n keys
|
47
|
+
# @todo document i18n translation with :label (?)
|
48
|
+
class InputAction
|
58
49
|
include Base
|
59
50
|
include Buttonish
|
60
|
-
|
51
|
+
|
52
|
+
# @see Formtastic::Helpers::ActionHelper#action
|
53
|
+
# @option *args :label [String, Symbol]
|
54
|
+
# Override the label text with a String or a symbol for an i18n translation key
|
55
|
+
#
|
56
|
+
# @option *args :button_html [Hash]
|
57
|
+
# Override or add to the HTML attributes to be passed down to the `<input>` tag
|
58
|
+
#
|
59
|
+
# @option *args :wrapper_html [Hash]
|
60
|
+
# Override or add to the HTML attributes to be passed down to the wrapping `<li>` tag
|
61
|
+
#
|
62
|
+
|
61
63
|
def to_html
|
62
64
|
wrapper do
|
63
65
|
builder.submit(text, button_html)
|
@@ -65,4 +67,4 @@ module Formtastic
|
|
65
67
|
end
|
66
68
|
end
|
67
69
|
end
|
68
|
-
end
|
70
|
+
end
|
@@ -1,82 +1,83 @@
|
|
1
|
-
# Outputs a link wrapped in the standard `<li>` wrapper. This the default for `:cancel` actions.
|
2
|
-
# The link's URL defaults to Rails' built-in `:back` macro (the HTTP referrer, or Javascript for the
|
3
|
-
# browser's history), but can be altered with the `:url` option.
|
4
|
-
#
|
5
|
-
# @example The `:as` can be ommitted, these are functionally equivalent
|
6
|
-
# <%= f.action :cancel, :as => :link %>
|
7
|
-
# <%= f.action :cancel %>
|
8
|
-
#
|
9
|
-
# @example Full form context and output
|
10
|
-
#
|
11
|
-
# <%= semantic_form_for(@post) do |f| %>
|
12
|
-
# <%= f.actions do %>
|
13
|
-
# <%= f.action :submit, :as => :input %>
|
14
|
-
# <%= f.action :cancel, :as => :link %>
|
15
|
-
# <% end %>
|
16
|
-
# <% end %>
|
17
|
-
#
|
18
|
-
# <form...>
|
19
|
-
# <fieldset class="actions">
|
20
|
-
# <ol>
|
21
|
-
# <li class="action input_action" id="post_submit_action">
|
22
|
-
# <input type="submit" value="Create Post">
|
23
|
-
# </li>
|
24
|
-
# <li class="action link_action" id="post_cancel_action">
|
25
|
-
# <a href="javascript:history.back()">Cancel</a>
|
26
|
-
# </li>
|
27
|
-
# </ol>
|
28
|
-
# </fieldset>
|
29
|
-
# </form>
|
30
|
-
#
|
31
|
-
# @example Modifying the URL for the link
|
32
|
-
# <%= f.action :cancel, :as => :link, :url => "http://example.com/path" %>
|
33
|
-
# <%= f.action :cancel, :as => :link, :url => "/path" %>
|
34
|
-
# <%= f.action :cancel, :as => :link, :url => posts_path %>
|
35
|
-
# <%= f.action :cancel, :as => :link, :url => url_for(...) %>
|
36
|
-
# <%= f.action :cancel, :as => :link, :url => { :controller => "posts", :action => "index" } %>
|
37
|
-
#
|
38
|
-
# @example Specifying a label with a String
|
39
|
-
# <%= f.action :cancel, :as => :link, :label => "Stop" %>
|
40
|
-
#
|
41
|
-
# @example Pass HTML attributes down to the `<a>`
|
42
|
-
# <%= f.action :cancel, :as => :link, :button_html => { :class => 'pretty', :accesskey => 'x' } %>
|
43
|
-
#
|
44
|
-
# @example Access key can also be set as a top-level option
|
45
|
-
# <%= f.action :cancel, :as => :link, :accesskey => 'x' %>
|
46
|
-
#
|
47
|
-
# @example Pass HTML attributes down to the `<li>` wrapper (classes are appended to the existing classes)
|
48
|
-
# <%= f.action :cancel, :as => :link, :wrapper_html => { :class => 'special', :id => 'whatever' } %>
|
49
|
-
# <%= f.action :cancel, :as => :link, :wrapper_html => { :class => ['extra', 'special'], :id => 'whatever' } %>
|
50
|
-
#
|
51
|
-
# @option *args :label [String, Symbol]
|
52
|
-
# Override the label text with a String or a symbol for an i18n translation key
|
53
|
-
#
|
54
|
-
# @option *args :button_html [Hash]
|
55
|
-
# Override or add to the HTML attributes to be passed down to the `<a>` tag
|
56
|
-
#
|
57
|
-
# @option *args :wrapper_html [Hash]
|
58
|
-
# Override or add to the HTML attributes to be passed down to the wrapping `<li>` tag
|
59
|
-
#
|
60
|
-
# @todo document i18n keys
|
61
|
-
# @todo document i18n translation with :label (?)
|
62
|
-
# @todo :prefix and :suffix options? (can also be done with CSS or subclassing for custom Actions)
|
63
1
|
module Formtastic
|
64
2
|
module Actions
|
65
|
-
|
66
|
-
|
3
|
+
# Outputs a link wrapped in the standard `<li>` wrapper. This the default for `:cancel` actions.
|
4
|
+
# The link's URL defaults to Rails' built-in `:back` macro (the HTTP referrer, or Javascript for the
|
5
|
+
# browser's history), but can be altered with the `:url` option.
|
6
|
+
#
|
7
|
+
# @example The `:as` can be ommitted, these are functionally equivalent
|
8
|
+
# <%= f.action :cancel, :as => :link %>
|
9
|
+
# <%= f.action :cancel %>
|
10
|
+
#
|
11
|
+
# @example Full form context and output
|
12
|
+
#
|
13
|
+
# <%= semantic_form_for(@post) do |f| %>
|
14
|
+
# <%= f.actions do %>
|
15
|
+
# <%= f.action :submit, :as => :input %>
|
16
|
+
# <%= f.action :cancel, :as => :link %>
|
17
|
+
# <% end %>
|
18
|
+
# <% end %>
|
19
|
+
#
|
20
|
+
# <form...>
|
21
|
+
# <fieldset class="actions">
|
22
|
+
# <ol>
|
23
|
+
# <li class="action input_action" id="post_submit_action">
|
24
|
+
# <input type="submit" value="Create Post">
|
25
|
+
# </li>
|
26
|
+
# <li class="action link_action" id="post_cancel_action">
|
27
|
+
# <a href="javascript:history.back()">Cancel</a>
|
28
|
+
# </li>
|
29
|
+
# </ol>
|
30
|
+
# </fieldset>
|
31
|
+
# </form>
|
32
|
+
#
|
33
|
+
# @example Modifying the URL for the link
|
34
|
+
# <%= f.action :cancel, :as => :link, :url => "http://example.com/path" %>
|
35
|
+
# <%= f.action :cancel, :as => :link, :url => "/path" %>
|
36
|
+
# <%= f.action :cancel, :as => :link, :url => posts_path %>
|
37
|
+
# <%= f.action :cancel, :as => :link, :url => url_for(...) %>
|
38
|
+
# <%= f.action :cancel, :as => :link, :url => { :controller => "posts", :action => "index" } %>
|
39
|
+
#
|
40
|
+
# @example Specifying a label with a String
|
41
|
+
# <%= f.action :cancel, :as => :link, :label => "Stop" %>
|
42
|
+
#
|
43
|
+
# @example Pass HTML attributes down to the `<a>`
|
44
|
+
# <%= f.action :cancel, :as => :link, :button_html => { :class => 'pretty', :accesskey => 'x' } %>
|
45
|
+
#
|
46
|
+
# @example Access key can also be set as a top-level option
|
47
|
+
# <%= f.action :cancel, :as => :link, :accesskey => 'x' %>
|
48
|
+
#
|
49
|
+
# @example Pass HTML attributes down to the `<li>` wrapper (classes are appended to the existing classes)
|
50
|
+
# <%= f.action :cancel, :as => :link, :wrapper_html => { :class => 'special', :id => 'whatever' } %>
|
51
|
+
# <%= f.action :cancel, :as => :link, :wrapper_html => { :class => ['extra', 'special'], :id => 'whatever' } %>
|
52
|
+
#
|
53
|
+
# @todo document i18n keys
|
54
|
+
# @todo document i18n translation with :label (?)
|
55
|
+
# @todo :prefix and :suffix options? (can also be done with CSS or subclassing for custom Actions)
|
56
|
+
class LinkAction
|
67
57
|
include Base
|
68
|
-
|
58
|
+
|
59
|
+
# @see Formtastic::Helpers::ActionHelper#action
|
60
|
+
# @option *args :label [String, Symbol]
|
61
|
+
# Override the label text with a String or a symbol for an i18n translation key
|
62
|
+
#
|
63
|
+
# @option *args :button_html [Hash]
|
64
|
+
# Override or add to the HTML attributes to be passed down to the `<a>` tag
|
65
|
+
#
|
66
|
+
# @option *args :wrapper_html [Hash]
|
67
|
+
# Override or add to the HTML attributes to be passed down to the wrapping `<li>` tag
|
68
|
+
#
|
69
|
+
|
69
70
|
def supported_methods
|
70
71
|
[:cancel]
|
71
72
|
end
|
72
|
-
|
73
|
+
|
73
74
|
# TODO reset_action class?
|
74
75
|
def to_html
|
75
76
|
wrapper do
|
76
77
|
template.link_to(text, url, button_html)
|
77
78
|
end
|
78
79
|
end
|
79
|
-
|
80
|
+
|
80
81
|
def url
|
81
82
|
return options[:url] if options.key?(:url)
|
82
83
|
:back
|
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'active_support/deprecation'
|
2
2
|
|
3
|
-
# TODO: remove this branch and file when support for rails 3.2 is dropped
|
4
|
-
|
5
3
|
module Formtastic
|
6
4
|
if ActiveSupport::Deprecation.respond_to?(:new)
|
7
5
|
Deprecation = ActiveSupport::Deprecation
|
8
6
|
else
|
9
7
|
require 'forwardable'
|
10
8
|
|
9
|
+
# @private
|
10
|
+
# @todo remove this branch and file when support for rails 3.2 is dropped
|
11
11
|
class Deprecation
|
12
12
|
mattr_accessor :deprecation
|
13
13
|
self.deprecation = ActiveSupport::Deprecation.dup
|
@@ -1,9 +1,18 @@
|
|
1
1
|
module Formtastic
|
2
2
|
class FormBuilder < ActionView::Helpers::FormBuilder
|
3
3
|
|
4
|
-
|
4
|
+
# Defines a new configurable option
|
5
|
+
# @param [Symbol] name the configuration name
|
6
|
+
# @param [Object] default the configuration default value
|
7
|
+
# @private
|
8
|
+
#
|
9
|
+
# @!macro [new] configure
|
10
|
+
# @!scope class
|
11
|
+
# @!attribute [rw] $1
|
12
|
+
# @api public
|
13
|
+
def self.configure(name, default = nil)
|
5
14
|
class_attribute(name)
|
6
|
-
self.send(:"#{name}=",
|
15
|
+
self.send(:"#{name}=", default)
|
7
16
|
end
|
8
17
|
|
9
18
|
configure :custom_namespace
|
@@ -31,11 +40,15 @@ module Formtastic
|
|
31
40
|
configure :default_hint_class, 'inline-hints'
|
32
41
|
configure :use_required_attribute, false
|
33
42
|
configure :perform_browser_validations, false
|
43
|
+
# Check {Formtastic::InputClassFinder} to see how are inputs resolved.
|
34
44
|
configure :input_namespaces, [::Object, ::Formtastic::Inputs]
|
35
|
-
#
|
45
|
+
# @todo enable this as default in 4.0 and remove it from configuration generator template
|
46
|
+
# Will be {Formtastic::InputClassFinder} by default in 4.0.
|
36
47
|
configure :input_class_finder #, Formtastic::InputClassFinder
|
48
|
+
# Check {Formtastic::ActionClassFinder} to see how are inputs resolved.
|
37
49
|
configure :action_namespaces, [::Object, ::Formtastic::Actions]
|
38
|
-
#
|
50
|
+
# @todo enable this as default in 4.0 and remove it from configuration generator template
|
51
|
+
# Will be {Formtastic::ActionClassFinder} by default in 4.0.
|
39
52
|
configure :action_class_finder#, Formtastic::ActionClassFinder
|
40
53
|
|
41
54
|
attr_reader :template
|
@@ -2,7 +2,7 @@
|
|
2
2
|
module Formtastic
|
3
3
|
module Helpers
|
4
4
|
module ActionHelper
|
5
|
-
ACTION_CLASS_DEPRECATION = 'configure Formtastic::FormBuilder.action_class_finder instead'.freeze
|
5
|
+
ACTION_CLASS_DEPRECATION = 'configure Formtastic::FormBuilder.action_class_finder instead (upgrade guide on wiki: http://bit.ly/1F9QtKc )'.freeze
|
6
6
|
private_constant(:ACTION_CLASS_DEPRECATION)
|
7
7
|
|
8
8
|
# Renders an action for the form (such as a subit/reset button, or a cancel link).
|
@@ -89,7 +89,7 @@ module Formtastic
|
|
89
89
|
|
90
90
|
protected
|
91
91
|
|
92
|
-
def default_action_type(method, options = {})
|
92
|
+
def default_action_type(method, options = {}) # @private
|
93
93
|
case method
|
94
94
|
when :submit then :input
|
95
95
|
when :reset then :input
|
@@ -104,9 +104,9 @@ module Formtastic
|
|
104
104
|
# and modify to suit), falling back to `Formtastic::Actions::AwesomeAction`.
|
105
105
|
#
|
106
106
|
# Custom action namespaces to look into can be configured via the
|
107
|
-
# .action_namespaces
|
108
|
-
#
|
109
|
-
#
|
107
|
+
# {Formtastic::FormBuilder.action_namespaces} configuration setting.
|
108
|
+
# @see Helpers::InputHelper#namespaced_input_class
|
109
|
+
# @see Formtastic::ActionClassFinder
|
110
110
|
def namespaced_action_class(as)
|
111
111
|
@action_class_finder ||= action_class_finder.new(self)
|
112
112
|
@action_class_finder.find(as)
|
@@ -21,7 +21,7 @@ module Formtastic
|
|
21
21
|
# f.inputs "My little legend", :title, :body, :author # Explicit legend string => "My little legend"
|
22
22
|
# f.inputs :my_little_legend, :title, :body, :author # Localized (118n) legend with I18n key => I18n.t(:my_little_legend, ...)
|
23
23
|
# f.inputs :title, :body, :author # First argument is a column => (no legend)
|
24
|
-
def field_set_and_list_wrapping(*args, &block)
|
24
|
+
def field_set_and_list_wrapping(*args, &block) # @private
|
25
25
|
contents = args.last.is_a?(::Hash) ? '' : args.pop.flatten
|
26
26
|
html_options = args.extract_options!
|
27
27
|
|
@@ -54,7 +54,7 @@ module Formtastic
|
|
54
54
|
|
55
55
|
# Gets the nested_child_index value from the parent builder. It returns a hash with each
|
56
56
|
# association that the parent builds.
|
57
|
-
def parent_child_index(parent)
|
57
|
+
def parent_child_index(parent) # @private
|
58
58
|
# Could be {"post[authors_attributes]"=>0} or { :authors => 0 }
|
59
59
|
duck = parent[:builder].instance_variable_get('@nested_child_index')
|
60
60
|
|
@@ -36,7 +36,7 @@ module Formtastic
|
|
36
36
|
# @see Formtastic::Helpers::InputsHelper#inputs
|
37
37
|
# @see Formtastic::Helpers::FormHelper#semantic_form_for
|
38
38
|
module InputHelper
|
39
|
-
INPUT_CLASS_DEPRECATION = 'configure Formtastic::FormBuilder.input_class_finder instead'.freeze
|
39
|
+
INPUT_CLASS_DEPRECATION = 'configure Formtastic::FormBuilder.input_class_finder instead (upgrade guide on wiki: http://bit.ly/1F9QtKc )'.freeze
|
40
40
|
private_constant(:INPUT_CLASS_DEPRECATION)
|
41
41
|
|
42
42
|
include Formtastic::Helpers::Reflection
|
@@ -227,6 +227,7 @@ module Formtastic
|
|
227
227
|
# first_name: "Joe"
|
228
228
|
# last_name: "Smith"
|
229
229
|
#
|
230
|
+
# @see #namespaced_input_class
|
230
231
|
# @todo Many many more examples. Some of the detail probably needs to be pushed out to the relevant methods too.
|
231
232
|
# @todo More i18n examples.
|
232
233
|
def input(method, options = {})
|
@@ -251,7 +252,7 @@ module Formtastic
|
|
251
252
|
#
|
252
253
|
# If there is no column for the method (eg "virtual columns" with an attr_accessor), the
|
253
254
|
# default is a :string, a similar behaviour to Rails' scaffolding.
|
254
|
-
def default_input_type(method, options = {})
|
255
|
+
def default_input_type(method, options = {}) # @private
|
255
256
|
if @object
|
256
257
|
return :select if reflection_for(method)
|
257
258
|
|
@@ -295,7 +296,7 @@ module Formtastic
|
|
295
296
|
end
|
296
297
|
|
297
298
|
# Get a column object for a specified attribute method - if possible.
|
298
|
-
def column_for(method)
|
299
|
+
def column_for(method) # @private
|
299
300
|
if @object.respond_to?(:column_for_attribute)
|
300
301
|
# Remove deprecation wrapper & review after Rails 5.0 ships
|
301
302
|
ActiveSupport::Deprecation.silence do
|
@@ -310,7 +311,7 @@ module Formtastic
|
|
310
311
|
# and modify to suit), falling back to `Formtastic::Inputs::AwesomeInput`.
|
311
312
|
#
|
312
313
|
# Custom input namespaces to look into can be configured via the
|
313
|
-
# .input_namespaces
|
314
|
+
# {Formtastic::FormBuilder.input_namespaces} configuration setting.
|
314
315
|
#
|
315
316
|
# @param [Symbol] as A symbol representing the type of input to render
|
316
317
|
# @raise [Formtastic::UnknownInputError] An appropriate input class could not be found
|
@@ -323,7 +324,7 @@ module Formtastic
|
|
323
324
|
# @example When a top-level class is found
|
324
325
|
# input_class(:string) #=> StringInput
|
325
326
|
# input_class(:awesome) #=> AwesomeInput
|
326
|
-
|
327
|
+
# @see NamespacedClassFinder#find
|
327
328
|
def namespaced_input_class(as)
|
328
329
|
@input_class_finder ||= input_class_finder.new(self)
|
329
330
|
@input_class_finder.find(as)
|
@@ -384,7 +385,7 @@ module Formtastic
|
|
384
385
|
|
385
386
|
# @api private
|
386
387
|
# @deprecated Use {InputClassFinder#class_name} instead.
|
387
|
-
# :as => :string # => Formtastic::Inputs::StringInput
|
388
|
+
# :as => :string # => {Formtastic::Inputs::StringInput}
|
388
389
|
def standard_input_class_name(as)
|
389
390
|
input_class_deprecation_warning(__method__)
|
390
391
|
"Formtastic::Inputs::#{as.to_s.camelize}Input"
|
@@ -338,7 +338,7 @@ module Formtastic
|
|
338
338
|
# Collects association columns (relation columns) for the current form object class. Skips
|
339
339
|
# polymorphic associations because we can't guess which class to use for an automatically
|
340
340
|
# generated input.
|
341
|
-
def association_columns(*by_associations)
|
341
|
+
def association_columns(*by_associations) # @private
|
342
342
|
if @object.present? && @object.class.respond_to?(:reflections)
|
343
343
|
@object.class.reflections.collect do |name, association_reflection|
|
344
344
|
if by_associations.present?
|
@@ -355,7 +355,7 @@ module Formtastic
|
|
355
355
|
end
|
356
356
|
|
357
357
|
# Collects content columns (non-relation columns) for the current form object class.
|
358
|
-
def content_columns
|
358
|
+
def content_columns # @private
|
359
359
|
# TODO: NameError is raised by Inflector.constantize. Consider checking if it exists instead.
|
360
360
|
begin klass = model_name.constantize; rescue NameError; return [] end
|
361
361
|
return [] unless klass.respond_to?(:content_columns)
|
@@ -367,7 +367,7 @@ module Formtastic
|
|
367
367
|
# key.
|
368
368
|
#
|
369
369
|
# It should raise an error if a block with arity zero is given.
|
370
|
-
def inputs_for_nested_attributes(*args, &block)
|
370
|
+
def inputs_for_nested_attributes(*args, &block) # @private
|
371
371
|
options = args.extract_options!
|
372
372
|
args << options.merge!(:parent => { :builder => self, :for => options[:for] })
|
373
373
|
|
@@ -396,7 +396,7 @@ module Formtastic
|
|
396
396
|
fields_for(*fields_for_args, &fields_for_block)
|
397
397
|
end
|
398
398
|
|
399
|
-
def field_set_title_from_args(*args)
|
399
|
+
def field_set_title_from_args(*args) # @private
|
400
400
|
options = args.extract_options!
|
401
401
|
options[:name] ||= options.delete(:title)
|
402
402
|
title = options[:name]
|
@@ -4,20 +4,20 @@ module Formtastic
|
|
4
4
|
module Reflection
|
5
5
|
# If an association method is passed in (f.input :author) try to find the
|
6
6
|
# reflection object.
|
7
|
-
def reflection_for(method)
|
7
|
+
def reflection_for(method) # @private
|
8
8
|
if @object.class.respond_to?(:reflect_on_association)
|
9
|
-
@object.class.reflect_on_association(method)
|
9
|
+
@object.class.reflect_on_association(method)
|
10
10
|
elsif @object.class.respond_to?(:associations) # MongoMapper uses the 'associations(method)' instead
|
11
11
|
@object.class.associations[method]
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
def association_macro_for_method(method)
|
15
|
+
def association_macro_for_method(method) # @private
|
16
16
|
reflection = reflection_for(method)
|
17
17
|
reflection.macro if reflection
|
18
18
|
end
|
19
19
|
|
20
|
-
def association_primary_key_for_method(method)
|
20
|
+
def association_primary_key_for_method(method) # @private
|
21
21
|
reflection = reflection_for(method)
|
22
22
|
if reflection
|
23
23
|
case association_macro_for_method(method)
|
@@ -1,16 +1,16 @@
|
|
1
1
|
module Formtastic
|
2
2
|
|
3
|
-
# Uses the Formtastic::NamespacedClassFinder to look up input class names.
|
3
|
+
# Uses the {Formtastic::NamespacedClassFinder} to look up input class names.
|
4
4
|
#
|
5
|
-
# See Formtastic::
|
5
|
+
# See {Formtastic::FormBuilder#namespaced_input_class} for details.
|
6
6
|
#
|
7
7
|
class InputClassFinder < NamespacedClassFinder
|
8
|
+
|
9
|
+
# @param builder [FormBuilder]
|
8
10
|
def initialize(builder)
|
9
11
|
super builder.input_namespaces
|
10
12
|
end
|
11
13
|
|
12
|
-
private
|
13
|
-
|
14
14
|
def class_name(as)
|
15
15
|
"#{super}Input"
|
16
16
|
end
|
@@ -7,7 +7,7 @@ module Formtastic
|
|
7
7
|
|
8
8
|
protected
|
9
9
|
|
10
|
-
def localized_string(key, value, type, options = {})
|
10
|
+
def localized_string(key, value, type, options = {}) # @private
|
11
11
|
current_builder = respond_to?(:builder) ? builder : self
|
12
12
|
localizer = Formtastic::FormBuilder.i18n_localizer.new(current_builder)
|
13
13
|
localizer.localize(key, value, type, options)
|
data/lib/formtastic/localizer.rb
CHANGED
@@ -56,7 +56,7 @@ module Formtastic
|
|
56
56
|
self.builder = current_builder
|
57
57
|
end
|
58
58
|
|
59
|
-
def localize(key, value, type, options = {})
|
59
|
+
def localize(key, value, type, options = {}) # @private
|
60
60
|
key = value if value.is_a?(::Symbol)
|
61
61
|
|
62
62
|
if value.is_a?(::String)
|
@@ -132,7 +132,7 @@ module Formtastic
|
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
135
|
-
def escape_html_entities(string)
|
135
|
+
def escape_html_entities(string) # @private
|
136
136
|
if (builder.escape_html_entities_in_hints_and_labels) ||
|
137
137
|
(self.respond_to?(:escape_html_entities_in_hints_and_labels) && escape_html_entities_in_hints_and_labels)
|
138
138
|
string = builder.template.escape_once(string) unless string.respond_to?(:html_safe?) && string.html_safe? == true # Accept html_safe flag as indicator to skip escaping
|
@@ -3,12 +3,11 @@ module Formtastic
|
|
3
3
|
# is used both by Formtastic::Helpers::InputHelper and
|
4
4
|
# Formtastic::Helpers::ActionHelper to look up action and input classes.
|
5
5
|
#
|
6
|
-
#
|
7
|
-
# You can implement own class finder that for example prefixes the class name or uses custom module.
|
8
|
-
#
|
6
|
+
# @example Implementing own class finder
|
7
|
+
# # You can implement own class finder that for example prefixes the class name or uses custom module.
|
9
8
|
# class MyInputClassFinder < Formtastic::NamespacedClassFinder
|
10
|
-
# def initialize(
|
11
|
-
# super [MyNamespace
|
9
|
+
# def initialize(namespaces)
|
10
|
+
# super [MyNamespace] + namespaces # first lookup in MyNamespace then the defaults
|
12
11
|
# end
|
13
12
|
#
|
14
13
|
# private
|
@@ -18,17 +17,23 @@ module Formtastic
|
|
18
17
|
# end
|
19
18
|
# end
|
20
19
|
#
|
21
|
-
#
|
20
|
+
# # in config/initializers/formtastic.rb
|
21
|
+
# Formtastic::FormBuilder.input_class_finder = MyInputClassFinder
|
22
22
|
#
|
23
23
|
|
24
24
|
class NamespacedClassFinder
|
25
|
-
attr_reader :namespaces
|
25
|
+
attr_reader :namespaces # @private
|
26
26
|
|
27
27
|
# @private
|
28
28
|
class NotFoundError < NameError
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
31
|
+
def self.use_const_defined?
|
32
|
+
defined?(Rails) && ::Rails.application && ::Rails.application.config.eager_load
|
33
|
+
end
|
34
|
+
|
35
|
+
# @param namespaces [Array<Module>]
|
36
|
+
def initialize(namespaces)
|
32
37
|
@namespaces = namespaces.flatten
|
33
38
|
@cache = {}
|
34
39
|
end
|
@@ -50,18 +55,23 @@ module Formtastic
|
|
50
55
|
finder(class_name) or raise NotFoundError, "class #{class_name}"
|
51
56
|
end
|
52
57
|
|
53
|
-
|
58
|
+
# Converts symbol to class name
|
59
|
+
# Overridden in subclasses to create `StringInput` and `ButtonAction`
|
60
|
+
# @example
|
61
|
+
# class_name(:string) == "String"
|
54
62
|
|
55
63
|
def class_name(as)
|
56
64
|
as.to_s.camelize
|
57
65
|
end
|
58
66
|
|
59
|
-
|
60
|
-
|
67
|
+
private
|
68
|
+
|
69
|
+
if use_const_defined?
|
70
|
+
def finder(class_name) # @private
|
61
71
|
find_with_const_defined(class_name)
|
62
72
|
end
|
63
73
|
else
|
64
|
-
def finder(class_name) #
|
74
|
+
def finder(class_name) # @private
|
65
75
|
find_by_trying(class_name)
|
66
76
|
end
|
67
77
|
end
|
data/lib/formtastic/version.rb
CHANGED
@@ -4,15 +4,20 @@ module Formtastic
|
|
4
4
|
# files without confirmation.
|
5
5
|
#
|
6
6
|
# @example
|
7
|
+
# !!!shell
|
7
8
|
# $ rails generate formtastic:form Post
|
8
9
|
# @example Copy the partial code to the pasteboard rather than generating a partial
|
10
|
+
# !!!shell
|
9
11
|
# $ rails generate formtastic:form Post --copy
|
10
12
|
# @example Return HAML or Slim output instead of default ERB
|
13
|
+
# !!!shell
|
11
14
|
# $ rails generate formtastic:form Post --template-engine haml
|
12
15
|
# $ rails generate formtastic:form Post --template-engine slim
|
13
16
|
# @example Generate a form for specific model attributes
|
17
|
+
# !!!shell
|
14
18
|
# $ rails generate formtastic:form Post title:string body:text
|
15
19
|
# @example Generate a form for a specific controller
|
20
|
+
# !!!shell
|
16
21
|
# $ rails generate formtastic:form Post --controller admin/posts
|
17
22
|
class FormGenerator < Rails::Generators::NamedBase
|
18
23
|
desc "Generates a Formtastic form partial based on an existing model."
|
@@ -103,4 +108,4 @@ module Formtastic
|
|
103
108
|
end
|
104
109
|
|
105
110
|
end
|
106
|
-
end
|
111
|
+
end
|
@@ -4,6 +4,7 @@ module Formtastic
|
|
4
4
|
# Copies a config initializer to config/initializers/formtastic.rb
|
5
5
|
#
|
6
6
|
# @example
|
7
|
+
# !!!shell
|
7
8
|
# $ rails generate formtastic:install
|
8
9
|
class InstallGenerator < Rails::Generators::Base
|
9
10
|
source_root File.expand_path('../../../templates', __FILE__)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: formtastic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.1
|
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: 2014-11-
|
12
|
+
date: 2014-11-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionpack
|
@@ -92,13 +92,13 @@ dependencies:
|
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: 0.8.3
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
95
|
+
name: RedCloth
|
96
96
|
requirement: !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
98
98
|
requirements:
|
99
99
|
- - ~>
|
100
100
|
- !ruby/object:Gem::Version
|
101
|
-
version: '
|
101
|
+
version: '4.2'
|
102
102
|
type: :development
|
103
103
|
prerelease: false
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -106,7 +106,7 @@ dependencies:
|
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version: '
|
109
|
+
version: '4.2'
|
110
110
|
- !ruby/object:Gem::Dependency
|
111
111
|
name: yard
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,7 +114,7 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - ~>
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '0.
|
117
|
+
version: '0.8'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -122,7 +122,7 @@ dependencies:
|
|
122
122
|
requirements:
|
123
123
|
- - ~>
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: '0.
|
125
|
+
version: '0.8'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: colored
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|