formal_wear 0.3.0 → 1.0.0

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.
data/formal_wear.gemspec CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.version = FormalWear::VERSION
17
17
 
18
18
  gem.add_dependency 'activesupport', '>= 3.0.20'
19
- gem.add_dependency 'hash_assertions', '~> 0.1.0'
19
+ gem.add_dependency 'i18n', '~> 0.5.0'
20
20
  gem.add_development_dependency 'rspec'
21
21
  gem.add_development_dependency 'mocha', '~> 0.13.1'
22
22
  gem.add_development_dependency 'coveralls'
@@ -0,0 +1,9 @@
1
+ class Hash
2
+ def assert_required_keys(*required_keys)
3
+ required_keys.each do |required_key|
4
+ unless has_key?(required_key)
5
+ raise ArgumentError, "Missing required key: #{required_key}"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ class Hash
2
+ unless defined?(Hash.deep_dup)
3
+ def deep_dup
4
+ duplicate = self.dup
5
+ duplicate.each_pair do |k,v|
6
+ tv = duplicate[k]
7
+ duplicate[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_dup : v
8
+ end
9
+ duplicate
10
+ end
11
+ end
12
+ end
data/lib/formal_wear.rb CHANGED
@@ -1,10 +1,13 @@
1
+ require 'active_support/core_ext'
2
+ require 'active_support/concern'
3
+
4
+ require 'core_extensions/hash/assert_required_keys'
5
+ require 'core_extensions/hash/deep_dup'
6
+
1
7
  require 'formal_wear/version'
2
8
  require 'formal_wear/class_methods'
3
9
  require 'formal_wear/instance_methods'
4
10
  require 'formal_wear/suit'
5
- require 'hash_assertions'
6
- require 'active_support/core_ext'
7
- require 'active_support/concern'
8
11
 
9
12
  module FormalWear
10
13
  extend ActiveSupport::Concern
@@ -48,6 +48,11 @@ module FormalWear
48
48
  end
49
49
  end
50
50
 
51
+ def update!(attrs)
52
+ update(attrs)
53
+ save if valid?
54
+ end
55
+
51
56
  def valid?
52
57
  required_fields.keys.all? { |k| self.send(k).present? }
53
58
  end
@@ -1,3 +1,3 @@
1
1
  module FormalWear
2
- VERSION = "0.3.0"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -202,7 +202,37 @@ describe 'a new FormalWear-ing object' do
202
202
 
203
203
  it 'should ignore attributes that do not exist' do
204
204
  subject
205
- config.try(:nonexistent_id).should be_nil
205
+ config.respond_to?(:nonexistent_id).should be_false
206
+ end
207
+ end
208
+ end
209
+
210
+ describe '#update!' do
211
+ let!(:params) { { moms_id: 1, docs_id: 2, lambda_lambda_lambda: 3 } }
212
+
213
+ it 'should update docs_id' do
214
+ config.expects(:valid?).returns(false)
215
+ config.update!(params)
216
+ config.docs_id.should eq(2)
217
+ end
218
+
219
+ context 'if object is valid' do
220
+ before { config.expects(:save).returns(false) }
221
+
222
+ it 'should invoke #save' do
223
+ config.update!(params)
224
+ end
225
+ end
226
+
227
+ context 'if object is invalid' do
228
+ before { config.expects(:save).never }
229
+
230
+ it 'should not invoke #save' do
231
+ config.update!(params.except(:lambda_lambda_lambda))
232
+ end
233
+
234
+ it 'should return false' do
235
+ config.update!(params.except(:lambda_lambda_lambda)).should be_false
206
236
  end
207
237
  end
208
238
  end
@@ -3,13 +3,13 @@ require 'spec_helper'
3
3
  describe 'Class#required_attr method' do
4
4
  context 'when given unallowed field options' do
5
5
  it 'raises an ArgumentError' do
6
- expect { require_relative('./support/forbidden_option_tester') }.to raise_error(ArgumentError, "Unknown key: extraneous")
6
+ expect { require_relative('./support/forbidden_option_tester') }.to raise_error(ArgumentError, /Unknown key(\(s\))*: extraneous/)
7
7
  end
8
8
  end
9
9
 
10
10
  context 'when missing required field options' do
11
11
  it 'raises an ArgumentError' do
12
- expect { require_relative('./support/missing_option_tester') }.to raise_error(ArgumentError, /Missing required key:/)
12
+ expect { require_relative('./support/missing_option_tester') }.to raise_error(ArgumentError, /Missing required key(\(s\))*: type/)
13
13
  end
14
14
  end
15
15
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formal_wear
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.0
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-07-05 00:00:00.000000000 Z
12
+ date: 2013-07-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -28,13 +28,13 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: 3.0.20
30
30
  - !ruby/object:Gem::Dependency
31
- name: hash_assertions
31
+ name: i18n
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 0.1.0
37
+ version: 0.5.0
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 0.1.0
45
+ version: 0.5.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: rspec
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +108,8 @@ files:
108
108
  - README.md
109
109
  - Rakefile
110
110
  - formal_wear.gemspec
111
+ - lib/core_extensions/hash/assert_required_keys.rb
112
+ - lib/core_extensions/hash/deep_dup.rb
111
113
  - lib/formal_wear.rb
112
114
  - lib/formal_wear/class_methods.rb
113
115
  - lib/formal_wear/instance_methods.rb