mutils 0.2.25 → 0.2.27

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 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