act_form 0.1.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 50804b31cfd1b52553e16af190b4f8471cdd6e2f
4
- data.tar.gz: 6392da038a5fdf1ef6f9e70376b5a0efdf791d30
2
+ SHA256:
3
+ metadata.gz: 6dc112ffc52fbda2d69a6f676564bddd36aa6f428fe554c3cbd66e3d05042a47
4
+ data.tar.gz: 47845d8f3eaafa6595d1b088273f39075387f5ac342bb421040133af62a8aa49
5
5
  SHA512:
6
- metadata.gz: 7cbf1b8b3a10db0f6d9569953593267a1de6935ed7a40ea20e6a902aac71857559f0c5d7cd1f2dfc5bd7dc53166d342589de5006996d1bc605fe9fc10346e1dc
7
- data.tar.gz: 251cef49ed01f2133b23cbac6c81b07c45807aee3853e1d1295901723d0603f7209fb78bece6923e755c88382bad6fb03a587db6a909a87bed289a0156da5900
6
+ metadata.gz: 305fa4843044061a4ee4fb299c767cd16f1cb5d09beb0f70476586e4fb959831e723c9e56908a0712aeb0845baa387849dc979e59ed548b5f90e752cc0c09e5b
7
+ data.tar.gz: 870fb9bbfe96eb6b33325b9c04192517954708b81b96fbd68724f6bd421073efb7ff33edbb8488a0d900a7275dd404273a6aa9cc6bd20e6fab063c8971245c26
@@ -0,0 +1,6 @@
1
+ # 0.4.0
2
+ * update bundler dependency to `2.1.x`
3
+ * update spec syntex
4
+ * support rails `6.0`
5
+ * add shortcut alias method `attr` for `attribute`
6
+ * fix issue#2
@@ -35,7 +35,7 @@ This code of conduct applies both within project spaces and in public spaces
35
35
  when an individual is representing the project or its community.
36
36
 
37
37
  Instances of abusive, harassing, or otherwise unacceptable behavior may be
38
- reported by contacting a project maintainer at alex@qingju.com. All
38
+ reported by contacting a project maintainer at zshuaibin@gmail.com. All
39
39
  complaints will be reviewed and investigated and will result in a response that
40
40
  is deemed necessary and appropriate to the circumstances. Maintainers are
41
41
  obligated to maintain confidentiality with regard to the reporter of an
@@ -46,4 +46,4 @@ version 1.3.0, available at
46
46
  [http://contributor-covenant.org/version/1/3/0/][version]
47
47
 
48
48
  [homepage]: http://contributor-covenant.org
49
- [version]: http://contributor-covenant.org/version/1/3/0/
49
+ [version]: http://contributor-covenant.org/version/1/3/0/
data/README.md CHANGED
@@ -1,9 +1,174 @@
1
1
  # ActForm
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/form_model`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ ActForm is the gem that provide a simple way to create `form object` or `command object` or `service object`, it only depends on `activemodel >= 5` and provides few api.
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ ## Usage
6
+
7
+ #### API - `attribute`
8
+
9
+ ```ruby
10
+ class UserForm < ActForm::Base
11
+ attribute :name, required: true
12
+ attribute :age, type: :integer
13
+ attribute :address
14
+ attribute :nickname, default: 'nick'
15
+ attribute :desc, default: ->{ 'desc' }
16
+ end
17
+
18
+ form = UserForm.new(name: 'su', age: '18', address: 'somewhere')
19
+ form.name # => 'su'
20
+ form.age # => 18
21
+ form.address # => 'somewhere'
22
+ form.nickname # => 'nick'
23
+ form.desc # => 'desc'
24
+ # override default
25
+ form.nickname = 'hello'
26
+ form.nickname # => 'hello'
27
+
28
+ # required
29
+ form = UserForm.new(age: '18', address: 'somewhere')
30
+ form.valid? # => false
31
+ form.errors.full_messages # => ["Name require a value"]
32
+ ```
33
+
34
+ #### Difference between `required` and `validates_presence_of`
35
+ `required` will run before the validation, and it will cancel other validations if return false.
36
+
37
+ ### form object
38
+
39
+ #### API - `valid?`
40
+ Compliant with the active model api
41
+ ```ruby
42
+ class PhoneForm < ActForm::Base
43
+ attribute :phone
44
+
45
+ validates_format_of :phone, with: /\A\d{11}\z/i
46
+ end
47
+
48
+ form = PhoneForm.new
49
+ form.valid? # => false
50
+ form.errors.full_messages # => ["Phone is invalid"]
51
+
52
+ PhoneForm.new(phone: '12345678901').valid? # => true
53
+ ```
54
+
55
+ #### API - `sync`
56
+ sync only copy attributes to target, will not trigger validate
57
+ ```ruby
58
+ target = Class.new do
59
+ attr_accessor :phone
60
+ end.new
61
+
62
+ form = PhoneForm.new(phone: '12345678901')
63
+ form.sync(target)
64
+ target.phone # => '12345678901'
65
+ ```
66
+
67
+ #### API - `save`
68
+ sync to the target and call the save method when passed the validation
69
+ ```ruby
70
+ target = Class.new do
71
+ attr_accessor :phone
72
+ attr_reader :saved
73
+
74
+ def save
75
+ @saved = true
76
+ end
77
+ end.new
78
+
79
+ form = PhoneForm.new(phone: '12345678901')
80
+ form.save(target) # same as form.sync(target) and target.save
81
+ target.phone # => '12345678901'
82
+ target.saved # => true
83
+ form.persisted? # => true
84
+ ```
85
+
86
+ #### API - `init_by`
87
+ `init_by` will copy attributes form target to the form, and set default target.
88
+ ```ruby
89
+ target = Class.new do
90
+ attr_accessor :phone
91
+ attr_reader :saved
92
+
93
+ def save
94
+ @saved = true
95
+ end
96
+ end.new
97
+
98
+ target.phone = '12345678901'
99
+
100
+ form = PhoneForm.new
101
+ form.init_by(target)
102
+ form.phone # => '12345678901'
103
+ form.save # => true
104
+ target.saved # => true
105
+ ```
106
+
107
+ #### API - `combine`
108
+ form can combine to other forms
109
+ ```ruby
110
+ class PhoneForm < ActForm::Base
111
+ attribute :phone
112
+ validates_format_of :phone, with: /\A\d{11}\z/i
113
+ end
114
+
115
+ class EmailForm < ActForm::Base
116
+ attribute :email
117
+
118
+ validate :check_email
119
+
120
+ def check_email
121
+ errors.add(:email, :blank) if email.blank?
122
+ end
123
+ end
124
+
125
+ class UserForm < ActForm::Base
126
+ combine PhoneForm, EmailForm
127
+ end
128
+
129
+ class AdminForm < ActForm::Base
130
+ combine PhoneForm
131
+ end
132
+
133
+ user_form = UserForm.new
134
+ user_form.valid?
135
+ user_form.errors.full_messages # => ["Phone is invalid", "Email can't be blank"]
136
+ UserForm.new(phone: '12345678901', email: '1').valid? # => true
137
+ admin_form = AdminForm.new
138
+ admin_form.valid?
139
+ admin_form.errors.full_messages # => ["Phone is invalid"]
140
+ AdminForm.new(phone: '12345678901').valid? # => true
141
+ ```
142
+
143
+ ### command/service object
6
144
 
145
+ Command object almost like form object. Command object can't init by `new`, and it has some new features.
146
+
147
+ #### API - `perform`, `run`, `success?`, `failure?`
148
+
149
+ command object must respond to `perform` method.
150
+
151
+ ```ruby
152
+ class CreateUserCommand < ActForm::Command
153
+ combine UserForm
154
+
155
+ def perform
156
+ User.create(attributes)
157
+ end
158
+ end
159
+
160
+ CreateUserCommand.new
161
+ # => NoMethodError: private method `new' called for CreateUserCommand:Class
162
+
163
+ command = CreateUserCommand.run(phone: '12345678901')
164
+ if command.success?
165
+ @user = command.result
166
+ # do something...
167
+ else
168
+ command.errors.full_messages # => ["Email can't be blank"]
169
+ # do something...
170
+ end
171
+ ```
7
172
  ## Installation
8
173
 
9
174
  Add this line to your application's Gemfile:
@@ -18,21 +183,16 @@ And then execute:
18
183
 
19
184
  Or install it yourself as:
20
185
 
21
- $ gem install form_model
22
-
23
- ## Usage
186
+ $ gem install act_form
24
187
 
25
- TODO: Write usage instructions here
26
188
 
27
189
  ## Development
28
190
 
29
- After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
-
31
191
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
192
 
33
193
  ## Contributing
34
194
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/form_model. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
195
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/act_form. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
36
196
 
37
197
 
38
198
  ## License
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.summary = %q{A simple way to create form/command/service objects.}
13
13
  spec.description = %q{The simple way to create form objects or command/service objects with ActiveModel.}
14
- spec.homepage = 'https://github.com/simple-and-powerful/form-model'
14
+ spec.homepage = 'https://github.com/simple-and-powerful/act-form'
15
15
  spec.license = 'MIT'
16
16
 
17
17
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
@@ -23,13 +23,11 @@ Gem::Specification.new do |spec|
23
23
  # end
24
24
 
25
25
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
- spec.bindir = 'exe'
27
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
27
  spec.require_paths = ['lib']
29
28
 
30
- spec.add_runtime_dependency 'virtus', '~> 1.0', '>= 1.0.0'
31
- spec.add_runtime_dependency 'activemodel', '~> 4.0', '>= 4.0.0'
29
+ spec.add_runtime_dependency 'activemodel', '>= 5.0.0'
32
30
 
33
- spec.add_development_dependency 'bundler', '~> 1.12'
34
- spec.add_development_dependency 'rake', '~> 10.0'
31
+ spec.add_development_dependency 'bundler', '~> 2.1'
32
+ spec.add_development_dependency 'rake', '~> 13.0'
35
33
  end
@@ -7,28 +7,11 @@ module ActForm
7
7
  include Model
8
8
  end
9
9
 
10
- class RecordForm < Base
11
- attr_reader :record
12
- def initialize(record, **attrs)
13
- @record = record
14
- @extract_attrs = @record.attributes.extract! *self.class.attribute_set.map(&:name).map(&:to_s)
15
- super(@extract_attrs.merge(attrs))
16
- end
17
-
18
- def save
19
- if valid?
20
- sync(@record)
21
- @persisted = @record.save
22
- else
23
- false
24
- end
25
- end
26
- end
27
-
28
- class Command < Base
10
+ class Command
11
+ include Model
29
12
  include Runnable
30
13
  private_class_method :new
31
14
  end
32
15
  end
33
16
 
34
- require 'act_form/railtie' if defined?(Rails)
17
+ I18n.load_path << "#{File.dirname(__FILE__)}/act_form/locale/en.yml"
@@ -0,0 +1,58 @@
1
+ require 'act_form/type'
2
+
3
+ module ActForm
4
+ module Attributes
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ class_attribute :attribute_set, instance_accessor: false
9
+ self.attribute_set = {}
10
+ end
11
+
12
+ def attributes
13
+ @attributes || {}
14
+ end
15
+
16
+ private
17
+
18
+ def get_default(default, default_provided)
19
+ return if default == default_provided
20
+ default.respond_to?(:call) ? default.call : default
21
+ end
22
+
23
+ module ClassMethods
24
+ # attribute :name, type: :string
25
+ # or
26
+ # attribute :name, :string, required: true
27
+ def attribute(name, cast_type = :object, **options)
28
+ name = name.to_s
29
+ cast_type = options[:type] || cast_type
30
+ self.attribute_set = attribute_set.merge(name => [cast_type, options])
31
+
32
+ define_reader_method name, **options.slice(:default)
33
+ define_writer_method name, cast_type
34
+
35
+ name
36
+ end
37
+ alias_method :attr, :attribute
38
+
39
+ def define_reader_method(name, default: NO_DEFAULT_PROVIDED)
40
+ define_method(name) { attributes[name] || get_default(default, NO_DEFAULT_PROVIDED) }
41
+ end
42
+
43
+ def define_writer_method(name, cast_type)
44
+ define_method("#{name}=") do |value|
45
+ _value = ActiveModel::Type.lookup(cast_type).deserialize(value)
46
+ @attributes = attributes.merge({name => _value})
47
+ _value
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ NO_DEFAULT_PROVIDED = Object.new
54
+ private_constant :NO_DEFAULT_PROVIDED
55
+
56
+ end # class_methods
57
+ end
58
+ end
@@ -1,5 +1,4 @@
1
1
  require 'active_support/concern'
2
- require 'act_form/utils'
3
2
 
4
3
  module ActForm
5
4
  module Combinable
@@ -10,40 +9,38 @@ module ActForm
10
9
  self._forms = []
11
10
  end
12
11
 
12
+ def valid?(context = nil)
13
+ super
14
+ combined_forms_valid?(context)
15
+ errors.empty?
16
+ end
17
+
18
+ def combined_forms_valid?(context)
19
+ return if _forms.empty?
20
+ _forms.each do |form_class|
21
+ form = form_class.new(attributes)
22
+ form.valid?(context)
23
+ form.errors.details.each do |attr_name, arr|
24
+ arr.each do |error|
25
+ next if error[:error] == :required
26
+ errors.add(attr_name, error[:error])
27
+ end
28
+ end
29
+ end
30
+ end
31
+
13
32
  class_methods do
14
33
 
15
34
  def combine(*forms)
16
35
  forms.each do |form_class|
17
- raise ArgumentError, 'Can not combine itself' if form_class == self
36
+ raise ArgumentError, "can't combine itself" if form_class == self
18
37
 
19
38
  next if self._forms.include?(form_class)
20
39
 
40
+ self.merge_attribute_set_from(form_class)
21
41
  self._forms << form_class
22
-
23
- self.attribute_set.merge(form_class.attribute_set)
24
-
25
- Utils.merge(self._validators, form_class._validators)
26
-
27
- method_name = form_class.model_name.singular
28
- define_method(method_name) { form_class.new(attributes) }
29
- form_class._validate_callbacks.each do |callback|
30
- filter = callback.filter
31
- if filter.is_a?(Symbol) || filter.is_a?(String)
32
- class_eval <<-RUBY, __FILE__, __LINE__ + 1
33
- def #{filter}
34
- form = #{method_name}
35
- form.send(:#{filter})
36
- form.errors.messages.each do |attr, _errors|
37
- _errors.each { |err| errors.add(attr, err) }
38
- end
39
- end
40
- private :#{filter}
41
- RUBY
42
- end
43
- end
44
- self._validate_callbacks.append *form_class._validate_callbacks
45
- end # forms.each
46
- end # combine
42
+ end
43
+ end
47
44
 
48
45
  end
49
46
 
@@ -0,0 +1,4 @@
1
+ en:
2
+ errors:
3
+ messages:
4
+ required: "require a value"
@@ -0,0 +1,15 @@
1
+ module ActForm
2
+ module Merge
3
+ extend ActiveSupport::Concern
4
+
5
+ class_methods do
6
+ def merge_attribute_set_from(other)
7
+ other.attribute_set.each do |attr_name, arr|
8
+ cast_type, options = arr
9
+ attribute attr_name, cast_type, options
10
+ end
11
+ end
12
+ end
13
+
14
+ end
15
+ end
@@ -1,27 +1,44 @@
1
- require 'active_support/core_ext/object/deep_dup'
2
1
  require 'active_model'
3
- require 'virtus'
2
+ require 'act_form/attributes'
3
+ require 'act_form/merge'
4
4
  require 'act_form/combinable'
5
5
 
6
6
  module ActForm
7
7
  module Model
8
8
  extend ActiveSupport::Concern
9
- include ActiveModel::Validations
10
- include ActiveModel::Conversion
9
+ include ActiveModel::Model
10
+ include Attributes
11
+ include Merge
11
12
 
12
13
  included do
13
- extend ActiveModel::Naming
14
- extend ActiveModel::Translation
15
- include Virtus.model
14
+ set_callback :validate, :before, :validate_required_attributes
15
+ end
16
+
17
+ def initialize(attrs={})
18
+ super attrs.select { |k, _| respond_to?("#{k}=") }
19
+ end
20
+
21
+ def record=(record)
22
+ raise ArgumentError, 'Record must respond to attributes method!' unless record.respond_to?(:attributes)
23
+ @record = record
24
+ end
25
+
26
+ # Record must respond_to attributes method
27
+ def init_by(record, **attrs)
28
+ self.record = record
29
+ _attrs = record.attributes.extract! *self.class.attribute_set.keys.map(&:to_s)
30
+ assign_attributes _attrs.merge(attrs)
16
31
  end
17
32
 
18
33
  def sync(target)
19
- self.class.attribute_set.map(&:name).each do |attr|
20
- target.public_send("#{attr}=", public_send(attr)) if target.respond_to?(attr)
34
+ self.class.attribute_set.keys.each do |attr|
35
+ next unless target.respond_to?(attr)
36
+ target.public_send "#{attr}=", public_send(attr)
21
37
  end
22
38
  end
23
39
 
24
- def save(target)
40
+ def save(target = nil)
41
+ target ||= @record
25
42
  if valid?
26
43
  sync(target)
27
44
  @persisted = target.save
@@ -34,14 +51,25 @@ module ActForm
34
51
  !!@persisted
35
52
  end
36
53
 
54
+ private
55
+
56
+ def validate_required_attributes
57
+ self.class.attribute_set.each do |attr_name, arr|
58
+ _, options = arr
59
+ next if options.key?(:default)
60
+ next if !options[:required]
61
+ if attributes[attr_name].nil?
62
+ errors.add(attr_name, :required)
63
+ end
64
+ end
65
+ throw(:abort) unless errors.empty?
66
+ end
67
+
37
68
  class_methods do
38
- private
39
69
  def inherited(child_class)
40
- child_class._validators = self._validators.deep_dup
41
- child_class._validate_callbacks = self._validate_callbacks.deep_dup
42
70
  child_class.include Combinable
43
71
  super
44
72
  end
45
- end
73
+ end # class_methods
46
74
  end
47
75
  end
@@ -1,6 +1,7 @@
1
1
  require 'active_support/concern'
2
2
 
3
3
  module ActForm
4
+ class RunError < StandardError; end
4
5
  module Runnable
5
6
  extend ActiveSupport::Concern
6
7
 
@@ -12,6 +13,10 @@ module ActForm
12
13
  def run(*args)
13
14
  new(*args).run
14
15
  end
16
+
17
+ def run!(*args)
18
+ new(*args).run!
19
+ end
15
20
  end
16
21
 
17
22
  def has_errors?
@@ -26,6 +31,16 @@ module ActForm
26
31
  self
27
32
  end
28
33
 
34
+ def run!
35
+ if valid?
36
+ @result = perform
37
+ @performed = true
38
+ result
39
+ else
40
+ raise RunError, 'Verification failed'
41
+ end
42
+ end
43
+
29
44
  def perform; end
30
45
 
31
46
  def success?
@@ -0,0 +1,13 @@
1
+ require 'active_model/type'
2
+
3
+ module ActForm
4
+ module Type
5
+ class Object < ActiveModel::Type::Value
6
+ def type
7
+ :object
8
+ end
9
+ end
10
+ end
11
+ end
12
+
13
+ ActiveModel::Type.register(:object, ActForm::Type::Object)
@@ -1,3 +1,3 @@
1
1
  module ActForm
2
- VERSION = "0.1.0"
2
+ VERSION = '0.4.0'
3
3
  end
metadata CHANGED
@@ -1,83 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: act_form
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - zires
8
- autorequire:
9
- bindir: exe
8
+ autorequire:
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-13 00:00:00.000000000 Z
11
+ date: 2020-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: virtus
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.0'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 1.0.0
23
- type: :runtime
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '1.0'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 1.0.0
33
13
  - !ruby/object:Gem::Dependency
34
14
  name: activemodel
35
15
  requirement: !ruby/object:Gem::Requirement
36
16
  requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '4.0'
40
17
  - - ">="
41
18
  - !ruby/object:Gem::Version
42
- version: 4.0.0
19
+ version: 5.0.0
43
20
  type: :runtime
44
21
  prerelease: false
45
22
  version_requirements: !ruby/object:Gem::Requirement
46
23
  requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '4.0'
50
24
  - - ">="
51
25
  - !ruby/object:Gem::Version
52
- version: 4.0.0
26
+ version: 5.0.0
53
27
  - !ruby/object:Gem::Dependency
54
28
  name: bundler
55
29
  requirement: !ruby/object:Gem::Requirement
56
30
  requirements:
57
31
  - - "~>"
58
32
  - !ruby/object:Gem::Version
59
- version: '1.12'
33
+ version: '2.1'
60
34
  type: :development
61
35
  prerelease: false
62
36
  version_requirements: !ruby/object:Gem::Requirement
63
37
  requirements:
64
38
  - - "~>"
65
39
  - !ruby/object:Gem::Version
66
- version: '1.12'
40
+ version: '2.1'
67
41
  - !ruby/object:Gem::Dependency
68
42
  name: rake
69
43
  requirement: !ruby/object:Gem::Requirement
70
44
  requirements:
71
45
  - - "~>"
72
46
  - !ruby/object:Gem::Version
73
- version: '10.0'
47
+ version: '13.0'
74
48
  type: :development
75
49
  prerelease: false
76
50
  version_requirements: !ruby/object:Gem::Requirement
77
51
  requirements:
78
52
  - - "~>"
79
53
  - !ruby/object:Gem::Version
80
- version: '10.0'
54
+ version: '13.0'
81
55
  description: The simple way to create form objects or command/service objects with
82
56
  ActiveModel.
83
57
  email:
@@ -87,6 +61,7 @@ extensions: []
87
61
  extra_rdoc_files: []
88
62
  files:
89
63
  - ".gitignore"
64
+ - CHANGELOG.md
90
65
  - CODE_OF_CONDUCT.md
91
66
  - Gemfile
92
67
  - LICENSE.txt
@@ -94,19 +69,19 @@ files:
94
69
  - Rakefile
95
70
  - act_form.gemspec
96
71
  - lib/act_form.rb
72
+ - lib/act_form/attributes.rb
97
73
  - lib/act_form/combinable.rb
74
+ - lib/act_form/locale/en.yml
75
+ - lib/act_form/merge.rb
98
76
  - lib/act_form/model.rb
99
- - lib/act_form/railtie.rb
100
77
  - lib/act_form/runnable.rb
101
- - lib/act_form/utils.rb
78
+ - lib/act_form/type.rb
102
79
  - lib/act_form/version.rb
103
- - lib/generators/act_form/install_generator.rb
104
- - lib/generators/templates/forms/record_form.rb
105
- homepage: https://github.com/simple-and-powerful/form-model
80
+ homepage: https://github.com/simple-and-powerful/act-form
106
81
  licenses:
107
82
  - MIT
108
83
  metadata: {}
109
- post_install_message:
84
+ post_install_message:
110
85
  rdoc_options: []
111
86
  require_paths:
112
87
  - lib
@@ -121,9 +96,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
96
  - !ruby/object:Gem::Version
122
97
  version: '0'
123
98
  requirements: []
124
- rubyforge_project:
125
- rubygems_version: 2.5.1
126
- signing_key:
99
+ rubyforge_project:
100
+ rubygems_version: 2.7.7
101
+ signing_key:
127
102
  specification_version: 4
128
103
  summary: A simple way to create form/command/service objects.
129
104
  test_files: []
@@ -1,7 +0,0 @@
1
- module ActForm
2
- class Railtie < ::Rails::Railtie
3
- generators do
4
- require 'generators/form_model/install_generator'
5
- end
6
- end
7
- end
@@ -1,11 +0,0 @@
1
- module ActForm
2
- class Utils
3
- class << self
4
- def merge(a_validators, b_validators)
5
- b_validators.each do |k, v|
6
- a_validators[k] ? (a_validators[k] += v) : (a_validators[k] = v)
7
- end
8
- end # merge
9
- end
10
- end
11
- end
@@ -1,12 +0,0 @@
1
- module ActForm
2
- module Generators
3
- class InstallGenerator < ::Rails::Generators::Base
4
- source_root File.expand_path('../../templates', __FILE__)
5
-
6
- desc 'Create the forms dir and copy record_form.rb'
7
- def copy_initializer
8
- directory 'forms', 'app/forms'
9
- end
10
- end
11
- end
12
- end
@@ -1,2 +0,0 @@
1
- class RecordForm < ActForm::RecordForm
2
- end