formal_wear 0.3.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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