remote_factory_girl 1.0.0 → 1.0.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fc49d97c232bfdba862ab52c9eabe313d7a3012f
4
- data.tar.gz: 644c676dc15e1da5935d545e5341e48a11773a56
3
+ metadata.gz: d8b42f8eed81c36f43aae8e0965e146f7a6882ee
4
+ data.tar.gz: 4aed3ffaff3534cd3fe42d1556636e9b3632431b
5
5
  SHA512:
6
- metadata.gz: 6e964470880d4c8fd4d091ccd92922deddd53bd0e0a21b65c2065fb25fa60c07ae3344806fe880d882586d71abb53d1bbf6f6b5e4707c2e9a082ef989ea4c13d
7
- data.tar.gz: d3dfbb436a42441ede4fe8b745c8b3f29a27eb34a2914c91bf89ee16253d62778f906b5a161b70523cd7b2e43cfa31b0c582313b9e040226d0e2005287939c7a
6
+ metadata.gz: 5101e0ebec7e4b744df4971682aebb58d642ddade2445af34d9fc52d5029f8523163d746c734e93bf9840e1f6e5d95f936970418ddff42c6b9851a82b54c6acd
7
+ data.tar.gz: 5f7c90c31af76477fff52c6d57cb633ad1523451dfc5e98f972f180725fd5c4f33fea261e0a129024090eb2f3e1227283f02599a77624b3a6389f8c00e9a4273
@@ -1,7 +1,6 @@
1
1
  require 'remote_factory_girl/hash_to_dot'
2
2
  require 'remote_factory_girl/json_to_active_resource'
3
- require 'ostruct'
4
- require 'json'
3
+ require 'remote_factory_girl/factory_girl_json_parser'
5
4
 
6
5
  module RemoteFactoryGirl
7
6
  class ConfigApplier
@@ -21,13 +20,14 @@ module RemoteFactoryGirl
21
20
  apply_config_options
22
21
  end
23
22
 
23
+ private
24
+
24
25
  def default_config
25
26
  { :hash_to_dot_klass => HashToDot,
26
- :json_to_active_resource_klass => JsonToActiveResource }
27
+ :json_to_active_resource_klass => JsonToActiveResource,
28
+ :response_parser => FactoryGirlJsonParser }
27
29
  end
28
30
 
29
- private
30
-
31
31
  def apply_config_options
32
32
  if config[:return_as_active_resource]
33
33
  configured_json = config[:json_to_active_resource_klass].convert(json)
@@ -42,8 +42,8 @@ module RemoteFactoryGirl
42
42
  config[:return_response_as] == :dot_notation ? config[:hash_to_dot_klass].convert(parsed_json) : parsed_json
43
43
  end
44
44
 
45
- def return_with_root(parsed_json)
46
- config[:return_with_root] == false ? Array(parsed_json).flatten.last : parsed_json
45
+ def return_with_root(response_hash)
46
+ config[:return_with_root] == false ? config[:response_parser].without_root(response_hash) : response_hash
47
47
  end
48
48
  end
49
49
  end
@@ -0,0 +1,29 @@
1
+ module RemoteFactoryGirl
2
+ class FactoryGirlJsonParser
3
+
4
+ def self.without_root(response_hash)
5
+ new(response_hash).without_root
6
+ end
7
+
8
+ attr_reader :response_hash
9
+
10
+ def initialize(response_hash)
11
+ @response_hash = response_hash
12
+ end
13
+
14
+ def without_root
15
+ has_root_key? ? response_array.last : response_hash
16
+ end
17
+
18
+ private
19
+
20
+ def has_root_key?
21
+ response_array.length == 2 && response_array.last.is_a?(Hash)
22
+ end
23
+
24
+ def response_array
25
+ @response_array ||= Array(response_hash).flatten
26
+ end
27
+ end
28
+ end
29
+
@@ -1,3 +1,3 @@
1
1
  module RemoteFactoryGirl
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -1,29 +1,44 @@
1
1
  require 'remote_factory_girl/config_applier'
2
2
  require 'remote_factory_girl/json_to_active_resource'
3
+ require 'ostruct'
3
4
 
4
5
  describe RemoteFactoryGirl::ConfigApplier do
5
6
 
6
7
  describe '.post' do
7
-
8
- let(:unparsed_json) {
9
- '{ "user": {"first_name": "Sam", "last_name": "Iam"}}'
10
- }
11
8
  let(:json) {
12
9
  { :user => { :first_name => "Sam", :last_name => "Iam"}}
13
10
  }
14
11
  let(:hash_to_dot_klass) { double('RemoteFactoryGirl::HashToDot') }
15
12
  let(:dish_json_with_user) { OpenStruct.new(:user => OpenStruct.new(:first_name => 'Sam', :last_name => 'Iam')) }
16
- let(:dish_json_without_user) { OpenStruct.new(:first_name => 'Sam', :last_name => 'Iam') }
13
+ let(:dot_notation_without_root) { OpenStruct.new(:first_name => 'Sam', :last_name => 'Iam') }
17
14
 
18
15
  describe '.apply_config' do
19
- it 'should not return root hash key when .return_with_root is false' do
20
- response = RemoteFactoryGirl::ConfigApplier.apply_config(json, :return_with_root => false)
21
- expect(response).to_not have_key(:user)
16
+ describe 'when configured to return root key' do
17
+ it 'should return a hash with a root key when initialized with a hash that has a root key' do
18
+ response = RemoteFactoryGirl::ConfigApplier.apply_config(json, :with_root => true)
19
+
20
+ expect(response).to have_key(:user)
21
+ end
22
22
  end
23
23
 
24
- it 'should not return root hash key when .return_with_root is false' do
25
- response = RemoteFactoryGirl::ConfigApplier.apply_config(json, :with_root => true)
26
- expect(response).to have_key(:user)
24
+ describe 'when configured to not return root key' do
25
+
26
+ let(:factory_girl_json_parser) { double('RemoteFactoryGirl::FactoryGirlJsonParser', without_root: { :first_name => 'Sam', :last_name => 'Iam'}) }
27
+
28
+ it 'should not return a hash with a root key when initialized with a hash that has a root key' do
29
+ response = RemoteFactoryGirl::ConfigApplier.apply_config(json, :return_with_root => false,
30
+ :factory_girl_json_parser => factory_girl_json_parser)
31
+
32
+ expect(response).to_not have_key(:user)
33
+ expect(response[:first_name]).to eq('Sam')
34
+ end
35
+
36
+ it 'should not return a hash with a root key when initialized with a hash that does not have a root key' do
37
+ hash_without_root_key = { :first_name => 'Sam', :last_name => 'Iam'}
38
+ response = RemoteFactoryGirl::ConfigApplier.apply_config(hash_without_root_key, :return_with_root => false,
39
+ :factory_girl_json_parser => factory_girl_json_parser)
40
+ expect(response[:first_name]).to eq('Sam')
41
+ end
27
42
  end
28
43
 
29
44
  it 'should return an object that responds to dot notation' do
@@ -34,10 +49,12 @@ describe RemoteFactoryGirl::ConfigApplier do
34
49
  end
35
50
 
36
51
  it 'should not return root hash key and should return an object that responds to dot notation' do
37
- hash_to_dot_klass.stub(:convert).and_return(dish_json_without_user)
52
+ factory_girl_json_parser = double('RemoteFactoryGirl::FactoryGirlJsonParser', without_root: { :first_name => 'Sam', :last_name => 'Iam'})
53
+ hash_to_dot_klass.stub(:convert).and_return(dot_notation_without_root)
38
54
  response = RemoteFactoryGirl::ConfigApplier.apply_config(json, :return_response_as => :dot_notation,
39
55
  :return_with_root => false,
40
- :hash_to_dot_klass => hash_to_dot_klass)
56
+ :hash_to_dot_klass => hash_to_dot_klass,
57
+ :factory_girl_json_parser => factory_girl_json_parser)
41
58
  expect(response.first_name).to eq('Sam')
42
59
  end
43
60
  end
@@ -0,0 +1,22 @@
1
+ require 'remote_factory_girl/factory_girl_json_parser'
2
+
3
+ describe RemoteFactoryGirl::FactoryGirlJsonParser do
4
+
5
+ let(:hash_with_root) { { :user => { :first_name => 'Sam', :last_name => 'Iam' }} }
6
+ let(:hash_without_root) { { :first_name => 'Sam', :last_name => 'Iam' } }
7
+
8
+ describe '.without_root' do
9
+ it 'should return a hash without a root key when given a hash with a root key' do
10
+ without_root = RemoteFactoryGirl::FactoryGirlJsonParser.without_root(hash_with_root)
11
+
12
+ expect(without_root).to_not have_key(:user)
13
+ expect(without_root[:first_name]).to eq('Sam')
14
+ end
15
+
16
+ it 'should return a hash without a root key when given a hash without a root key' do
17
+ without_root = RemoteFactoryGirl::FactoryGirlJsonParser.without_root(hash_with_root)
18
+
19
+ expect(without_root).to_not have_key('user')
20
+ end
21
+ end
22
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: remote_factory_girl
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - tdouce
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-23 00:00:00.000000000 Z
11
+ date: 2014-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -83,6 +83,7 @@ files:
83
83
  - lib/remote_factory_girl/config.rb
84
84
  - lib/remote_factory_girl/config_applier.rb
85
85
  - lib/remote_factory_girl/exceptions.rb
86
+ - lib/remote_factory_girl/factory_girl_json_parser.rb
86
87
  - lib/remote_factory_girl/hash_to_dot.rb
87
88
  - lib/remote_factory_girl/http.rb
88
89
  - lib/remote_factory_girl/json_to_active_resource.rb
@@ -91,6 +92,7 @@ files:
91
92
  - spec/integration/remote_factory_girl_spec.rb
92
93
  - spec/models/remote_factory_girl/config_applier_spec.rb
93
94
  - spec/models/remote_factory_girl/config_spec.rb
95
+ - spec/models/remote_factory_girl/factory_girl_json_parser_spec.rb
94
96
  - spec/models/remote_factory_girl/http_spec.rb
95
97
  - spec/models/remote_factory_girl/json_to_active_resource_spec.rb
96
98
  - spec/models/remote_factory_girl_spec.rb
@@ -124,8 +126,8 @@ test_files:
124
126
  - spec/integration/remote_factory_girl_spec.rb
125
127
  - spec/models/remote_factory_girl/config_applier_spec.rb
126
128
  - spec/models/remote_factory_girl/config_spec.rb
129
+ - spec/models/remote_factory_girl/factory_girl_json_parser_spec.rb
127
130
  - spec/models/remote_factory_girl/http_spec.rb
128
131
  - spec/models/remote_factory_girl/json_to_active_resource_spec.rb
129
132
  - spec/models/remote_factory_girl_spec.rb
130
133
  - spec/spec_helper.rb
131
- has_rdoc: