jsender 0.2.2 → 1.1.0

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: 41dc1af6a6d32c30e127c4a4839762530dfd09e8
4
- data.tar.gz: 7079f464d53d03346ecc2de6679e64e525da1fa6
3
+ metadata.gz: 2e4c38c81ff6bb317e2715c8df12d0c983c83a96
4
+ data.tar.gz: e6df08c2c1f7fefb0b45cb5e6f7b51f36157638c
5
5
  SHA512:
6
- metadata.gz: a1e1f9361c31c0a95a6e438293b8334527b60e5aff5ec6301b4650f506d4c958585b68aad362b10e68f00f23d283158f652f84702aa585fbbc4c173ea99023e5
7
- data.tar.gz: f3fdcbb00665b7347dacc6eb1d833ff746926832a4dc20a8b96fb775698ff9a3259bd98c0a317d1e3481e006b16bbfb864bfffc4bacf762a9feafd1205ed4b36
6
+ metadata.gz: 8c72f304dd65b6eddd5fe69c4aa0649b972d6be0bb4f10def994f78e86054aca0125fdb8c6d33be030a5ecf998523efcc2d45b2bdce3f21ae7e4188a9b99ea34
7
+ data.tar.gz: bc9f62329360394a99a6a5c71fc5119d6c7715d4f88e3cb3e554100c1b95588dee4e0fd01c1f5d3857c2bda5ac9330f49dd3247435952929c25fc493e142218f
data/.gitignore CHANGED
@@ -8,3 +8,4 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  *.gem
11
+ .byebug_history
data/.travis.yml CHANGED
@@ -1,4 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.2.2
4
- before_install: gem install bundler -v 1.10.6
4
+ - 2.3
5
+ - 2.4
6
+ before_install:
data/README.md CHANGED
@@ -1,9 +1,14 @@
1
1
  # Jsender
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/jsender.png)](https://badge.fury.io/rb/jsender)
4
+ [![Build Status](https://travis-ci.org/hetznerZA/jsender.svg?branch=master)](https://travis-ci.org/hetznerZA/jsender)
5
+ [![Coverage Status](https://coveralls.io/repos/github/hetznerZA/jsender/badge.svg?branch=master)](https://coveralls.io/github/hetznerZA/jsender?branch=master)
6
+ [![Codacy Badge](https://api.codacy.com/project/badge/Grade/2823754c19964ba698f0a90167583d94)](https://www.codacy.com/app/ernst-van-graan/jsender?utm_source=github.com&utm_medium=referral&utm_content=hetznerZA/jsender&utm_campaign=Badge_Grade)
4
7
 
5
8
  JSender facilitates a simple jsend implementation for ruby. You can report success, error, fail, success with data, fail with data. The jsend response contains 'status' and 'data'. 'data' contains what-ever you put in it, as well as a 'notifications' array. Helpers are provided to check whether a notification is present and whether a specific data key is present. On error the response contains 'message'.
6
9
 
10
+ For more info about JSend refer to https://labs.omniti.com/labs/jsend
11
+
7
12
  ## Installation
8
13
 
9
14
  Add this line to your application's Gemfile:
@@ -21,84 +26,71 @@ Or install it yourself as:
21
26
  $ gem install jsender
22
27
 
23
28
  ## Usage
24
-
25
- ```
26
- require 'jsender'
27
-
28
- class CodeClass
29
- include Jsender
30
- end
31
- ```
32
-
33
- ```
34
- iut = CodeClass.new
35
- ```
36
-
37
29
  ### Returns Ruby Hash
38
30
 
39
31
  ```
40
- iut.success
41
- => {"status"=>"success", "data"=>{"result"=>nil, "notifications"=>["success"]}}
32
+ Jsender.success
33
+ => {"status"=>"success", "data"=>{"result"=>nil, "notifications"=>["success"]}}
42
34
 
43
- iut.success('happy day')
44
- => {"status"=>"success", "data"=>{"result"=>nil, "notifications"=>["happy day"]}}
35
+ Jsender.success('happy day')
36
+ => {"status"=>"success", "data"=>{"result"=>nil, "notifications"=>["happy day"]}}
45
37
 
46
- result = iut.success_data({ 'a' => 'A', 'b' => 'B' })
47
- => {"status"=>"success", "data"=>{"a"=>"A", "b"=>"B", "notifications"=>["success"]}}
48
- iut.has_data?(result, 'b')
38
+ result = Jsender.success_data({ 'a' => 'A', 'b' => 'B' })
39
+ => {"status"=>"success", "data"=>{"a"=>"A", "b"=>"B", "notifications"=>["success"]}}
40
+ Jsender.has_data?(result, 'b')
49
41
  => true
50
42
 
51
- result = iut.success('some data for you', ['d', 'a', 't', 'a'])
52
- => {"status"=>"success", "data"=>{"result"=>["d", "a", "t", "a"], "notifications"=>["some data for you"]}}
53
- iut.has_data?(result, 'result')
43
+ result = Jsender.success('some data for you', ['d', 'a', 't', 'a'])
44
+ => {"status"=>"success", "data"=>{"result"=>["d", "a", "t", "a"], "notifications"=>["some data for you"]}}
45
+ Jsender.has_data?(result, 'result')
54
46
  => true
55
- iut.notifications_include?(result, 'ata fo')
47
+ Jsender.notifications_include?(result, 'ata fo')
56
48
  => true
57
49
 
58
- iut.error
59
- => {"status"=>"error", "message"=>nil}
50
+ Jsender.error
51
+ => {"status"=>"error", "message"=>nil}
60
52
 
61
- iut.error('something went wrong')
62
- => {"status"=>"error", "message"=>"something went wrong"}
53
+ Jsender.error('something went wrong')
54
+ => {"status"=>"error", "message"=>"something went wrong"}
63
55
 
64
- iut.fail
65
- => {"status"=>"fail", "data"=>{"result"=>nil, "notifications"=>["fail"]}}
56
+ Jsender.failure
57
+ => {"status"=>"fail", "data"=>{"result"=>nil, "notifications"=>["fail"]}}
66
58
 
67
- iut.fail('a failure occurred')
68
- => {"status"=>"fail", "data"=>{"result"=>nil, "notifications"=>["a failure occurred"]}}
59
+ Jsender.failure('a failure occurred')
60
+ => {"status"=>"fail", "data"=>{"result"=>nil, "notifications"=>["a failure occurred"]}}
69
61
 
70
- iut.fail('a failure occurred', ['d', 'a', 't', 'a'])
71
- => {"status"=>"fail", "data"=>{"result"=>["d", "a", "t", "a"], "notifications"=>["a failure occurred"]}}
62
+ Jsender.failure('a failure occurred', ['d', 'a', 't', 'a'])
63
+ => {"status"=>"fail", "data"=>{"result"=>["d", "a", "t", "a"], "notifications"=>["a failure occurred"]}}
72
64
  ```
73
65
 
74
66
  ### Returns JSON
75
67
 
76
68
  ```
77
- iut.success_json
69
+ Jsender.success_json
78
70
  => "{\"status\":\"success\", \"data\": null}"
79
71
 
80
- iut.success_json({:key1 => 'value1'})
72
+ Jsender.success_json({:key1 => 'value1'})
81
73
  => "{\"status\":\"success\",\"data\":{\"key1\":\"value1\"}}"
82
74
 
83
- iut.fail_json
75
+ Jsender.fail_json
84
76
  => "{\"status\": \"fail\", \"data\": null}"
85
77
 
86
- iut.fail_json({:key1 => "value1"})
78
+ Jsender.fail_json({:key1 => "value1"})
87
79
  => "{\"status\":\"fail\",\"data\":{\"key1\":\"value1\"}}"
88
80
 
89
- iut.error_json
81
+ Jsender.error_json
90
82
  => ArgumentError, 'Missing required argument message'
91
83
 
92
- iut.error_json('My little error')
84
+ Jsender.error_json('My little error')
93
85
  => "{\"status\":\"error\", \"message\":\"My little error\"}"
94
86
 
95
- iut.error_json('Another little error', 401)
87
+ Jsender.error_json('Another little error', 401)
96
88
  => "{\"status\":\"error\",\"message\":\"Another little error\",\"code\":401}"
97
89
 
98
- iut.error_json('Another little error', 401, {:key1 => 'cause of another little error'})
90
+ Jsender.error_json('Another little error', 401, {:key1 => 'cause of another little error'})
99
91
  => "{\"status\":\"error\",\"message\":\"Another little error\",\"code\":401,\"data\":{\"key1\":\"cause of another little error\"}}"
100
92
 
101
- iut.error_json('Another little error', {:key1 => 'cause of another little error'})
93
+ Jsender.error_json('Another little error', {:key1 => 'cause of another little error'})
102
94
  => "{\"status\":\"error\",\"message\":\"Another little error\",\"data\":{\"key1\":\"cause of another little error\"}}"
103
95
  ```
104
96
 
@@ -116,4 +108,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/hetzne
116
108
  ## License
117
109
 
118
110
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
119
-
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ task :default => :test
3
2
 
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task :default => :spec
3
+ task :test do
4
+ sh %{bundle install}
5
+ sh %{bundle exec rspec -cfd spec}
6
+ end
data/jsender.gemspec CHANGED
@@ -20,8 +20,9 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ["lib"]
21
21
  spec.required_ruby_version = ['>=2.0.0']
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.10"
24
- spec.add_development_dependency "rake", "~> 10.0"
25
- spec.add_development_dependency "rspec", "~> 3.5.0"
26
- # spec.add_development_dependency "byebug"
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "rspec"
26
+ spec.add_development_dependency 'coveralls'
27
+ spec.add_development_dependency 'byebug'
27
28
  end
data/lib/jsender.rb CHANGED
@@ -1,25 +1,26 @@
1
1
  require 'jsender/version'
2
2
 
3
3
  module Jsender
4
+ extend self
4
5
 
5
6
  def report(status, message, result = nil)
6
- return { 'status' => 'error', 'message' => message } if status == 'error'
7
+ return {'status' => 'error', 'message' => message} if status == 'error'
7
8
  data = compile_data(result)
8
- data['notifications'] = message.is_a?(Array) ? message : [ message ]
9
- { 'status' => status, 'data' => data }
9
+ data['notifications'] = message.is_a?(Array) ? message : [message]
10
+ {'status' => status, 'data' => data}
10
11
  end
11
12
 
12
13
  def error(message = nil)
13
14
  report('error', message)
14
15
  end
15
16
 
16
- def fail(message = nil, data = nil)
17
+ def failure(message = nil, data = nil)
17
18
  message ||= 'fail'
18
19
  report('fail', message, data)
19
20
  end
20
21
 
21
22
  def fail_data(data = nil)
22
- fail(nil, data)
23
+ failure(nil, data)
23
24
  end
24
25
 
25
26
  def success_data(data = nil)
@@ -39,7 +40,7 @@ module Jsender
39
40
  end
40
41
 
41
42
  def notifications_include?(result, pattern)
42
- return false if not has_data?(result, 'notifications')
43
+ return false unless has_data?(result, 'notifications')
43
44
  result['data']['notifications'].to_s.include?(pattern)
44
45
  end
45
46
 
@@ -47,22 +48,22 @@ module Jsender
47
48
  # @param data optional [Hash]
48
49
  # @return [String] jsend json
49
50
  def success_json(data = nil)
50
- raise ArgumentError, 'Optional data argument should be of type Hash' if not data.is_a? Hash and not data.nil?
51
+ raise ArgumentError, 'Optional data argument should be of type Hash' if invalid_hash?(data)
51
52
  return JSON.generate({
52
- :status => 'success',
53
- :data => data
54
- })
53
+ :status => 'success',
54
+ :data => data
55
+ })
55
56
  end
56
57
 
57
58
  ##
58
59
  # @param data optional [Hash]
59
60
  # @return [String] jsend json
60
61
  def fail_json(data = nil)
61
- raise ArgumentError, 'Optional data argument should be of type Hash' if not data.is_a? Hash and not data.nil?
62
+ raise ArgumentError, 'Optional data argument should be of type Hash' if invalid_hash?(data)
62
63
  return JSON.generate({
63
- :status => 'fail',
64
- :data => data
65
- })
64
+ :status => 'fail',
65
+ :data => data
66
+ })
66
67
  end
67
68
 
68
69
  ##
@@ -71,27 +72,65 @@ module Jsender
71
72
  # @param data optional [Hash]
72
73
  # @return [String] jsend json
73
74
  def error_json(msg, code = nil, data = nil)
74
- raise ArgumentError, 'Missing required message of type String' if msg.empty? or not msg.is_a? String
75
- code, data = nil, code if not code.is_a? Integer and code.is_a? Hash and data.nil?
76
- raise ArgumentError, 'Optional data argument should be of type Hash' if not data.nil? and not data.is_a? Hash
77
- raise ArgumentError, 'Optional code argument should be of type Integer' if not code.nil? and not code.is_a? Integer
75
+ code, data = validate_and_sanitize(msg, code, data)
78
76
  jsend = {
79
- :status => 'error',
80
- :message => msg
77
+ :status => 'error',
78
+ :message => msg
81
79
  }
82
- jsend['code'] = code if not code.nil?
83
- jsend['data'] = data if not data.nil?
84
- return JSON.generate(jsend)
80
+ generate_error_json(jsend, code, data)
85
81
  end
86
82
 
87
83
  private
88
84
 
85
+ def invalid_integer?(value)
86
+ (not value.nil?) and (not value.is_a? Integer)
87
+ end
88
+
89
+ def invalid_hash?(data)
90
+ if not data.nil?
91
+ return true if not data.is_a? Hash
92
+ end
93
+ false
94
+ end
95
+
96
+ def generate_error_json(jsend, code, data)
97
+ jsend['code'] = code unless code.nil?
98
+ jsend['data'] = data unless data.nil?
99
+ return JSON.generate(jsend)
100
+ end
101
+
102
+ def validate_and_sanitize(msg, code, data)
103
+ validate_message(msg)
104
+ code, data = set_code_and_data(code, data)
105
+ validate_data(data)
106
+ validate_code(code)
107
+ return code, data
108
+ end
109
+
110
+ def set_code_and_data(code, data)
111
+ code, data = nil, code if not code.is_a? Integer and code.is_a? Hash and data.nil?
112
+ return code, data
113
+ end
114
+
115
+ def validate_message(msg)
116
+ raise ArgumentError, 'Missing required message of type String' if msg.empty? or not msg.is_a? String
117
+ end
118
+
119
+ def validate_data(data)
120
+ raise ArgumentError, 'Optional data argument should be of type Hash' if invalid_hash?(data)
121
+ end
122
+
123
+ def validate_code(code)
124
+ raise ArgumentError, 'Optional code argument should be of type Integer' if invalid_integer?(code)
125
+ end
126
+
89
127
  def compile_data(result)
90
128
  data ||= {}
91
- result = { 'result' => result} if not result.is_a? Hash
129
+ result = {'result' => result} unless result.is_a? Hash
92
130
  result.each do |key, value|
93
131
  data[key] = value
94
132
  end
95
133
  data
96
134
  end
135
+
97
136
  end
@@ -1,3 +1,3 @@
1
1
  module Jsender
2
- VERSION = "0.2.2"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsender
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ernst van Graan
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-07-25 00:00:00.000000000 Z
12
+ date: 2017-08-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -17,42 +17,70 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '1.10'
20
+ version: '1.3'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '1.10'
27
+ version: '1.3'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '10.0'
34
+ version: '0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - "~>"
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: '10.0'
41
+ version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rspec
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - "~>"
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: 3.5.0
48
+ version: '0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - "~>"
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: coveralls
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: byebug
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
54
82
  - !ruby/object:Gem::Version
55
- version: 3.5.0
83
+ version: '0'
56
84
  description: JSender facilitates a simple jsend implementation for ruby
57
85
  email:
58
86
  - ernst.van.graan@hetzner.co.za
@@ -94,9 +122,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
122
  version: '0'
95
123
  requirements: []
96
124
  rubyforge_project:
97
- rubygems_version: 2.4.8
125
+ rubygems_version: 2.6.11
98
126
  signing_key:
99
127
  specification_version: 4
100
128
  summary: JSender facilitates a simple jsend implementation for ruby
101
129
  test_files: []
102
- has_rdoc: