poisol 0.0.1 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +17 -8
- data/lib/poisol/template/{class_template.rb → base_template.rb} +1 -1
- data/lib/poisol/template/query_handler.rb +1 -1
- data/lib/poisol/template/response_handler.rb +23 -4
- data/lib/poisol/utils/parse.rb +1 -0
- data/spec/{class_template → functional}/array_spec.rb +14 -2
- data/spec/{class_template → functional}/get_spec.rb +2 -2
- data/spec/functional/nested_array_spec.rb +21 -0
- data/spec/{class_template → functional}/post_spec.rb +2 -2
- metadata +45 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c61f7f85517d8fdce4395b7bea859c1bde46c242
|
4
|
+
data.tar.gz: 3a974a5502173940f797601f09aa44d3569cd6fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a510ded49b4c852a949dbaf07aad380803ade082bc1d0fcd0ecb2519b890c4d45dd0f92e83020cbe763db7d1d4bb9675a756b10d159347a6f36bad895cac06bc
|
7
|
+
data.tar.gz: 6caeff45c98dee0aa8b593c7100920fd4b2018c82760de49650699341499f111dd9b470bf3bd9a12a9685031f55fc5408831263b28b49039075440313c287735
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
[![Build Status](https://travis-ci.org/paramadeep/poisol.svg?branch=master)](https://travis-ci.org/paramadeep/poisol) [![Dependency Status](https://gemnasium.com/paramadeep/poisol.svg)](https://gemnasium.com/paramadeep/poisol) [![Code Climate](https://codeclimate.com/github/paramadeep/poisol/badges/gpa.svg)](https://codeclimate.com/github/paramadeep/poisol)
|
2
|
+
[![Build Status](https://travis-ci.org/paramadeep/poisol.svg?branch=master)](https://travis-ci.org/paramadeep/poisol) [![Dependency Status](https://gemnasium.com/paramadeep/poisol.svg)](https://gemnasium.com/paramadeep/poisol) [![Code Climate](https://codeclimate.com/github/paramadeep/poisol/badges/gpa.svg)](https://codeclimate.com/github/paramadeep/poisol)
|
3
3
|
|
4
4
|
#Poisol
|
5
5
|
|
@@ -37,22 +37,31 @@ Poisol, dynamically generates class called 'User', with methods 'byName' and 'ha
|
|
37
37
|
|
38
38
|
The following can be dynamically configured
|
39
39
|
- Request
|
40
|
-
- url
|
40
|
+
- url
|
41
41
|
- type
|
42
42
|
- query params
|
43
43
|
- request body
|
44
44
|
- Response
|
45
|
-
- code
|
46
|
-
- header
|
45
|
+
- code
|
46
|
+
- header
|
47
47
|
- response body
|
48
48
|
|
49
|
+
## Prepositions
|
50
|
+
|
51
|
+
|Preposition| for defining|
|
52
|
+
|----:|:----|
|
53
|
+
|for|url & query params |
|
54
|
+
|by|request body filed/array item|
|
55
|
+
|having|request body array item field|
|
56
|
+
|has|response body field/array item|
|
57
|
+
|with|response body array item field|
|
58
|
+
|
49
59
|
##ToDo
|
50
|
-
* Nested json
|
51
|
-
* Array json (column & row)
|
52
|
-
* Nested array json
|
53
60
|
* URL config
|
54
61
|
* Response code and header config
|
55
|
-
*
|
62
|
+
* Functional test for query params
|
63
|
+
* Refactor Response Handler
|
64
|
+
* Generate Request Handler, based on Response Handler
|
56
65
|
* Documentation for 'getting started' and details
|
57
66
|
* Test coverage
|
58
67
|
* Throw error when configured and input field values are different
|
@@ -30,7 +30,7 @@ module ClassTemplate
|
|
30
30
|
stub.with(:query => @query) unless @query.eql? ""
|
31
31
|
stub.with(:body => @request_body) unless @request_body.eql? ""
|
32
32
|
@response_body = Parse.hash_array_to_column_hash(@response_body) if @config.response.array_type == "column_array"
|
33
|
-
stub.to_return(:status => 200, :body => @response_body, :headers => {})
|
33
|
+
stub.to_return(:status => 200, :body => @response_body.to_s, :headers => {})
|
34
34
|
end
|
35
35
|
|
36
36
|
end
|
@@ -2,7 +2,7 @@ module ClassTemplate
|
|
2
2
|
def generate_query_methods
|
3
3
|
@query = @config.request.query
|
4
4
|
@query.each do |field|
|
5
|
-
define_singleton_method("
|
5
|
+
define_singleton_method("for_#{field[0]}") do |*value|
|
6
6
|
@query[field[0]] = value[0]
|
7
7
|
self
|
8
8
|
end
|
@@ -16,9 +16,14 @@ module ClassTemplate
|
|
16
16
|
@response_body_object.each do |field|
|
17
17
|
field_name = field[0]
|
18
18
|
actual_field_value = field[1]
|
19
|
-
|
19
|
+
is_array = (actual_field_value.class.to_s == "Array")
|
20
|
+
actual_field_value = actual_field_value[0] if is_array
|
21
|
+
@response_body.last[field_name] = [] if is_array
|
22
|
+
method_name = is_array ? ("with_#{field_name.classify.underscore}") : ("with_#{field_name.underscore}")
|
23
|
+
define_singleton_method(method_name) do |*input_value|
|
20
24
|
input_value = input_value[0]
|
21
|
-
|
25
|
+
assignment_value = get_assignment_value actual_field_value,input_value
|
26
|
+
@response_body.last[field_name] = is_array ? (@response_body.last[field_name] << assignment_value) : assignment_value
|
22
27
|
self
|
23
28
|
end
|
24
29
|
end
|
@@ -38,12 +43,26 @@ module ClassTemplate
|
|
38
43
|
@response_body.each do |field|
|
39
44
|
field_name = field[0]
|
40
45
|
actual_field_value = field[1]
|
41
|
-
|
46
|
+
is_array = (actual_field_value.class.to_s == "Array")
|
47
|
+
@response_body[field_name] = [] if is_array
|
48
|
+
actual_field_value = actual_field_value[0] if is_array
|
49
|
+
method_name = is_array ? ("has_#{field_name.classify.underscore}") : ("has_#{field_name.underscore}")
|
50
|
+
define_singleton_method(method_name) do |*input_value|
|
42
51
|
input_value = input_value[0]
|
43
|
-
|
52
|
+
assignment_value = get_assignment_value actual_field_value,input_value
|
53
|
+
@response_body[field_name] = is_array ? (@response_body[field_name] << assignment_value) : assignment_value
|
44
54
|
self
|
45
55
|
end
|
46
56
|
end
|
47
57
|
end
|
48
58
|
|
59
|
+
def get_assignment_value actual_field_value,input_value
|
60
|
+
if actual_field_value.class.to_s == "Hash"
|
61
|
+
input_value = {} if input_value.blank?
|
62
|
+
actual_field_value.deep_merge(input_value)
|
63
|
+
else
|
64
|
+
input_value
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
49
68
|
end
|
data/lib/poisol/utils/parse.rb
CHANGED
@@ -3,13 +3,25 @@ describe ClassTemplate, "#array" do
|
|
3
3
|
it "column array" do
|
4
4
|
Columns.new.has_column.has_column.with_title("abc").with_category("12").build
|
5
5
|
response = RestClient.get "http://localhost:80/column"
|
6
|
-
expect(response.body).to eq({"title"=>["independance", "abc"], "category"=>["10","12"]})
|
6
|
+
expect(response.body).to eq({"title"=>["independance", "abc"], "category"=>["10","12"]}.to_s)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "empty column array" do
|
10
|
+
Columns.new.build
|
11
|
+
response = RestClient.get "http://localhost:80/column"
|
12
|
+
expect(response.body).to eq("[]")
|
7
13
|
end
|
8
14
|
|
9
15
|
it "row array" do
|
10
16
|
Rows.new.has_row.has_row.with_title("abc").with_category("age_group" => "12").build
|
11
17
|
response = RestClient.get "http://localhost:80/row"
|
12
|
-
expect(response.body).to eq([{"title"=>"independance", "category"=>{"age_group"=>"10"}}, {"title"=>"abc", "category"=>{"age_group"=>"12"}}])
|
18
|
+
expect(response.body).to eq([{"title"=>"independance", "category"=>{"age_group"=>"10"}}, {"title"=>"abc", "category"=>{"age_group"=>"12"}}].to_s)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "empty row array" do
|
22
|
+
Rows.new.build
|
23
|
+
response = RestClient.get "http://localhost:80/row"
|
24
|
+
expect(response.body).to eq("[]")
|
13
25
|
end
|
14
26
|
|
15
27
|
end
|
@@ -3,13 +3,13 @@ describe ClassTemplate, "#get_books" do
|
|
3
3
|
it "default request and response" do
|
4
4
|
Book.new.build()
|
5
5
|
response = RestClient.get "http://localhost:80/book",{:params => {:author=>'bharathi'}}
|
6
|
-
expect(response.body).to eq("title"=>"independance", "category"=>{"age_group"=>"10", "genre"=>"action", "publisher"=>{"name"=>"summa", "place"=>"erode"}})
|
6
|
+
expect(response.body).to eq({"title"=>"independance", "category"=>{"age_group"=>"10", "genre"=>"action", "publisher"=>{"name"=>"summa", "place"=>"erode"}}}.to_s)
|
7
7
|
end
|
8
8
|
|
9
9
|
it "dynamic response" do
|
10
10
|
Book.new.has_category({"age_group"=>"11", "publisher"=>{"name"=>"oxford"}}).build()
|
11
11
|
response = RestClient.get "http://localhost:80/book",{:params => {:author=>'bharathi'}}
|
12
|
-
expect(response.body).to eq("title"=>"independance", "category"=>{"age_group"=>"11", "genre"=>"action", "publisher"=>{"name"=>"oxford", "place"=>"erode"}})
|
12
|
+
expect(response.body).to eq({"title"=>"independance", "category"=>{"age_group"=>"11", "genre"=>"action", "publisher"=>{"name"=>"oxford", "place"=>"erode"}}}.to_s)
|
13
13
|
end
|
14
14
|
|
15
15
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
describe ClassTemplate, "#nested array" do
|
2
|
+
|
3
|
+
#it "empty" do
|
4
|
+
#NestedArray.new.build()
|
5
|
+
#response = RestClient.get "http://localhost:80/nested_array"
|
6
|
+
#expect(response.body).to eq({"title"=>"ind", "roles"=>[]}.to_s)
|
7
|
+
#end
|
8
|
+
|
9
|
+
it "default" do
|
10
|
+
NestedArray.new.has_role.build()
|
11
|
+
response = RestClient.get "http://localhost:80/nested_array"
|
12
|
+
expect(response.body).to eq({"title"=>"ind", "roles"=>[{"role_id"=>"chumma", "role_name"=>"sol"}]}.to_s)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "dynamic" do
|
16
|
+
NestedArray.new.has_role.has_role("role_id"=>"test").build()
|
17
|
+
response = RestClient.get "http://localhost:80/nested_array"
|
18
|
+
expect(response.body).to eq({"title"=>"ind", "roles"=>[{"role_id"=>"chumma", "role_name"=>"sol"},{"role_id"=>"test", "role_name"=>"sol"}]}.to_s)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -3,7 +3,7 @@ describe ClassTemplate, "#post_user" do
|
|
3
3
|
it "default request and response" do
|
4
4
|
User.new.build()
|
5
5
|
response = RestClient.post "http://localhost:80/users","name"=>"deepak"
|
6
|
-
expect(response.body).to eq("job"=>'sleeping_bag')
|
6
|
+
expect(response.body).to eq({"job"=>'sleeping_bag'}.to_s)
|
7
7
|
end
|
8
8
|
|
9
9
|
it "dynamic request and response" do
|
@@ -11,7 +11,7 @@ describe ClassTemplate, "#post_user" do
|
|
11
11
|
job = "vetti"
|
12
12
|
User.new.by_name(name).has_job(job).build()
|
13
13
|
response = RestClient.post "http://localhost:80/users","name"=>name
|
14
|
-
expect(response.body).to eq("job"=>job)
|
14
|
+
expect(response.body).to eq({"job"=>job}.to_s)
|
15
15
|
end
|
16
16
|
|
17
17
|
end
|
metadata
CHANGED
@@ -1,128 +1,128 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: poisol
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Deepak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pry
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rubygems-tasks
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0
|
61
|
+
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0
|
68
|
+
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: simplecov
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0
|
75
|
+
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0
|
82
|
+
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: webmock
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rest-client
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: activesupport
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
117
|
+
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - "
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
125
|
-
description:
|
124
|
+
version: '0'
|
125
|
+
description: Generate builders for http stubs
|
126
126
|
email:
|
127
127
|
executables: []
|
128
128
|
extensions: []
|
@@ -134,15 +134,16 @@ files:
|
|
134
134
|
- lib/poisol/domain.rb
|
135
135
|
- lib/poisol/stub_config.rb
|
136
136
|
- lib/poisol/stub_factory.rb
|
137
|
-
- lib/poisol/template/
|
137
|
+
- lib/poisol/template/base_template.rb
|
138
138
|
- lib/poisol/template/query_handler.rb
|
139
139
|
- lib/poisol/template/request_handler.rb
|
140
140
|
- lib/poisol/template/response_handler.rb
|
141
141
|
- lib/poisol/utils/file_util.rb
|
142
142
|
- lib/poisol/utils/parse.rb
|
143
|
-
- spec/
|
144
|
-
- spec/
|
145
|
-
- spec/
|
143
|
+
- spec/functional/array_spec.rb
|
144
|
+
- spec/functional/get_spec.rb
|
145
|
+
- spec/functional/nested_array_spec.rb
|
146
|
+
- spec/functional/post_spec.rb
|
146
147
|
- spec/spec_helper.rb
|
147
148
|
homepage: https://github.com/paramadeep/poisol
|
148
149
|
licenses:
|
@@ -167,9 +168,10 @@ rubyforge_project:
|
|
167
168
|
rubygems_version: 2.2.2
|
168
169
|
signing_key:
|
169
170
|
specification_version: 4
|
170
|
-
summary:
|
171
|
+
summary: Generate builders for http stubs
|
171
172
|
test_files:
|
172
173
|
- spec/spec_helper.rb
|
173
|
-
- spec/
|
174
|
-
- spec/
|
175
|
-
- spec/
|
174
|
+
- spec/functional/array_spec.rb
|
175
|
+
- spec/functional/get_spec.rb
|
176
|
+
- spec/functional/post_spec.rb
|
177
|
+
- spec/functional/nested_array_spec.rb
|