jbuilder_serializer 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 36be22338d778f94c7d1ace10fecf99e9a4773c9
4
+ data.tar.gz: 17df7d38e3053f72ad641eea495062bc4c5d36bf
5
+ SHA512:
6
+ metadata.gz: ecab5ff70cda045f9ac6abc3e0c567bf0fafe98ae2d4417212c851b49d45f0c0c3ff6a8459166ad352eec2d9b5761081e710f527131988ee1ceaa4f22c781c10
7
+ data.tar.gz: 55a259fa910258fd6585534357f6a1c5238caa98cd020cce7277acdaeb4791253b8bc585a4698ba4bea79a37b904f20053aca8e086052fd93770b6efe2b50c15
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in jeckle.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,63 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ jbuilder_serializer (0.0.1)
5
+ actionpack (~> 4.0)
6
+ jbuilder (~> 2.2.2)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actionpack (4.1.6)
12
+ actionview (= 4.1.6)
13
+ activesupport (= 4.1.6)
14
+ rack (~> 1.5.2)
15
+ rack-test (~> 0.6.2)
16
+ actionview (4.1.6)
17
+ activesupport (= 4.1.6)
18
+ builder (~> 3.1)
19
+ erubis (~> 2.7.0)
20
+ activesupport (4.1.6)
21
+ i18n (~> 0.6, >= 0.6.9)
22
+ json (~> 1.7, >= 1.7.7)
23
+ minitest (~> 5.1)
24
+ thread_safe (~> 0.1)
25
+ tzinfo (~> 1.1)
26
+ builder (3.2.2)
27
+ diff-lcs (1.2.5)
28
+ erubis (2.7.0)
29
+ i18n (0.6.11)
30
+ jbuilder (2.2.2)
31
+ activesupport (>= 3.0.0, < 5)
32
+ multi_json (~> 1.2)
33
+ json (1.8.1)
34
+ minitest (5.4.2)
35
+ multi_json (1.10.1)
36
+ rack (1.5.2)
37
+ rack-test (0.6.2)
38
+ rack (>= 1.0)
39
+ rake (10.3.2)
40
+ rspec (3.1.0)
41
+ rspec-core (~> 3.1.0)
42
+ rspec-expectations (~> 3.1.0)
43
+ rspec-mocks (~> 3.1.0)
44
+ rspec-core (3.1.7)
45
+ rspec-support (~> 3.1.0)
46
+ rspec-expectations (3.1.2)
47
+ diff-lcs (>= 1.2.0, < 2.0)
48
+ rspec-support (~> 3.1.0)
49
+ rspec-mocks (3.1.3)
50
+ rspec-support (~> 3.1.0)
51
+ rspec-support (3.1.2)
52
+ thread_safe (0.3.4)
53
+ tzinfo (1.2.2)
54
+ thread_safe (~> 0.1)
55
+
56
+ PLATFORMS
57
+ ruby
58
+
59
+ DEPENDENCIES
60
+ bundler (~> 1.7)
61
+ jbuilder_serializer!
62
+ rake
63
+ rspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Mateus Gomes
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # Jbuilder Serializer
2
+
3
+ Serializers integrated with jbuilder views.
4
+
5
+ Provides a class to handle variables assignment and uses a jbuilder view to define the JSON structure. Useful for using jbuilder outside of a controller `render` call.
@@ -0,0 +1,27 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+
4
+ require 'jbuilder/serializer/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'jbuilder_serializer'
8
+ spec.version = Jbuilder::Serializer::VERSION
9
+ spec.authors = ['Mateus Gomes']
10
+ spec.email = ['mateusg.18@gmail.com']
11
+ spec.description = 'Allows creation of serializer classes integrated with jbuilder views'
12
+ spec.summary = 'Allows creation of serializer classes integrated with jbuilder views'
13
+ spec.homepage = 'https://github.com/mateusg/jbuilder_serializer'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_dependency 'actionpack', '~> 4.0'
22
+ spec.add_dependency 'jbuilder', '~> 2.2.2'
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.7'
25
+ spec.add_development_dependency 'rake'
26
+ spec.add_development_dependency 'rspec'
27
+ end
@@ -0,0 +1,86 @@
1
+ require 'active_support'
2
+ require 'action_controller'
3
+
4
+ # Wraps jbuilder into a serializer class, so it can be used outside of a controller action.
5
+ #
6
+ # == Usage
7
+ #
8
+ # Create a serializer and define the `template_path` and `locals` for jbuilder view.
9
+ #
10
+ # # app/serializers/order_create_serializer.rb
11
+ # class OrderCreateSerializer < Jbuilder::Serializer
12
+ # set_template_path File.expand_path('views', __dir__)
13
+ #
14
+ # locals do |attrs|
15
+ # @order = attrs[:order]
16
+ # @author = attrs[:user]
17
+ # @items = @order.items.select &:active?
18
+ # end
19
+ # end
20
+ #
21
+ # Create your jbuilder view file and place it on the folder specified through `template_path`.
22
+ #
23
+ # # app/serializers/views/order_create.json.jbuilder
24
+ # json.order do
25
+ # json.created_by @author.username
26
+ # json.id @order.id
27
+ # json.items @items do |item|
28
+ # json.id item.id
29
+ # json.quantity item.quantity
30
+ # end
31
+ # end
32
+ #
33
+ # Then instantiate the serializer, providing its args for `locals` assignment.
34
+ #
35
+ # serializer = OrderCreateSerializer.new(order: @order, user: current_user)
36
+ # serializer.to_json
37
+ # => "{\"order\": {\"created_by\": \"donald-duck\", \"id\":34, \"items\": [{\"id\": 78, \"quantity\": 1},{\"id\": 94, \"quantity\": 3}]}}"
38
+ #
39
+ module Jbuilder
40
+ class Serializer
41
+ class_attribute :locals_block, :template_path
42
+
43
+ # Sets locals (instance variables) to be used within the jbuilder template.
44
+ def self.locals(&block)
45
+ raise ArgumentError, 'no block given' unless block_given?
46
+
47
+ self.locals_block = block
48
+ end
49
+
50
+ # Sets path to look for jbuilder templates.
51
+ def self.set_template_path(path)
52
+ self.template_path = path
53
+ end
54
+
55
+ def self.inherited(base)
56
+ base.class_eval do
57
+ @locals_block = superclass.locals_block
58
+ @template_path = superclass.template_path
59
+ end
60
+ end
61
+
62
+ def initialize(*args)
63
+ renderer.instance_exec *args, &locals_block if locals_block
64
+ end
65
+
66
+ # Jbuilder view name. By default, it has the same name as the serializer.
67
+ def template_name
68
+ self.class.name.demodulize.underscore.gsub '_serializer', ''
69
+ end
70
+
71
+ # Returns resulting json as string.
72
+ def to_json
73
+ renderer.render_to_string template: template_name, handler: :jbuilder
74
+ end
75
+
76
+ private
77
+
78
+ def renderer
79
+ @renderer ||= ActionController::Base.new.tap do |r|
80
+ r.prepend_view_path template_path
81
+ r.lookup_context.formats = [:json]
82
+ r.lookup_context.handlers = [:jbuilder]
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,5 @@
1
+ module Jbuilder
2
+ class Serializer
3
+ VERSION = '0.0.1'
4
+ end
5
+ end
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Jbuilder::Serializer do
4
+ subject(:serializer) { serializer_class.new }
5
+
6
+ let(:serializer_class) { Class.new described_class }
7
+ let(:renderer) { serializer.send :renderer }
8
+
9
+ before do
10
+ allow(serializer_class).to receive(:name).and_return 'SampleSerializer'
11
+ end
12
+
13
+ describe '.set_template_path' do
14
+ let(:template_path) { 'name' }
15
+
16
+ it 'sets template_path for instances' do
17
+ serializer_class.set_template_path template_path
18
+
19
+ expect(serializer_class.new.template_path).to eq template_path
20
+ end
21
+ end
22
+
23
+ describe '.locals' do
24
+ context 'when no block is given' do
25
+ it 'raises error' do
26
+ expect {
27
+ serializer_class.locals
28
+ }.to raise_error ArgumentError, /no block given/
29
+ end
30
+ end
31
+
32
+ context 'when a block is given' do
33
+ before { serializer_class.locals { 1 } }
34
+
35
+ it 'assigns it into @locals_block for later evaluation' do
36
+ expect(serializer_class.locals_block).to be_a Proc
37
+ end
38
+ end
39
+ end
40
+
41
+ describe '#initialize' do
42
+ before do
43
+ serializer_class.locals do
44
+ @name = 'Daenerys Targaryen'
45
+ @polemicos = 'name'
46
+ end
47
+ end
48
+
49
+ it 'executes locals block on renderer context' do
50
+ expect(renderer.instance_variable_get('@name')).to eq 'Daenerys Targaryen'
51
+ expect(renderer.instance_variable_get('@polemicos')).to eq 'name'
52
+ end
53
+ end
54
+
55
+ describe '#to_json' do
56
+ it 'renders jbuilder template as string' do
57
+ expect(renderer).to receive(:render_to_string).with handler: :jbuilder, template: serializer.template_name
58
+
59
+ serializer.to_json
60
+ end
61
+ end
62
+
63
+ describe '#template_name' do
64
+ it 'returns class name without _serializer suffix' do
65
+ expect(serializer.template_name).to eq 'sample'
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,6 @@
1
+ require 'bundler/setup'
2
+ require 'jbuilder/serializer'
3
+
4
+ RSpec.configure do |config|
5
+ config.disable_monkey_patching!
6
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jbuilder_serializer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Mateus Gomes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: actionpack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: jbuilder
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.2.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.2.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.7'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Allows creation of serializer classes integrated with jbuilder views
84
+ email:
85
+ - mateusg.18@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - Gemfile
91
+ - Gemfile.lock
92
+ - LICENSE
93
+ - README.md
94
+ - jbuilder_serializer.gemspec
95
+ - lib/jbuilder/serializer.rb
96
+ - lib/jbuilder/serializer/version.rb
97
+ - spec/serializers/jbuilder/serializer.rb
98
+ - spec/spec_helper.rb
99
+ homepage: https://github.com/mateusg/jbuilder_serializer
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.2.2
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: Allows creation of serializer classes integrated with jbuilder views
123
+ test_files:
124
+ - spec/serializers/jbuilder/serializer.rb
125
+ - spec/spec_helper.rb
126
+ has_rdoc: