fson 0.0.4 → 0.0.6
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 +4 -4
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +6 -0
- data/Gemfile +5 -1
- data/Gemfile.lock +13 -3
- data/README.md +159 -1
- data/Rakefile +8 -8
- data/fson.gemspec +1 -2
- data/lib/fson/builder.rb +8 -7
- data/lib/fson/loader.rb +11 -0
- data/lib/fson/response.rb +7 -5
- data/lib/fson/version.rb +1 -1
- data/lib/generators/fson/install_generator.rb +14 -0
- data/lib/generators/fson/templates/initializer.rb +3 -0
- data/spec/fson/response/as_json_spec.rb +2 -2
- data/spec/spec_helper.rb +4 -1
- metadata +10 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8cddfef5d630ad5cf03719127dcbd0e8a5fa4236
|
4
|
+
data.tar.gz: c116041b17ede76525c20f74f5c8258bf19b3fad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb5cd1db604ab6d2309466e17800193a94386fbf75f745d2c5d4f19f3227a8cfc86e206ea1adf55e15d29f1d627d1459384dbcc0bbc0077edd1bbe8c86c3a01b
|
7
|
+
data.tar.gz: 45307d3145080234ea52640fc2f2c72596e2f675773d5b4a5625c49b2d8a20b37813b5c16e44b9b74870a19234c8735434881532c8b2fbf24f44d189c8e13c9f
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
fson
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.2.2
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fson (0.0.
|
5
|
-
oj (~> 2.12)
|
4
|
+
fson (0.0.6)
|
6
5
|
|
7
6
|
GEM
|
8
7
|
remote: https://rubygems.org/
|
9
8
|
specs:
|
9
|
+
codeclimate-test-reporter (0.4.7)
|
10
|
+
simplecov (>= 0.7.1, < 1.0.0)
|
10
11
|
diff-lcs (1.2.5)
|
12
|
+
docile (1.1.5)
|
13
|
+
json (1.8.3)
|
11
14
|
oj (2.12.10)
|
12
15
|
rake (10.4.2)
|
13
16
|
rspec (3.3.0)
|
@@ -23,11 +26,18 @@ GEM
|
|
23
26
|
diff-lcs (>= 1.2.0, < 2.0)
|
24
27
|
rspec-support (~> 3.3.0)
|
25
28
|
rspec-support (3.3.0)
|
29
|
+
simplecov (0.10.0)
|
30
|
+
docile (~> 1.1.0)
|
31
|
+
json (~> 1.8)
|
32
|
+
simplecov-html (~> 0.10.0)
|
33
|
+
simplecov-html (0.10.0)
|
26
34
|
|
27
35
|
PLATFORMS
|
28
36
|
ruby
|
29
37
|
|
30
38
|
DEPENDENCIES
|
39
|
+
codeclimate-test-reporter
|
31
40
|
fson!
|
41
|
+
oj (~> 2.12.10)
|
32
42
|
rake (~> 10.4)
|
33
|
-
rspec
|
43
|
+
rspec (~> 3.3)
|
data/README.md
CHANGED
@@ -1 +1,159 @@
|
|
1
|
-
|
1
|
+
## Description
|
2
|
+
|
3
|
+
Fson is a fluent builder for simple JSON API responses
|
4
|
+
|
5
|
+
[](https://travis-ci.org/mkluczny/fson)
|
6
|
+
[](https://gemnasium.com/mkluczny/fson)
|
7
|
+
[](https://codeclimate.com/github/mkluczny/fson)
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
gem 'fson'
|
14
|
+
|
15
|
+
for Rails projects also
|
16
|
+
|
17
|
+
rails g fson:install
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
Create response builder
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
Fson::Response.new() # {}
|
25
|
+
```
|
26
|
+
|
27
|
+
with given status
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
Fson::Response.new('failure') # {"status": "failure"}
|
31
|
+
```
|
32
|
+
|
33
|
+
or use one of predefined factory methods
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
Fson::Response.success # {"status": "success"}
|
37
|
+
Fson::Response.error # {"status": "error"}
|
38
|
+
Fson::Response.fail # {"status": "fail"}
|
39
|
+
```
|
40
|
+
|
41
|
+
then add some data by passing hash
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
.data({:id => 12})
|
45
|
+
```
|
46
|
+
|
47
|
+
```json
|
48
|
+
{
|
49
|
+
"data": {
|
50
|
+
"id": 12
|
51
|
+
}
|
52
|
+
}
|
53
|
+
```
|
54
|
+
|
55
|
+
or defining block
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
.data { |data|
|
59
|
+
data[:id] = 12
|
60
|
+
}
|
61
|
+
```
|
62
|
+
|
63
|
+
```json
|
64
|
+
{
|
65
|
+
"data": {
|
66
|
+
"id": 12
|
67
|
+
}
|
68
|
+
}
|
69
|
+
```
|
70
|
+
|
71
|
+
optionally add errors
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
.error('not authorized') { |e|
|
75
|
+
e[:code] = 401
|
76
|
+
}.error('null pointer exception')
|
77
|
+
```
|
78
|
+
|
79
|
+
```json
|
80
|
+
{
|
81
|
+
"errors": [
|
82
|
+
{
|
83
|
+
"message": "not authorized",
|
84
|
+
"code": 401
|
85
|
+
},
|
86
|
+
{
|
87
|
+
"message": "null pointer exception"
|
88
|
+
}
|
89
|
+
]
|
90
|
+
}
|
91
|
+
```
|
92
|
+
|
93
|
+
and finally get JSON with
|
94
|
+
|
95
|
+
```ruby
|
96
|
+
.as_json
|
97
|
+
```
|
98
|
+
|
99
|
+
## Example
|
100
|
+
|
101
|
+
Builder chain
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
Fson::Response.fail.data {|data| data[:id] = 12}.error('not authorized').as_json
|
105
|
+
```
|
106
|
+
|
107
|
+
will return
|
108
|
+
|
109
|
+
```json
|
110
|
+
{
|
111
|
+
"status": "fail",
|
112
|
+
"data": {
|
113
|
+
"id": 12
|
114
|
+
},
|
115
|
+
"errors": [
|
116
|
+
{
|
117
|
+
"message": "not authorized"
|
118
|
+
}
|
119
|
+
]
|
120
|
+
}
|
121
|
+
```
|
122
|
+
|
123
|
+
## Custom builders
|
124
|
+
|
125
|
+
You can add custom builder methods operating on response hash objects
|
126
|
+
|
127
|
+
```ruby
|
128
|
+
@_response # top level response hash
|
129
|
+
@_data # data hash
|
130
|
+
@_errors # errors hash
|
131
|
+
```
|
132
|
+
|
133
|
+
For example you can add builder
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
module MyCustomBuilder
|
137
|
+
|
138
|
+
def attribute(value)
|
139
|
+
@_data[:attribute] = value
|
140
|
+
self
|
141
|
+
end
|
142
|
+
end
|
143
|
+
```
|
144
|
+
|
145
|
+
by registering it in initializer
|
146
|
+
|
147
|
+
```ruby
|
148
|
+
require 'fson/loader'
|
149
|
+
|
150
|
+
::Fson::Loader::configure([MyCustomBuilder])
|
151
|
+
```
|
152
|
+
|
153
|
+
## Contributing
|
154
|
+
|
155
|
+
1. Fork it
|
156
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
157
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
158
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
159
|
+
5. Create new Pull Request
|
data/Rakefile
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
|
5
|
+
RSpec::Core::RakeTask.new
|
6
|
+
|
7
|
+
task :default => :spec
|
8
|
+
task :test => :spec
|
data/fson.gemspec
CHANGED
@@ -4,7 +4,7 @@ Gem::Specification.new do |s|
|
|
4
4
|
s.name = 'fson'
|
5
5
|
s.version = Fson::VERSION
|
6
6
|
|
7
|
-
s.summary = '
|
7
|
+
s.summary = 'Fluent builder for API JSON responses'
|
8
8
|
s.description = 'Building simple JSON responses with fluent builder'
|
9
9
|
|
10
10
|
s.authors = ['Mateusz Kluczny']
|
@@ -18,7 +18,6 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_path = ['lib']
|
20
20
|
|
21
|
-
s.add_runtime_dependency 'oj', '~> 2.12'
|
22
21
|
s.add_development_dependency 'rspec', '~> 3.3'
|
23
22
|
s.add_development_dependency 'rake', '~> 10.4'
|
24
23
|
end
|
data/lib/fson/builder.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Fson
|
2
|
-
module
|
2
|
+
module Builder
|
3
3
|
|
4
4
|
def data(data = nil, &block)
|
5
5
|
if data
|
@@ -15,12 +15,13 @@ module Fson
|
|
15
15
|
self
|
16
16
|
end
|
17
17
|
|
18
|
-
def error(message,
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
def error(message, &block)
|
19
|
+
error = { :message => message }
|
20
|
+
|
21
|
+
yield(error) if block_given?
|
22
|
+
|
23
|
+
@_errors << error
|
24
|
+
|
24
25
|
self
|
25
26
|
end
|
26
27
|
end
|
data/lib/fson/loader.rb
ADDED
data/lib/fson/response.rb
CHANGED
@@ -12,16 +12,18 @@ module Fson
|
|
12
12
|
# Constructor
|
13
13
|
##
|
14
14
|
|
15
|
-
def initialize(status)
|
16
|
-
@_response = {
|
17
|
-
:status => status
|
18
|
-
}
|
15
|
+
def initialize(status = nil)
|
16
|
+
@_response = {}
|
19
17
|
@_data = {}
|
20
18
|
@_errors = []
|
19
|
+
|
20
|
+
unless status.nil?
|
21
|
+
@_response[:status] = status
|
22
|
+
end
|
21
23
|
end
|
22
24
|
|
23
25
|
def as_json
|
24
|
-
::Oj.dump(build)
|
26
|
+
::Oj.dump(build, :mode => :compat)
|
25
27
|
end
|
26
28
|
|
27
29
|
class << self
|
data/lib/fson/version.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
module Fson
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
|
5
|
+
def self.source_root
|
6
|
+
@source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
|
7
|
+
end
|
8
|
+
|
9
|
+
def create_initializer
|
10
|
+
template 'initializer.rb', File.join('config', 'initializers', 'fson.rb')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -7,11 +7,11 @@ describe ::Fson::Response do
|
|
7
7
|
it 'should return json response' do
|
8
8
|
# given
|
9
9
|
response = ::Fson::Response.error
|
10
|
-
.error('invalid'
|
10
|
+
.error('invalid') { |e| e[:id] = 'text-set-1'}
|
11
11
|
.data { |data| data[:author] = 'Mateusz Kluczny' }
|
12
12
|
|
13
13
|
# when/then
|
14
|
-
expect(response.as_json).to eq("{\"
|
14
|
+
expect(response.as_json).to eq("{\"status\":\"error\",\"data\":{\"author\":\"Mateusz Kluczny\"},\"errors\":[{\"message\":\"invalid\",\"id\":\"text-set-1\"}]}")
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fson
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mateusz Kluczny
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: oj
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '2.12'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '2.12'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rspec
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -60,6 +46,9 @@ extra_rdoc_files: []
|
|
60
46
|
files:
|
61
47
|
- ".gitignore"
|
62
48
|
- ".rspec"
|
49
|
+
- ".ruby-gemset"
|
50
|
+
- ".ruby-version"
|
51
|
+
- ".travis.yml"
|
63
52
|
- Gemfile
|
64
53
|
- Gemfile.lock
|
65
54
|
- README.md
|
@@ -67,8 +56,11 @@ files:
|
|
67
56
|
- fson.gemspec
|
68
57
|
- lib/fson.rb
|
69
58
|
- lib/fson/builder.rb
|
59
|
+
- lib/fson/loader.rb
|
70
60
|
- lib/fson/response.rb
|
71
61
|
- lib/fson/version.rb
|
62
|
+
- lib/generators/fson/install_generator.rb
|
63
|
+
- lib/generators/fson/templates/initializer.rb
|
72
64
|
- spec/fson/response/as_json_spec.rb
|
73
65
|
- spec/fson/response/error_spec.rb
|
74
66
|
- spec/fson/response/fail_spec.rb
|
@@ -95,10 +87,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
87
|
version: '0'
|
96
88
|
requirements: []
|
97
89
|
rubyforge_project:
|
98
|
-
rubygems_version: 2.4.
|
90
|
+
rubygems_version: 2.4.6
|
99
91
|
signing_key:
|
100
92
|
specification_version: 4
|
101
|
-
summary:
|
93
|
+
summary: Fluent builder for API JSON responses
|
102
94
|
test_files:
|
103
95
|
- spec/fson/response/as_json_spec.rb
|
104
96
|
- spec/fson/response/error_spec.rb
|