pencil_pusher 0.0.1
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.
- checksums.yaml +7 -0
- data/lib/pencil_pusher/form.rb +66 -0
- data/lib/pencil_pusher/form_builder.rb +25 -0
- data/lib/pencil_pusher/have_errors.rb +38 -0
- data/lib/pencil_pusher/have_int_field.rb +39 -0
- data/lib/pencil_pusher/have_required_choice_field.rb +43 -0
- data/lib/pencil_pusher/have_required_field.rb +37 -0
- data/lib/pencil_pusher/have_required_float_field.rb +40 -0
- data/lib/pencil_pusher/have_required_int_field.rb +39 -0
- data/lib/pencil_pusher/have_required_text_field.rb +38 -0
- data/lib/pencil_pusher/have_text_field.rb +36 -0
- data/lib/pencil_pusher/matchers.rb +37 -0
- data/lib/pencil_pusher/shared_fields.rb +15 -0
- data/lib/pencil_pusher/spec_helpers.rb +16 -0
- metadata +112 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: b2804c9da0b757d0e9c1413c8b8c7655f96d3e49
|
|
4
|
+
data.tar.gz: 13e875e6a7d5007dffc91eb64ac35528c49b57b5
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 84f00e531874c7c38ca2b8ca265eda39d86beac36cbce26917ed4132a3c0a9a8ef102130d7d99ebd4d2fd9ca84d041006d6a380961f1cfe698264782746338e5
|
|
7
|
+
data.tar.gz: c618e5d6eff8f22fce9b4f9244c1428ec02530c66ced1be523a44d0d664500aac80f98d67168911222828f0f53dbac64d0ca16f0b69b8cce8526cbc0cf9ca45a
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require 'active_model'
|
|
2
|
+
require 'virtus'
|
|
3
|
+
|
|
4
|
+
module PencilPusher
|
|
5
|
+
class Form
|
|
6
|
+
include ActiveModel::Validations
|
|
7
|
+
include ActiveModel::Validations::Callbacks
|
|
8
|
+
include Virtus.model
|
|
9
|
+
|
|
10
|
+
attr_reader :data
|
|
11
|
+
|
|
12
|
+
def initialize(data)
|
|
13
|
+
super(data)
|
|
14
|
+
if data.nil?
|
|
15
|
+
@validated = true
|
|
16
|
+
@bound = false
|
|
17
|
+
@data = {}
|
|
18
|
+
else
|
|
19
|
+
@validated = false
|
|
20
|
+
@bound = true
|
|
21
|
+
@data = data
|
|
22
|
+
end
|
|
23
|
+
errors.clear
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
after_validation :notify_validated
|
|
27
|
+
|
|
28
|
+
def valid?
|
|
29
|
+
@_valid ||= (
|
|
30
|
+
if bound?
|
|
31
|
+
super
|
|
32
|
+
else
|
|
33
|
+
true
|
|
34
|
+
end
|
|
35
|
+
)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def error_messages
|
|
39
|
+
@_error_messages ||= errors.messages
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def cleaned_data
|
|
43
|
+
attributes.reject { |key, value| value.nil? }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def recognized_data
|
|
47
|
+
data.slice(*attributes.keys)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private :attributes
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
def bound?
|
|
54
|
+
@bound
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def validated?
|
|
58
|
+
@validated
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def notify_validated
|
|
62
|
+
@validated = true
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module PencilPusher
|
|
2
|
+
module FormBuilder
|
|
3
|
+
def self.form(builder, data)
|
|
4
|
+
case
|
|
5
|
+
when builder.is_a?(Proc)
|
|
6
|
+
builder.call(data)
|
|
7
|
+
when builder.is_a?(Class)
|
|
8
|
+
builder.new(data)
|
|
9
|
+
else
|
|
10
|
+
raise 'wat'
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.builder(form)
|
|
15
|
+
case
|
|
16
|
+
when form.is_a?(Proc)
|
|
17
|
+
form
|
|
18
|
+
when form.is_a?(Class)
|
|
19
|
+
->(data) {form.new(data)}
|
|
20
|
+
else
|
|
21
|
+
raise 'wat'
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module PencilPusher
|
|
2
|
+
class HaveErrors
|
|
3
|
+
def initialize(field_name, expected_errors=[])
|
|
4
|
+
@field_name = field_name
|
|
5
|
+
@expected_errors = expected_errors
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def matches?(form)
|
|
9
|
+
@actual = form
|
|
10
|
+
valid = form.valid?
|
|
11
|
+
if expected_errors.present?
|
|
12
|
+
form.error_messages[field_name] == expected_errors
|
|
13
|
+
else
|
|
14
|
+
form.error_messages[field_name].present?
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def failure_message_for_should
|
|
19
|
+
if errors = actual.error_messages[field_name].presence
|
|
20
|
+
"expected field #{field_name} to have errors #{expected_errors} but had errors #{errors}"
|
|
21
|
+
else
|
|
22
|
+
"expected field #{field_name} to have errors #{expected_errors} but had no errors"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def failure_message_for_should_not
|
|
27
|
+
"expected no errors for field #{field_name} but found #{actual.error_messages[field_name]}"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def description
|
|
31
|
+
"have errors for #{field_name}"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
attr_reader :field_name, :expected_errors, :actual
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module PencilPusher
|
|
2
|
+
class HaveIntField
|
|
3
|
+
include PencilPusher::Matchers
|
|
4
|
+
|
|
5
|
+
def initialize(field_name, valid_value, error)
|
|
6
|
+
@field_name = field_name
|
|
7
|
+
@valid_value = valid_value
|
|
8
|
+
@error = error
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def matches?(builder)
|
|
12
|
+
begin
|
|
13
|
+
FormBuilder.form(builder, {field_name => 'here'}).should have_errors(field_name, [error])
|
|
14
|
+
FormBuilder.form(builder, field_name => valid_value).should_not have_errors(field_name)
|
|
15
|
+
rescue => e
|
|
16
|
+
@error = e.message
|
|
17
|
+
raise e
|
|
18
|
+
end
|
|
19
|
+
true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def failure_message_for_should(actual, two)
|
|
23
|
+
@error
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def failure_message_for_should_not(actual)
|
|
27
|
+
"expected #{actual} to not have int field #{field_name} but did"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def description
|
|
31
|
+
"have int field #{field_name}"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
attr_reader :field_name, :valid_value, :error
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module PencilPusher
|
|
2
|
+
class HaveRequiredChoiceField
|
|
3
|
+
include PencilPusher::Matchers
|
|
4
|
+
|
|
5
|
+
def initialize(field_name, valid_values, blank_error, invalid_error)
|
|
6
|
+
@field_name = field_name
|
|
7
|
+
@valid_values = valid_values
|
|
8
|
+
@blank_error = blank_error
|
|
9
|
+
@invalid_error = invalid_error
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def matches?(form)
|
|
13
|
+
begin
|
|
14
|
+
form.should have_required_field(field_name, blank_error)
|
|
15
|
+
builder = FormBuilder.builder(form)
|
|
16
|
+
builder.call(field_name => 'invalid_value').should have_errors(field_name, [invalid_error])
|
|
17
|
+
valid_values.each do |valid_value|
|
|
18
|
+
builder.call(field_name => valid_value.to_s).should_not have_errors(field_name)
|
|
19
|
+
end
|
|
20
|
+
rescue => e
|
|
21
|
+
@error = e.message
|
|
22
|
+
raise e
|
|
23
|
+
end
|
|
24
|
+
true
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def failure_message_for_should(actual, two)
|
|
28
|
+
@error
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def failure_message_for_should_not(actual)
|
|
32
|
+
"expected #{actual} to not have required choice field #{field_name} but did"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def description
|
|
36
|
+
"have required choice field #{field_name}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
attr_reader :field_name, :blank_error, :invalid_error, :valid_values
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module PencilPusher
|
|
2
|
+
class HaveRequiredField
|
|
3
|
+
include PencilPusher::Matchers
|
|
4
|
+
|
|
5
|
+
def initialize(field_name, error)
|
|
6
|
+
@field_name = field_name
|
|
7
|
+
@error = error
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def matches?(form)
|
|
11
|
+
begin
|
|
12
|
+
builder = FormBuilder.builder(form)
|
|
13
|
+
builder.call(field_name => '').should have_errors(field_name, [error])
|
|
14
|
+
rescue => e
|
|
15
|
+
@error = e.message
|
|
16
|
+
raise e
|
|
17
|
+
end
|
|
18
|
+
true
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def failure_message_for_should(actual, two)
|
|
22
|
+
@error
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def failure_message_for_should_not(actual)
|
|
26
|
+
"expected #{actual} to not have required field #{field_name} but did"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def description
|
|
30
|
+
"have required field #{field_name}"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
attr_reader :field_name, :error
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module PencilPusher
|
|
2
|
+
class HaveRequiredFloatField
|
|
3
|
+
include PencilPusher::Matchers
|
|
4
|
+
|
|
5
|
+
def initialize(field_name, valid_value, blank_error, invalid_error)
|
|
6
|
+
@field_name = field_name
|
|
7
|
+
@valid_value = valid_value
|
|
8
|
+
@blank_error = blank_error
|
|
9
|
+
@invalid_error = invalid_error
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def matches?(builder)
|
|
13
|
+
begin
|
|
14
|
+
builder.should have_required_field(field_name, blank_error)
|
|
15
|
+
FormBuilder.form(builder, {field_name => 'here'}).should have_errors(field_name, [invalid_error])
|
|
16
|
+
FormBuilder.form(builder, field_name => valid_value).should_not have_errors(field_name)
|
|
17
|
+
rescue => e
|
|
18
|
+
@error = e.message
|
|
19
|
+
raise e
|
|
20
|
+
end
|
|
21
|
+
true
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def failure_message_for_should(actual, two)
|
|
25
|
+
@error
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def failure_message_for_should_not(actual)
|
|
29
|
+
"expected #{actual} to not have required float field #{field_name} but did"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def description
|
|
33
|
+
"have required float field #{field_name}"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
attr_reader :field_name, :valid_value, :blank_error, :invalid_error
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module PencilPusher
|
|
2
|
+
class HaveRequiredIntField
|
|
3
|
+
include PencilPusher::Matchers
|
|
4
|
+
|
|
5
|
+
def initialize(field_name, valid_value, blank_error, invalid_error)
|
|
6
|
+
@field_name = field_name
|
|
7
|
+
@valid_value = valid_value
|
|
8
|
+
@blank_error = blank_error
|
|
9
|
+
@invalid_error = invalid_error
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def matches?(builder)
|
|
13
|
+
begin
|
|
14
|
+
builder.should have_required_field(field_name, blank_error)
|
|
15
|
+
builder.should have_int_field(field_name, valid_value, invalid_error)
|
|
16
|
+
rescue => e
|
|
17
|
+
@error = e.message
|
|
18
|
+
raise e
|
|
19
|
+
end
|
|
20
|
+
true
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def failure_message_for_should(actual, two)
|
|
24
|
+
@error
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def failure_message_for_should_not(actual)
|
|
28
|
+
"expected #{actual} to not have required int field #{field_name} but did"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def description
|
|
32
|
+
"have required int field #{field_name}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
attr_reader :field_name, :valid_value, :blank_error, :invalid_error
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module PencilPusher
|
|
2
|
+
class HaveRequiredTextField
|
|
3
|
+
include PencilPusher::Matchers
|
|
4
|
+
|
|
5
|
+
def initialize(field_name, valid_value, error)
|
|
6
|
+
@field_name = field_name
|
|
7
|
+
@valid_value = valid_value
|
|
8
|
+
@error = error
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def matches?(builder)
|
|
12
|
+
begin
|
|
13
|
+
builder.should have_required_field(field_name, error)
|
|
14
|
+
builder.should have_text_field(field_name, valid_value)
|
|
15
|
+
rescue => e
|
|
16
|
+
@error = e.message
|
|
17
|
+
raise e
|
|
18
|
+
end
|
|
19
|
+
true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def failure_message_for_should(actual, two)
|
|
23
|
+
@error
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def failure_message_for_should_not(actual)
|
|
27
|
+
"expected #{actual} to not have required text field #{field_name} but did"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def description
|
|
31
|
+
"have required text field #{field_name}"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
attr_reader :field_name, :valid_value, :error
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module PencilPusher
|
|
2
|
+
class HaveTextField
|
|
3
|
+
include PencilPusher::Matchers
|
|
4
|
+
|
|
5
|
+
def initialize(field_name, valid_value)
|
|
6
|
+
@field_name = field_name
|
|
7
|
+
@valid_value = valid_value
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def matches?(builder)
|
|
11
|
+
begin
|
|
12
|
+
FormBuilder.form(builder, field_name => valid_value).should_not have_errors(field_name)
|
|
13
|
+
rescue => e
|
|
14
|
+
@error = e.message
|
|
15
|
+
raise e
|
|
16
|
+
end
|
|
17
|
+
true
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def failure_message_for_should(actual, two)
|
|
21
|
+
@error
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def failure_message_for_should_not(actual)
|
|
25
|
+
"expected #{actual} to not have text field #{field_name} but did"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def description
|
|
29
|
+
"have text field #{field_name}"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
attr_reader :field_name, :valid_value
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module PencilPusher
|
|
2
|
+
module Matchers
|
|
3
|
+
|
|
4
|
+
def have_errors(field_name, expected_errors=[])
|
|
5
|
+
HaveErrors.new(field_name, expected_errors)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def have_required_field(field_name, error)
|
|
9
|
+
HaveRequiredField.new(field_name, error)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def have_required_choice_field(field_name, valid_values, blank_error, invalid_error)
|
|
13
|
+
HaveRequiredChoiceField.new(field_name, valid_values, blank_error, invalid_error)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def have_required_float_field(field_name, valid_value, blank_error, invalid_error)
|
|
17
|
+
HaveRequiredFloatField.new(field_name, valid_value, blank_error, invalid_error)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def have_required_int_field(field_name, valid_value, blank_error, invalid_error)
|
|
21
|
+
HaveRequiredIntField.new(field_name, valid_value, blank_error, invalid_error)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def have_int_field(field_name, valid_value, invalid_error)
|
|
25
|
+
HaveIntField.new(field_name, valid_value, invalid_error)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def have_text_field(field_name, valid_value)
|
|
29
|
+
HaveTextField.new(field_name, valid_value)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def have_required_text_field(field_name, valid_value, error)
|
|
33
|
+
HaveRequiredTextField.new(field_name, valid_value, error)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module PencilPusher
|
|
2
|
+
module SharedFields
|
|
3
|
+
|
|
4
|
+
def required_int_field(field_name, blank_message, invalid_message)
|
|
5
|
+
attribute field_name, Integer
|
|
6
|
+
|
|
7
|
+
validates field_name,
|
|
8
|
+
presence: {message: blank_message},
|
|
9
|
+
numericality: {allow_blank: true,
|
|
10
|
+
only_integer: true,
|
|
11
|
+
message: invalid_message}
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'pencil_pusher/form_builder'
|
|
2
|
+
require 'pencil_pusher/matchers'
|
|
3
|
+
require 'pencil_pusher/have_errors'
|
|
4
|
+
require 'pencil_pusher/have_int_field'
|
|
5
|
+
require 'pencil_pusher/have_required_choice_field'
|
|
6
|
+
require 'pencil_pusher/have_required_field'
|
|
7
|
+
require 'pencil_pusher/have_required_float_field'
|
|
8
|
+
require 'pencil_pusher/have_required_int_field'
|
|
9
|
+
require 'pencil_pusher/have_required_text_field'
|
|
10
|
+
require 'pencil_pusher/have_text_field'
|
|
11
|
+
|
|
12
|
+
module PencilPusher
|
|
13
|
+
module SpecHelpers
|
|
14
|
+
include PencilPusher::Matchers
|
|
15
|
+
end
|
|
16
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: pencil_pusher
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Myles Megyesi
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2013-09-25 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: activemodel
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ~>
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 4.0.0
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ~>
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 4.0.0
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: virtus
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ~>
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: 1.0.0beta6
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ~>
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 1.0.0beta6
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rake
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ~>
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: 10.1.0
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ~>
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: 10.1.0
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: rspec
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ~>
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 2.14.1
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ~>
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: 2.14.1
|
|
69
|
+
description: Form builder and validator
|
|
70
|
+
email:
|
|
71
|
+
- myles.megyesi@gmail.com
|
|
72
|
+
executables: []
|
|
73
|
+
extensions: []
|
|
74
|
+
extra_rdoc_files: []
|
|
75
|
+
files:
|
|
76
|
+
- lib/pencil_pusher/have_errors.rb
|
|
77
|
+
- lib/pencil_pusher/form_builder.rb
|
|
78
|
+
- lib/pencil_pusher/have_text_field.rb
|
|
79
|
+
- lib/pencil_pusher/have_int_field.rb
|
|
80
|
+
- lib/pencil_pusher/matchers.rb
|
|
81
|
+
- lib/pencil_pusher/spec_helpers.rb
|
|
82
|
+
- lib/pencil_pusher/have_required_choice_field.rb
|
|
83
|
+
- lib/pencil_pusher/have_required_field.rb
|
|
84
|
+
- lib/pencil_pusher/have_required_text_field.rb
|
|
85
|
+
- lib/pencil_pusher/shared_fields.rb
|
|
86
|
+
- lib/pencil_pusher/have_required_float_field.rb
|
|
87
|
+
- lib/pencil_pusher/form.rb
|
|
88
|
+
- lib/pencil_pusher/have_required_int_field.rb
|
|
89
|
+
homepage:
|
|
90
|
+
licenses: []
|
|
91
|
+
metadata: {}
|
|
92
|
+
post_install_message:
|
|
93
|
+
rdoc_options: []
|
|
94
|
+
require_paths:
|
|
95
|
+
- lib
|
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
97
|
+
requirements:
|
|
98
|
+
- - '>='
|
|
99
|
+
- !ruby/object:Gem::Version
|
|
100
|
+
version: '0'
|
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
|
+
requirements:
|
|
103
|
+
- - '>='
|
|
104
|
+
- !ruby/object:Gem::Version
|
|
105
|
+
version: '0'
|
|
106
|
+
requirements: []
|
|
107
|
+
rubyforge_project:
|
|
108
|
+
rubygems_version: 2.0.3
|
|
109
|
+
signing_key:
|
|
110
|
+
specification_version: 4
|
|
111
|
+
summary: Form builder and validator
|
|
112
|
+
test_files: []
|