formup 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.rspec +2 -0
- data/.travis.yml +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +77 -0
- data/Rakefile +12 -0
- data/formup.gemspec +26 -0
- data/gemfiles/activemodel_3_2_x.gemfile +5 -0
- data/gemfiles/activemodel_4_0_x.gemfile +5 -0
- data/lib/formup.rb +127 -0
- data/lib/formup/attr_def.rb +11 -0
- data/lib/formup/source.rb +36 -0
- data/lib/formup/version.rb +4 -0
- data/spec/formup/attr_def_spec.rb +24 -0
- data/spec/formup/source_spec.rb +146 -0
- data/spec/formup_boolean_cast_spec.rb +144 -0
- data/spec/formup_included_spec.rb +69 -0
- data/spec/formup_initialize_spec.rb +36 -0
- data/spec/formup_load_spec.rb +82 -0
- data/spec/formup_params_for_spec.rb +114 -0
- data/spec/formup_source_called_spec.rb +78 -0
- data/spec/formup_validation_spec.rb +36 -0
- data/spec/spec_helper.rb +6 -0
- metadata +134 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7ebc0d5bea3cc821ffd21007e02a4c5a803daa00
|
4
|
+
data.tar.gz: 074890af86518f3930639a62cd4100d6b6a064ea
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 58b6d583641ac427fae6dbcf8e379670708712eea9cd8a01b82f7117146ea70b290f1333c8078609d45625ac141d52ca2f18a918cff347b7b1ecf522d700379d
|
7
|
+
data.tar.gz: 7d62563a81aa83bfed8c48af7501a6c355e1d863804cf7031769f50dc64d22ab96bc82d36fc9822931c288682fc1951e5fea490a32d3f4661a6706667b2b1ec5
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 pinzolo
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
# Formup
|
2
|
+
|
3
|
+
[![Build Status](https://secure.travis-ci.org/pinzolo/formup.png)](http://travis-ci.org/pinzolo/formup)
|
4
|
+
|
5
|
+
Formup is rubygem for creating data model based form class.
|
6
|
+
Formup use activemodel gem.(>= 3.2.0)
|
7
|
+
You can get the benefits of ActiveModel. ex) validations, application to `form_for` etc.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
gem 'formup'
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install formup
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
### Include Formup to your class.
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
class SalesForm
|
29
|
+
include Formup
|
30
|
+
|
31
|
+
# define attributes (sales_id, sales_price, sales_tax)
|
32
|
+
source :sales, :attributes => [:id, :price, :tax]
|
33
|
+
# define attributes (customer_id, customer_name, contact)
|
34
|
+
source :customer, :attributes => [:id, :name], :aliases => { :email => :contact }
|
35
|
+
|
36
|
+
attr_accessor :items
|
37
|
+
|
38
|
+
# Handle hash parameters that were not processed in initialize method.
|
39
|
+
def handle_extra_params(params)
|
40
|
+
self.items = {}
|
41
|
+
params.each do |k, v|
|
42
|
+
self.items[v] = params[k.to_s.gsub(/^code/, "count")] if k.to_s.match(/^code/)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
```
|
47
|
+
|
48
|
+
### Initialize with hash parameters.(like ActiveRecord)
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
# params => { :sales_id => 1, :sales_price => 1000, ... }
|
52
|
+
form = SalesForm.new(params)
|
53
|
+
```
|
54
|
+
|
55
|
+
### Load from hash and data model that have some accessor methods.
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
form = SalesForm.new
|
59
|
+
sales = Sales.find(1)
|
60
|
+
form.load(:sales => sales, :customer => { :id => 1, :name => "John Doe", :email => "john@example.com"})
|
61
|
+
```
|
62
|
+
|
63
|
+
### Get parameters for data model by `params_for` method.
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
form = SalesForm.new(params)
|
67
|
+
sales = Sales.new(form.params_for(:sales))
|
68
|
+
sales.save
|
69
|
+
```
|
70
|
+
|
71
|
+
## Contributing
|
72
|
+
|
73
|
+
1. Fork it
|
74
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
75
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
76
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
77
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
|
4
|
+
task :default => [:spec]
|
5
|
+
begin
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
8
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
9
|
+
spec.rspec_opts = ['-cfs']
|
10
|
+
end
|
11
|
+
rescue LoadError => e
|
12
|
+
end
|
data/formup.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'formup/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "formup"
|
8
|
+
spec.version = Formup::VERSION
|
9
|
+
spec.authors = ["pinzlo"]
|
10
|
+
spec.email = ["pinzolo@gmail.com"]
|
11
|
+
spec.description = %q{formup is rubygem for creating data model based form class}
|
12
|
+
spec.summary = %q{Create data model based form class}
|
13
|
+
spec.homepage = "https://github.com/pinzolo/formup"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_runtime_dependency "activemodel", ">=3.2.0"
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
24
|
+
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency "rspec"
|
26
|
+
end
|
data/lib/formup.rb
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "formup/version"
|
3
|
+
require "formup/source"
|
4
|
+
require "active_support/concern"
|
5
|
+
require "active_model"
|
6
|
+
|
7
|
+
module Formup
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
TRUE_VALUES = [1, true, "1", "true", "t"]
|
11
|
+
|
12
|
+
included do
|
13
|
+
include ActiveModel::Conversion
|
14
|
+
include ActiveModel::Validations
|
15
|
+
extend ActiveModel::Naming
|
16
|
+
extend ActiveModel::Translation
|
17
|
+
end
|
18
|
+
|
19
|
+
# Class methods {{{
|
20
|
+
module ClassMethods
|
21
|
+
def sources
|
22
|
+
initialize_sources
|
23
|
+
@sources.dup
|
24
|
+
end
|
25
|
+
|
26
|
+
def source(key, options={})
|
27
|
+
initialize_sources
|
28
|
+
attribute_defs = create_attribute_defs(key, options[:attributes], options[:aliases])
|
29
|
+
@sources[key] = Formup::Source.new(key, attribute_defs)
|
30
|
+
deploy_attributes(attribute_defs)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
def create_attribute_defs(key, attributes, aliases)
|
35
|
+
attribute_defs = {}.with_indifferent_access
|
36
|
+
|
37
|
+
if attributes
|
38
|
+
attributes.each do |attr|
|
39
|
+
attribute_defs[attr.to_s] = "#{key}_#{attr}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
if aliases
|
43
|
+
aliases.each do |k, v|
|
44
|
+
attribute_defs[k.to_s] = v.to_s
|
45
|
+
end
|
46
|
+
end
|
47
|
+
attribute_defs
|
48
|
+
end
|
49
|
+
|
50
|
+
def deploy_attributes(defs)
|
51
|
+
defs.values.each do |attr|
|
52
|
+
attr_accessor attr
|
53
|
+
|
54
|
+
define_method "#{attr}?" do
|
55
|
+
Formup::TRUE_VALUES.include?(self.__send__(attr))
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def initialize_sources
|
61
|
+
@sources ||= {}.with_indifferent_access
|
62
|
+
end
|
63
|
+
end
|
64
|
+
# }}}
|
65
|
+
|
66
|
+
# Instance methods {{{
|
67
|
+
def initialize(params = {})
|
68
|
+
return unless params
|
69
|
+
|
70
|
+
parameters = params.dup.with_indifferent_access
|
71
|
+
self.class.sources.each do |_, src|
|
72
|
+
src.attribute_defs.each do |attr_def|
|
73
|
+
__send__(attr_def.attr.to_s + "=", parameters.delete(attr_def.attr)) if parameters.key?(attr_def.attr)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
handle_extra_params(parameters) unless parameters.empty?
|
77
|
+
end
|
78
|
+
|
79
|
+
def handle_extra_params(parameters)
|
80
|
+
end
|
81
|
+
|
82
|
+
def persisted?
|
83
|
+
false
|
84
|
+
end
|
85
|
+
|
86
|
+
def params_for(key,*excludes_attrs)
|
87
|
+
if excludes_attrs && excludes_attrs.first == false
|
88
|
+
excludes = []
|
89
|
+
else
|
90
|
+
excludes = [excludes_attrs].flatten.compact
|
91
|
+
excludes << :id if excludes.empty?
|
92
|
+
end
|
93
|
+
|
94
|
+
parameters = {}.with_indifferent_access
|
95
|
+
return parameters unless self.class.sources.key?(key)
|
96
|
+
|
97
|
+
source = self.class.sources[key]
|
98
|
+
source.attribute_defs.inject(parameters) do |result, attr_def|
|
99
|
+
result[attr_def.base] = __send__(attr_def.attr) if excludes.all? { |attr| attr.to_s != attr_def.base }
|
100
|
+
result
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def load(params = {})
|
105
|
+
params.each do |k, v|
|
106
|
+
if self.class.sources.key?(k)
|
107
|
+
source = self.class.sources[k]
|
108
|
+
source.attribute_defs.each do |attr_def|
|
109
|
+
value = extract_value(v, attr_def.base)
|
110
|
+
__send__(attr_def.attr + "=", value) if value
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
private
|
117
|
+
def extract_value(obj, attr)
|
118
|
+
if obj.respond_to?(attr)
|
119
|
+
obj.__send__(attr)
|
120
|
+
elsif obj.respond_to?(:[])
|
121
|
+
obj[attr.to_s] || obj[attr.to_sym]
|
122
|
+
else
|
123
|
+
nil
|
124
|
+
end
|
125
|
+
end
|
126
|
+
# }}}
|
127
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "active_support/core_ext/hash/indifferent_access"
|
3
|
+
require "formup/attr_def"
|
4
|
+
|
5
|
+
module Formup
|
6
|
+
class Source
|
7
|
+
|
8
|
+
attr_accessor :key, :attribute_defs
|
9
|
+
|
10
|
+
def initialize(key, attribute_defs = {}, excludes = nil)
|
11
|
+
raise "Formup::Source require key param." if key.nil?
|
12
|
+
|
13
|
+
@key = key.to_s
|
14
|
+
@attribute_defs = attribute_defs.map { |k, v| Formup::AttrDef.new(k, v) } if attribute_defs
|
15
|
+
@attribute_defs ||= []
|
16
|
+
end
|
17
|
+
|
18
|
+
def base?(base)
|
19
|
+
@attribute_defs.any? { |attr_def| attr_def.base == base.to_s }
|
20
|
+
end
|
21
|
+
|
22
|
+
def base(attr)
|
23
|
+
attr_def = @attribute_defs.detect { |attr_def| attr_def.attr == attr.to_s }
|
24
|
+
attr_def ? attr_def.base : nil
|
25
|
+
end
|
26
|
+
|
27
|
+
def attr?(attr)
|
28
|
+
@attribute_defs.any? { |attr_def| attr_def.attr == attr.to_s }
|
29
|
+
end
|
30
|
+
|
31
|
+
def attr(base)
|
32
|
+
attr_def = @attribute_defs.detect { |attr_def| attr_def.base == base.to_s }
|
33
|
+
attr_def ? attr_def.attr : nil
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "formup/attr_def"
|
3
|
+
|
4
|
+
describe Formup::AttrDef do
|
5
|
+
describe "#initailize" do
|
6
|
+
context "given not string arguments" do
|
7
|
+
before do
|
8
|
+
@attr_def = Formup::AttrDef.new(:id, 1)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#base" do
|
12
|
+
it "returns string value" do
|
13
|
+
expect(@attr_def.base).to eq "id"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#attr" do
|
18
|
+
it "returns string value" do
|
19
|
+
expect(@attr_def.attr).to eq "1"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
require "formup/source"
|
4
|
+
require "active_support/hash_with_indifferent_access"
|
5
|
+
|
6
|
+
describe Formup::Source do
|
7
|
+
describe "#initialize" do
|
8
|
+
context "with key only" do
|
9
|
+
before do
|
10
|
+
@src = Formup::Source.new(:user)
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#attribute_defs" do
|
14
|
+
it "returns empty Hash" do
|
15
|
+
expect(@src.attribute_defs).not_to be_nil
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "with string key" do
|
21
|
+
before do
|
22
|
+
@src = Formup::Source.new("user")
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#key" do
|
26
|
+
it "returns string keye" do
|
27
|
+
expect(@src.key).to eq "user"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "with symbol key" do
|
33
|
+
before do
|
34
|
+
@src = Formup::Source.new(:user)
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#key" do
|
38
|
+
it "returns string keye" do
|
39
|
+
expect(@src.key).to eq "user"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "with nil as key" do
|
45
|
+
it "raise error" do
|
46
|
+
expect { Formup::Source.new(nil) }.to raise_error
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "with attribute_defs" do
|
51
|
+
before do
|
52
|
+
@src = Formup::Source.new(:user, {:name => :nickname, :email => :user_email})
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "#attribute_defs" do
|
56
|
+
it "returns Array" do
|
57
|
+
expect(@src.attribute_defs).to be_a_instance_of(Array)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "returns Formup::AttrDef array" do
|
61
|
+
expect(@src.attribute_defs.all? { |attr_def| attr_def.is_a?(Formup::AttrDef) }).to eq true
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "#base?" do
|
66
|
+
it "has name as base" do
|
67
|
+
expect(@src.base?("name")).to eq true
|
68
|
+
end
|
69
|
+
|
70
|
+
it "has email as base" do
|
71
|
+
expect(@src.base?("email")).to eq true
|
72
|
+
end
|
73
|
+
|
74
|
+
it "can accept symbol argument" do
|
75
|
+
expect(@src.base?(:name)).to eq true
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "#base" do
|
80
|
+
context "argument is nickname" do
|
81
|
+
it "returns name" do
|
82
|
+
expect(@src.base("nickname")).to eq "name"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context "argument is user_email" do
|
87
|
+
it "returns email" do
|
88
|
+
expect(@src.base("user_email")).to eq "email"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "argument is user_age" do
|
93
|
+
it "returns nil" do
|
94
|
+
expect(@src.base("user_age")).to be_nil
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context "argument is a symbol" do
|
99
|
+
it "returns same value when string argument" do
|
100
|
+
expect(@src.base(:user_email)).to eq "email"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "#attr?" do
|
106
|
+
it "has nickname as attr" do
|
107
|
+
expect(@src.attr?("nickname")).to eq true
|
108
|
+
end
|
109
|
+
|
110
|
+
it "has user_email as attr" do
|
111
|
+
expect(@src.attr?("user_email")).to eq true
|
112
|
+
end
|
113
|
+
|
114
|
+
it "can accept symbol argument" do
|
115
|
+
expect(@src.attr?(:nickname)).to eq true
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe "#attr" do
|
120
|
+
context "argument is name" do
|
121
|
+
it "returns nickname" do
|
122
|
+
expect(@src.attr("name")).to eq "nickname"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context "argument is email" do
|
127
|
+
it "returns user_email" do
|
128
|
+
expect(@src.attr("email")).to eq "user_email"
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context "arument is age" do
|
133
|
+
it "returns nil" do
|
134
|
+
expect(@src.attr("age")).to be_nil
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
context "argument is a symbol" do
|
139
|
+
it "returns same value when string argument" do
|
140
|
+
expect(@src.attr(:name)).to eq "nickname"
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
require "formup"
|
4
|
+
|
5
|
+
describe Formup do
|
6
|
+
describe "boolean cast method" do
|
7
|
+
before do
|
8
|
+
class TestClassForBooleanCastMethod
|
9
|
+
include Formup
|
10
|
+
source :key, :attributes => [:value]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
before(:each) do
|
15
|
+
@model = TestClassForBooleanCastMethod.new
|
16
|
+
end
|
17
|
+
|
18
|
+
context "when true assigned" do
|
19
|
+
before do
|
20
|
+
@model.key_value = true
|
21
|
+
end
|
22
|
+
it "returns true" do
|
23
|
+
expect(@model.key_value?).to eq true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when 1 assigned" do
|
28
|
+
before do
|
29
|
+
@model.key_value = 1
|
30
|
+
end
|
31
|
+
it "returns true" do
|
32
|
+
expect(@model.key_value?).to eq true
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "when '1' assigned" do
|
37
|
+
before do
|
38
|
+
@model.key_value = '1'
|
39
|
+
end
|
40
|
+
it "returns true" do
|
41
|
+
expect(@model.key_value?).to eq true
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context "when 't' assigned" do
|
46
|
+
before do
|
47
|
+
@model.key_value = 't'
|
48
|
+
end
|
49
|
+
it "returns true" do
|
50
|
+
expect(@model.key_value?).to eq true
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context "when 'true' assigned" do
|
55
|
+
before do
|
56
|
+
@model.key_value = 'true'
|
57
|
+
end
|
58
|
+
it "returns true" do
|
59
|
+
expect(@model.key_value?).to eq true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "when false assigned" do
|
64
|
+
before do
|
65
|
+
@model.key_value = false
|
66
|
+
end
|
67
|
+
it "returns false" do
|
68
|
+
expect(@model.key_value?).to eq false
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context "when 0 assigned" do
|
73
|
+
before do
|
74
|
+
@model.key_value = 0
|
75
|
+
end
|
76
|
+
it "returns false" do
|
77
|
+
expect(@model.key_value?).to eq false
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context "when '0' assigned" do
|
82
|
+
before do
|
83
|
+
@model.key_value = '0'
|
84
|
+
end
|
85
|
+
it "returns false" do
|
86
|
+
expect(@model.key_value?).to eq false
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "when 'f' assigned" do
|
91
|
+
before do
|
92
|
+
@model.key_value = 'f'
|
93
|
+
end
|
94
|
+
it "returns false" do
|
95
|
+
expect(@model.key_value?).to eq false
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context "when 'false' assigned" do
|
100
|
+
before do
|
101
|
+
@model.key_value = 'false'
|
102
|
+
end
|
103
|
+
it "returns false" do
|
104
|
+
expect(@model.key_value?).to eq false
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context "when other Number assigned" do
|
109
|
+
before do
|
110
|
+
@model.key_value = 10
|
111
|
+
end
|
112
|
+
it "returns false" do
|
113
|
+
expect(@model.key_value?).to eq false
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context "when other String assigned" do
|
118
|
+
before do
|
119
|
+
@model.key_value = 'test'
|
120
|
+
end
|
121
|
+
it "returns false" do
|
122
|
+
expect(@model.key_value?).to eq false
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context "when other Object assigned" do
|
127
|
+
before do
|
128
|
+
@model.key_value = :test
|
129
|
+
end
|
130
|
+
it "returns false" do
|
131
|
+
expect(@model.key_value?).to eq false
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context "when nil" do
|
136
|
+
before do
|
137
|
+
@model.key_value = nil
|
138
|
+
end
|
139
|
+
it "returns false" do
|
140
|
+
expect(@model.key_value?).to eq false
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
require "formup"
|
4
|
+
require "active_model/conversion"
|
5
|
+
require "active_model/validations"
|
6
|
+
require "active_model/naming"
|
7
|
+
require "active_model/translation"
|
8
|
+
|
9
|
+
describe Formup do
|
10
|
+
context "included" do
|
11
|
+
before do
|
12
|
+
class TestClassForIncluded
|
13
|
+
include Formup
|
14
|
+
end
|
15
|
+
@obj = TestClassForIncluded.new
|
16
|
+
end
|
17
|
+
|
18
|
+
describe ActiveModel::Conversion do
|
19
|
+
it "is included" do
|
20
|
+
expect(TestClassForIncluded.included_modules.include?(ActiveModel::Conversion)).to eq true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe ActiveModel::Validations do
|
25
|
+
it "contains ActiveModel::Validations" do
|
26
|
+
expect(TestClassForIncluded.included_modules.include?(ActiveModel::Validations)).to eq true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe ActiveModel::Naming do
|
31
|
+
it "is extended" do
|
32
|
+
expect((class << TestClassForIncluded; self end).included_modules.include?(ActiveModel::Naming)).to eq true
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe ActiveModel::Translation do
|
37
|
+
it "is extended" do
|
38
|
+
expect((class << TestClassForIncluded; self end).included_modules.include?(ActiveModel::Translation)).to eq true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#persisted?" do
|
43
|
+
it "defined" do
|
44
|
+
expect(@obj.respond_to?(:persisted?)).to eq true
|
45
|
+
end
|
46
|
+
|
47
|
+
it "returns false" do
|
48
|
+
expect(@obj.persisted?).to eq false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe ".source" do
|
53
|
+
it "difined" do
|
54
|
+
expect(TestClassForIncluded.respond_to?(:source)).to eq true
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe ".sources" do
|
59
|
+
it "defined" do
|
60
|
+
expect { TestClassForIncluded.sources }.not_to raise_error
|
61
|
+
end
|
62
|
+
|
63
|
+
it "returns empty Hash" do
|
64
|
+
expect(TestClassForIncluded.sources.length).to eq 0
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
require "formup"
|
4
|
+
|
5
|
+
describe Formup do
|
6
|
+
describe "#initialize" do
|
7
|
+
before do
|
8
|
+
class TestClassForInitialize
|
9
|
+
include Formup
|
10
|
+
source :key1, :attributes => [:id, :name, :value]
|
11
|
+
source :key2, :attributes => [:email], :aliases => { :id => :key, :name => :label }
|
12
|
+
|
13
|
+
attr_accessor :extra_params_handled
|
14
|
+
|
15
|
+
def handle_extra_params(params)
|
16
|
+
@extra_params_handled = true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
@obj = TestClassForInitialize.new({:key1_id => 1, :key1_name => "foo", :key1_value => true,
|
20
|
+
:key => 2, :label => "bar", :key2_email => "test@example.com", :extra => "baz"})
|
21
|
+
end
|
22
|
+
|
23
|
+
it "values assigned" do
|
24
|
+
expect(@obj.key1_id).to eq 1
|
25
|
+
expect(@obj.key1_name).to eq "foo"
|
26
|
+
expect(@obj.key1_value).to eq true
|
27
|
+
expect(@obj.key).to eq 2
|
28
|
+
expect(@obj.label).to eq "bar"
|
29
|
+
expect(@obj.key2_email).to eq "test@example.com"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "handle_extra_params called" do
|
33
|
+
expect(@obj.extra_params_handled).to eq true
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
require "formup"
|
4
|
+
|
5
|
+
describe Formup do
|
6
|
+
describe "#initialize" do
|
7
|
+
before do
|
8
|
+
class TestClassForLoad
|
9
|
+
include Formup
|
10
|
+
source :key1, :attributes => [:id, :name, :value]
|
11
|
+
source :key2, :attributes => [:email], :aliases => { :id => :key, :name => :label }
|
12
|
+
end
|
13
|
+
|
14
|
+
class DataModel
|
15
|
+
attr_accessor :id, :name, :email
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "with hash" do
|
20
|
+
before do
|
21
|
+
@obj = TestClassForLoad.new
|
22
|
+
@obj.load(:key1 => { :id => 1, :name => "foo", :value => true})
|
23
|
+
end
|
24
|
+
|
25
|
+
it "values assigned" do
|
26
|
+
expect(@obj.key1_id).to eq 1
|
27
|
+
expect(@obj.key1_name).to eq "foo"
|
28
|
+
expect(@obj.key1_value).to eq true
|
29
|
+
end
|
30
|
+
|
31
|
+
it "other values not assined" do
|
32
|
+
expect(@obj.key).to be_nil
|
33
|
+
expect(@obj.label).to be_nil
|
34
|
+
expect(@obj.key2_email).to be_nil
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "with data model" do
|
39
|
+
before do
|
40
|
+
data = DataModel.new
|
41
|
+
data.id = 2
|
42
|
+
data.name = "bar"
|
43
|
+
data.email = "test@example.com"
|
44
|
+
@obj = TestClassForLoad.new
|
45
|
+
@obj.load(:key2 => data)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "values assigned" do
|
49
|
+
expect(@obj.key).to eq 2
|
50
|
+
expect(@obj.label).to eq "bar"
|
51
|
+
expect(@obj.key2_email).to eq "test@example.com"
|
52
|
+
end
|
53
|
+
|
54
|
+
it "other values not assined" do
|
55
|
+
expect(@obj.key1_id).to be_nil
|
56
|
+
expect(@obj.key1_name).to be_nil
|
57
|
+
expect(@obj.key1_value).to be_nil
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "with hash and data model" do
|
62
|
+
before do
|
63
|
+
data = DataModel.new
|
64
|
+
data.id = 2
|
65
|
+
data.name = "bar"
|
66
|
+
data.email = "test@example.com"
|
67
|
+
@obj = TestClassForLoad.new
|
68
|
+
@obj.load(:key1 => { :id => 1, :name => "foo", :value => true}, :key2 => data)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "values assigned" do
|
72
|
+
expect(@obj.key1_id).to eq 1
|
73
|
+
expect(@obj.key1_name).to eq "foo"
|
74
|
+
expect(@obj.key1_value).to eq true
|
75
|
+
expect(@obj.key).to eq 2
|
76
|
+
expect(@obj.label).to eq "bar"
|
77
|
+
expect(@obj.key2_email).to eq "test@example.com"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
@@ -0,0 +1,114 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
require "formup"
|
4
|
+
|
5
|
+
describe Formup do
|
6
|
+
before do
|
7
|
+
class TestClassForParamsFor1
|
8
|
+
include Formup
|
9
|
+
source :key1, :attributes => [:id, :name, :value]
|
10
|
+
source :key2, :attributes => [:email], :aliases => { :id => :key, :name => :label }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
before(:each) do
|
15
|
+
@obj = TestClassForParamsFor1.new do
|
16
|
+
key1_id = 1
|
17
|
+
key1_name = "foo"
|
18
|
+
key1_value = "bar"
|
19
|
+
key = 2
|
20
|
+
label = "baz"
|
21
|
+
key2_email = "hoge@example.com"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#params_for(key)" do
|
26
|
+
it "returns hash that doesn't have id key(declared by attributes)" do
|
27
|
+
params = @obj.params_for(:key1)
|
28
|
+
expect(params.length).to eq 2
|
29
|
+
expect(params.key?(:id)).to eq false
|
30
|
+
expect(params.key?(:name)).to eq true
|
31
|
+
expect(params.key?(:value)).to eq true
|
32
|
+
end
|
33
|
+
|
34
|
+
it "returns hash that doesn't have id key(declared by aliases)" do
|
35
|
+
params = @obj.params_for(:key2)
|
36
|
+
expect(params.length).to eq 2
|
37
|
+
expect(params.key?(:id)).to eq false
|
38
|
+
expect(params.key?(:name)).to eq true
|
39
|
+
expect(params.key?(:email)).to eq true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#params_for(key, symbol)" do
|
44
|
+
it "returns hash that doesn't have name key(declared by attributes)" do
|
45
|
+
params = @obj.params_for(:key1, :name)
|
46
|
+
expect(params.length).to eq 2
|
47
|
+
expect(params.key?(:id)).to eq true
|
48
|
+
expect(params.key?(:name)).to eq false
|
49
|
+
expect(params.key?(:value)).to eq true
|
50
|
+
end
|
51
|
+
|
52
|
+
it "returns hash that doesn't have name key(declared by aliases)" do
|
53
|
+
params = @obj.params_for(:key2, :name)
|
54
|
+
expect(params.length).to eq 2
|
55
|
+
expect(params.key?(:id)).to eq true
|
56
|
+
expect(params.key?(:name)).to eq false
|
57
|
+
expect(params.key?(:email)).to eq true
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "#params_for(key, string)" do
|
62
|
+
it "returns hash that doesn't have name key(declared by attributes)" do
|
63
|
+
params = @obj.params_for(:key1, "name")
|
64
|
+
expect(params.length).to eq 2
|
65
|
+
expect(params.key?(:id)).to eq true
|
66
|
+
expect(params.key?(:name)).to eq false
|
67
|
+
expect(params.key?(:value)).to eq true
|
68
|
+
end
|
69
|
+
|
70
|
+
it "returns hash that doesn't have name key(declared by aliases)" do
|
71
|
+
params = @obj.params_for(:key2, "name")
|
72
|
+
expect(params.length).to eq 2
|
73
|
+
expect(params.key?(:id)).to eq true
|
74
|
+
expect(params.key?(:name)).to eq false
|
75
|
+
expect(params.key?(:email)).to eq true
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "#params_for(key, array)" do
|
80
|
+
it "returns hash that doesn't have id and name keys(declared by attributes)" do
|
81
|
+
params = @obj.params_for(:key1, :id, :name)
|
82
|
+
expect(params.length).to eq 1
|
83
|
+
expect(params.key?(:id)).to eq false
|
84
|
+
expect(params.key?(:name)).to eq false
|
85
|
+
expect(params.key?(:value)).to eq true
|
86
|
+
end
|
87
|
+
|
88
|
+
it "returns hash that doesn't have id and name keys(declared by aliases)" do
|
89
|
+
params = @obj.params_for(:key2, "id", "name")
|
90
|
+
expect(params.length).to eq 1
|
91
|
+
expect(params.key?(:id)).to eq false
|
92
|
+
expect(params.key?(:name)).to eq false
|
93
|
+
expect(params.key?(:email)).to eq true
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "#params_for(key, false)" do
|
98
|
+
it "returns hash that has all keys(declared by attributes)" do
|
99
|
+
params = @obj.params_for(:key1, false)
|
100
|
+
expect(params.length).to eq 3
|
101
|
+
expect(params.key?(:id)).to eq true
|
102
|
+
expect(params.key?(:name)).to eq true
|
103
|
+
expect(params.key?(:value)).to eq true
|
104
|
+
end
|
105
|
+
|
106
|
+
it "returns hash that has all keys(declared by aliases)" do
|
107
|
+
params = @obj.params_for(:key2, false)
|
108
|
+
expect(params.length).to eq 3
|
109
|
+
expect(params.key?(:id)).to eq true
|
110
|
+
expect(params.key?(:name)).to eq true
|
111
|
+
expect(params.key?(:email)).to eq true
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
require "formup"
|
4
|
+
|
5
|
+
describe Formup do
|
6
|
+
context "source method called" do
|
7
|
+
before do
|
8
|
+
class TestClassForSourceCalled
|
9
|
+
include Formup
|
10
|
+
source :key1, :attributes => [:attr1, :attr2, :attr3]
|
11
|
+
source :key2, :aliases => {:attr1 => :alias1, :attr2 => :alias2}, :excludes => :attr1
|
12
|
+
source :key3, :attributes => [:attr1, :attr2], :aliases => {:attr3 => :alias3, :attr4 => :alias4}, :excludes => [:attr3, :attr4]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
before(:each) do
|
17
|
+
@obj = TestClassForSourceCalled.new
|
18
|
+
end
|
19
|
+
|
20
|
+
describe ".sources" do
|
21
|
+
it "has 3 items" do
|
22
|
+
expect(TestClassForSourceCalled.sources.length).to eq 3
|
23
|
+
end
|
24
|
+
|
25
|
+
it "contains given keys" do
|
26
|
+
expect(TestClassForSourceCalled.sources.key?(:key1)).to eq true
|
27
|
+
expect(TestClassForSourceCalled.sources.key?(:key2)).to eq true
|
28
|
+
expect(TestClassForSourceCalled.sources.key?(:key3)).to eq true
|
29
|
+
end
|
30
|
+
|
31
|
+
it "has values joined key and attributes" do
|
32
|
+
expect(TestClassForSourceCalled.sources[:key1].attr(:attr1)).to eq "key1_attr1"
|
33
|
+
expect(TestClassForSourceCalled.sources[:key1].attr(:attr2)).to eq "key1_attr2"
|
34
|
+
expect(TestClassForSourceCalled.sources[:key1].attr(:attr3)).to eq "key1_attr3"
|
35
|
+
expect(TestClassForSourceCalled.sources[:key3].attr(:attr1)).to eq "key3_attr1"
|
36
|
+
expect(TestClassForSourceCalled.sources[:key3].attr(:attr2)).to eq "key3_attr2"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "has values given by aliases" do
|
40
|
+
expect(TestClassForSourceCalled.sources[:key2].attr(:attr1)).to eq "alias1"
|
41
|
+
expect(TestClassForSourceCalled.sources[:key2].attr(:attr2)).to eq "alias2"
|
42
|
+
expect(TestClassForSourceCalled.sources[:key3].attr(:attr3)).to eq "alias3"
|
43
|
+
expect(TestClassForSourceCalled.sources[:key3].attr(:attr4)).to eq "alias4"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it "define accessor methods by attributes option" do
|
48
|
+
expect(@obj.respond_to?(:key1_attr1)).to eq true
|
49
|
+
expect(@obj.respond_to?(:key1_attr1=)).to eq true
|
50
|
+
expect(@obj.respond_to?(:key1_attr2)).to eq true
|
51
|
+
expect(@obj.respond_to?(:key1_attr2=)).to eq true
|
52
|
+
expect(@obj.respond_to?(:key1_attr3)).to eq true
|
53
|
+
expect(@obj.respond_to?(:key1_attr3=)).to eq true
|
54
|
+
expect(@obj.respond_to?(:key3_attr1)).to eq true
|
55
|
+
expect(@obj.respond_to?(:key3_attr1=)).to eq true
|
56
|
+
expect(@obj.respond_to?(:key3_attr2)).to eq true
|
57
|
+
expect(@obj.respond_to?(:key3_attr2=)).to eq true
|
58
|
+
end
|
59
|
+
|
60
|
+
it "define accessor methods by aliases option" do
|
61
|
+
expect(@obj.respond_to?(:alias1)).to eq true
|
62
|
+
expect(@obj.respond_to?(:alias2)).to eq true
|
63
|
+
expect(@obj.respond_to?(:alias3)).to eq true
|
64
|
+
expect(@obj.respond_to?(:alias4)).to eq true
|
65
|
+
end
|
66
|
+
|
67
|
+
it "define boolean methods" do
|
68
|
+
expect(@obj.respond_to?(:key1_attr1?)).to eq true
|
69
|
+
expect(@obj.respond_to?(:key1_attr2?)).to eq true
|
70
|
+
expect(@obj.respond_to?(:key1_attr3?)).to eq true
|
71
|
+
expect(@obj.respond_to?(:key3_attr2?)).to eq true
|
72
|
+
expect(@obj.respond_to?(:alias1?)).to eq true
|
73
|
+
expect(@obj.respond_to?(:alias2?)).to eq true
|
74
|
+
expect(@obj.respond_to?(:alias3?)).to eq true
|
75
|
+
expect(@obj.respond_to?(:alias4?)).to eq true
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
require "formup"
|
4
|
+
|
5
|
+
describe Formup do
|
6
|
+
context "included" do
|
7
|
+
before do
|
8
|
+
class TestClassForValidation
|
9
|
+
include Formup
|
10
|
+
|
11
|
+
source :item, :attributes => [:name]
|
12
|
+
attr_accessor :price
|
13
|
+
|
14
|
+
validates :item_name, :presence => true
|
15
|
+
validates :price, :inclusion => { :in => 0..10000 }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
before(:each) do
|
20
|
+
@obj = TestClassForValidation.new(:item_name => "foo")
|
21
|
+
@obj.price = 5000
|
22
|
+
end
|
23
|
+
|
24
|
+
it "validation of normal attribute is enable" do
|
25
|
+
expect(@obj.valid?).to eq true
|
26
|
+
@obj.price = -1000
|
27
|
+
expect(@obj.valid?).to eq false
|
28
|
+
end
|
29
|
+
|
30
|
+
it "validation of attribute that defined by source method is enable" do
|
31
|
+
expect(@obj.valid?).to eq true
|
32
|
+
@obj.item_name = ""
|
33
|
+
expect(@obj.valid?).to eq false
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: formup
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- pinzlo
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-10-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activemodel
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.2.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: formup is rubygem for creating data model based form class
|
70
|
+
email:
|
71
|
+
- pinzolo@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- .rspec
|
78
|
+
- .travis.yml
|
79
|
+
- Gemfile
|
80
|
+
- LICENSE.txt
|
81
|
+
- README.md
|
82
|
+
- Rakefile
|
83
|
+
- formup.gemspec
|
84
|
+
- gemfiles/activemodel_3_2_x.gemfile
|
85
|
+
- gemfiles/activemodel_4_0_x.gemfile
|
86
|
+
- lib/formup.rb
|
87
|
+
- lib/formup/attr_def.rb
|
88
|
+
- lib/formup/source.rb
|
89
|
+
- lib/formup/version.rb
|
90
|
+
- spec/formup/attr_def_spec.rb
|
91
|
+
- spec/formup/source_spec.rb
|
92
|
+
- spec/formup_boolean_cast_spec.rb
|
93
|
+
- spec/formup_included_spec.rb
|
94
|
+
- spec/formup_initialize_spec.rb
|
95
|
+
- spec/formup_load_spec.rb
|
96
|
+
- spec/formup_params_for_spec.rb
|
97
|
+
- spec/formup_source_called_spec.rb
|
98
|
+
- spec/formup_validation_spec.rb
|
99
|
+
- spec/spec_helper.rb
|
100
|
+
homepage: https://github.com/pinzolo/formup
|
101
|
+
licenses:
|
102
|
+
- MIT
|
103
|
+
metadata: {}
|
104
|
+
post_install_message:
|
105
|
+
rdoc_options: []
|
106
|
+
require_paths:
|
107
|
+
- lib
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - '>='
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
requirements: []
|
119
|
+
rubyforge_project:
|
120
|
+
rubygems_version: 2.0.2
|
121
|
+
signing_key:
|
122
|
+
specification_version: 4
|
123
|
+
summary: Create data model based form class
|
124
|
+
test_files:
|
125
|
+
- spec/formup/attr_def_spec.rb
|
126
|
+
- spec/formup/source_spec.rb
|
127
|
+
- spec/formup_boolean_cast_spec.rb
|
128
|
+
- spec/formup_included_spec.rb
|
129
|
+
- spec/formup_initialize_spec.rb
|
130
|
+
- spec/formup_load_spec.rb
|
131
|
+
- spec/formup_params_for_spec.rb
|
132
|
+
- spec/formup_source_called_spec.rb
|
133
|
+
- spec/formup_validation_spec.rb
|
134
|
+
- spec/spec_helper.rb
|