pr 0.0.1 → 0.0.2
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.rspec +1 -1
- data/features/active_model_compatibility.feature +0 -1
- data/features/building_forms_from_hashes.feature +57 -0
- data/features/building_forms_from_models.feature +50 -0
- data/features/building_models_from_form.feature +66 -0
- data/features/defining_a_form.feature +36 -0
- data/features/step_definitions/active_model_steps.rb +1 -1
- data/features/step_definitions/form_steps.rb +23 -0
- data/features/step_definitions/hash_steps.rb +15 -0
- data/features/step_definitions/model_steps.rb +15 -0
- data/features/support/dsl.rb +39 -0
- data/lib/pr.rb +10 -0
- data/lib/pr/build_from_hash.rb +19 -0
- data/lib/pr/build_from_model.rb +20 -0
- data/lib/pr/build_model.rb +20 -18
- data/lib/pr/define_and_register.rb +28 -0
- data/lib/pr/define_field.rb +36 -12
- data/lib/pr/field_registry.rb +29 -0
- data/lib/pr/fields.rb +31 -0
- data/lib/pr/fields/boolean_field.rb +3 -2
- data/lib/pr/fields/date_field.rb +3 -2
- data/lib/pr/fields/float_field.rb +3 -2
- data/lib/pr/fields/generic_field.rb +3 -2
- data/lib/pr/fields/string_field.rb +3 -2
- data/lib/pr/form.rb +18 -3
- data/lib/pr/version.rb +1 -1
- data/spec/unit/pr/active_form_spec.rb +12 -3
- data/spec/unit/pr/build_from_hash_spec.rb +14 -0
- data/spec/unit/pr/build_from_model_spec.rb +27 -0
- data/spec/unit/pr/build_model_spec.rb +7 -11
- data/spec/unit/pr/define_and_register_spec.rb +93 -0
- data/spec/unit/pr/define_field_spec.rb +9 -0
- data/spec/unit/pr/field_registry_spec.rb +45 -0
- data/spec/unit/pr/fields/boolean_field_spec.rb +11 -3
- data/spec/unit/pr/fields/date_field_spec.rb +13 -5
- data/spec/unit/pr/fields/float_field_spec.rb +13 -5
- data/spec/unit/pr/fields/generic_field_spec.rb +11 -3
- data/spec/unit/pr/fields/string_field_spec.rb +11 -3
- data/spec/unit/pr/fields_spec.rb +26 -0
- data/spec/unit/pr/form_spec.rb +13 -3
- metadata +32 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1967110cefbe5a002dd832abb9e60df5257bd16
|
4
|
+
data.tar.gz: 66f1fc2292f655b8203599056b0e43fe737d19d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58681a9064ea976b0edb67b0077e2e72411cc5b83aca8936a4dc99d47b3f0869803550881bd4ae3de235bc2c2c11e417c4472acf706499552cca1c953561e962
|
7
|
+
data.tar.gz: b0ac34db4e729c275a082fee6e3f4706edf23fa6581d3c00a085f836826330c541c45674cfc4f33ee3b2e6dd4b955983fd6aff5544acefcd7f9b8ac1c776b4a7
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/.rspec
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
--colour
|
2
|
-
--format
|
2
|
+
--format progress
|
@@ -0,0 +1,57 @@
|
|
1
|
+
Feature: Building a form from a hash
|
2
|
+
In order to turn user input into a validated set
|
3
|
+
As a developer
|
4
|
+
I wish to use a defined form to parse user input from a hash
|
5
|
+
|
6
|
+
@form @basic @hash
|
7
|
+
Scenario: Basic Form
|
8
|
+
Given I have a form defined as:
|
9
|
+
"""Ruby
|
10
|
+
class MyForm
|
11
|
+
include PR::Form
|
12
|
+
|
13
|
+
field :event_name, :string
|
14
|
+
field :start_date, :date
|
15
|
+
|
16
|
+
end
|
17
|
+
"""
|
18
|
+
And I have a hash:
|
19
|
+
"""Ruby
|
20
|
+
{
|
21
|
+
"event_name" => "Mien Event",
|
22
|
+
"start_date" => "31/03/2013"
|
23
|
+
}
|
24
|
+
"""
|
25
|
+
When I build my form from the hash:
|
26
|
+
"""Ruby
|
27
|
+
@form = MyForm.new
|
28
|
+
PR::BuildFromHash[ @form, @hash ]
|
29
|
+
"""
|
30
|
+
Then my form should have a event_name of "Mien Event"
|
31
|
+
Then my form should have a start_date of "31/03/2013"
|
32
|
+
|
33
|
+
@form @macro @hash
|
34
|
+
Scenario: Basic Form built using macro
|
35
|
+
Given I have a form defined as:
|
36
|
+
"""Ruby
|
37
|
+
class MyForm
|
38
|
+
include PR::Form
|
39
|
+
|
40
|
+
field :event_name, :string
|
41
|
+
field :start_date, :date
|
42
|
+
|
43
|
+
end
|
44
|
+
"""
|
45
|
+
And I have a hash:
|
46
|
+
"""Ruby
|
47
|
+
{
|
48
|
+
"event_name" => "Mien Event",
|
49
|
+
"start_date" => "31/03/2013"
|
50
|
+
}
|
51
|
+
"""
|
52
|
+
When I build my form using the macro:
|
53
|
+
"""Ruby
|
54
|
+
@form = MyForm.from_hash @hash
|
55
|
+
"""
|
56
|
+
Then my form should have a event_name of "Mien Event"
|
57
|
+
Then my form should have a start_date of "31/03/2013"
|
@@ -0,0 +1,50 @@
|
|
1
|
+
Feature: Building a form from an existing models
|
2
|
+
In order to apply user input to an existing model
|
3
|
+
As a developer
|
4
|
+
I wish to use a defined form to display existing data
|
5
|
+
|
6
|
+
@form @basic @model
|
7
|
+
Scenario: Basic Form
|
8
|
+
Given I have a form defined as:
|
9
|
+
"""Ruby
|
10
|
+
class MyForm
|
11
|
+
include PR::Form
|
12
|
+
|
13
|
+
field :event_name, :string
|
14
|
+
field :start_date, :date
|
15
|
+
|
16
|
+
end
|
17
|
+
"""
|
18
|
+
And I have a model defined as:
|
19
|
+
"""Ruby
|
20
|
+
@model = Struct.new(:event_name,:start_date).new 'An Event', Date.civil(2013,2,28)
|
21
|
+
"""
|
22
|
+
When I build my form from a model:
|
23
|
+
"""Ruby
|
24
|
+
@form = PR::BuildFromModel[ MyForm, @model ]
|
25
|
+
"""
|
26
|
+
Then my form should have a event_name of "An Event"
|
27
|
+
Then my form should have a start_date of "28/02/2013"
|
28
|
+
|
29
|
+
@form @macro @model
|
30
|
+
Scenario: Basic Form built using macro
|
31
|
+
Given I have a form defined as:
|
32
|
+
"""Ruby
|
33
|
+
class MyForm
|
34
|
+
include PR::Form
|
35
|
+
|
36
|
+
field :event_name, :string
|
37
|
+
field :start_date, :date
|
38
|
+
|
39
|
+
end
|
40
|
+
"""
|
41
|
+
And I have a model defined as:
|
42
|
+
"""Ruby
|
43
|
+
@model = Struct.new(:event_name,:start_date).new 'An Event', Date.civil(2013,2,28)
|
44
|
+
"""
|
45
|
+
When I build my form using the macro:
|
46
|
+
"""Ruby
|
47
|
+
@form = MyForm.from_model @model
|
48
|
+
"""
|
49
|
+
Then my form should have a event_name of "An Event"
|
50
|
+
Then my form should have a start_date of "28/02/2013"
|
@@ -0,0 +1,66 @@
|
|
1
|
+
Feature: Building a model from a form
|
2
|
+
In order to turn user input into a model
|
3
|
+
As a developer
|
4
|
+
I wish to user a defined form to build a model
|
5
|
+
|
6
|
+
@form @basic @build
|
7
|
+
Scenario: Basic Form
|
8
|
+
Given I have a form defined as:
|
9
|
+
"""Ruby
|
10
|
+
class MyForm
|
11
|
+
include PR::Form
|
12
|
+
|
13
|
+
field :event_name, :string
|
14
|
+
field :start_date, :date
|
15
|
+
|
16
|
+
end
|
17
|
+
"""
|
18
|
+
And I have preloaded the form with data:
|
19
|
+
"""Ruby
|
20
|
+
@form = MyForm.new
|
21
|
+
@form.event_name = 'Event'
|
22
|
+
@form.start_date = '31/03/2013'
|
23
|
+
"""
|
24
|
+
And I have a model defined as:
|
25
|
+
"""Ruby
|
26
|
+
class Event < Struct.new(:event_name,:start_date)
|
27
|
+
end
|
28
|
+
"""
|
29
|
+
When I build my model from the form:
|
30
|
+
"""Ruby
|
31
|
+
@model = Event.new
|
32
|
+
PR::BuildModel[ @form, @model ]
|
33
|
+
"""
|
34
|
+
Then my model should have a string for event_name "Event"
|
35
|
+
And my model should have a date for start_date `Date.civil(2013,3,31)`
|
36
|
+
|
37
|
+
|
38
|
+
@form @macro @build
|
39
|
+
Scenario: Basic Form using macro
|
40
|
+
Given I have a form defined as:
|
41
|
+
"""Ruby
|
42
|
+
class MyForm
|
43
|
+
include PR::Form
|
44
|
+
|
45
|
+
field :event_name, :string
|
46
|
+
field :start_date, :date
|
47
|
+
|
48
|
+
end
|
49
|
+
"""
|
50
|
+
And I have preloaded the form with data:
|
51
|
+
"""Ruby
|
52
|
+
@form = MyForm.new
|
53
|
+
@form.event_name = 'Event'
|
54
|
+
@form.start_date = '31/03/2013'
|
55
|
+
"""
|
56
|
+
And I have a model defined as:
|
57
|
+
"""Ruby
|
58
|
+
class AnEvent < Struct.new(:event_name,:start_date)
|
59
|
+
end
|
60
|
+
"""
|
61
|
+
When I build my model from the form:
|
62
|
+
"""Ruby
|
63
|
+
@form.build_model (@model = AnEvent.new)
|
64
|
+
"""
|
65
|
+
Then my model should have a string for event_name "Event"
|
66
|
+
And my model should have a date for start_date `Date.civil(2013,3,31)`
|
@@ -0,0 +1,36 @@
|
|
1
|
+
Feature: Defining a basic form
|
2
|
+
In order to utilise some user input
|
3
|
+
As a developer
|
4
|
+
I wish to define a basic form to capture input
|
5
|
+
|
6
|
+
@form @basic
|
7
|
+
Scenario: Basic Form
|
8
|
+
Given I have a form defined as:
|
9
|
+
"""Ruby
|
10
|
+
class MyForm
|
11
|
+
|
12
|
+
DefineField[ self, :event_name, PR::Fields::StringField ]
|
13
|
+
DefineField[ self, :start_date, PR::Fields::DateField ]
|
14
|
+
|
15
|
+
end
|
16
|
+
"""
|
17
|
+
When I initialise MyForm
|
18
|
+
Then my form should have a string input "event_name"
|
19
|
+
And my form should have a date input "start_date"
|
20
|
+
|
21
|
+
|
22
|
+
@form
|
23
|
+
Scenario: Form (with macros)
|
24
|
+
Given I have a form defined as:
|
25
|
+
"""Ruby
|
26
|
+
class MyForm
|
27
|
+
include PR::Form
|
28
|
+
|
29
|
+
field :event_name, :string
|
30
|
+
field :start_date, :date
|
31
|
+
|
32
|
+
end
|
33
|
+
"""
|
34
|
+
When I initialise MyForm
|
35
|
+
Then my form should have a string input "event_name"
|
36
|
+
And my form should have a date input "start_date"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Given "I have a form defined as:" do |code|
|
2
|
+
define_form code
|
3
|
+
end
|
4
|
+
|
5
|
+
Given "I have preloaded the form with data:" do |code|
|
6
|
+
run_test code
|
7
|
+
end
|
8
|
+
|
9
|
+
When "I build my form from a model:" do |code|
|
10
|
+
run_test code
|
11
|
+
end
|
12
|
+
|
13
|
+
When /^I initialise (\w+)$/ do |klass|
|
14
|
+
@form = fetch(klass).new
|
15
|
+
end
|
16
|
+
|
17
|
+
Then /^my form should have a string input "(\w+)"$/ do |name|
|
18
|
+
set @form, name, "my demo string"
|
19
|
+
end
|
20
|
+
|
21
|
+
Then /^my form should have a date input "(\w+)"$/ do |name|
|
22
|
+
set @form, name, "31/03/2013"
|
23
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Given "I have a hash:" do |code|
|
2
|
+
define_hash code
|
3
|
+
end
|
4
|
+
|
5
|
+
Given "I build my form using the macro:" do |code|
|
6
|
+
run_test code
|
7
|
+
end
|
8
|
+
|
9
|
+
When "I build my form from the hash:" do |code|
|
10
|
+
run_test code
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^my form should have a ([\w_]+) of "(.*)"$/ do |field_name,field_data|
|
14
|
+
access("@form").send(field_name).should == field_data
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Given "I have a model defined as:" do |code|
|
2
|
+
define_model code
|
3
|
+
end
|
4
|
+
|
5
|
+
When "I build my model from the form:" do |code|
|
6
|
+
run_test code
|
7
|
+
end
|
8
|
+
|
9
|
+
Then /^my model should have a string for (\w+) "(\w+)"$/ do |field_name,field_data|
|
10
|
+
access("@model").send(field_name).should == field_data
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^my model should have a date for ([^\s]+) `(.*)`$/ do |field_name,field_data|
|
14
|
+
access("@model").send(field_name).should == eval(field_data)
|
15
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module DSL
|
2
|
+
|
3
|
+
class World
|
4
|
+
require 'pr'
|
5
|
+
|
6
|
+
def run code
|
7
|
+
eval code
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
def run_test code
|
13
|
+
world.run code
|
14
|
+
end
|
15
|
+
alias define_form run_test
|
16
|
+
alias define_model run_test
|
17
|
+
|
18
|
+
def define_hash code
|
19
|
+
world.instance_variable_set '@hash', world.run(code)
|
20
|
+
end
|
21
|
+
|
22
|
+
def fetch klass
|
23
|
+
world.class.const_get klass
|
24
|
+
end
|
25
|
+
|
26
|
+
def access var
|
27
|
+
world.instance_variable_get var
|
28
|
+
end
|
29
|
+
|
30
|
+
def world
|
31
|
+
@world ||= Class.new(World).new
|
32
|
+
end
|
33
|
+
|
34
|
+
def set thing, attribute, value
|
35
|
+
thing.send "#{attribute}=", value
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
World DSL
|
data/lib/pr.rb
CHANGED
@@ -4,5 +4,15 @@ module PR
|
|
4
4
|
end
|
5
5
|
|
6
6
|
require 'pr/fields'
|
7
|
+
|
8
|
+
#how we define fields
|
9
|
+
require 'pr/field_registry'
|
10
|
+
require 'pr/define_field'
|
11
|
+
require 'pr/define_and_register'
|
12
|
+
|
13
|
+
require 'pr/build_model'
|
14
|
+
require 'pr/build_from_hash'
|
15
|
+
require 'pr/build_from_model'
|
16
|
+
|
7
17
|
require 'pr/form'
|
8
18
|
require 'pr/active_form' if defined?(Rails)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module PR
|
2
|
+
class BuildFromHash
|
3
|
+
|
4
|
+
def self.[] form, hash
|
5
|
+
new(form).from hash
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize form
|
9
|
+
@form = form
|
10
|
+
end
|
11
|
+
|
12
|
+
def from hash
|
13
|
+
hash.each_pair do |key,value|
|
14
|
+
@form.send "#{key}=", value
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module PR
|
2
|
+
class BuildFromModel
|
3
|
+
|
4
|
+
def self.[] klass, model
|
5
|
+
new(PR::FieldRegistry[klass], klass.new).build_from model
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize registry, form
|
9
|
+
@registry, @form = registry, form
|
10
|
+
end
|
11
|
+
|
12
|
+
def build_from model
|
13
|
+
@registry.fields.each do |field|
|
14
|
+
@form.send("__#{field}").populate model.send(field) if model.respond_to? field
|
15
|
+
end
|
16
|
+
@form
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
data/lib/pr/build_model.rb
CHANGED
@@ -1,24 +1,26 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
def initialize registry
|
7
|
-
@registry = registry
|
8
|
-
end
|
9
|
-
|
10
|
-
def for form, model
|
11
|
-
@registry.fields_for(form) do |field_name|
|
12
|
-
set model, field_name, value(form,field_name)
|
1
|
+
module PR
|
2
|
+
class BuildModel
|
3
|
+
def self.[] form, model
|
4
|
+
new(PR::FieldRegistry[form.class]).for form, model
|
13
5
|
end
|
14
|
-
end
|
15
6
|
|
16
|
-
|
17
|
-
|
18
|
-
thing.send "#{name}=", value
|
7
|
+
def initialize registry
|
8
|
+
@registry = registry
|
19
9
|
end
|
20
|
-
|
21
|
-
|
10
|
+
|
11
|
+
def for form, model
|
12
|
+
@registry.fields.each do |field_name|
|
13
|
+
set model, field_name, value(form, field_name)
|
14
|
+
end
|
22
15
|
end
|
23
16
|
|
17
|
+
private
|
18
|
+
def set thing, name, value
|
19
|
+
thing.send "#{name}=", value
|
20
|
+
end
|
21
|
+
def value thing, name
|
22
|
+
thing.send("__#{name}").convert
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
24
26
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module PR
|
2
|
+
class DefineAndRegister
|
3
|
+
|
4
|
+
class << self
|
5
|
+
def [] klass, name, type, options = {}
|
6
|
+
new(klass).define_and_register name, type, options
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize klass
|
11
|
+
@registry = FieldRegistry[klass]
|
12
|
+
@klass = klass
|
13
|
+
end
|
14
|
+
|
15
|
+
def define_and_register name, type, options
|
16
|
+
register name, define(name,type,options)
|
17
|
+
end
|
18
|
+
|
19
|
+
def register name, field
|
20
|
+
@registry.register name, field
|
21
|
+
end
|
22
|
+
|
23
|
+
def define name, type, options = {}
|
24
|
+
DefineField[ @klass, name, Fields[type], options ]
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
data/lib/pr/define_field.rb
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
class DefineField
|
2
|
+
class << self
|
3
|
+
def on klass, field_name, field, options = {}
|
4
|
+
new.on klass, field_name, field, options
|
5
|
+
end
|
6
|
+
def [] klass, field_name, field, options = {}
|
7
|
+
new.on klass, field_name, field, options
|
8
|
+
end
|
9
|
+
end
|
2
10
|
|
3
|
-
def on klass, field_name, field
|
11
|
+
def on klass, field_name, field, options = {}
|
4
12
|
var_name = "@field_#{field_name}"
|
5
13
|
field_setter = "#{field_name}="
|
6
14
|
actual_field = "__#{field_name}"
|
7
15
|
|
8
|
-
klass
|
9
|
-
|
10
|
-
|
11
|
-
end
|
12
|
-
define_method(field_name) do
|
13
|
-
send(actual_field).raw
|
14
|
-
end
|
15
|
-
define_method(field_setter) do |value|
|
16
|
-
instance_variable_set var_name, field.new(*([value].compact))
|
17
|
-
end
|
18
|
-
end
|
16
|
+
define_field klass, actual_field, var_name, field_setter
|
17
|
+
define_reader klass, field_name, actual_field
|
18
|
+
define_setter klass, var_name, field_setter, field
|
19
19
|
end
|
20
20
|
|
21
21
|
private
|
@@ -23,4 +23,28 @@ class DefineField
|
|
23
23
|
"@field_#{name}"
|
24
24
|
end
|
25
25
|
|
26
|
+
def define_field klass, actual_field, var_name, field_setter
|
27
|
+
klass.class_eval do
|
28
|
+
define_method(actual_field) do
|
29
|
+
instance_variable_get(var_name) || send(field_setter,nil)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def define_reader klass, field_name, actual_field
|
35
|
+
klass.class_eval do
|
36
|
+
define_method(field_name) do
|
37
|
+
send(actual_field).raw
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def define_setter klass, var_name, field_setter, field
|
43
|
+
klass.class_eval do
|
44
|
+
define_method(field_setter) do |value|
|
45
|
+
instance_variable_set var_name, field.new(*([value].compact))
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
26
50
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module PR
|
2
|
+
class FieldRegistry
|
3
|
+
|
4
|
+
def self.[] klass
|
5
|
+
@registers ||= {}
|
6
|
+
@registers[klass] ||= new(klass)
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize klass
|
10
|
+
@for = klass
|
11
|
+
@fields = {}
|
12
|
+
end
|
13
|
+
attr_reader :for
|
14
|
+
|
15
|
+
def register field_name, field
|
16
|
+
@fields[field_name] = field
|
17
|
+
end
|
18
|
+
|
19
|
+
def fetch field_name
|
20
|
+
@fields.fetch field_name
|
21
|
+
end
|
22
|
+
|
23
|
+
def fields
|
24
|
+
@fields.keys
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
data/lib/pr/fields.rb
CHANGED
@@ -4,3 +4,34 @@ require 'pr/fields/string_field'
|
|
4
4
|
require 'pr/fields/boolean_field'
|
5
5
|
require 'pr/fields/date_field'
|
6
6
|
require 'pr/fields/float_field'
|
7
|
+
|
8
|
+
module PR
|
9
|
+
module Fields
|
10
|
+
|
11
|
+
PreDefined =
|
12
|
+
{
|
13
|
+
generic: GenericField,
|
14
|
+
string: StringField,
|
15
|
+
boolean: BooleanField,
|
16
|
+
date: DateField,
|
17
|
+
float: FloatField
|
18
|
+
}
|
19
|
+
|
20
|
+
class << self
|
21
|
+
|
22
|
+
def [] name
|
23
|
+
__fields[name]
|
24
|
+
end
|
25
|
+
|
26
|
+
def []= custom_name, field
|
27
|
+
__fields[custom_name] = field
|
28
|
+
end
|
29
|
+
|
30
|
+
def __fields
|
31
|
+
@__fields ||= PreDefined.dup
|
32
|
+
end
|
33
|
+
private :__fields
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -4,9 +4,10 @@ module PR
|
|
4
4
|
TrueValues = [1,"1","true",true]
|
5
5
|
FalseValues = [0,"0","false",false, ""]
|
6
6
|
|
7
|
-
def initialize value = nil
|
8
|
-
@value = value
|
7
|
+
def initialize value = nil, options = {}
|
8
|
+
@value, @options = value, options
|
9
9
|
end
|
10
|
+
attr_reader :options
|
10
11
|
|
11
12
|
def populate value
|
12
13
|
@value = value
|
data/lib/pr/fields/date_field.rb
CHANGED
data/lib/pr/form.rb
CHANGED
@@ -2,12 +2,27 @@ module PR
|
|
2
2
|
module Form
|
3
3
|
|
4
4
|
def self.included other
|
5
|
-
other.send :extend,
|
5
|
+
other.send :extend, DSL
|
6
|
+
other.send :include, Macros
|
6
7
|
end
|
7
8
|
|
8
9
|
module DSL
|
9
|
-
def field name, options = {}
|
10
|
-
DefineAndRegister[ self, name, options ]
|
10
|
+
def field name, type, options = {}
|
11
|
+
PR::DefineAndRegister[ self, name, type, options ]
|
12
|
+
end
|
13
|
+
def from_hash hash
|
14
|
+
form = new
|
15
|
+
PR::BuildFromHash[ form, hash ]
|
16
|
+
form
|
17
|
+
end
|
18
|
+
def from_model model
|
19
|
+
PR::BuildFromModel[ self, model ]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module Macros
|
24
|
+
def build_model model
|
25
|
+
BuildModel[ self, model ]
|
11
26
|
end
|
12
27
|
end
|
13
28
|
|
data/lib/pr/version.rb
CHANGED
@@ -7,11 +7,20 @@ describe 'the PR Form' do
|
|
7
7
|
let(:form_klass) { TestForm }
|
8
8
|
|
9
9
|
describe 'when included extends the other with its DSL' do
|
10
|
+
let(:name) { double "field name" }
|
11
|
+
let(:type) { double "field type" }
|
12
|
+
|
13
|
+
before do
|
14
|
+
stub_const 'PR::DefineAndRegister', double
|
15
|
+
end
|
10
16
|
|
11
17
|
it 'sets up field to define fields' do
|
12
|
-
|
13
|
-
|
14
|
-
|
18
|
+
PR::DefineAndRegister.should_receive(:[]).with form_klass, name, type, {}
|
19
|
+
form_klass.field name, type
|
20
|
+
end
|
21
|
+
it 'sets up field to define fields and passes in options' do
|
22
|
+
PR::DefineAndRegister.should_receive(:[]).with form_klass, name, type, my: :option
|
23
|
+
form_klass.field name, type, my: :option
|
15
24
|
end
|
16
25
|
|
17
26
|
it 'sets up an id' do
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'pr/build_from_hash'
|
2
|
+
|
3
|
+
describe 'building a form from a hash' do
|
4
|
+
let(:form) { Struct.new(:a,:b).new }
|
5
|
+
let(:hash) { { "a" => "a", "b" => "b" } }
|
6
|
+
|
7
|
+
let(:builder) { PR::BuildFromHash.new form }
|
8
|
+
|
9
|
+
it 'sets hash values on form' do
|
10
|
+
builder.from hash
|
11
|
+
expect(form.a).to eq "a"
|
12
|
+
expect(form.b).to eq "b"
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'pr/build_from_model'
|
2
|
+
|
3
|
+
describe 'building forms from models' do
|
4
|
+
|
5
|
+
let(:registry) { double "field registry", fields: [:a,:b] }
|
6
|
+
let(:form) { double "form", __a: field_a, __b: field_b }
|
7
|
+
let(:field_a) { double "field a", populate: nil }
|
8
|
+
let(:field_b) { double "field b" }
|
9
|
+
let(:model) { Struct.new(:a).new 'a' }
|
10
|
+
|
11
|
+
let(:builder) { PR::BuildFromModel.new(registry, form) }
|
12
|
+
|
13
|
+
it 'gets fields from the registry' do
|
14
|
+
registry.should_receive(:fields)
|
15
|
+
builder.build_from model
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'populates the form values from the model when it has them' do
|
19
|
+
field_a.should_receive(:populate).with('a')
|
20
|
+
builder.build_from model
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'returns the form' do
|
24
|
+
expect( builder.build_from model ).to eq form
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -2,20 +2,16 @@ require 'pr/build_model'
|
|
2
2
|
|
3
3
|
describe 'building a model from a form' do
|
4
4
|
let(:model) { Struct.new(:a,:b).new }
|
5
|
-
let(:registry) { double }
|
5
|
+
let(:registry) { double fields: [:a,:b] }
|
6
6
|
|
7
|
-
let(:field_a)
|
8
|
-
let(:field_b)
|
9
|
-
let(:form)
|
7
|
+
let(:field_a) { double "field", convert: "a_value" }
|
8
|
+
let(:field_b) { double "field", convert: "b_value" }
|
9
|
+
let(:form) { double "form", __a: field_a, __b: field_b }
|
10
10
|
|
11
|
-
let(:builder) { BuildModel.new registry }
|
11
|
+
let(:builder) { PR::BuildModel.new registry }
|
12
12
|
|
13
|
-
|
14
|
-
registry.
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'fetches fields from the registry' do
|
18
|
-
registry.should_receive(:fields_for).with(form)
|
13
|
+
it 'gets the fields' do
|
14
|
+
registry.should_receive(:fields)
|
19
15
|
builder.for form, model
|
20
16
|
end
|
21
17
|
it 'converts fields to values' do
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'pr/define_and_register'
|
2
|
+
|
3
|
+
describe 'defining and registering fields' do
|
4
|
+
|
5
|
+
#values
|
6
|
+
let(:form_klass) { double "form klass" }
|
7
|
+
let(:field_name) { double "field name" }
|
8
|
+
let(:field_type) { double "field type" }
|
9
|
+
let(:field_klass) { double "field klass" }
|
10
|
+
let(:registry) { double "registry", register: true }
|
11
|
+
let(:field) { double "field" }
|
12
|
+
let(:options) { Hash.new }
|
13
|
+
|
14
|
+
#services
|
15
|
+
let(:field_registry) { double "registry", :[] => registry }
|
16
|
+
let(:field_lookup) { double "fields", :[] => field_klass }
|
17
|
+
let(:field_definition) { double "definition", :[] => field }
|
18
|
+
|
19
|
+
before do
|
20
|
+
stub_const 'PR::FieldRegistry', field_registry
|
21
|
+
stub_const 'PR::Fields', field_lookup
|
22
|
+
stub_const 'PR::DefineField', field_definition
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'using the macro' do
|
26
|
+
it 'looks up the field registry for this form klass' do
|
27
|
+
PR::FieldRegistry.should_receive(:[]).with(form_klass).and_return(registry)
|
28
|
+
PR::DefineAndRegister[ form_klass, field_name, field_type ]
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'looks up the the field for this type' do
|
32
|
+
PR::Fields.should_receive(:[]).with(field_type)
|
33
|
+
PR::DefineAndRegister[ form_klass, field_name, field_type ]
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'defines a field on this form klass' do
|
37
|
+
PR::DefineField.should_receive(:[]).with( form_klass, field_name, field_klass, {} )
|
38
|
+
PR::DefineAndRegister[ form_klass, field_name, field_type ]
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'registers this definition' do
|
42
|
+
registry.should_receive(:register).with(field_name,field)
|
43
|
+
PR::DefineAndRegister[ form_klass, field_name, field_type ]
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'with options' do
|
47
|
+
it 'defines a field on this form klass' do
|
48
|
+
PR::DefineField.should_receive(:[]).with( form_klass, field_name, field_klass, options )
|
49
|
+
PR::DefineAndRegister[ form_klass, field_name, field_type, options ]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe 'registering field' do
|
55
|
+
let(:definition) { PR::DefineAndRegister.new form_klass }
|
56
|
+
|
57
|
+
it 'looks up the field registry for this form klass' do
|
58
|
+
PR::FieldRegistry.should_receive(:[]).with(form_klass).and_return(registry)
|
59
|
+
definition.register field_name, field
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'registers this definition' do
|
63
|
+
registry.should_receive(:register).with(field_name,field)
|
64
|
+
definition.register field_name, field
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe 'defining field' do
|
69
|
+
let(:definition) { PR::DefineAndRegister.new form_klass }
|
70
|
+
|
71
|
+
it 'looks up the field registry for this form klass' do
|
72
|
+
PR::FieldRegistry.should_receive(:[]).with(form_klass).and_return(registry)
|
73
|
+
definition.define field_name, field_type
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'looks up the the field for this type' do
|
77
|
+
PR::Fields.should_receive(:[]).with(field_type)
|
78
|
+
definition.define field_name, field_type
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'defines a field on this form klass' do
|
82
|
+
PR::DefineField.should_receive(:[]).with( form_klass, field_name, field_klass, {} )
|
83
|
+
definition.define field_name, field_type
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'with options' do
|
87
|
+
it 'defines a field on this form klass' do
|
88
|
+
PR::DefineField.should_receive(:[]).with( form_klass, field_name, field_klass, options )
|
89
|
+
definition.define field_name, field_type, options
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -12,13 +12,22 @@ describe 'defining a field on a form' do
|
|
12
12
|
define_field.on form_klass, :name, field
|
13
13
|
expect(form.name).to eq field.new.raw
|
14
14
|
end
|
15
|
+
|
15
16
|
it 'defines a writer which will set the field value' do
|
16
17
|
define_field.on form_klass, :name, field
|
17
18
|
form.name = new_raw_value
|
18
19
|
expect(form.name).to eq new_raw_value
|
19
20
|
end
|
21
|
+
|
20
22
|
it 'defines a reader to return the actual field' do
|
21
23
|
define_field.on form_klass, :name, field
|
22
24
|
expect(form.__name).to be_a field
|
23
25
|
end
|
26
|
+
|
27
|
+
it 'takes options and passes them to field' do
|
28
|
+
options = Hash.new
|
29
|
+
define_field.on form_klass, :name, field, options
|
30
|
+
expect(form.__name.options).to eq options
|
31
|
+
end
|
32
|
+
|
24
33
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'pr/field_registry'
|
2
|
+
|
3
|
+
describe 'field registry' do
|
4
|
+
let(:registry) { PR::FieldRegistry }
|
5
|
+
|
6
|
+
#values
|
7
|
+
let(:klass) { double "form klass" }
|
8
|
+
|
9
|
+
describe '.[]' do
|
10
|
+
it 'returns a field registry for the klass' do
|
11
|
+
expect(registry[klass]).to be_a registry
|
12
|
+
expect(registry[klass].for).to eq klass
|
13
|
+
end
|
14
|
+
it 'returns the same field registry multiple times' do
|
15
|
+
expect(registry[klass]).to eq registry[klass]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#initialize' do
|
20
|
+
it 'stores the klass for retrieval' do
|
21
|
+
expect(registry.new(klass).for).to eq klass
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'registeration' do
|
26
|
+
let(:name) { double "field name" }
|
27
|
+
let(:field) { double "field" }
|
28
|
+
|
29
|
+
let(:specific_register) { registry.new klass }
|
30
|
+
|
31
|
+
it 'stores the field on the register' do
|
32
|
+
specific_register.register name, field
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'allows retreival of that field' do
|
36
|
+
specific_register.register name, field
|
37
|
+
expect(specific_register.fetch name).to eq field
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'enumerates fields' do
|
41
|
+
specific_register.register name, field
|
42
|
+
expect(specific_register.fields).to eq [name]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -1,15 +1,23 @@
|
|
1
1
|
require 'pr/fields/boolean_field'
|
2
2
|
|
3
3
|
describe 'a boolean field' do
|
4
|
-
let(:klass)
|
5
|
-
let(:value)
|
6
|
-
let(:
|
4
|
+
let(:klass) { PR::Fields::BooleanField }
|
5
|
+
let(:value) { double "value" }
|
6
|
+
let(:options) { Hash.new }
|
7
|
+
let(:field) { klass.new value, options }
|
7
8
|
|
8
9
|
describe "default value" do
|
9
10
|
subject { klass.new }
|
10
11
|
|
11
12
|
its(:raw) { should equal(false) }
|
12
13
|
its(:convert) { should equal(false) }
|
14
|
+
its(:options) { should == {} }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#options' do
|
18
|
+
it 'has retrievable options' do
|
19
|
+
expect(field.options).to eq options
|
20
|
+
end
|
13
21
|
end
|
14
22
|
|
15
23
|
describe :raw do
|
@@ -2,15 +2,23 @@ require 'pr/fields/invalid_value'
|
|
2
2
|
require 'pr/fields/date_field'
|
3
3
|
|
4
4
|
describe 'a date field' do
|
5
|
-
let(:klass)
|
6
|
-
let(:value)
|
7
|
-
let(:
|
5
|
+
let(:klass) { PR::Fields::DateField }
|
6
|
+
let(:value) { double "value" }
|
7
|
+
let(:options) { Hash.new }
|
8
|
+
let(:field) { klass.new value, options }
|
8
9
|
|
9
10
|
describe "default value" do
|
10
11
|
subject { klass.new }
|
11
12
|
|
12
|
-
its(:raw)
|
13
|
-
specify
|
13
|
+
its(:raw) { should == '' }
|
14
|
+
specify { expect { subject.convert }.to raise_error PR::Fields::InvalidValue }
|
15
|
+
its(:options) { should == {} }
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#options' do
|
19
|
+
it 'has retrievable options' do
|
20
|
+
expect(field.options).to eq options
|
21
|
+
end
|
14
22
|
end
|
15
23
|
|
16
24
|
describe "raw" do
|
@@ -2,13 +2,21 @@ require 'pr/fields/invalid_value'
|
|
2
2
|
require 'pr/fields/float_field'
|
3
3
|
|
4
4
|
describe 'a float field' do
|
5
|
-
let(:klass)
|
6
|
-
let(:value)
|
7
|
-
let(:
|
5
|
+
let(:klass) { PR::Fields::FloatField }
|
6
|
+
let(:value) { double "value" }
|
7
|
+
let(:options) { Hash.new }
|
8
|
+
let(:field) { klass.new value, options }
|
8
9
|
|
9
10
|
describe "default value" do
|
10
|
-
subject
|
11
|
-
its(:raw)
|
11
|
+
subject { klass.new }
|
12
|
+
its(:raw) { should == '' }
|
13
|
+
its(:options) { should == {} }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#options' do
|
17
|
+
it 'has retrievable options' do
|
18
|
+
expect(field.options).to eq options
|
19
|
+
end
|
12
20
|
end
|
13
21
|
|
14
22
|
describe "#raw" do
|
@@ -1,15 +1,23 @@
|
|
1
1
|
require 'pr/fields/generic_field'
|
2
2
|
|
3
3
|
describe 'a generic field' do
|
4
|
-
let(:klass)
|
5
|
-
let(:value)
|
6
|
-
let(:
|
4
|
+
let(:klass) { PR::Fields::GenericField }
|
5
|
+
let(:value) { double "value" }
|
6
|
+
let(:options) { Hash.new }
|
7
|
+
let(:field) { klass.new value, options }
|
7
8
|
|
8
9
|
describe "default value" do
|
9
10
|
subject { klass.new }
|
10
11
|
|
11
12
|
its(:raw) { should == nil }
|
12
13
|
its(:convert) { should == nil }
|
14
|
+
its(:options) { should == {} }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#options' do
|
18
|
+
it 'has retrievable options' do
|
19
|
+
expect(field.options).to eq options
|
20
|
+
end
|
13
21
|
end
|
14
22
|
|
15
23
|
describe :raw do
|
@@ -1,15 +1,23 @@
|
|
1
1
|
require 'pr/fields/string_field'
|
2
2
|
|
3
3
|
describe 'a string field' do
|
4
|
-
let(:klass)
|
5
|
-
let(:value)
|
6
|
-
let(:
|
4
|
+
let(:klass) { PR::Fields::StringField }
|
5
|
+
let(:value) { double "value" }
|
6
|
+
let(:options) { Hash.new }
|
7
|
+
let(:field) { klass.new value, options }
|
7
8
|
|
8
9
|
describe "default value" do
|
9
10
|
subject { klass.new }
|
10
11
|
|
11
12
|
its(:raw) { should == '' }
|
12
13
|
its(:convert) { should == '' }
|
14
|
+
its(:options) { should == {} }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#options' do
|
18
|
+
it 'has retrievable options' do
|
19
|
+
expect(field.options).to eq options
|
20
|
+
end
|
13
21
|
end
|
14
22
|
|
15
23
|
describe "#populate" do
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'pr/fields'
|
2
|
+
|
3
|
+
describe 'accessing fields' do
|
4
|
+
|
5
|
+
let(:lookup) { PR::Fields }
|
6
|
+
|
7
|
+
describe 'finding fields via constant' do
|
8
|
+
subject { lookup }
|
9
|
+
|
10
|
+
its([:generic]) { should eq PR::Fields::GenericField }
|
11
|
+
its([:string]) { should eq PR::Fields::StringField }
|
12
|
+
its([:boolean]) { should eq PR::Fields::BooleanField }
|
13
|
+
its([:date]) { should eq PR::Fields::DateField }
|
14
|
+
its([:float]) { should eq PR::Fields::FloatField }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'extending with custom fields' do
|
18
|
+
let(:my_custom_field) { double "my custom field" }
|
19
|
+
|
20
|
+
it 'allows extension with a custom field' do
|
21
|
+
lookup[:custom] = my_custom_field
|
22
|
+
expect(lookup[:custom]).to eq my_custom_field
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
data/spec/unit/pr/form_spec.rb
CHANGED
@@ -8,10 +8,20 @@ describe 'the PR Form' do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
describe 'when included extends the other with its DSL' do
|
11
|
+
let(:name) { double "field name" }
|
12
|
+
let(:type) { double "field type" }
|
13
|
+
|
14
|
+
before do
|
15
|
+
stub_const 'PR::DefineAndRegister', double
|
16
|
+
end
|
17
|
+
|
11
18
|
it 'sets up field to define fields' do
|
12
|
-
|
13
|
-
|
14
|
-
|
19
|
+
PR::DefineAndRegister.should_receive(:[]).with form_klass, name, type, {}
|
20
|
+
form_klass.field name, type
|
21
|
+
end
|
22
|
+
it 'sets up field to define fields and passes in options' do
|
23
|
+
PR::DefineAndRegister.should_receive(:[]).with form_klass, name, type, my: :option
|
24
|
+
form_klass.field name, type, my: :option
|
15
25
|
end
|
16
26
|
end
|
17
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Rowe
|
@@ -29,7 +29,7 @@ cert_chain:
|
|
29
29
|
2feWfO4gCNmvfFjULOAYHq9JHEjN5SLSXvj5HdSnDcCyIfJKn5Ya3JahWQaWIsXf
|
30
30
|
/NPE/mB57TOwj+d7XUa2NC4HUadF8R51IYEcIB0PpIEzJlKtfXFcOZxO
|
31
31
|
-----END CERTIFICATE-----
|
32
|
-
date: 2013-
|
32
|
+
date: 2013-04-10 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: rake
|
@@ -115,12 +115,24 @@ files:
|
|
115
115
|
- README.md
|
116
116
|
- Rakefile
|
117
117
|
- features/active_model_compatibility.feature
|
118
|
+
- features/building_forms_from_hashes.feature
|
119
|
+
- features/building_forms_from_models.feature
|
120
|
+
- features/building_models_from_form.feature
|
121
|
+
- features/defining_a_form.feature
|
118
122
|
- features/step_definitions/active_model_steps.rb
|
123
|
+
- features/step_definitions/form_steps.rb
|
124
|
+
- features/step_definitions/hash_steps.rb
|
125
|
+
- features/step_definitions/model_steps.rb
|
119
126
|
- features/support/aruba.rb
|
127
|
+
- features/support/dsl.rb
|
120
128
|
- lib/pr.rb
|
121
129
|
- lib/pr/active_form.rb
|
130
|
+
- lib/pr/build_from_hash.rb
|
131
|
+
- lib/pr/build_from_model.rb
|
122
132
|
- lib/pr/build_model.rb
|
133
|
+
- lib/pr/define_and_register.rb
|
123
134
|
- lib/pr/define_field.rb
|
135
|
+
- lib/pr/field_registry.rb
|
124
136
|
- lib/pr/fields.rb
|
125
137
|
- lib/pr/fields/boolean_field.rb
|
126
138
|
- lib/pr/fields/date_field.rb
|
@@ -133,13 +145,18 @@ files:
|
|
133
145
|
- pr.gemspec
|
134
146
|
- spec/spec_helper.rb
|
135
147
|
- spec/unit/pr/active_form_spec.rb
|
148
|
+
- spec/unit/pr/build_from_hash_spec.rb
|
149
|
+
- spec/unit/pr/build_from_model_spec.rb
|
136
150
|
- spec/unit/pr/build_model_spec.rb
|
151
|
+
- spec/unit/pr/define_and_register_spec.rb
|
137
152
|
- spec/unit/pr/define_field_spec.rb
|
153
|
+
- spec/unit/pr/field_registry_spec.rb
|
138
154
|
- spec/unit/pr/fields/boolean_field_spec.rb
|
139
155
|
- spec/unit/pr/fields/date_field_spec.rb
|
140
156
|
- spec/unit/pr/fields/float_field_spec.rb
|
141
157
|
- spec/unit/pr/fields/generic_field_spec.rb
|
142
158
|
- spec/unit/pr/fields/string_field_spec.rb
|
159
|
+
- spec/unit/pr/fields_spec.rb
|
143
160
|
- spec/unit/pr/form_spec.rb
|
144
161
|
homepage: https://github.com/JonRowe/PR
|
145
162
|
licenses: []
|
@@ -166,15 +183,28 @@ specification_version: 4
|
|
166
183
|
summary: Public Relations tools for Rails
|
167
184
|
test_files:
|
168
185
|
- features/active_model_compatibility.feature
|
186
|
+
- features/building_forms_from_hashes.feature
|
187
|
+
- features/building_forms_from_models.feature
|
188
|
+
- features/building_models_from_form.feature
|
189
|
+
- features/defining_a_form.feature
|
169
190
|
- features/step_definitions/active_model_steps.rb
|
191
|
+
- features/step_definitions/form_steps.rb
|
192
|
+
- features/step_definitions/hash_steps.rb
|
193
|
+
- features/step_definitions/model_steps.rb
|
170
194
|
- features/support/aruba.rb
|
195
|
+
- features/support/dsl.rb
|
171
196
|
- spec/spec_helper.rb
|
172
197
|
- spec/unit/pr/active_form_spec.rb
|
198
|
+
- spec/unit/pr/build_from_hash_spec.rb
|
199
|
+
- spec/unit/pr/build_from_model_spec.rb
|
173
200
|
- spec/unit/pr/build_model_spec.rb
|
201
|
+
- spec/unit/pr/define_and_register_spec.rb
|
174
202
|
- spec/unit/pr/define_field_spec.rb
|
203
|
+
- spec/unit/pr/field_registry_spec.rb
|
175
204
|
- spec/unit/pr/fields/boolean_field_spec.rb
|
176
205
|
- spec/unit/pr/fields/date_field_spec.rb
|
177
206
|
- spec/unit/pr/fields/float_field_spec.rb
|
178
207
|
- spec/unit/pr/fields/generic_field_spec.rb
|
179
208
|
- spec/unit/pr/fields/string_field_spec.rb
|
209
|
+
- spec/unit/pr/fields_spec.rb
|
180
210
|
- spec/unit/pr/form_spec.rb
|
metadata.gz.sig
CHANGED
Binary file
|