pr 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 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