syrup_form_object 0.0.8 → 0.0.9

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.
@@ -4,4 +4,5 @@ gemspec path: '../'
4
4
 
5
5
  group :development do
6
6
  gem 'rails', '~> 3.2'
7
+ gem 'activerecord-nulldb-adapter', git: 'git://github.com/nulldb/nulldb.git'
7
8
  end
@@ -4,4 +4,5 @@ gemspec path: '../'
4
4
 
5
5
  group :development do
6
6
  gem 'rails', '~> 4.0'
7
+ gem 'activerecord-nulldb-adapter', git: 'git://github.com/nulldb/nulldb.git'
7
8
  end
@@ -0,0 +1,15 @@
1
+ module Syrup::Callbacks
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ include ActiveModel::Validations::Callbacks
6
+ include ActiveSupport::Callbacks
7
+ include ActiveRecord::Callbacks
8
+
9
+ include InstanceMethods
10
+ end
11
+
12
+ module InstanceMethods
13
+ end
14
+
15
+ end
@@ -2,20 +2,30 @@ module Syrup::Form::Wrapped
2
2
  extend ActiveSupport::Concern
3
3
 
4
4
  included do
5
- alias_method :wrapped, @wrapped_class
6
- alias_method :wrapped=, "#{@wrapped_class}="
5
+ alias_method :wrapped, @wrapped_class_name
6
+ alias_method :wrapped=, "#{@wrapped_class_name}="
7
+ @wrapped_class = @wrapped_class_name.to_s.camelize.constantize
8
+
9
+ def self.method_missing(*params)
10
+ @wrapped_class.send *params
11
+ end
12
+
13
+ def self.respond_to?(*params)
14
+ super || @wrapped_class.respond_to?(*params)
15
+ end
7
16
 
8
17
  def self.model_name
9
- @wrapped_class.to_s.camelize.constantize.model_name
18
+ @wrapped_class.model_name
10
19
  end
20
+
11
21
  end
12
22
 
13
23
  def method_missing(*params)
14
24
  wrapped.send *params
15
25
  end
16
26
 
17
- def responds_to?(*params)
18
- super || wrapped.responds_to?(*params)
27
+ def respond_to?(*params)
28
+ super || wrapped.respond_to?(*params)
19
29
  end
20
30
 
21
31
  def find_relations(params)
@@ -38,6 +48,4 @@ module Syrup::Form::Wrapped
38
48
  wrapped.persisted?
39
49
  end
40
50
 
41
-
42
51
  end
43
-
@@ -0,0 +1,12 @@
1
+ require 'virtus'
2
+
3
+ module Syrup::FormMethods
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ include Virtus.model
8
+ extend ActiveModel::Naming
9
+ include ActiveModel::Conversion
10
+ include ActiveRecord::AttributeAssignment
11
+ end
12
+ end
@@ -1,54 +1,15 @@
1
- require 'virtus'
2
-
3
1
  class Syrup::FormObject
4
- include Virtus.model
5
-
6
- extend ActiveModel::Naming
7
- include ActiveModel::Conversion
2
+ include Syrup::FormMethods
8
3
  extend ActiveModel::Callbacks
9
-
10
- include ActiveRecord::Persistence
11
- include ActiveRecord::Transactions
12
- include ActiveRecord::Validations
13
- include ActiveModel::Validations::Callbacks
14
- include ActiveSupport::Callbacks
15
- include ActiveRecord::Callbacks
4
+ include Syrup::Relations
5
+ include Syrup::Persistence
6
+ include Syrup::Callbacks
16
7
 
17
8
  class << self
18
9
 
19
- def accepts_nested_attributes_for(*relations)
20
- relations.each do |relation|
21
- build_attributes_setter relation
22
- end
23
- end
24
-
25
- # build_attributes_setter 'address'
26
- #
27
- # def address_attributes=(attributes)
28
- # address.attributes=attributes
29
- # end
30
-
31
- def build_attributes_setter(relation)
32
- module_eval <<-EOH
33
- def #{relation}_attributes=(attributes)
34
- #{relation}.attributes=attributes
35
- end
36
- EOH
37
- end
38
-
39
- def relations
40
- @relations ||= []
41
- end
42
-
43
- def has_one(klass)
44
- relations << klass
45
- attr_accessor klass
46
- end
47
-
48
-
49
10
  def wraps(klass)
50
11
  has_one(klass)
51
- @wrapped_class = klass
12
+ @wrapped_class_name = klass
52
13
  include Syrup::Form::Wrapped
53
14
  end
54
15
 
@@ -62,77 +23,38 @@ class Syrup::FormObject
62
23
  form.after_find(params)
63
24
  form
64
25
  end
65
-
66
- def connection
67
- ActiveRecord::Base.connection
68
- end
69
-
70
26
  end
71
27
 
72
28
  def remember_transaction_record_state(*); end
73
29
  def restore_transaction_record_state(*); end
74
30
  def clear_transaction_record_state(*); end
75
31
  def self.reflect_on_association(*); end
32
+ def add_to_transaction; end
33
+ def self.attributes_protected_by_default
34
+ []
35
+ end
36
+
76
37
  def initialize(params={})
77
38
  build_relations
78
39
  build(params)
79
- self.attributes=params
40
+ self.assign_attributes(params)
80
41
  end
81
42
 
82
43
  def update_attributes(params)
83
- self.attributes=params
44
+ self.assign_attributes(params)
84
45
  self.save
85
46
  end
86
47
 
87
- def build_relations
88
- self.class.relations.each do |klass|
89
- self.send "#{klass}=", klass.to_s.camelize.constantize.new
90
- end
91
- end
92
-
93
- def find_relations(params)
94
- self.class.relations.each do |klass|
95
- if params[klass]
96
- self.send "#{klass}=", klass.to_s.camelize.constantize.find(params[klass])
97
- end
98
- end
99
- end
100
-
101
- def attributes=(params)
102
- @params = params
103
- params.each do |key, value|
104
- self.send "#{key}=", value
105
- end
106
- end
48
+ # def attributes=(params)
49
+ # @params = params
50
+ # params.each do |key, value|
51
+ # self.send "#{key}=", value
52
+ # end
53
+ # end
107
54
 
108
55
  def build(params); end
109
56
  def after_find(params); end
110
57
 
111
- def before_save; end
112
- def before_create; end
113
- def after_create; end
114
- def after_save; end
115
- def after_commit; end
116
-
117
- def transaction(&block)
118
- first_related_object.transaction(&block)
119
- end
120
-
121
- def first_related_object
122
- respond_to?(:wrapped) ? wrapped : self.send(self.class.relations.first)
123
- end
124
-
125
- def related_objects
126
- related= {}
127
- self.class.relations.collect do |klass|
128
- related[klass] = self.send(klass)
129
- end
130
- related
131
- end
132
-
133
-
134
- def add_to_transaction; end
135
-
136
58
  def run_validations!(*)
137
59
  super
138
60
  self.related_objects.each do |klass, related|
@@ -158,8 +80,5 @@ class Syrup::FormObject
158
80
  run_callbacks(:update) { save_form }
159
81
  end
160
82
 
161
- def save_form
162
- self.related_objects.all?{|klass, related| related.save }
163
- end
164
83
 
165
84
  end
@@ -0,0 +1,25 @@
1
+ module Syrup::Persistence
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ include ActiveRecord::Persistence
6
+ include ActiveRecord::Transactions
7
+ include ActiveRecord::Validations
8
+
9
+ extend ClassMethods
10
+ include InstanceMethods
11
+ end
12
+
13
+ module ClassMethods
14
+ def connection
15
+ ActiveRecord::Base.connection
16
+ end
17
+ end
18
+
19
+ module InstanceMethods
20
+ def save_form
21
+ self.related_objects.all?{|klass, related| related.save }
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,70 @@
1
+ module Syrup::Relations
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ extend ClassMethods
6
+
7
+ include InstanceMethods
8
+ end
9
+
10
+ module ClassMethods
11
+ def accepts_nested_attributes_for(*relations)
12
+ relations.each do |relation|
13
+ build_attributes_setter relation
14
+ end
15
+ end
16
+
17
+ # build_attributes_setter 'address'
18
+ #
19
+ # def address_attributes=(attributes)
20
+ # address.attributes=attributes
21
+ # end
22
+
23
+ def build_attributes_setter(relation)
24
+ module_eval <<-EOH
25
+ def #{relation}_attributes=(attributes)
26
+ #{relation}.attributes=attributes
27
+ end
28
+ EOH
29
+ end
30
+
31
+ def relations
32
+ @relations ||= []
33
+ end
34
+
35
+ def has_one(klass)
36
+ relations << klass
37
+ attr_accessor klass
38
+ end
39
+ end
40
+
41
+ module InstanceMethods
42
+ def build_relations
43
+ self.class.relations.each do |klass|
44
+ self.send "#{klass}=", klass.to_s.camelize.constantize.new
45
+ end
46
+ end
47
+
48
+ def find_relations(params)
49
+ self.class.relations.each do |klass|
50
+ if params[klass]
51
+ self.send "#{klass}=", klass.to_s.camelize.constantize.find(params[klass])
52
+ end
53
+ end
54
+ end
55
+
56
+ def first_related_object
57
+ respond_to?(:wrapped) ? wrapped : self.send(self.class.relations.first)
58
+ end
59
+
60
+
61
+ def related_objects
62
+ related= {}
63
+ self.class.relations.collect do |klass|
64
+ related[klass] = self.send(klass)
65
+ end
66
+ related
67
+ end
68
+ end
69
+
70
+ end
data/lib/syrup/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Syrup
2
- VERSION = '0.0.8'
2
+ VERSION = '0.0.9'
3
3
  end
data/lib/syrup.rb CHANGED
@@ -2,4 +2,8 @@ module Syrup
2
2
  end
3
3
 
4
4
  require 'syrup/form'
5
+ require 'syrup/form_methods'
6
+ require 'syrup/persistence'
7
+ require 'syrup/callbacks'
8
+ require 'syrup/relations'
5
9
  require 'syrup/form_object'
data/spec/db/schema.rb ADDED
@@ -0,0 +1,5 @@
1
+ ActiveRecord::Schema.define(:version => 20131108103012) do
2
+ create_table "test_items", :force => true do |t|
3
+ t.integer "test_item_value"
4
+ end
5
+ end
@@ -1,38 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- class TestItem
4
- include Virtus.model
5
- attribute :test_item_value, Integer
6
-
7
- def self.model_name
8
- ActiveModel::Name.new(self, nil, "test_item")
9
- end
10
-
11
- def errors
12
- []
13
- end
14
-
15
- def self.find(id)
16
- end
17
-
18
- def save
19
- end
20
-
21
- def valid?
22
- true
23
- end
24
-
25
- def readonly?
26
- false
27
- end
28
-
29
- def new_record?
30
- true
31
- end
32
-
33
- def persisted?
34
- false
35
- end
3
+ class TestItem < ActiveRecord::Base
36
4
  end
37
5
 
38
6
  class TestSubclass < Syrup::FormObject
@@ -248,6 +216,8 @@ describe Syrup::FormObject do
248
216
  expect(subject.test_item).to be_a(TestItem)
249
217
  end
250
218
  it 'calls the after_find method' do
219
+ TestItem.stub(:find).once { TestItem.new }
220
+
251
221
  expect(subject).to have_called_after_find
252
222
  end
253
223
  end
@@ -380,6 +350,8 @@ describe Syrup::FormObject do
380
350
  expect(subject.wrapped).to be test_item
381
351
  end
382
352
  it 'calls the after_find method' do
353
+ TestItem.stub(:find).once { TestItem.new }
354
+
383
355
  expect(subject).to have_called_after_find
384
356
  end
385
357
  end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,16 @@
1
1
  require 'rspec'
2
+ require 'rails'
2
3
  require 'active_record'
3
4
  require 'active_record/errors'
4
5
  require 'syrup'
6
+ require 'nulldb_rspec'
7
+
8
+ include NullDB::RSpec::NullifiedDatabase
9
+
10
+ NullDB.configure do |config|
11
+ config.project_root = File.expand_path("..", __FILE__)
12
+ end
13
+
5
14
 
6
15
  RSpec.configure do |config|
7
16
  end
data/test.sh ADDED
@@ -0,0 +1 @@
1
+ BUNDLE_GEMFILE=gemfiles/rails3_2.gemfile bundle exec rspec && BUNDLE_GEMFILE=gemfiles/rails4_0.gemfile bundle exec rspec
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: syrup_form_object
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-15 00:00:00.000000000 Z
12
+ date: 2013-11-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: virtus
@@ -71,22 +71,27 @@ files:
71
71
  - .gitignore
72
72
  - .rspec
73
73
  - .travis.yml
74
- - Gemfile
75
74
  - LICENSE
76
75
  - README.md
77
76
  - Rakefile
78
77
  - gemfiles/rails3_2.gemfile
79
78
  - gemfiles/rails4_0.gemfile
80
79
  - lib/syrup.rb
80
+ - lib/syrup/callbacks.rb
81
81
  - lib/syrup/form.rb
82
82
  - lib/syrup/form/standalone.rb
83
83
  - lib/syrup/form/wrapped.rb
84
+ - lib/syrup/form_methods.rb
84
85
  - lib/syrup/form_object.rb
86
+ - lib/syrup/persistence.rb
87
+ - lib/syrup/relations.rb
85
88
  - lib/syrup/version.rb
89
+ - spec/db/schema.rb
86
90
  - spec/lib/syrup/callbacks_spec.rb
87
91
  - spec/lib/syrup/form_object_spec.rb
88
92
  - spec/spec_helper.rb
89
93
  - syrup_form_object.gemspec
94
+ - test.sh
90
95
  homepage: https://github.com/alexsiri7/syrup_form_object
91
96
  licenses:
92
97
  - MIT
data/Gemfile DELETED
@@ -1,7 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
4
-
5
- group :development do
6
- gem 'rails', '~> 4.0'
7
- end