poisol 0.0.10 → 0.0.11

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: bdf61107e05bc60e3d83dcc816e0a246c788bd17
4
- data.tar.gz: 0866588b30cf3921f5b0fc3f11755ee2aba83a95
3
+ metadata.gz: 7f206a671cea7dfa6671824d22c3673487d76487
4
+ data.tar.gz: 1ed49e3fc8dbc7f78ef72b28ed3604a7fdd58256
5
5
  SHA512:
6
- metadata.gz: 7b7c112d99da4648688618f8d5a9ee37f7fc8c111b5d68f1487c596e41b6abe938adf9bf6dd0f95092b526746d40b60244fb5ff07d08969f4b8af343514156da
7
- data.tar.gz: 906006b5322d06de73e93c5110196f5628dff8869d4c8430748443c76477b6c32224166f117a203719eacdca57e5b5c77beb8fac04f9adc9a4752eb37f091e36
6
+ metadata.gz: eca8e700d164ed634ba735b7e861ecce1efecaf4ec1842f2ee317a803594b78e0db7743fc26073c7a1de3fb56103e2c20f022535c48e4bc182b66e56cf8505f2
7
+ data.tar.gz: 91d6a9fabe8b63c19251e90b33f5f1f5c9280f7bbdde2fcdc7a39bb9f4d1c11cf8ea1b1c3391e7fc0dbf82d0d6cc4c142db4cca765313b596b18ae3b59acbd7d
data/README.md CHANGED
@@ -50,7 +50,8 @@ The following can be dynamically configured
50
50
 
51
51
  |Preposition| for defining|
52
52
  |----:|:----|
53
- |for|url & query params |
53
+ |of|url |
54
+ |for|query params |
54
55
  |by|request body filed/array item|
55
56
  |having|request body array item field|
56
57
  |has|response body field/array item|
@@ -1,12 +1,99 @@
1
1
  module RequestBodyBuilder
2
- def generate_request_methods
3
- request_body = @stub_config.request.body.deep_dup
4
- request_body.each do |field|
2
+
3
+ def prepare_request_body
4
+ return if @stub_config.request.body.blank?
5
+ if @stub_config.request.is_column_array or @stub_config.request.is_row_array
6
+ generate_methods_to_alter_request_array
7
+ else
8
+ generate_methods_to_alter_request_object
9
+ end
10
+ end
11
+
12
+ def generate_methods_to_alter_request_array
13
+ @request_array_item = @stub_config.request.body
14
+ generate_method_to_append_request_array
15
+ generate_method_to_alter_request_array_object
16
+ end
17
+
18
+ def generate_method_to_alter_request_array_object
19
+ @request_array_item.each do |field|
5
20
  field_name = field[0]
6
- define_method("by_#{field[0].underscore}") do |*value|
7
- @request.body[field_name] = value[0]
21
+ actual_field_value = field[1]
22
+ is_array = (actual_field_value.class.to_s == "Array")
23
+ actual_field_value = actual_field_value[0] if is_array
24
+ method_name = is_array ? ("with_#{field_name.classify.underscore}") : ("with_#{field_name.underscore}")
25
+ define_method(method_name) do |*input_value|
26
+ input_value = input_value[0]
27
+ assignment_value = get_assignment_value actual_field_value,input_value
28
+ @request.body.last[field_name] = is_array ? (@request.body.last[field_name] << assignment_value) : assignment_value
8
29
  self
9
30
  end
10
31
  end
11
32
  end
33
+
34
+ def generate_method_to_append_request_array
35
+ class_name = self.name.classify.underscore
36
+ method_name = "by_#{class_name}"
37
+ define_method(method_name) do |*input_value|
38
+ if input_value.blank?
39
+ @request.body << stub_config.request.body.deep_dup
40
+ else
41
+ input = JSON.parse(input_value[0].to_json)
42
+ @request.body << (stub_config.request.body.deep_dup).deep_merge!(input)
43
+ end
44
+ self
45
+ end
46
+ end
47
+
48
+ def generate_methods_to_alter_request_object
49
+ request_body = @stub_config.request.body.clone
50
+ request_body.each do |field|
51
+ field_name = field[0]
52
+ actual_field_value = field[1]
53
+ is_array = (actual_field_value.class.to_s == "Array")
54
+ if is_array
55
+ generate_method_to_alter_request_field_array field_name,actual_field_value
56
+ else
57
+ generate_method_to_alter_request_field field_name,actual_field_value
58
+ end
59
+
60
+ end
61
+ end
62
+
63
+ def generate_method_to_alter_request_field_array field_name,actual_field_values
64
+ actual_field_value = actual_field_values[0]
65
+ method_name = "by_#{field_name.classify.underscore}"
66
+ define_method(method_name) do |*input_value|
67
+ input_value = input_value[0]
68
+ assignment_value = get_assignment_value actual_field_value,input_value
69
+ @request.body[field_name] = [assignment_value]
70
+ self
71
+ end
72
+
73
+ method_name = "by_another_#{field_name.classify.underscore}"
74
+ define_method(method_name) do |*input_value|
75
+ input_value = input_value[0]
76
+ assignment_value = get_assignment_value actual_field_value,input_value
77
+ @request.body[field_name] = @request.body[field_name] << assignment_value
78
+ self
79
+ end
80
+
81
+ method_name = "by_no_#{field_name.classify.underscore}"
82
+ define_method(method_name) do
83
+ @request.body[field_name] = []
84
+ self
85
+ end
86
+ end
87
+
88
+ def generate_method_to_alter_request_field field_name,actual_field_value
89
+ method_name = "by_#{field_name.underscore}"
90
+ define_method(method_name) do |*input_value|
91
+ input_value = input_value[0]
92
+ assignment_value = get_assignment_value actual_field_value,input_value
93
+ @request.body[field_name] = assignment_value
94
+ self
95
+ end
96
+ end
97
+
98
+
12
99
  end
@@ -5,7 +5,7 @@ module UrlBuilder
5
5
  path_param = path_params[0]
6
6
  param_name = path_param.split("|")[0]
7
7
  param_default_value = path_param.split("|")[1]
8
- method_name = "for_#{param_name.underscore}"
8
+ method_name = "of_#{param_name.underscore}"
9
9
  define_method(method_name) do |*input_value|
10
10
  input_value = input_value[0]
11
11
  @request.url.sub!("{#{path_param}}","{#{param_name}|#{input_value}}") unless input_value.blank?
@@ -1,6 +1,6 @@
1
1
  module ResponseBodyBuilder
2
2
 
3
- def prepare_response
3
+ def prepare_response_body
4
4
  return if @stub_config.response.body.blank?
5
5
  if @stub_config.response.is_column_array or @stub_config.response.is_row_array
6
6
  generate_methods_to_alter_response_array
@@ -34,8 +34,13 @@ module ResponseBodyBuilder
34
34
  def generate_method_to_append_response_array
35
35
  class_name = self.name.classify.underscore
36
36
  method_name = "has_#{class_name}"
37
- define_method(method_name) do
38
- @response.body << stub_config.response.body.deep_dup
37
+ define_method(method_name) do |*input_value|
38
+ if input_value.blank?
39
+ @response.body << stub_config.response.body.deep_dup
40
+ else
41
+ input = JSON.parse(input_value[0].to_json)
42
+ @response.body << (stub_config.response.body.deep_dup).deep_merge!(input)
43
+ end
39
44
  self
40
45
  end
41
46
  end
@@ -91,4 +96,4 @@ module ResponseBodyBuilder
91
96
  end
92
97
 
93
98
 
94
- end
99
+ end
@@ -1,8 +1,10 @@
1
1
  require_relative "webmock_stub_builder"
2
2
  require_relative "stub_class_builder"
3
+ require_relative "stub_instance"
3
4
 
4
5
  class Stub
5
6
  include WebMockStubBuilder
7
+ include StubInstance
6
8
  attr_accessor :request,:response
7
9
  class << self
8
10
  include StubClassBuilder
@@ -15,36 +17,6 @@ class Stub
15
17
  end
16
18
  end
17
19
 
18
- def initialize
19
- @request = Request.new
20
- @response = Response.new
21
- @request.url = stub_config.request.url.deep_dup
22
- @request.query = stub_config.request.query.deep_dup
23
- @request.query = {} if stub_config.request.query_explicit
24
- @request.body = stub_config.request.body.deep_dup
25
- @request.body = {} if stub_config.request.body_explicit
26
- if stub_config.response.is_column_array or stub_config.response.is_row_array
27
- @response.body = []
28
- else
29
- @response.body = stub_config.response.body.deep_dup
30
- end
31
- end
32
-
33
- def set_dumb_response response_file
34
- @response.body = Parse.json_file_to_hash(response_file)
35
- @is_response_dumped = true
36
- self
37
- end
38
-
39
- def get_assignment_value actual_field_value,input_value
40
- if actual_field_value.class.to_s == "Hash"
41
- input_value = {} if input_value.blank?
42
- actual_field_value.deep_merge(input_value)
43
- else
44
- input_value
45
- end
46
- end
47
-
48
20
  end
49
21
 
50
22
  class Request
@@ -29,7 +29,8 @@ module StubClassBuilder
29
29
  generate_query_methods if @stub_config.request.query.present?
30
30
  end
31
31
 
32
- def prepare_request_body
33
- generate_request_methods if @stub_config.request.body.present?
32
+ def prepare_response
33
+ prepare_response_body
34
34
  end
35
+
35
36
  end
@@ -0,0 +1,54 @@
1
+ module StubInstance
2
+ def initialize
3
+ init_request
4
+ init_response
5
+ end
6
+
7
+ def init_request
8
+ @request = Request.new
9
+ @request.url = stub_config.request.url.deep_dup
10
+ @request.query = stub_config.request.query_explicit ? {} : stub_config.request.query.deep_dup
11
+ @request.body = stub_config.request.body_explicit ? {} : stub_config.request.body.deep_dup
12
+ end
13
+
14
+ def init_response
15
+ @response = Response.new
16
+ if stub_config.response.is_column_array or stub_config.response.is_row_array
17
+ @response.body = []
18
+ else
19
+ @response.body = stub_config.response.body.deep_dup
20
+ end
21
+ @response.status = 200
22
+ end
23
+
24
+ def set_dumb_response response_file
25
+ @response.body = Parse.json_file_to_hash(response_file)
26
+ @is_response_dumped = true
27
+ self
28
+ end
29
+
30
+ def get_assignment_value actual_field_value,input_value
31
+ if actual_field_value.class.to_s == "Hash"
32
+ input_value = {} if input_value.blank?
33
+ actual_field_value.deep_merge(input_value)
34
+ else
35
+ input_value
36
+ end
37
+ end
38
+
39
+ def has input_hash
40
+ @response.body.deep_merge! input_hash
41
+ self
42
+ end
43
+
44
+ def for input_hash
45
+ @request.query.deep_merge! input_hash
46
+ self
47
+ end
48
+
49
+ def status input
50
+ @response.status = input
51
+ self
52
+ end
53
+
54
+ end
@@ -25,7 +25,7 @@ module WebMockStubBuilder
25
25
 
26
26
  def build_response_body
27
27
  @response.body = Parse.hash_array_to_column_hash(@response.body) if stub_config.response.is_column_array and !@is_response_dumped.present?
28
- @webmock_stub.to_return(:status => 200, :body => @response.body.to_json, :headers => {'Content-Type' => 'application/json'})
28
+ @webmock_stub.to_return(:status => @response.status, :body => @response.body.to_json, :headers => {'Content-Type' => 'application/json'})
29
29
  end
30
30
 
31
31
  def remove_path_param_name_from_url
File without changes
@@ -0,0 +1,5 @@
1
+ request:
2
+ url: simple_response
3
+ type: get
4
+ response:
5
+ body: '{"a":1,"b":2}'
@@ -12,4 +12,10 @@ describe Stub, "#query_explicit" do
12
12
  expect(response.body).to eq({"title"=>"independance", "category"=>{"age_group"=>"10", "genre"=>"action", "publisher"=>{"name"=>"summa", "place"=>"erode"}}}.to_json)
13
13
  end
14
14
 
15
+ it "full dymamic inline" do
16
+ Book.new.for(:author => 'asd',:name =>'don').build()
17
+ response = RestClient.get "http://localhost:80/book",{:params => {:author=>'asd',:name=>'don'}}
18
+ expect(response.body).to eq({"title"=>"independance", "category"=>{"age_group"=>"10", "genre"=>"action", "publisher"=>{"name"=>"summa", "place"=>"erode"}}}.to_json)
19
+ end
20
+
15
21
  end
@@ -1,8 +1,8 @@
1
- describe Stub, "#get_books" do
1
+ describe Stub, "#implicit query params" do
2
2
 
3
3
  it "dynamic response" do
4
- Book.new.has_category({"age_group"=>"11", "publisher"=>{"name"=>"oxford"}}).build()
5
- response = RestClient.get "http://localhost:80/book",{:params => {:author=>'bharathi',:name=>"doni"}}
4
+ Book.new.for_author("bha").has_category({"age_group"=>"11", "publisher"=>{"name"=>"oxford"}}).build()
5
+ response = RestClient.get "http://localhost:80/book",{:params => {:author=>'bha',:name=>"doni"}}
6
6
  expect(response.body).to eq({"title"=>"independance", "category"=>{"age_group"=>"11", "genre"=>"action", "publisher"=>{"name"=>"oxford", "place"=>"erode"}}}.to_json)
7
7
  end
8
8
 
@@ -12,5 +12,12 @@ describe Stub, "#get_books" do
12
12
  expect(response.body).to eq({"title"=>"independance", "category"=>{"age_group"=>"10", "genre"=>"action", "publisher"=>{"name"=>"summa", "place"=>"erode"}}}.to_json)
13
13
  end
14
14
 
15
+ it "hash params for query" do
16
+ Book.new.for(:author=>"val").build()
17
+ response = RestClient.get "http://localhost:80/book",{:params => {:author=>'val',:name=>"doni"}}
18
+ expect(response.body).to eq({"title"=>"independance", "category"=>{"age_group"=>"10", "genre"=>"action", "publisher"=>{"name"=>"summa", "place"=>"erode"}}}.to_json)
19
+ end
20
+
21
+
15
22
  end
16
23
 
@@ -12,6 +12,13 @@ describe Stub, "#array" do
12
12
  expect(response.body).to eq({"title"=>["independance", "abc"], "category"=>["10","12"]}.to_json)
13
13
  end
14
14
 
15
+ it "column array hash params" do
16
+ Columns.new.has_column.has_column(:title=>"abc",:category => "12").build
17
+ response = RestClient.get "http://localhost:80/column"
18
+ expect(response.body).to eq({"title"=>["independance", "abc"], "category"=>["10","12"]}.to_json)
19
+ end
20
+
21
+
15
22
  it "empty row array" do
16
23
  Rows.new.build
17
24
  response = RestClient.get "http://localhost:80/row"
@@ -24,5 +31,11 @@ describe Stub, "#array" do
24
31
  expect(response.body).to eq([{"title"=>"independance", "category"=>{"age_group"=>"10"}}, {"title"=>"abc", "category"=>{"age_group"=>"12"}}].to_json)
25
32
  end
26
33
 
34
+ it "row array hash_params" do
35
+ Rows.new.has_row.has_row(:title=>"abc",:category=>{"age_group" => "12"}).build
36
+ response = RestClient.get "http://localhost:80/row"
37
+ expect(response.body).to eq([{"title"=>"independance", "category"=>{"age_group"=>"10"}}, {"title"=>"abc", "category"=>{"age_group"=>"12"}}].to_json)
38
+ end
39
+
27
40
 
28
41
  end
@@ -0,0 +1,20 @@
1
+ describe StubInstance, "hash params" do
2
+ it "default" do
3
+ SimpleResponse.new.build
4
+ response = RestClient.get "http://localhost:80/simple_response"
5
+ expect(response.body).to eq({:a=>1,:b=>2}.to_json)
6
+ end
7
+
8
+ it "partial" do
9
+ SimpleResponse.new.has(:a=>3).build
10
+ response = RestClient.get "http://localhost:80/simple_response"
11
+ expect(response.body).to eq({:a=>3,:b=>2}.to_json)
12
+ end
13
+
14
+ it "full" do
15
+ SimpleResponse.new.has(:a=>3,:b=>5).build
16
+ response = RestClient.get "http://localhost:80/simple_response"
17
+ expect(response.body).to eq({:a=>3,:b=>5}.to_json)
18
+ end
19
+
20
+ end
@@ -7,13 +7,13 @@ describe Stub, "#url" do
7
7
  end
8
8
 
9
9
  it "dynamic" do
10
- Url.new.for_name("hitler").for_actor("mani").build()
10
+ Url.new.of_name("hitler").of_actor("mani").build()
11
11
  response = RestClient.get "http://localhost:80/cda/hitler/mani/get"
12
12
  expect(response.body).to eq({"hi"=>1}.to_json)
13
13
  end
14
-
14
+
15
15
  it "partial" do
16
- Url.new.for_actor("mani").build()
16
+ Url.new.of_actor("mani").build()
17
17
  response = RestClient.get "http://localhost:80/cda/cd/mani/get"
18
18
  expect(response.body).to eq({"hi"=>1}.to_json)
19
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: poisol
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Deepak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-11 00:00:00.000000000 Z
11
+ date: 2014-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -139,6 +139,7 @@ files:
139
139
  - lib/poisol/stub/response/status_builder.rb
140
140
  - lib/poisol/stub/stub.rb
141
141
  - lib/poisol/stub/stub_class_builder.rb
142
+ - lib/poisol/stub/stub_instance.rb
142
143
  - lib/poisol/stub/webmock_stub_builder.rb
143
144
  - lib/poisol/stub_config/stub_config.rb
144
145
  - lib/poisol/stub_config/stub_config_builder.rb
@@ -150,27 +151,29 @@ files:
150
151
  - spec/data/domain/first/first.yml
151
152
  - spec/data/domain/second/domain.yml
152
153
  - spec/data/domain/second/second.yml
153
- - spec/data/main/array/columns.yml
154
- - spec/data/main/array/rows.yml
155
154
  - spec/data/main/domain.yml
156
155
  - spec/data/main/key_value/explicit.yml
157
156
  - spec/data/main/key_value/key_value.yml
158
- - spec/data/main/nested_array.yml
159
157
  - spec/data/main/query/book.yml
160
158
  - spec/data/main/query/book_explicit.yml
159
+ - spec/data/main/response/array/columns.yml
160
+ - spec/data/main/response/array/rows.yml
161
+ - spec/data/main/response/nested_array.yml
162
+ - spec/data/main/response/simple_response.yml
161
163
  - spec/data/main/url.yml
162
164
  - spec/data/main/user/config.yml
163
165
  - spec/data/main/user/request.json
164
166
  - spec/data/main/user/response.json
165
- - spec/functional/array_spec.rb
166
- - spec/functional/dumb_response_spec.rb
167
167
  - spec/functional/key_value/explicit_inclusion_spec.rb
168
168
  - spec/functional/key_value/implicit_inclusion_spec.rb
169
169
  - spec/functional/multi_domain_spec.rb
170
- - spec/functional/nested_array_spec.rb
171
- - spec/functional/post_spec.rb
170
+ - spec/functional/post_request_spec.rb
172
171
  - spec/functional/query/query_explicit_spec.rb
173
172
  - spec/functional/query/query_implicit_spec.rb
173
+ - spec/functional/response/array_spec.rb
174
+ - spec/functional/response/dumb_response_spec.rb
175
+ - spec/functional/response/hash_params_spec.rb
176
+ - spec/functional/response/nested_array_spec.rb
174
177
  - spec/functional/url_spec.rb
175
178
  - spec/spec_helper.rb
176
179
  - spec/unit/exception_spec.rb
@@ -207,25 +210,27 @@ test_files:
207
210
  - spec/data/main/user/config.yml
208
211
  - spec/data/main/user/request.json
209
212
  - spec/data/main/user/response.json
210
- - spec/data/main/array/columns.yml
211
- - spec/data/main/array/rows.yml
212
213
  - spec/data/main/domain.yml
213
214
  - spec/data/main/url.yml
214
- - spec/data/main/nested_array.yml
215
215
  - spec/data/main/key_value/explicit.yml
216
216
  - spec/data/main/key_value/key_value.yml
217
+ - spec/data/main/response/simple_response.yml
218
+ - spec/data/main/response/array/columns.yml
219
+ - spec/data/main/response/array/rows.yml
220
+ - spec/data/main/response/nested_array.yml
217
221
  - spec/data/main/query/book_explicit.yml
218
222
  - spec/data/main/query/book.yml
219
223
  - spec/unit/exception_spec.rb
220
224
  - spec/unit/stub_spec.rb
221
225
  - spec/spec_helper.rb
222
226
  - spec/functional/multi_domain_spec.rb
223
- - spec/functional/array_spec.rb
224
227
  - spec/functional/key_value/explicit_inclusion_spec.rb
225
228
  - spec/functional/key_value/implicit_inclusion_spec.rb
226
- - spec/functional/post_spec.rb
229
+ - spec/functional/post_request_spec.rb
230
+ - spec/functional/response/hash_params_spec.rb
231
+ - spec/functional/response/array_spec.rb
232
+ - spec/functional/response/dumb_response_spec.rb
233
+ - spec/functional/response/nested_array_spec.rb
227
234
  - spec/functional/url_spec.rb
228
- - spec/functional/dumb_response_spec.rb
229
- - spec/functional/nested_array_spec.rb
230
235
  - spec/functional/query/query_implicit_spec.rb
231
236
  - spec/functional/query/query_explicit_spec.rb