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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4fcbeb995a43c675cf2210d7a48f603401bb2be8
4
- data.tar.gz: b81a8125b1ff49b2aba7adbabe655df9ca45a078
3
+ metadata.gz: c61f7f85517d8fdce4395b7bea859c1bde46c242
4
+ data.tar.gz: 3a974a5502173940f797601f09aa44d3569cd6fd
5
5
  SHA512:
6
- metadata.gz: 24f67fabbfcc8a8d97e93c64f3f7656c823701c61d1c4eaaa8121733664afbf6cac12e90539788c04b6a980386a4b9ee7614bce9bb16d1f2769508be43f2cd3a
7
- data.tar.gz: be0d4cfaf78a73a481407627500b83c47d1cffa0ec4fb1351cbd1bf7c47edebf35b6c9e3a48bdcafd85b346f92616145196358d47626a9ba87342b971396d110
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) [![Coverage Status](https://coveralls.io/repos/paramadeep/poisol/badge.png)](https://coveralls.io/r/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
- * Parent URL
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("by#{field[0].capitalize}") do |*value|
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
- define_singleton_method("with_#{field_name.underscore}") do |*input_value|
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
- @response_body.last[field_name] = actual_field_value.class.to_s == "Hash" ? @response_body.last[field_name].deep_merge(input_value) : input_value
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
- define_singleton_method("has_#{field_name.underscore}") do |*input_value|
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
- @response_body[field_name] = actual_field_value.class.to_s == "Hash" ? @response_body[field_name].deep_merge(input_value) : input_value
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
@@ -13,6 +13,7 @@ class Parse
13
13
  end
14
14
 
15
15
  def self.hash_array_to_column_hash hash_array
16
+ return [] if hash_array.blank?
16
17
  column_hash = Hash.new
17
18
  hash_array[0].each_key { |key| column_hash.merge!(key=>[])}
18
19
  hash_array.each do |hash|
@@ -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.1
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-09-16 00:00:00.000000000 Z
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: 3.1.0
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: 3.1.0
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: 10.3.2
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: 10.3.2
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.10.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.10.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.2.4
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.2.4
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.9.1
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.9.1
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: 1.18.0
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: 1.18.0
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: 1.7.2
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: 1.7.2
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: 4.1.6
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: 4.1.6
125
- description: Data builders for http stubs
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/class_template.rb
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/class_template/array_spec.rb
144
- - spec/class_template/get_spec.rb
145
- - spec/class_template/post_spec.rb
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: Data builders for http stubs
171
+ summary: Generate builders for http stubs
171
172
  test_files:
172
173
  - spec/spec_helper.rb
173
- - spec/class_template/post_spec.rb
174
- - spec/class_template/get_spec.rb
175
- - spec/class_template/array_spec.rb
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