mutils 0.2.25 → 0.2.27

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
  SHA256:
3
- metadata.gz: 1ad257d347c64dc901ac7ed7f4ebfa36344e46402dde6f9bcf44c501a8f7fabc
4
- data.tar.gz: 0c9415d7761185bf5673fa788ae07db20dc7012b0986c4ef7dda7202711a4058
3
+ metadata.gz: 6c381da1faa5f3165f54a17cddd246bfb5bfffa7ec9114766181556e529ffb4d
4
+ data.tar.gz: 27e8bdebcf4be2fc4cbb20771e44946df652447be534c19e68805525ad813356
5
5
  SHA512:
6
- metadata.gz: af41435a989b0dbb7709ad07b7b88811f808f39b66fbe3b8ca6e5ef299e4774f249cf50262fa3ccb4165d133c96f4ed2d167ab2ec88378f5008bc45878fa503e
7
- data.tar.gz: 8e3ef58f7af8103851982eae7fc23b09955a4884d50e7399855be14d202f0164248de6c84c98fe9cdff38f8bb3f3064582b8b69d18f3e933f8cb38f0ad2dea37
6
+ metadata.gz: 2a22ff71a77c8eaad11f69d9d7d9e1abd46e2727e8bd59576ac6bc5eabba3d32b246f5a6b54aaa4a3fb9aea3d33e3eec323c2df9d58fb92a4550d3f230c93244
7
+ data.tar.gz: 20d74b6f9062c88abe29ed3570acc09ae56bdcdffeb2499d85876b31a9a8a9a3076f4073eb7106a2d3ad58f088903f43cf99b232b957b49fa50059322f1b7fcd
data/.mergify.yml ADDED
@@ -0,0 +1,8 @@
1
+ pull_request_rules:
2
+ - name: automatic approve for Owner
3
+ conditions:
4
+ - author=niteshpurohit
5
+ - status-success=Travis CI - Pull Request
6
+ actions:
7
+ review:
8
+ message: 'LGTM'
data/.rubocop.yml CHANGED
@@ -1,2 +1,12 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
1
3
  AllCops:
2
- TargetRubyVersion: "2.5.0"
4
+ TargetRubyVersion: "2.5.0"
5
+ Naming/FileName:
6
+ Exclude:
7
+ - 'benchmark/benchmark-serializer-json.rb'
8
+ Style/Documentation:
9
+ Exclude:
10
+ - 'spec/**/*'
11
+ - 'test/**/*'
12
+ - 'benchmark/benchmark-serializer-json.rb'
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,37 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2019-11-25 04:01:32 +0800 using RuboCop version 0.76.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 2
10
+ # Configuration parameters: CountComments, ExcludedMethods.
11
+ # ExcludedMethods: refine
12
+ Metrics/BlockLength:
13
+ Max: 42
14
+
15
+ # Offense count: 1
16
+ # Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist, MethodDefinitionMacros.
17
+ # NamePrefix: is_, has_, have_
18
+ # NamePrefixBlacklist: is_, has_, have_
19
+ # NameWhitelist: is_a?
20
+ # MethodDefinitionMacros: define_method, define_singleton_method
21
+ Naming/PredicateName:
22
+ Exclude:
23
+ - 'spec/**/*'
24
+ - 'lib/mutils/serialization/serialization_methods.rb'
25
+
26
+ # Offense count: 1
27
+ # Cop supports --auto-correct.
28
+ Style/RescueModifier:
29
+ Exclude:
30
+ - 'lib/mutils/serialization/serialization_methods.rb'
31
+
32
+ # Offense count: 17
33
+ # Cop supports --auto-correct.
34
+ # Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
35
+ # URISchemes: http, https
36
+ Metrics/LineLength:
37
+ Max: 608
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.5.1
7
+ before_install: gem install bundler -v 2.0.1
data/CHANGELOG.md ADDED
@@ -0,0 +1,26 @@
1
+ # Changelog
2
+ ## [v0.2.27](https://github.com/niteshpurohit/mutils/tree/v0.2.27) (2019-11-25)
3
+
4
+ [Full Changelog](https://github.com/niteshpurohit/mutils/compare/v0.2.26...v0.2.27)
5
+ **Changes:**
6
+ - Code smells fixed.
7
+
8
+ ## [v0.2.26](https://github.com/niteshpurohit/mutils/tree/v0.2.26) (2019-11-24)
9
+
10
+ [Full Changelog](https://github.com/niteshpurohit/mutils/compare/v0.2.25...v0.2.26)
11
+
12
+ **Changes:**
13
+ - Added xml serialization.
14
+ - rubocop offenses handled remaining added to todo.
15
+ - root added for json, now
16
+ - name_tag option added for Serializers to have custom name while serializing to json or xml
17
+ - added option name_tag, true for json serializing to generate json with root
18
+
19
+ ## [v0.2.25](https://github.com/niteshpurohit/mutils/tree/v0.2.25) (2019-11-24)
20
+
21
+ [Full Changelog](https://github.com/niteshpurohit/mutils/compare/885f96959dd3701ac20ed0981b920be753c00db0...v0.2.25)
22
+
23
+ **Merged pull requests:**
24
+
25
+ - Feature/improve concurrency [\#4](https://github.com/niteshpurohit/mutils/pull/4) ([niteshpurohit](https://github.com/niteshpurohit))
26
+ - Testing Deploy [\#3](https://github.com/niteshpurohit/mutils/pull/3) ([niteshpurohit](https://github.com/niteshpurohit))
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in mutils.gemspec
4
6
  gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mutils (0.2.24)
4
+ mutils (0.2.27)
5
5
  activesupport (>= 4.2)
6
6
 
7
7
  GEM
@@ -28,19 +28,31 @@ GEM
28
28
  zeitwerk (~> 2.2)
29
29
  builder (3.2.3)
30
30
  concurrent-ruby (1.1.5)
31
+ coveralls (0.8.23)
32
+ json (>= 1.8, < 3)
33
+ simplecov (~> 0.16.1)
34
+ term-ansicolor (~> 1.3)
35
+ thor (>= 0.19.4, < 2.0)
36
+ tins (~> 1.6)
31
37
  crass (1.0.5)
32
38
  diff-lcs (1.3)
39
+ diffy (3.3.0)
40
+ docile (1.3.2)
33
41
  erubi (1.9.0)
34
42
  i18n (1.7.0)
35
43
  concurrent-ruby (~> 1.0)
44
+ json (2.2.0)
36
45
  loofah (2.3.1)
37
46
  crass (~> 1.0.2)
38
47
  nokogiri (>= 1.5.9)
39
48
  method_source (0.9.2)
40
49
  mini_portile2 (2.4.0)
41
50
  minitest (5.13.0)
51
+ naws_xml (0.1.1.pre)
52
+ ox (~> 2)
42
53
  nokogiri (1.10.5)
43
54
  mini_portile2 (~> 2.4.0)
55
+ ox (2.11.0)
44
56
  rack (2.0.7)
45
57
  rack-test (1.1.0)
46
58
  rack (>= 1.0, < 3)
@@ -61,6 +73,7 @@ GEM
61
73
  rspec-expectations (3.9.0)
62
74
  diff-lcs (>= 1.2.0, < 2.0)
63
75
  rspec-support (~> 3.9.0)
76
+ rspec-json_expectations (2.2.0)
64
77
  rspec-mocks (3.9.0)
65
78
  diff-lcs (>= 1.2.0, < 2.0)
66
79
  rspec-support (~> 3.9.0)
@@ -73,8 +86,20 @@ GEM
73
86
  rspec-mocks (~> 3.9.0)
74
87
  rspec-support (~> 3.9.0)
75
88
  rspec-support (3.9.0)
89
+ rspec-xml_helpers (1.0.5)
90
+ diff-lcs (~> 1.3)
91
+ diffy (~> 3.2)
92
+ naws_xml (= 0.1.1.pre)
93
+ simplecov (0.16.1)
94
+ docile (~> 1.1)
95
+ json (>= 1.8, < 3)
96
+ simplecov-html (~> 0.10.0)
97
+ simplecov-html (0.10.2)
98
+ term-ansicolor (1.7.1)
99
+ tins (~> 1.0)
76
100
  thor (0.20.3)
77
101
  thread_safe (0.3.6)
102
+ tins (1.22.2)
78
103
  tzinfo (1.2.5)
79
104
  thread_safe (~> 0.1)
80
105
  zeitwerk (2.2.1)
@@ -84,9 +109,12 @@ PLATFORMS
84
109
 
85
110
  DEPENDENCIES
86
111
  bundler (~> 2.0)
112
+ coveralls
87
113
  mutils!
88
114
  rake (~> 10.0)
115
+ rspec-json_expectations
89
116
  rspec-rails
117
+ rspec-xml_helpers
90
118
 
91
119
  BUNDLED WITH
92
120
  2.0.2
data/Makefile CHANGED
@@ -1,3 +1,5 @@
1
+ changelog:
2
+ github_changelog_generator --user niteshpurohit --project mutils
1
3
  build:
2
4
  bundle exec rake build
3
5
  release: build
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
-
1
+ [![Maintainability](https://api.codeclimate.com/v1/badges/2c937dd6d25937ec41bd/maintainability)](https://codeclimate.com/github/niteshpurohit/mutils/maintainability)
2
+ ![](https://ruby-gem-downloads-badge.herokuapp.com/mutils?type=total&color=brightgreen)
2
3
  [![Gem Version](https://badge.fury.io/rb/mutils.svg)](https://badge.fury.io/rb/mutils)
3
-
4
+ [![Coverage Status](https://coveralls.io/repos/github/niteshpurohit/mutils/badge.svg?branch=feature/coverall)](https://coveralls.io/github/niteshpurohit/mutils?branch=feature/coverall)
5
+ [![Build Status](https://travis-ci.com/niteshpurohit/mutils.svg?branch=master)](https://travis-ci.com/niteshpurohit/mutils)
4
6
  # Mutils
5
7
  ## Introduction
6
8
  `mutils` is collection of useful modules for `ruby on rails` which is tested and benchmarked against high load.
@@ -23,9 +25,9 @@ Or install it yourself as:
23
25
  ## Modules
24
26
  | Sno | Name | Status |
25
27
  |:---: |:-----------------: |:------: |
26
- | 1 | Serializer - JSON | Beta |
27
- | 2 | Serializer - XML | In-Dev |
28
- | 3 | Active Storage Helpers | In-Dev |
28
+ | 1 | Serializer - JSON | Done |
29
+ | 2 | Serializer - XML | Done |
30
+
29
31
  ## Usage
30
32
  ### Serializer - JSON
31
33
  JSON Serializer for Active Models
@@ -52,6 +54,7 @@ end
52
54
  1. Attributes
53
55
  2. Custom Methods
54
56
  3. Relations
57
+ 3. name_tag
55
58
 
56
59
  ##### Attributes
57
60
  Attributes are fields in the model itself. You can reference them by below example
@@ -101,7 +104,30 @@ class UserSerializer < Mutils::Serialization::BaseSerializer
101
104
  end
102
105
  end
103
106
  ```
104
- Usage: Use anywhere by
107
+ ##### name_tag
108
+ name_tag is used to provide custom name to serializer output keys for json or tags for xml
109
+
110
+ **Options**
111
+ - ``name_tag 'Person', true`` # Include Person or People in JSON serialization as root, true|false this only implies to root serializer
112
+ - ``name_tag 'Person', false`` # not Include Person or People in JSON serialization as root, true|false this only implies to root serializer
113
+ - ``name_tag 'Person'`` # same as ``name_tag 'Person', false``
114
+ - without name_tag, actual class name of scope object inside serializer will be used
115
+ ```ruby
116
+ # frozen_string_literal: true
117
+
118
+ # User Serializer
119
+ class UserSerializer < Mutils::Serialization::BaseSerializer
120
+ name_tag 'Person', true
121
+ attributes :id, :first_name, :last_name, :email
122
+ custom_methods :full_name
123
+
124
+ def full_name
125
+ "#{scope.first_name} #{scope.last_name}"
126
+ end
127
+ end
128
+ ```
129
+
130
+ #### Usage: Use anywhere by
105
131
 
106
132
  ```ruby
107
133
  user = User.first
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/inline'
2
4
 
3
5
  require_relative '../lib//mutils'
@@ -180,41 +182,41 @@ labels = Array.new(4) { |i| Label.new(i, "Label #{i}", 'ffffff') }
180
182
  issues = Array.new(10_000) { |i| Issue.new(i, i, "Issue #{i}", users.sample, labels.sample(rand(2..4))) }
181
183
 
182
184
  serializers = [
183
- {
184
- name: :as_json,
185
- serializer: -> { issues.as_json },
186
- output_inspector: ->(output) { output.first }
187
- },
188
- {
189
- name: :fast_jsonapi,
190
- serializer: -> { FastJsonApi::IssueSerializer.new(issues, include: [:labels, :user]).serializable_hash },
191
- output_inspector: ->(output) { output[:data].first }
192
- },
193
- {
194
- name: :grape_entity,
195
- serializer: -> { GrapeEntity::Issue.represent(issues).as_json },
196
- output_inspector: ->(output) { output.first }
197
- },
198
- {
199
- name: :blueprinter,
200
- serializer: -> { BluePrint::Issue.render_as_hash(issues) },
201
- output_inspector: ->(output) { output.first }
202
- },
203
- {
204
- name: :mutils,
205
- serializer: -> { Mutils::Issue.new(issues).as_json },
206
- output_inspector: ->(output) { output.first }
207
- },
208
- {
209
- name: :roar,
210
- serializer: -> { ROAR::IssueRepresenter.for_collection.new(issues).as_json },
211
- output_inspector: ->(output) { output.first }
212
- },
213
- {
214
- name: :panko,
215
- serializer: -> { Panko::ArraySerializer.new(issues, each_serializer: PANKO::IssueSerializer).as_json },
216
- output_inspector: ->(output) { output['subjects'].first }
217
- }
185
+ {
186
+ name: :as_json,
187
+ serializer: -> { issues.as_json },
188
+ output_inspector: ->(output) { output.first }
189
+ },
190
+ {
191
+ name: :fast_jsonapi,
192
+ serializer: -> { FastJsonApi::IssueSerializer.new(issues, include: %i[labels user]).serializable_hash },
193
+ output_inspector: ->(output) { output[:data].first }
194
+ },
195
+ {
196
+ name: :grape_entity,
197
+ serializer: -> { GrapeEntity::Issue.represent(issues).as_json },
198
+ output_inspector: ->(output) { output.first }
199
+ },
200
+ {
201
+ name: :blueprinter,
202
+ serializer: -> { BluePrint::Issue.render_as_hash(issues) },
203
+ output_inspector: ->(output) { output.first }
204
+ },
205
+ {
206
+ name: :mutils,
207
+ serializer: -> { Mutils::Issue.new(issues).as_json },
208
+ output_inspector: ->(output) { output.first }
209
+ },
210
+ {
211
+ name: :roar,
212
+ serializer: -> { ROAR::IssueRepresenter.for_collection.new(issues).as_json },
213
+ output_inspector: ->(output) { output.first }
214
+ },
215
+ {
216
+ name: :panko,
217
+ serializer: -> { Panko::ArraySerializer.new(issues, each_serializer: PANKO::IssueSerializer).as_json },
218
+ output_inspector: ->(output) { output['subjects'].first }
219
+ }
218
220
  ]
219
221
 
220
222
  # Display output
@@ -245,4 +247,4 @@ end
245
247
 
246
248
  b.compare!
247
249
  end
248
- end
250
+ end
data/bin/console CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "mutils"
4
+ require 'bundler/setup'
5
+ require 'mutils'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "mutils"
10
11
  # require "pry"
11
12
  # Pry.start
12
13
 
13
- require "irb"
14
+ require 'irb'
14
15
  IRB.start(__FILE__)
@@ -2,18 +2,18 @@
2
2
 
3
3
  require 'rails/generators/base'
4
4
 
5
+ # Class SerializerGenerator
5
6
  class SerializerGenerator < Rails::Generators::NamedBase
6
7
  source_root File.expand_path('templates', __dir__)
7
8
 
8
9
  argument :attributes, type: :array, default: [], banner: 'field field'
9
-
10
10
  def create_serializer_file
11
11
  template 'serializer.rb.tt', File.join('app', 'serializers', class_path, "#{file_name}_serializer.rb")
12
12
  end
13
13
 
14
14
  private
15
15
 
16
- def attributes_names
17
- attributes.map { |a| a.name.to_sym.inspect }
18
- end
16
+ def attributes_names
17
+ attributes.map { |attribute| attribute.name.to_sym.inspect }
18
+ end
19
19
  end
@@ -1,23 +1,28 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'json/ext'
3
4
  # module Mutils
4
5
  module Mutils
5
6
  module Serialization
6
- # BaseSerializer
7
+ # BaseSerializer: inherit this class to get Serializer functionality
7
8
  class BaseSerializer
8
9
  include Mutils::Serialization::SerializationIncludes
9
10
  include Mutils::Serialization::SerializationMethods
10
11
  include Mutils::Serialization::SerializationResults
11
- attr_accessor :scope, :options, :mutex
12
12
 
13
13
  def initialize(object, options = {})
14
+ options[:child] = false unless options[:child]
14
15
  self.scope = object
15
16
  self.options = options
16
17
  self.mutex = Mutex.new
17
18
  end
18
19
 
19
20
  def as_json(_options = {})
20
- to_h
21
+ if options[:child] || !self.class.include_root
22
+ to_h
23
+ else
24
+ { class_name => to_h }
25
+ end
21
26
  end
22
27
 
23
28
  def to_h
@@ -25,8 +30,20 @@ module Mutils
25
30
  end
26
31
 
27
32
  def to_json(_options = {})
28
- JSON.generate(to_h)
33
+ JSON.generate(as_json, options)
29
34
  end
35
+
36
+ def to_xml(_options = {})
37
+ to_h.to_xml(root: class_name, skip_instruct: true, indent: 2)
38
+ end
39
+
40
+ def as_xml(_options = {})
41
+ to_xml
42
+ end
43
+
44
+ private
45
+
46
+ attr_accessor :scope, :options, :mutex
30
47
  end
31
48
  end
32
- end
49
+ end
@@ -10,6 +10,8 @@ module Mutils
10
10
  class << self
11
11
  attr_accessor :method_to_serialize,
12
12
  :attributes_to_serialize,
13
+ :serializer_name,
14
+ :include_root,
13
15
  :array_index,
14
16
  :belongs_to_relationships,
15
17
  :has_many_relationships
@@ -17,4 +19,4 @@ module Mutils
17
19
  end
18
20
  end
19
21
  end
20
- end
22
+ end
@@ -6,7 +6,13 @@ module Mutils
6
6
  # Module SerializationCore
7
7
  module SerializationMethods
8
8
  extend ActiveSupport::Concern
9
+ # Module ClassMethods
9
10
  module ClassMethods
11
+ def name_tag(name_tag, root = nil)
12
+ self.serializer_name = name_tag
13
+ self.include_root = root
14
+ end
15
+
10
16
  def attributes(*attributes_list)
11
17
  self.attributes_to_serialize = {} if attributes_to_serialize.nil?
12
18
  attributes_list&.each { |attr| attributes_to_serialize[attr] = attr }
@@ -17,40 +23,38 @@ module Mutils
17
23
  method_list&.each { |attr| method_to_serialize[attr] = attr }
18
24
  end
19
25
 
20
- def belongs_to(relationship_name, options = {})
21
- if options[:serializer].nil?
22
- raise "Serializer is Required for belongs_to :#{relationship_name}." \
23
- "\nDefine it like:\nbelongs_to :#{relationship_name}, " \
24
- 'serializer: SERIALIZER_CLASS'
25
- end
26
- unless class_exists? options[:serializer]
27
- raise 'Serializer class not defined'
28
- end
29
-
26
+ def belongs_to(relationship_name, options = {}, option_name = 'belongs_to')
27
+ options = prepare_options(relationship_name, options, option_name)
30
28
  self.belongs_to_relationships = {} if belongs_to_relationships.nil?
31
29
  belongs_to_relationships[relationship_name] = options
32
30
  end
33
31
 
34
32
  alias has_one belongs_to
35
33
 
36
- def has_many(relationship_name, options = {})
37
- if options[:serializer].nil?
38
- raise "Serializer is Required for has_many :#{relationship_name}." \
39
- "\nDefine it like:\nbelongs_to :#{relationship_name}, " \
34
+ def has_many(relationship_name, options = {}, option_name = 'has_many')
35
+ options = prepare_options(relationship_name, options, option_name)
36
+ self.has_many_relationships = {} if has_many_relationships.nil?
37
+ has_many_relationships[relationship_name] = options
38
+ end
39
+
40
+ def prepare_options(relationship_name, options, option_name)
41
+ class_name = options[:serializer]
42
+ if class_name.nil?
43
+ raise "Serializer is Required for belongs_to :#{relationship_name}." \
44
+ "\nDefine it like:\n#{option_name} :#{relationship_name}, " \
40
45
  'serializer: SERIALIZER_CLASS'
41
46
  end
42
- unless class_exists? options[:serializer]
43
- raise 'Serializer class not defined'
44
- end
47
+ raise "Serializer class not defined for relationship: #{relationship_name}" unless class_exists? class_name
45
48
 
46
- self.has_many_relationships = {} if has_many_relationships.nil?
47
- has_many_relationships[relationship_name] = options
49
+ options[:serializer] = class_name.to_s.constantize
50
+ options
48
51
  end
49
52
 
50
53
  def class_exists?(class_name)
51
- eval("defined?(#{class_name}) && #{class_name}.is_a?(Class)") == true
54
+ klass = class_name.to_s.constantize rescue nil
55
+ klass && defined?(klass) && klass.is_a?(Class)
52
56
  end
53
57
  end
54
58
  end
55
59
  end
56
- end
60
+ end
@@ -5,10 +5,10 @@ module Mutils
5
5
  module Serialization
6
6
  # Module SerializationResults
7
7
  module SerializationResults
8
-
9
8
  def generate_hash
10
9
  if scope
11
10
  if scope_is_collection?
11
+ options[:child] = true
12
12
  scope.map { |inner_scope| self.class.new(inner_scope, options).generate_hash }
13
13
  else
14
14
  hashed_result
@@ -80,6 +80,22 @@ module Mutils
80
80
  def scope_is_collection?
81
81
  scope.respond_to?(:size) && !scope.respond_to?(:each_pair)
82
82
  end
83
+
84
+ def class_name
85
+ if scope_is_collection?
86
+ format_class_name(scope[0]).pluralize
87
+ else
88
+ format_class_name(scope)
89
+ end
90
+ end
91
+
92
+ def format_class_name(object)
93
+ if self.class.serializer_name&.length&.positive?
94
+ self.class.serializer_name
95
+ else
96
+ object.class.to_s.downcase
97
+ end
98
+ end
83
99
  end
84
100
  end
85
- end
101
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mutils
2
- VERSION = '0.2.25'.freeze
4
+ VERSION = '0.2.27'
3
5
  end
data/lib/mutils.rb CHANGED
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'mutils/version'
2
4
  require 'active_support/concern'
5
+ require 'active_support/inflector'
6
+ require 'active_support/core_ext/hash'
3
7
  require_relative 'mutils/serialization/serialization_results'
4
8
  require_relative 'mutils/serialization/serialization_includes'
5
9
  require_relative 'mutils/serialization/serialization_methods'
data/mutils.gemspec CHANGED
@@ -1,4 +1,6 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'mutils/version'
4
6
 
@@ -12,7 +14,7 @@ Gem::Specification.new do |spec|
12
14
  spec.description = 'mutils Utilities for rails app'
13
15
  spec.homepage = 'https://github.com/niteshpurohit/mutils'
14
16
  spec.license = 'MIT'
15
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
17
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
16
18
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
19
  end
18
20
  spec.bindir = 'exe'
@@ -20,13 +22,16 @@ Gem::Specification.new do |spec|
20
22
  spec.require_paths = ['lib']
21
23
  spec.required_ruby_version = '>= 2.5.0'
22
24
  spec.required_rubygems_version = '>= 1.8.11'
25
+ spec.add_runtime_dependency('activesupport', ['>= 4.2'])
23
26
  spec.add_development_dependency 'bundler', '~> 2.0'
27
+ spec.add_development_dependency 'coveralls'
24
28
  spec.add_development_dependency 'rake', '~> 10.0'
25
- spec.add_runtime_dependency('activesupport', ['>= 4.2'])
29
+ spec.add_development_dependency 'rspec-json_expectations'
26
30
  spec.add_development_dependency 'rspec-rails'
31
+ spec.add_development_dependency 'rspec-xml_helpers'
27
32
 
28
33
  spec.metadata = {
29
- "bug_tracker_uri" => "https://github.com/niteshpurohit/mutils/issues",
30
- "source_code_uri" => "https://github.com/niteshpurohit/mutils/tree/v#{Mutils::VERSION}"
34
+ 'bug_tracker_uri' => 'https://github.com/niteshpurohit/mutils/issues',
35
+ 'source_code_uri' => "https://github.com/niteshpurohit/mutils/tree/v#{Mutils::VERSION}"
31
36
  }
32
37
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mutils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.25
4
+ version: 0.2.27
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nitesh Purohit
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-24 00:00:00.000000000 Z
11
+ date: 2019-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +38,20 @@ dependencies:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
40
  version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: coveralls
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rake
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -39,19 +67,19 @@ dependencies:
39
67
  - !ruby/object:Gem::Version
40
68
  version: '10.0'
41
69
  - !ruby/object:Gem::Dependency
42
- name: activesupport
70
+ name: rspec-json_expectations
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - ">="
46
74
  - !ruby/object:Gem::Version
47
- version: '4.2'
48
- type: :runtime
75
+ version: '0'
76
+ type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - ">="
53
81
  - !ruby/object:Gem::Version
54
- version: '4.2'
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rspec-rails
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +94,20 @@ dependencies:
66
94
  - - ">="
67
95
  - !ruby/object:Gem::Version
68
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-xml_helpers
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
69
111
  description: mutils Utilities for rails app
70
112
  email:
71
113
  - nitesh.purohit.it@gmail.com
@@ -79,11 +121,14 @@ files:
79
121
  - ".github/ISSUE_TEMPLATE/feature_request.md"
80
122
  - ".github/PULL_REQUEST_TEMPLATE.md"
81
123
  - ".github/workflows/gempush.yml"
82
- - ".github/workflows/ruby.yml"
83
124
  - ".gitignore"
125
+ - ".mergify.yml"
84
126
  - ".rspec"
85
127
  - ".rubocop.yml"
128
+ - ".rubocop_todo.yml"
129
+ - ".travis.yml"
86
130
  - BENCHMARK-SERIALIZER-JSON.md
131
+ - CHANGELOG.md
87
132
  - CODE_OF_CONDUCT.md
88
133
  - Gemfile
89
134
  - Gemfile.lock
@@ -109,7 +154,7 @@ licenses:
109
154
  - MIT
110
155
  metadata:
111
156
  bug_tracker_uri: https://github.com/niteshpurohit/mutils/issues
112
- source_code_uri: https://github.com/niteshpurohit/mutils/tree/v0.2.25
157
+ source_code_uri: https://github.com/niteshpurohit/mutils/tree/v0.2.27
113
158
  post_install_message:
114
159
  rdoc_options: []
115
160
  require_paths:
@@ -1,20 +0,0 @@
1
- name: Ruby
2
-
3
- on: [push]
4
-
5
- jobs:
6
- build:
7
-
8
- runs-on: ubuntu-latest
9
-
10
- steps:
11
- - uses: actions/checkout@v1
12
- - name: Set up Ruby 2.6
13
- uses: actions/setup-ruby@v1
14
- with:
15
- ruby-version: 2.6.x
16
- - name: Build and test with Rake
17
- run: |
18
- gem install bundler
19
- bundle install --jobs 4 --retry 3
20
- bundle exec rake