pr 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 679887e96c55e4c6b5c183d1557cd1880c6fb9e2
4
+ data.tar.gz: baea6db819b904d1a60d32e3db9459a96b6d2211
5
+ SHA512:
6
+ metadata.gz: deed03062a6e2b737c0c461cf0031f1b2eb849454038fc07b09eadbab8feac28f96d1e74c043e7d31d519bbcc0a090d0789aebcf5c5facf50140feae14241e89
7
+ data.tar.gz: 32df338de6e44e53fb6fdf5741c77dc8ff310c1a4ba81fc89047964c689e700afc64f2cdb78c7280b9303ac8c8ff63053427fc1734f27d9b9ae83c338fd0958d
checksums.yaml.gz.sig ADDED
Binary file
data.tar.gz.sig ADDED
Binary file
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ tmp/**
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format documentation
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.0.0
5
+ - 1.9.3
6
+ - 1.9.2
7
+
8
+ - rbx-19mode
9
+ - jruby-19mode
10
+ - ruby-head
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in PR.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,52 @@
1
+ [![Code Climate](https://codeclimate.com/github/JonRowe/pr.png)](https://codeclimate.com/github/JonRowe/pr)
2
+ [![Build Status](https://secure.travis-ci.org/JonRowe/pr.png)](http://travis-ci.org/JonRowe/pr)
3
+
4
+ PR :: PublicRelations
5
+ ======================
6
+
7
+ `PR` is a gem for handling user input with forms. The idea is to decouple
8
+ the logic of handling user input, the process of parsing what is
9
+ essentially raw string data into valid Ruby data, (via 'typecasting/parsing'
10
+ and validation), from the buisness logic and persistance of an application.
11
+
12
+ I am building it with the principle of seperating concerns and not mixing
13
+ things into the form objects as much as possible, I'd like the library to
14
+ be usuable without any mixins, but will also provide mixinable macros for
15
+ ease of usage.
16
+
17
+ ## Installation
18
+
19
+ Add this line to your application's Gemfile:
20
+
21
+ gem 'pr'
22
+
23
+ And then execute:
24
+
25
+ $ bundle
26
+
27
+ Or install it yourself as:
28
+
29
+ $ gem install mongo_adaptor
30
+
31
+ ## Usage
32
+
33
+ In general
34
+
35
+ require 'pr'
36
+
37
+ will require the form helper macros, field definitions and if `Rails` is
38
+ defined require the `ActiveForm` helper macro which allows the inclusion
39
+ of `ActiveModel` compliance into the forms you define.
40
+
41
+ You can also manually require the 3 main elements as you desire.
42
+
43
+ ## Caveats
44
+
45
+ Work in progress.
46
+
47
+ ## Contributing
48
+
49
+ 1. Fork it
50
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
51
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
52
+ 4. Push to the branch (`git push origin my-new-feature`)
data/Rakefile ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env rake
2
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
3
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4
+
5
+ $:.push File.expand_path("../lib", __FILE__)
6
+
7
+ begin
8
+ require 'bundler/gem_tasks'
9
+ rescue LoadError
10
+ warn "No Bundler, No Gem tasks"
11
+ end
12
+
13
+ begin
14
+ require 'rspec'
15
+ require 'rspec/core/rake_task'
16
+
17
+ desc "Run unit specs"
18
+ RSpec::Core::RakeTask.new :unit do |task|
19
+ task.pattern = 'spec/unit/**/*_spec.rb'
20
+ end
21
+
22
+ require 'cucumber'
23
+ require 'cucumber/rake/task'
24
+
25
+ desc "Run features"
26
+ Cucumber::Rake::Task.new(:features) do |t|
27
+ t.cucumber_opts = "features --format pretty"
28
+ end
29
+
30
+ rescue LoadError
31
+ %W[unit features].each do |task_name|
32
+ task task_name do
33
+ warn "Tests unavaiable without RSpec/Cucumber"
34
+ fail
35
+ end
36
+ end
37
+ end
38
+
39
+ task default: %w[unit features]
@@ -0,0 +1,20 @@
1
+ Feature: Active Model compatibility
2
+ In order to use forms with Rails
3
+ As a developer
4
+ I wish to use forms based on PR::Form that also comply with ActiveModel::Lint
5
+
6
+ @form @active-model
7
+ Scenario: Basic Active Model functionality
8
+ Given I have a form I wish to use with Rails
9
+ """Ruby
10
+ require 'pr'
11
+ class MyForm
12
+ include PR::ActiveForm
13
+ end
14
+ """
15
+ When I run the active model lint tests for
16
+ """Ruby
17
+ MyForm.new
18
+ """
19
+
20
+ Then it should pass
@@ -0,0 +1,27 @@
1
+ Given "I have a form I wish to use with Rails" do |file_content|
2
+ write_file 'my_form.rb', file_content
3
+ end
4
+
5
+ When "I run the active model lint tests for" do |instance|
6
+ write_file 'test_active_model_compliance.rb', <<-TEST
7
+ module Rails
8
+ end
9
+
10
+ require 'test/unit'
11
+ require '#{ File.expand_path "../../../" + dirs.join('/'), __FILE__ }/my_form'
12
+
13
+ class TestActiveModelCompliance < Test::Unit::TestCase
14
+ include ActiveModel::Lint::Tests
15
+
16
+ def model
17
+ #{ instance }
18
+ end
19
+
20
+ end
21
+ TEST
22
+ run_simple unescape 'ruby -Itest test_active_model_compliance.rb'
23
+ end
24
+
25
+ Then "it should pass" do
26
+ assert_partial_output '0 failures', all_output
27
+ end
@@ -0,0 +1,2 @@
1
+ require 'aruba/cucumber'
2
+ require 'aruba/jruby'
data/lib/pr.rb ADDED
@@ -0,0 +1,8 @@
1
+ require "pr/version"
2
+
3
+ module PR
4
+ end
5
+
6
+ require 'pr/fields'
7
+ require 'pr/form'
8
+ require 'pr/active_form' if defined?(Rails)
@@ -0,0 +1,42 @@
1
+ require 'active_model'
2
+ require 'pr/form'
3
+
4
+ module PR
5
+ module ActiveForm
6
+
7
+ def self.included other
8
+ other.send :include, Form
9
+ other.send :include, ActiveModel::Validations
10
+ other.send :attr_accessor, :id
11
+ other.extend Compatibility
12
+ end
13
+
14
+ module Compatibility
15
+ def model_name
16
+ ActiveModel::Name.new self
17
+ end
18
+ end
19
+
20
+ def to_partial_path
21
+ name = self.class.model_name.downcase
22
+ [name.pluralize,name].join '/'
23
+ end
24
+
25
+ def to_model
26
+ self
27
+ end
28
+
29
+ def persisted?
30
+ !(id.nil?)
31
+ end
32
+
33
+ def to_key
34
+ [:id] if persisted?
35
+ end
36
+
37
+ def to_param
38
+ id.to_s if persisted?
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,24 @@
1
+ class BuildModel
2
+ def self.[] form, model
3
+ new(PR::FieldRegistry).for form, model
4
+ end
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)
13
+ end
14
+ end
15
+
16
+ private
17
+ def set thing, name, value
18
+ thing.send "#{name}=", value
19
+ end
20
+ def value thing, name
21
+ thing.send("__#{name}").convert
22
+ end
23
+
24
+ end
@@ -0,0 +1,26 @@
1
+ class DefineField
2
+
3
+ def on klass, field_name, field
4
+ var_name = "@field_#{field_name}"
5
+ field_setter = "#{field_name}="
6
+ actual_field = "__#{field_name}"
7
+
8
+ klass.class_eval do
9
+ define_method(actual_field) do
10
+ instance_variable_get(var_name) || send(field_setter,nil)
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
19
+ end
20
+
21
+ private
22
+ def var name
23
+ "@field_#{name}"
24
+ end
25
+
26
+ end
data/lib/pr/fields.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'pr/fields/invalid_value'
2
+ require 'pr/fields/generic_field'
3
+ require 'pr/fields/string_field'
4
+ require 'pr/fields/boolean_field'
5
+ require 'pr/fields/date_field'
6
+ require 'pr/fields/float_field'
@@ -0,0 +1,31 @@
1
+ module PR
2
+ module Fields
3
+ class BooleanField
4
+ TrueValues = [1,"1","true",true]
5
+ FalseValues = [0,"0","false",false, ""]
6
+
7
+ def initialize value = nil
8
+ @value = value
9
+ end
10
+
11
+ def populate value
12
+ @value = value
13
+ end
14
+
15
+ def raw
16
+ convert
17
+ end
18
+
19
+ def convert
20
+ if TrueValues.include? @value
21
+ return true
22
+ elsif FalseValues.include? @value
23
+ return false
24
+ else
25
+ @value ? true : false
26
+ end
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,27 @@
1
+ require 'date'
2
+ module PR
3
+ module Fields
4
+ class DateField
5
+ Format = '%d/%m/%Y'
6
+
7
+ def initialize value = ''
8
+ @value = value
9
+ end
10
+
11
+ def raw
12
+ @value
13
+ end
14
+
15
+ def populate date
16
+ @value = date.strftime Format
17
+ end
18
+
19
+ def convert
20
+ Date.strptime(@value,Format)
21
+ rescue ArgumentError
22
+ raise InvalidValue
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,25 @@
1
+ module PR
2
+ module Fields
3
+ class FloatField
4
+
5
+ def initialize value = ''
6
+ @value = value
7
+ end
8
+
9
+ def raw
10
+ @value
11
+ end
12
+
13
+ def populate float
14
+ @value = float.to_s
15
+ end
16
+
17
+ def convert
18
+ Float @value
19
+ rescue ArgumentError
20
+ raise InvalidValue
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ module PR
2
+ module Fields
3
+ class GenericField
4
+
5
+ def initialize value = nil
6
+ @value = value
7
+ end
8
+
9
+ def raw
10
+ @value
11
+ end
12
+
13
+ def populate value
14
+ @value = value
15
+ end
16
+
17
+ def convert
18
+ @value
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,6 @@
1
+ module PR
2
+ module Fields
3
+ class InvalidValue < StandardError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,23 @@
1
+ module PR
2
+ module Fields
3
+ class StringField
4
+
5
+ def initialize value = ''
6
+ @value = value
7
+ end
8
+
9
+ def raw
10
+ @value
11
+ end
12
+
13
+ def populate value
14
+ @value = value
15
+ end
16
+
17
+ def convert
18
+ @value.to_s
19
+ end
20
+
21
+ end
22
+ end
23
+ end
data/lib/pr/form.rb ADDED
@@ -0,0 +1,15 @@
1
+ module PR
2
+ module Form
3
+
4
+ def self.included other
5
+ other.send :extend, DSL
6
+ end
7
+
8
+ module DSL
9
+ def field name, options = {}
10
+ DefineAndRegister[ self, name, options ]
11
+ end
12
+ end
13
+
14
+ end
15
+ end
data/lib/pr/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module PR
2
+ VERSION = "0.0.1"
3
+ end
data/pr.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "pr/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "pr"
7
+ s.version = PR::VERSION
8
+ s.authors = ["Jon Rowe"]
9
+ s.email = ["hello@jonrowe.co.uk"]
10
+ s.homepage = "https://github.com/JonRowe/PR"
11
+ s.summary = %q{Public Relations tools for Rails}
12
+ s.description = %q{Form and Presenter libraries for interfacing the public with Rails}
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+
19
+ s.add_development_dependency 'rake'
20
+ s.add_development_dependency 'rspec'
21
+ s.add_development_dependency 'cucumber'
22
+ s.add_development_dependency 'aruba'
23
+ s.add_development_dependency 'activemodel'
24
+
25
+ end
@@ -0,0 +1,4 @@
1
+ require 'bundler/setup'
2
+ require 'pr'
3
+
4
+ Dir[File.join(File.dirname(__FILE__),"support/**/*.rb")].each { |f| require f }
@@ -0,0 +1,74 @@
1
+ require 'pr/active_form'
2
+
3
+ describe 'the PR Form' do
4
+ class TestForm
5
+ include PR::ActiveForm
6
+ end
7
+ let(:form_klass) { TestForm }
8
+
9
+ describe 'when included extends the other with its DSL' do
10
+
11
+ it 'sets up field to define fields' do
12
+ stub_const 'DefineAndRegister', double
13
+ DefineAndRegister.should_receive(:[]).with form_klass, :name, my: :options
14
+ form_klass.field :name, my: :options
15
+ end
16
+
17
+ it 'sets up an id' do
18
+ form = form_klass.new
19
+ form.id = :my_id
20
+ expect(form.id).to eq :my_id
21
+ end
22
+
23
+ describe 'and makes the form ActiveModel compliant' do
24
+ let(:form) { form_klass.new }
25
+ subject { form }
26
+
27
+ it { should respond_to :id }
28
+ it { should respond_to :valid? }
29
+ it { should respond_to :errors }
30
+
31
+ it 'has a model name' do
32
+ expect(form_klass.model_name).to eq "TestForm"
33
+ expect(form_klass.model_name).to be_a ActiveModel::Name
34
+ end
35
+
36
+ its(:to_model) { should eq form }
37
+ its(:to_partial_path) { should eq 'testforms/testform' }
38
+
39
+ describe 'when not persisted' do
40
+
41
+ its(:persisted?) { should be_false }
42
+ its(:to_key) { should be_nil }
43
+ its(:to_param) { should be_nil }
44
+ end
45
+
46
+ describe 'when persisted' do
47
+ before do
48
+ form.id = 100
49
+ end
50
+
51
+ its(:persisted?) { should be_true }
52
+ its(:to_key) { should eq [:id] }
53
+ its(:to_param) { should == "100" }
54
+ end
55
+ end
56
+
57
+ describe 'and responds to ActiveModel errors' do
58
+ let(:errors) { double }
59
+ let(:form) { form_klass.new }
60
+ before { ActiveModel::Errors.stub(:new).and_return(errors) }
61
+
62
+ subject { form.errors }
63
+
64
+ it 'creates active model errors with itself' do
65
+ ActiveModel::Errors.should_receive(:new).with form
66
+ form.errors
67
+ end
68
+ it 'returns the errors object' do
69
+ expect(form.errors).to eq errors
70
+ end
71
+ end
72
+
73
+ end
74
+ end
@@ -0,0 +1,31 @@
1
+ require 'pr/build_model'
2
+
3
+ describe 'building a model from a form' do
4
+ let(:model) { Struct.new(:a,:b).new }
5
+ let(:registry) { double }
6
+
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
+
11
+ let(:builder) { BuildModel.new registry }
12
+
13
+ before do
14
+ registry.stub(:fields_for).and_yield(:a).and_yield(:b)
15
+ end
16
+
17
+ it 'fetches fields from the registry' do
18
+ registry.should_receive(:fields_for).with(form)
19
+ builder.for form, model
20
+ end
21
+ it 'converts fields to values' do
22
+ field_a.should_receive(:convert)
23
+ field_b.should_receive(:convert)
24
+ builder.for form, model
25
+ end
26
+ it 'iterated over the fields and sets values' do
27
+ builder.for form, model
28
+ expect(model.a).to eq "a_value"
29
+ expect(model.b).to eq "b_value"
30
+ end
31
+ end
@@ -0,0 +1,24 @@
1
+ require 'pr/fields/generic_field'
2
+ require 'pr/define_field'
3
+
4
+ describe 'defining a field on a form' do
5
+ let(:field) { PR::Fields::GenericField }
6
+ let(:form_klass) { Class.new }
7
+ let(:form) { form_klass.new }
8
+ let(:new_raw_value) { double "new raw field value" }
9
+ let(:define_field) { DefineField.new }
10
+
11
+ it 'defines a reader to return the raw value of the field' do
12
+ define_field.on form_klass, :name, field
13
+ expect(form.name).to eq field.new.raw
14
+ end
15
+ it 'defines a writer which will set the field value' do
16
+ define_field.on form_klass, :name, field
17
+ form.name = new_raw_value
18
+ expect(form.name).to eq new_raw_value
19
+ end
20
+ it 'defines a reader to return the actual field' do
21
+ define_field.on form_klass, :name, field
22
+ expect(form.__name).to be_a field
23
+ end
24
+ end
@@ -0,0 +1,49 @@
1
+ require 'pr/fields/boolean_field'
2
+
3
+ describe 'a boolean field' do
4
+ let(:klass) { PR::Fields::BooleanField }
5
+ let(:value) { double "value" }
6
+ let(:field) { klass.new value }
7
+
8
+ describe "default value" do
9
+ subject { klass.new }
10
+
11
+ its(:raw) { should equal(false) }
12
+ its(:convert) { should equal(false) }
13
+ end
14
+
15
+ describe :raw do
16
+ let(:converted_value) { double "converted_value" }
17
+
18
+ it "should return the converted value" do
19
+ field.should_receive(:convert).and_return(converted_value)
20
+ field.raw.should == converted_value
21
+ end
22
+ end
23
+
24
+ describe "#populate" do
25
+ specify { field.populate(true); expect(field.raw).to equal true }
26
+ specify { field.populate(false); expect(field.raw).to equal false }
27
+ end
28
+
29
+ describe :convert do
30
+ let(:comparison_result) { double "true" }
31
+
32
+ context "true values" do
33
+ specify { expect( klass.new("1").convert ).to equal true }
34
+ specify { expect( klass.new(1).convert ).to equal true }
35
+ specify { expect( klass.new("true").convert ).to equal true }
36
+ specify { expect( klass.new(true).convert ).to equal true }
37
+ specify { expect( klass.new("something that will evaluate to true").convert ).to equal true }
38
+ end
39
+
40
+ context "false values" do
41
+ specify { expect( klass.new("0").convert ).to equal false }
42
+ specify { expect( klass.new(0).convert ).to equal false }
43
+ specify { expect( klass.new("false").convert ).to equal false }
44
+ specify { expect( klass.new(false).convert ).to equal false }
45
+ specify { expect( klass.new(nil).convert ).to equal false }
46
+ specify { expect( klass.new("").convert ).to equal false }
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,44 @@
1
+ require 'pr/fields/invalid_value'
2
+ require 'pr/fields/date_field'
3
+
4
+ describe 'a date field' do
5
+ let(:klass) { PR::Fields::DateField }
6
+ let(:value) { double "value" }
7
+ let(:field) { klass.new value }
8
+
9
+ describe "default value" do
10
+ subject { klass.new }
11
+
12
+ its(:raw) { should == '' }
13
+ specify { expect { subject.convert }.to raise_error PR::Fields::InvalidValue }
14
+ end
15
+
16
+ describe "raw" do
17
+ it "returns the value the field was initialized with" do
18
+ field.raw.should == value
19
+ end
20
+ end
21
+
22
+ describe "#populate" do
23
+ let(:value) { Date.civil 2011, 6, 1 }
24
+
25
+ subject { field.populate value }
26
+ specify { subject; field.raw.should == '01/06/2011' }
27
+ end
28
+
29
+ describe "convert" do
30
+
31
+ it "should attempt to parse the value as a uk formatted date" do
32
+ Date.should_receive(:strptime).with(value,'%d/%m/%Y')
33
+ field.convert
34
+ end
35
+
36
+ context "where value is not a valid date" do
37
+ it "should raise an InvalidFieldValueError" do
38
+ Date.should_receive(:strptime).and_raise(ArgumentError)
39
+ expect { field.convert }.to raise_error PR::Fields::InvalidValue
40
+ end
41
+ end
42
+ end
43
+
44
+ end
@@ -0,0 +1,45 @@
1
+ require 'pr/fields/invalid_value'
2
+ require 'pr/fields/float_field'
3
+
4
+ describe 'a float field' do
5
+ let(:klass) { PR::Fields::FloatField }
6
+ let(:value) { double "value" }
7
+ let(:field) { klass.new value }
8
+
9
+ describe "default value" do
10
+ subject { klass.new }
11
+ its(:raw) { should == '' }
12
+ end
13
+
14
+ describe "#raw" do
15
+ it 'returns the raw value' do
16
+ expect(field.raw).to eq value
17
+ end
18
+ end
19
+
20
+ describe "#populate" do
21
+ let(:value) { 3.141 }
22
+ let(:field) { klass.new }
23
+
24
+ subject { field.populate value }
25
+
26
+ specify { subject; field.raw.should == "3.141" }
27
+ end
28
+
29
+ describe "#convert" do
30
+
31
+ context "where passed a stringified float value" do
32
+ let(:value) { "3.4" }
33
+
34
+ it "should return the float intepretation" do
35
+ field.convert.should == 3.4
36
+ end
37
+ end
38
+
39
+ context "where passed a string not containing a float value" do
40
+ let(:value) { "One Point Oh" }
41
+
42
+ specify { expect { field.convert }.to raise_error PR::Fields::InvalidValue }
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,31 @@
1
+ require 'pr/fields/generic_field'
2
+
3
+ describe 'a generic field' do
4
+ let(:klass) { PR::Fields::GenericField }
5
+ let(:value) { double "value" }
6
+ let(:field) { klass.new value }
7
+
8
+ describe "default value" do
9
+ subject { klass.new }
10
+
11
+ its(:raw) { should == nil }
12
+ its(:convert) { should == nil }
13
+ end
14
+
15
+ describe :raw do
16
+ it "should return the value the field was initialized with" do
17
+ field.raw.should == value
18
+ end
19
+ end
20
+
21
+ describe "#populate" do
22
+ subject { field.populate value }
23
+ specify { field.raw.should == value }
24
+ end
25
+
26
+ describe :convert do
27
+ it "should return the raw value" do
28
+ field.convert.should == value
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,32 @@
1
+ require 'pr/fields/string_field'
2
+
3
+ describe 'a string field' do
4
+ let(:klass) { PR::Fields::StringField }
5
+ let(:value) { double "value" }
6
+ let(:field) { klass.new value }
7
+
8
+ describe "default value" do
9
+ subject { klass.new }
10
+
11
+ its(:raw) { should == '' }
12
+ its(:convert) { should == '' }
13
+ end
14
+
15
+ describe "#populate" do
16
+ subject { field.populate value }
17
+ specify { field.raw.should == value }
18
+ end
19
+
20
+ describe :raw do
21
+ it "should return the value the field was initialized with" do
22
+ field.raw.should == value
23
+ end
24
+ end
25
+
26
+ describe :convert do
27
+ it "should return the string version of value" do
28
+ value.should_receive(:to_s).and_return "string value"
29
+ field.convert.should == "string value"
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,17 @@
1
+ require 'pr/form'
2
+
3
+ describe 'the PR Form' do
4
+ let(:form_klass) do
5
+ Class.new do
6
+ include PR::Form
7
+ end
8
+ end
9
+
10
+ describe 'when included extends the other with its DSL' do
11
+ it 'sets up field to define fields' do
12
+ stub_const 'DefineAndRegister', double
13
+ DefineAndRegister.should_receive(:[]).with form_klass, :name, my: :options
14
+ form_klass.field :name, my: :options
15
+ end
16
+ end
17
+ end
metadata ADDED
@@ -0,0 +1,180 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jon Rowe
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDVjCCAj6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBRMQ4wDAYDVQQDDAVoZWxs
14
+ bzEXMBUGCgmSJomT8ixkARkWB2pvbnJvd2UxEjAQBgoJkiaJk/IsZAEZFgJjbzES
15
+ MBAGCgmSJomT8ixkARkWAnVrMB4XDTEzMDIwMzA4MTgwNloXDTE0MDIwMzA4MTgw
16
+ NlowUTEOMAwGA1UEAwwFaGVsbG8xFzAVBgoJkiaJk/IsZAEZFgdqb25yb3dlMRIw
17
+ EAYKCZImiZPyLGQBGRYCY28xEjAQBgoJkiaJk/IsZAEZFgJ1azCCASIwDQYJKoZI
18
+ hvcNAQEBBQADggEPADCCAQoCggEBAMhs6ng/SRrYfG7RtQx8liJTZs8tpz7PBnlH
19
+ qyOwuU0weJc7nh6C9C8LGyJzpkbjJJo1rfTMg7huDyL14Py82dfMDomApif8jNNI
20
+ 8KtviAgB1DrWq0fCDLtu/M77+yuVV3OhDdrAFaBkT/euvdJ8cAKrLxbJ+klgvrcB
21
+ FK+c4PUV3/zBKghe0l7FuDhyQCsuLNDbWyFvDS97tPjeN6yWuszwg22vZMDdsuzN
22
+ Cj3M4LLSkbrt+AOUcysEJxI4t6uv2U1bRzHsDfAF0RI/Q7OMtUr+Dtz/2YJ47KKs
23
+ 51ZRjLLGHd10XrIfFSfGyJj1dMbDgLsEBj1sFH4e6dy7gau8TaUCAwEAAaM5MDcw
24
+ CQYDVR0TBAIwADAdBgNVHQ4EFgQULu5JH2g7RAjoXaZt+fbrfNDI9IkwCwYDVR0P
25
+ BAQDAgSwMA0GCSqGSIb3DQEBBQUAA4IBAQAf5A4kB769DPKGjPZ++v42FwVi7X7v
26
+ RpufPs6R4YHyzHXaJmAqnhleZhVJijBgsdb2SigNRbg+IK8XYHg7jkonMgO8OS3D
27
+ C6w8VB5bI0PqyDOwCGcQkYHYlZZWCghAyBTSBowHAekMb9V3QjJtJ8XkizjshETO
28
+ ZCVI2AObjlJi8I10aK2tSo9sv2riCKZ92BVSM13zYWn+C/eCP/m9BDiw37UQtuQq
29
+ 2feWfO4gCNmvfFjULOAYHq9JHEjN5SLSXvj5HdSnDcCyIfJKn5Ya3JahWQaWIsXf
30
+ /NPE/mB57TOwj+d7XUa2NC4HUadF8R51IYEcIB0PpIEzJlKtfXFcOZxO
31
+ -----END CERTIFICATE-----
32
+ date: 2013-03-31 00:00:00.000000000 Z
33
+ dependencies:
34
+ - !ruby/object:Gem::Dependency
35
+ name: rake
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ type: :development
42
+ prerelease: false
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ - !ruby/object:Gem::Dependency
49
+ name: rspec
50
+ requirement: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: cucumber
64
+ requirement: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ type: :development
70
+ prerelease: false
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ - !ruby/object:Gem::Dependency
77
+ name: aruba
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ - !ruby/object:Gem::Dependency
91
+ name: activemodel
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ description: Form and Presenter libraries for interfacing the public with Rails
105
+ email:
106
+ - hello@jonrowe.co.uk
107
+ executables: []
108
+ extensions: []
109
+ extra_rdoc_files: []
110
+ files:
111
+ - .gitignore
112
+ - .rspec
113
+ - .travis.yml
114
+ - Gemfile
115
+ - README.md
116
+ - Rakefile
117
+ - features/active_model_compatibility.feature
118
+ - features/step_definitions/active_model_steps.rb
119
+ - features/support/aruba.rb
120
+ - lib/pr.rb
121
+ - lib/pr/active_form.rb
122
+ - lib/pr/build_model.rb
123
+ - lib/pr/define_field.rb
124
+ - lib/pr/fields.rb
125
+ - lib/pr/fields/boolean_field.rb
126
+ - lib/pr/fields/date_field.rb
127
+ - lib/pr/fields/float_field.rb
128
+ - lib/pr/fields/generic_field.rb
129
+ - lib/pr/fields/invalid_value.rb
130
+ - lib/pr/fields/string_field.rb
131
+ - lib/pr/form.rb
132
+ - lib/pr/version.rb
133
+ - pr.gemspec
134
+ - spec/spec_helper.rb
135
+ - spec/unit/pr/active_form_spec.rb
136
+ - spec/unit/pr/build_model_spec.rb
137
+ - spec/unit/pr/define_field_spec.rb
138
+ - spec/unit/pr/fields/boolean_field_spec.rb
139
+ - spec/unit/pr/fields/date_field_spec.rb
140
+ - spec/unit/pr/fields/float_field_spec.rb
141
+ - spec/unit/pr/fields/generic_field_spec.rb
142
+ - spec/unit/pr/fields/string_field_spec.rb
143
+ - spec/unit/pr/form_spec.rb
144
+ homepage: https://github.com/JonRowe/PR
145
+ licenses: []
146
+ metadata: {}
147
+ post_install_message:
148
+ rdoc_options: []
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - '>='
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - '>='
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ requirements: []
162
+ rubyforge_project:
163
+ rubygems_version: 2.0.3
164
+ signing_key:
165
+ specification_version: 4
166
+ summary: Public Relations tools for Rails
167
+ test_files:
168
+ - features/active_model_compatibility.feature
169
+ - features/step_definitions/active_model_steps.rb
170
+ - features/support/aruba.rb
171
+ - spec/spec_helper.rb
172
+ - spec/unit/pr/active_form_spec.rb
173
+ - spec/unit/pr/build_model_spec.rb
174
+ - spec/unit/pr/define_field_spec.rb
175
+ - spec/unit/pr/fields/boolean_field_spec.rb
176
+ - spec/unit/pr/fields/date_field_spec.rb
177
+ - spec/unit/pr/fields/float_field_spec.rb
178
+ - spec/unit/pr/fields/generic_field_spec.rb
179
+ - spec/unit/pr/fields/string_field_spec.rb
180
+ - spec/unit/pr/form_spec.rb
metadata.gz.sig ADDED
Binary file