snfoil-rails 0.7.1 → 0.8.3

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: e70578dd091d98c88bb3c7fbf6868187f1549bdc4e1b7db17e4a6ec3114090ce
4
- data.tar.gz: e0513e5ed7245a443ded275617b5d72b615e5796286e8361e4ac030e12941af8
3
+ metadata.gz: 8317d5da3fd8d19a7ddc0c090c3065578d39ace6a431da7d3920e7dde76c92b0
4
+ data.tar.gz: ac1beda041a2d44d7e5066b3c9f39d9b8a1f28d1a8fe0f0c5cbdaf93047054d0
5
5
  SHA512:
6
- metadata.gz: c51c1f966922efa1ebea92c123b0adf8893155e43bbf7e4921c73c10295e535812a66b4e1341a170f36931d662c32784b592fb9795e46ae133be598b079046ff
7
- data.tar.gz: 30e5c4175d007e73c6d57d8116c7d6808eef9777af52eb3040303b4fc1af36550537c75c0d76033241caeaabd487da7f24d7acf6706748f2998acb441e718e3d
6
+ metadata.gz: 70da8fe5e43597103002d545e6e48362ea855ffc78bf3edd1c6e4c4fcf2de745b28bed82bd1526c8801a23395b2d9a85436c69daa01f0243669c7786f73e9a68
7
+ data.tar.gz: 0c0e11fed83253c68c9c393e96b9328cc6f4081b4aa832d4963cf4cf0402f795624dc38481dfbc4f2887f8fbf6762b1f15afb09cb82140307e1c4ca28dbc5090
data/README.md CHANGED
@@ -8,7 +8,7 @@ How to use my plugin.
8
8
  Add this line to your application's Gemfile:
9
9
 
10
10
  ```ruby
11
- gem 'sn-foil-rails'
11
+ gem 'snfoil-rails'
12
12
  ```
13
13
 
14
14
  And then execute:
@@ -18,7 +18,7 @@ $ bundle
18
18
 
19
19
  Or install it yourself as:
20
20
  ```bash
21
- $ gem install sn-foil-rails
21
+ $ gem install snfoil-rails
22
22
  ```
23
23
 
24
24
  ## Contributing
@@ -1,46 +1,50 @@
1
- class SnFoil::AllGenerator < Rails::Generators::Base
2
- source_root File.expand_path('templates', __dir__)
1
+ # frozen_string_literal: true
3
2
 
4
- argument :model, type: :string
3
+ module SnFoil
4
+ class AllGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('templates', __dir__)
5
6
 
6
- class_option :type, desc: "Generate Base or API", type: :string, default: 'base'
7
- class_option :skip_model, desc: "Skip Model Creation", type: :boolean, default: false
7
+ argument :model, type: :string
8
8
 
9
- def add_model
10
- generate('model', *call_args, **call_options) unless File.file?("app/models/#{model.singularize.underscore}.rb") || options[:skip_model]
11
- end
9
+ class_option(:type, desc: 'Generate Base or API', type: :string, default: 'base')
10
+ class_option(:skip_model, desc: 'Skip Model Creation', type: :boolean, default: false)
12
11
 
13
- def add_policy
14
- generate('sn_foil:policy', *call_args, **call_options)
15
- end
12
+ def add_model
13
+ rails_command "generate model #{call_args.join(' ')}", call_options
14
+ end
16
15
 
17
- def add_searcher
18
- generate('sn_foil:searcher', *call_args, **call_options)
19
- end
16
+ def add_policy
17
+ rails_command "generate sn_foil:policy #{call_args.join(' ')}", call_options
18
+ end
20
19
 
21
- def add_context
22
- generate('sn_foil:context', *call_args, **call_options)
23
- end
20
+ def add_searcher
21
+ rails_command "generate sn_foil:searcher #{call_args.join(' ')}", call_options
22
+ end
24
23
 
25
- def add_jsonapi_serializer
26
- generate('sn_foil:jsonapi_serializer', *call_args, **call_options)
27
- end
24
+ def add_context
25
+ rails_command "generate sn_foil:context #{call_args.join(' ')}", call_options
26
+ end
28
27
 
29
- def add_jsonapi_deserializer
30
- generate('sn_foil:jsonapi_deserializer', *call_args, **call_options)
31
- end
28
+ def add_jsonapi_serializer
29
+ rails_command "generate sn_foil:jsonapi_serializer #{call_args.join(' ')}", call_options
30
+ end
32
31
 
33
- def add_controller
34
- generate('sn_foil:controller', *call_args, **call_options)
35
- end
32
+ def add_jsonapi_deserializer
33
+ rails_command "generate sn_foil:jsonapi_deserializer #{call_args.join(' ')}", call_options
34
+ end
36
35
 
37
- private
36
+ def add_controller
37
+ rails_command "generate sn_foil:controller #{call_args.join(' ')}", call_options
38
+ end
38
39
 
39
- def call_args
40
- @call_args ||= [model].concat(args)
41
- end
40
+ private
41
+
42
+ def call_args
43
+ @call_args ||= [model].concat(args)
44
+ end
42
45
 
43
- def call_options
44
- @call_options ||= options.deep_symbolize_keys
46
+ def call_options
47
+ @call_options ||= options.deep_symbolize_keys
48
+ end
45
49
  end
46
- end
50
+ end
@@ -1,37 +1,41 @@
1
- class SnFoil::ContextGenerator < Rails::Generators::Base
2
- source_root File.expand_path('templates', __dir__)
1
+ # frozen_string_literal: true
3
2
 
4
- argument :model, type: :string
3
+ module SnFoil
4
+ class ContextGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('templates', __dir__)
5
6
 
6
- class_option :path, desc: "Base path for file", type: :string, default: 'app/contexts'
7
+ argument :model, type: :string
7
8
 
8
- def add_app_file
9
- file_name = if modules.length.zero?
10
- name
11
- else
12
- modules.join('/') + '/' + name
13
- end
9
+ class_option :path, desc: 'Base path for file', type: :string, default: 'app/contexts'
14
10
 
15
- template('context.erb', "#{options[:path]}/#{file_name}_context.rb")
16
- end
11
+ def add_app_file
12
+ file_name = if modules.length.zero?
13
+ name
14
+ else
15
+ "#{modules.join('/')}/#{name}"
16
+ end
17
17
 
18
- private
18
+ template('context.erb', "#{options[:path]}/#{file_name}_context.rb")
19
+ end
19
20
 
20
- def name
21
- @name ||= model.split('/').last.underscore.singularize
22
- end
21
+ private
23
22
 
24
- def class_name
25
- @class_name ||= name.camelize
26
- end
23
+ def name
24
+ @name ||= model.split('/').last.underscore.singularize
25
+ end
27
26
 
28
- def modules
29
- @modules ||= model.split('/')[0..-2].map(&:underscore)
30
- end
27
+ def class_name
28
+ @class_name ||= name.camelize
29
+ end
30
+
31
+ def modules
32
+ @modules ||= model.split('/')[0..-2].map(&:underscore)
33
+ end
31
34
 
32
- def class_modules
33
- return if modules.length.zero?
35
+ def class_modules
36
+ return if modules.length.zero?
34
37
 
35
- @class_modules ||= "#{modules.map(&:camelize).join('::')}::"
38
+ @class_modules ||= "#{modules.map(&:camelize).join('::')}::"
39
+ end
36
40
  end
37
41
  end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: true
1
+ # frozen_string_literal: true
2
2
 
3
3
  class <%= class_modules %><%= class_name %>Context
4
4
  include SnFoil::Context
@@ -1,44 +1,52 @@
1
- class SnFoil::ControllerGenerator < Rails::Generators::Base
2
- source_root File.expand_path('templates', __dir__)
1
+ # frozen_string_literal: true
3
2
 
4
- argument :model, type: :string
3
+ module SnFoil
4
+ class ControllerGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('templates', __dir__)
5
6
 
6
- class_option :type, desc: "Generate Base or API", type: :string, default: 'base'
7
- class_option :path, desc: "Base path for file", type: :string, default: 'app/controllers'
7
+ argument :model, type: :string
8
8
 
9
- def add_app_file
10
- file_name = if modules.length.zero?
11
- name
12
- else
13
- modules.join('/') + '/' + name
14
- end
9
+ class_option :type, desc: 'Generate Base or API', type: :string, default: 'base'
10
+ class_option :path, desc: 'Base path for file', type: :string, default: 'app/controllers'
15
11
 
16
- template_name = if options[:type] == 'api'
17
- 'api_controller.erb'
18
- else
19
- 'controller.erb'
20
- end
12
+ def add_app_file
13
+ template(template_name, "#{options[:path]}/#{file_name}_controller.rb")
14
+ end
21
15
 
22
- template(template_name, "#{options[:path]}/#{file_name}_controller.rb")
23
- end
16
+ private
24
17
 
25
- private
18
+ def file_name
19
+ @file_name ||= if modules.length.zero?
20
+ name
21
+ else
22
+ "#{modules.join('/')}/#{name}"
23
+ end
24
+ end
26
25
 
27
- def name
28
- @name ||= model.split('/').last.underscore.pluralize
29
- end
26
+ def template_name
27
+ @template_name ||= if options[:type] == 'api'
28
+ 'api_controller.erb'
29
+ else
30
+ 'controller.erb'
31
+ end
32
+ end
30
33
 
31
- def class_name
32
- @class_name ||= name.camelize
33
- end
34
+ def name
35
+ @name ||= model.split('/').last.underscore.pluralize
36
+ end
34
37
 
35
- def modules
36
- @modules ||= model.split('/')[0..-2].map(&:underscore)
37
- end
38
+ def class_name
39
+ @class_name ||= name.camelize
40
+ end
41
+
42
+ def modules
43
+ @modules ||= model.split('/')[0..-2].map(&:underscore)
44
+ end
38
45
 
39
- def class_modules
40
- return if modules.length.zero?
46
+ def class_modules
47
+ return if modules.length.zero?
41
48
 
42
- @class_modules ||= "#{modules.map(&:camelize).join('::')}::"
49
+ @class_modules ||= "#{modules.map(&:camelize).join('::')}::"
50
+ end
43
51
  end
44
52
  end
@@ -1,37 +1,41 @@
1
- class SnFoil::JsonapiDeserializerGenerator < Rails::Generators::Base
2
- source_root File.expand_path('templates', __dir__)
1
+ # frozen_string_literal: true
3
2
 
4
- argument :model, type: :string
3
+ module SnFoil
4
+ class JsonapiDeserializerGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('templates', __dir__)
5
6
 
6
- class_option :path, desc: "Base path for file", type: :string, default: 'app/jsonapi_deserializers'
7
+ argument :model, type: :string
7
8
 
8
- def add_app_file
9
- file_name = if modules.length.zero?
10
- name
11
- else
12
- modules.join('/') + '/' + name
13
- end
9
+ class_option :path, desc: 'Base path for file', type: :string, default: 'app/jsonapi_deserializers'
14
10
 
15
- template('jsonapi_deserializer.erb', "#{options[:path]}/#{file_name}_jsonapi_deserializer.rb")
16
- end
11
+ def add_app_file
12
+ file_name = if modules.length.zero?
13
+ name
14
+ else
15
+ "#{modules.join('/')}/#{name}"
16
+ end
17
17
 
18
- private
18
+ template('jsonapi_deserializer.erb', "#{options[:path]}/#{file_name}_jsonapi_deserializer.rb")
19
+ end
19
20
 
20
- def name
21
- @name ||= model.split('/').last.underscore.singularize
22
- end
21
+ private
23
22
 
24
- def class_name
25
- @class_name ||= name.camelize
26
- end
23
+ def name
24
+ @name ||= model.split('/').last.underscore.singularize
25
+ end
27
26
 
28
- def modules
29
- @modules ||= model.split('/')[0..-2].map(&:underscore)
30
- end
27
+ def class_name
28
+ @class_name ||= name.camelize
29
+ end
30
+
31
+ def modules
32
+ @modules ||= model.split('/')[0..-2].map(&:underscore)
33
+ end
31
34
 
32
- def class_modules
33
- return if modules.length.zero?
35
+ def class_modules
36
+ return if modules.length.zero?
34
37
 
35
- @class_modules ||= "#{modules.map(&:camelize).join('::')}::"
38
+ @class_modules ||= "#{modules.map(&:camelize).join('::')}::"
39
+ end
36
40
  end
37
41
  end
@@ -1,37 +1,41 @@
1
- class SnFoil::JsonapiSerializerGenerator < Rails::Generators::Base
2
- source_root File.expand_path('templates', __dir__)
1
+ # frozen_string_literal: true
3
2
 
4
- argument :model, type: :string
3
+ module SnFoil
4
+ class JsonapiSerializerGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('templates', __dir__)
5
6
 
6
- class_option :path, desc: "Base path for file", type: :string, default: 'app/jsonapi_serializers'
7
+ argument :model, type: :string
7
8
 
8
- def add_app_file
9
- file_name = if modules.length.zero?
10
- name
11
- else
12
- modules.join('/') + '/' + name
13
- end
9
+ class_option :path, desc: 'Base path for file', type: :string, default: 'app/jsonapi_serializers'
14
10
 
15
- template('jsonapi_serializer.erb', "#{options[:path]}/#{file_name}_jsonapi_serializer.rb")
16
- end
11
+ def add_app_file
12
+ file_name = if modules.length.zero?
13
+ name
14
+ else
15
+ "#{modules.join('/')}/#{name}"
16
+ end
17
17
 
18
- private
18
+ template('jsonapi_serializer.erb', "#{options[:path]}/#{file_name}_jsonapi_serializer.rb")
19
+ end
19
20
 
20
- def name
21
- @name ||= model.split('/').last.underscore.singularize
22
- end
21
+ private
23
22
 
24
- def class_name
25
- @class_name ||= name.camelize
26
- end
23
+ def name
24
+ @name ||= model.split('/').last.underscore.singularize
25
+ end
27
26
 
28
- def modules
29
- @modules ||= model.split('/')[0..-2].map(&:underscore)
30
- end
27
+ def class_name
28
+ @class_name ||= name.camelize
29
+ end
30
+
31
+ def modules
32
+ @modules ||= model.split('/')[0..-2].map(&:underscore)
33
+ end
31
34
 
32
- def class_modules
33
- return if modules.length.zero?
35
+ def class_modules
36
+ return if modules.length.zero?
34
37
 
35
- @class_modules ||= "#{modules.map(&:camelize).join('::')}::"
38
+ @class_modules ||= "#{modules.map(&:camelize).join('::')}::"
39
+ end
36
40
  end
37
41
  end
@@ -1,37 +1,41 @@
1
- class SnFoil::PolicyGenerator < Rails::Generators::Base
2
- source_root File.expand_path('templates', __dir__)
1
+ # frozen_string_literal: true
3
2
 
4
- argument :model, type: :string
3
+ module SnFoil
4
+ class PolicyGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('templates', __dir__)
5
6
 
6
- class_option :path, desc: "Base path for file", type: :string, default: 'app/policies'
7
+ argument :model, type: :string
7
8
 
8
- def add_app_file
9
- file_name = if modules.length.zero?
10
- name
11
- else
12
- modules.join('/') + '/' + name
13
- end
9
+ class_option :path, desc: 'Base path for file', type: :string, default: 'app/policies'
14
10
 
15
- template('policy.erb', "#{options[:path]}/#{file_name}_policy.rb")
16
- end
11
+ def add_app_file
12
+ file_name = if modules.length.zero?
13
+ name
14
+ else
15
+ "#{modules.join('/')}/#{name}"
16
+ end
17
17
 
18
- private
18
+ template('policy.erb', "#{options[:path]}/#{file_name}_policy.rb")
19
+ end
19
20
 
20
- def name
21
- @name ||= model.split('/').last.underscore.singularize
22
- end
21
+ private
23
22
 
24
- def class_name
25
- @class_name ||= name.camelize
26
- end
23
+ def name
24
+ @name ||= model.split('/').last.underscore.singularize
25
+ end
27
26
 
28
- def modules
29
- @modules ||= model.split('/')[0..-2].map(&:underscore)
30
- end
27
+ def class_name
28
+ @class_name ||= name.camelize
29
+ end
30
+
31
+ def modules
32
+ @modules ||= model.split('/')[0..-2].map(&:underscore)
33
+ end
31
34
 
32
- def class_modules
33
- return if modules.length.zero?
35
+ def class_modules
36
+ return if modules.length.zero?
34
37
 
35
- @class_modules ||= "#{modules.map(&:camelize).join('::')}::"
38
+ @class_modules ||= "#{modules.map(&:camelize).join('::')}::"
39
+ end
36
40
  end
37
41
  end
@@ -1,37 +1,41 @@
1
- class SnFoil::SearcherGenerator < Rails::Generators::Base
2
- source_root File.expand_path('templates', __dir__)
1
+ # frozen_string_literal: true
3
2
 
4
- argument :model, type: :string
3
+ module SnFoil
4
+ class SearcherGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('templates', __dir__)
5
6
 
6
- class_option :path, desc: "Base path for file", type: :string, default: 'app/searchers'
7
+ argument :model, type: :string
7
8
 
8
- def add_app_file
9
- file_name = if modules.length.zero?
10
- name
11
- else
12
- modules.join('/') + '/' + name
13
- end
9
+ class_option :path, desc: 'Base path for file', type: :string, default: 'app/searchers'
14
10
 
15
- template('searcher.erb', "#{options[:path]}/#{file_name}_searcher.rb")
16
- end
11
+ def add_app_file
12
+ file_name = if modules.length.zero?
13
+ name
14
+ else
15
+ "#{modules.join('/')}/#{name}"
16
+ end
17
17
 
18
- private
18
+ template('searcher.erb', "#{options[:path]}/#{file_name}_searcher.rb")
19
+ end
19
20
 
20
- def name
21
- @name ||= model.split('/').last.underscore.pluralize
22
- end
21
+ private
23
22
 
24
- def class_name
25
- @class_name ||= name.camelize
26
- end
23
+ def name
24
+ @name ||= model.split('/').last.underscore.pluralize
25
+ end
27
26
 
28
- def modules
29
- @modules ||= model.split('/')[0..-2].map(&:underscore)
30
- end
27
+ def class_name
28
+ @class_name ||= name.camelize
29
+ end
30
+
31
+ def modules
32
+ @modules ||= model.split('/')[0..-2].map(&:underscore)
33
+ end
31
34
 
32
- def class_modules
33
- return if modules.length.zero?
35
+ def class_modules
36
+ return if modules.length.zero?
34
37
 
35
- @class_modules ||= "#{modules.map(&:camelize).join('::')}::"
38
+ @class_modules ||= "#{modules.map(&:camelize).join('::')}::"
39
+ end
36
40
  end
37
41
  end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SnFoil
4
+ module Configuration
5
+ module LazyJsonapiSerializer
6
+ extend ActiveSupport::Concern
7
+
8
+ class << self
9
+ def belongs_to(relationship_name, options = {}, &block)
10
+ block = belongs_to_optimized_block(relationship_name, options, &block)
11
+ super(relationship_name, options, &block)
12
+ end
13
+
14
+ def has_one(relationship_name, options = {}, &block) # rubocop:disable Naming/PredicateName reason: method override
15
+ super(relationship_name, has_relation_optimized_options(relationship_name, options), &block)
16
+ end
17
+
18
+ def has_many(relationship_name, options = {}, &block) # rubocop:disable Naming/PredicateName reason: method override
19
+ super(relationship_name, has_relation_optimized_options(relationship_name, options), &block)
20
+ end
21
+
22
+ private
23
+
24
+ # We need to parse the include block because FastJsonAPI does not allow access to the pre-parsed includes
25
+ def parse_include(params)
26
+ return [] unless params[:include]
27
+
28
+ if params[:include].is_a?(String)
29
+ params[:include].split(',')
30
+ else
31
+ params[:include]
32
+ end.map { |r| r.to_s.dasherize }.join(',')
33
+ end
34
+
35
+ def lookup_full_object_for_belongs_to(record, relationship_name, options, params)
36
+ return unless parse_include(params).include?(relationship_name.to_s.dasherize)
37
+
38
+ record.send(options[:object_method_name] || relationship_name)
39
+ end
40
+
41
+ def create_substitute_object_for_belongs_to(record, relationship_name, options)
42
+ relationship_id = options[:id_method_name] || "#{relationship_name}_id".to_sym
43
+ OpenStruct.new(id: record.send(relationship_id))
44
+ end
45
+
46
+ def belongs_to_optimized_block(relationship_name, options = {}, &block)
47
+ return block if options[:skip_optimization] == true || block
48
+
49
+ proc do |record, params|
50
+ if params && params[:include]
51
+ lookup_full_object(record_for_belongs_to, relationship_name, options, params)
52
+ else
53
+ create_substitute_object_for_belongs_to(record, relationship_name, options)
54
+ end
55
+ end
56
+ end
57
+
58
+ def create_included_proc_for_has_relation(relationship_name)
59
+ proc do |_record, params|
60
+ if params && params[:include]
61
+ parse_include(params).include?(relationship_name.to_s.dasherize)
62
+ else
63
+ false
64
+ end
65
+ end
66
+ end
67
+
68
+ def create_if_proc_for_has_relation(if_proc, included_proc)
69
+ if if_proc.present?
70
+ proc do |record, params|
71
+ FastJsonapi.call_proc(included_proc, record, params) && FastJsonapi.call_proc(if_proc, record, params)
72
+ end
73
+ else
74
+ included_proc
75
+ end
76
+ end
77
+
78
+ def has_relation_optimized_options(relationship_name, options) # rubocop:disable Naming/PredicateName reason: method override
79
+ return options if options[:skip_optimization] == true
80
+
81
+ options[:if] = create_if_proc_for_has_relation(options[:if], create_included_proc_for_has_relation(relationship_name))
82
+ options
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -31,11 +31,13 @@ module SnFoil
31
31
  end
32
32
 
33
33
  def setup_create(**options)
34
- super(**options.merge(deserialize: true))
34
+ options[:deserialize] = options[:deserialize].nil? ? true : options[:deserialize]
35
+ super(**options)
35
36
  end
36
37
 
37
38
  def setup_update(**options)
38
- super(**options.merge(deserialize: true))
39
+ options[:deserialize] = options[:deserialize].nil? ? true : options[:deserialize]
40
+ super(**options)
39
41
  end
40
42
 
41
43
  def render_change(model, **options)
@@ -32,6 +32,7 @@ module SnFoil
32
32
  end
33
33
 
34
34
  attr_reader :object, :included, :options
35
+
35
36
  def initialize(object, included: nil, **options)
36
37
  @object = object
37
38
  @included = included || object[:included]
@@ -88,11 +89,12 @@ module SnFoil
88
89
  end
89
90
 
90
91
  def apply_attribute_transform(attributes, data, key, transform_type:, **opts)
91
- if transform_type == :attribute
92
+ case transform_type
93
+ when :attribute
92
94
  parse_attribute_transform(attributes, data, key, **opts)
93
- elsif transform_type == :has_one
95
+ when :has_one
94
96
  parse_has_one_relationship(attributes, data, key, **opts)
95
- elsif transform_type == :has_many
97
+ when :has_many
96
98
  parse_has_many_relationship(attributes, data, key, **opts)
97
99
  end
98
100
  end
@@ -100,7 +102,7 @@ module SnFoil
100
102
  def parse_attribute_transform(attributes, data, key, **opts)
101
103
  return attributes unless data.dig(:attributes, key)
102
104
 
103
- attributes.merge(Hash[opts.fetch(:key) { key }, data[:attributes][key]])
105
+ attributes.merge({ opts.fetch(:key) { key } => data[:attributes][key] })
104
106
  end
105
107
 
106
108
  def parse_relationships(attributes, data)
@@ -138,7 +140,7 @@ module SnFoil
138
140
  end
139
141
 
140
142
  def lookup_relationship(type:, id: nil, lid: nil, **_opts)
141
- raise ::ArgumentError, "missing keyword: id or lid for type: #{type}" unless id || lid
143
+ check_for_id(id, lid)
142
144
 
143
145
  included&.find do |x|
144
146
  x[:type].eql?(type) &&
@@ -149,5 +151,9 @@ module SnFoil
149
151
  end
150
152
  end
151
153
  end
154
+
155
+ def check_for_id(id, lid)
156
+ raise ::ArgumentError, "missing keyword: id or lid for type: #{type}" unless id || lid
157
+ end
152
158
  end
153
159
  end
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support/concern'
4
- require 'fast_jsonapi/object_serializer'
4
+ require 'jsonapi/serializer'
5
5
 
6
6
  module SnFoil
7
7
  module JsonapiSerializer
8
8
  extend ActiveSupport::Concern
9
9
 
10
10
  included do
11
- include FastJsonapi::ObjectSerializer
11
+ include JSONAPI::Serializer
12
12
 
13
13
  set_key_transform :dash
14
14
  end
@@ -16,6 +16,8 @@ module SnFoil
16
16
  require_relative '../controller/concerns/update_controller_concern'
17
17
  require_relative '../controller/api'
18
18
  require_relative '../controller/base'
19
+
20
+ require_relative '../configuration/lazy_jsonapi_serializer'
19
21
  end
20
22
  end
21
23
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module SnFoil
4
4
  module Rails
5
- VERSION = '0.7.1'
5
+ VERSION = '0.8.3'
6
6
  end
7
7
  end
data/lib/sn_foil/rails.rb CHANGED
@@ -18,6 +18,8 @@ module SnFoil
18
18
  require_relative '../controller/concerns/update_controller_concern'
19
19
  require_relative '../controller/api'
20
20
  require_relative '../controller/base'
21
+
22
+ require_relative '../configuration/lazy_jsonapi_serializer'
21
23
  end
22
24
  end
23
25
  end
@@ -6,6 +6,8 @@ require 'sn_foil/searcher'
6
6
  module SnFoil
7
7
  module Searcher
8
8
  extend ActiveSupport::Concern
9
+ ASC = 'ASC'
10
+ DESC = 'DESC'
9
11
 
10
12
  included do
11
13
  module_eval do
@@ -17,9 +19,6 @@ module SnFoil
17
19
  additional_search(filtered_scope, params)
18
20
  end
19
21
  end
20
-
21
- ASC ||= 'ASC'
22
- DESC ||= 'DESC'
23
22
  end
24
23
 
25
24
  class_methods do
@@ -35,7 +34,7 @@ module SnFoil
35
34
  @i_order_by_direction = direction
36
35
  end
37
36
 
38
- def distinct(bool = true)
37
+ def distinct(bool = true) # rubocop:disable Style/OptionalBooleanParameter reason: class configuration looks better this way
39
38
  @i_is_distinct = bool
40
39
  end
41
40
 
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snfoil-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Howes
8
8
  - Danny Murphy
9
+ - Cliff Campbell
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2020-09-14 00:00:00.000000000 Z
13
+ date: 2021-09-14 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: activesupport
@@ -17,84 +18,84 @@ dependencies:
17
18
  requirements:
18
19
  - - ">="
19
20
  - !ruby/object:Gem::Version
20
- version: 5.2.4.3
21
+ version: 5.2.6
21
22
  type: :runtime
22
23
  prerelease: false
23
24
  version_requirements: !ruby/object:Gem::Requirement
24
25
  requirements:
25
26
  - - ">="
26
27
  - !ruby/object:Gem::Version
27
- version: 5.2.4.3
28
+ version: 5.2.6
28
29
  - !ruby/object:Gem::Dependency
29
30
  name: jsonapi-serializer
30
31
  requirement: !ruby/object:Gem::Requirement
31
32
  requirements:
32
33
  - - "~>"
33
34
  - !ruby/object:Gem::Version
34
- version: '2.0'
35
+ version: '2.2'
35
36
  type: :runtime
36
37
  prerelease: false
37
38
  version_requirements: !ruby/object:Gem::Requirement
38
39
  requirements:
39
40
  - - "~>"
40
41
  - !ruby/object:Gem::Version
41
- version: '2.0'
42
+ version: '2.2'
42
43
  - !ruby/object:Gem::Dependency
43
44
  name: snfoil
44
45
  requirement: !ruby/object:Gem::Requirement
45
46
  requirements:
46
47
  - - "~>"
47
48
  - !ruby/object:Gem::Version
48
- version: '0.7'
49
+ version: '0.8'
49
50
  type: :runtime
50
51
  prerelease: false
51
52
  version_requirements: !ruby/object:Gem::Requirement
52
53
  requirements:
53
54
  - - "~>"
54
55
  - !ruby/object:Gem::Version
55
- version: '0.7'
56
+ version: '0.8'
56
57
  - !ruby/object:Gem::Dependency
57
58
  name: bundler
58
59
  requirement: !ruby/object:Gem::Requirement
59
60
  requirements:
60
61
  - - "~>"
61
62
  - !ruby/object:Gem::Version
62
- version: '2.0'
63
+ version: '2.2'
63
64
  type: :development
64
65
  prerelease: false
65
66
  version_requirements: !ruby/object:Gem::Requirement
66
67
  requirements:
67
68
  - - "~>"
68
69
  - !ruby/object:Gem::Version
69
- version: '2.0'
70
+ version: '2.2'
70
71
  - !ruby/object:Gem::Dependency
71
72
  name: pry-byebug
72
73
  requirement: !ruby/object:Gem::Requirement
73
74
  requirements:
74
75
  - - "~>"
75
76
  - !ruby/object:Gem::Version
76
- version: '3.0'
77
+ version: '3.9'
77
78
  type: :development
78
79
  prerelease: false
79
80
  version_requirements: !ruby/object:Gem::Requirement
80
81
  requirements:
81
82
  - - "~>"
82
83
  - !ruby/object:Gem::Version
83
- version: '3.0'
84
+ version: '3.9'
84
85
  - !ruby/object:Gem::Dependency
85
86
  name: rails
86
87
  requirement: !ruby/object:Gem::Requirement
87
88
  requirements:
88
89
  - - '='
89
90
  - !ruby/object:Gem::Version
90
- version: 5.2.4.3
91
+ version: 5.2.6
91
92
  type: :development
92
93
  prerelease: false
93
94
  version_requirements: !ruby/object:Gem::Requirement
94
95
  requirements:
95
96
  - - '='
96
97
  - !ruby/object:Gem::Version
97
- version: 5.2.4.3
98
+ version: 5.2.6
98
99
  - !ruby/object:Gem::Dependency
99
100
  name: rake
100
101
  requirement: !ruby/object:Gem::Requirement
@@ -115,56 +116,70 @@ dependencies:
115
116
  requirements:
116
117
  - - "~>"
117
118
  - !ruby/object:Gem::Version
118
- version: '3.9'
119
+ version: '5.0'
119
120
  type: :development
120
121
  prerelease: false
121
122
  version_requirements: !ruby/object:Gem::Requirement
122
123
  requirements:
123
124
  - - "~>"
124
125
  - !ruby/object:Gem::Version
125
- version: '3.9'
126
+ version: '5.0'
126
127
  - !ruby/object:Gem::Dependency
127
128
  name: rubocop
128
129
  requirement: !ruby/object:Gem::Requirement
129
130
  requirements:
130
131
  - - "~>"
131
132
  - !ruby/object:Gem::Version
132
- version: 0.76.0
133
+ version: '1.18'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: '1.18'
141
+ - !ruby/object:Gem::Dependency
142
+ name: rubocop-performance
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '1.11'
133
148
  type: :development
134
149
  prerelease: false
135
150
  version_requirements: !ruby/object:Gem::Requirement
136
151
  requirements:
137
152
  - - "~>"
138
153
  - !ruby/object:Gem::Version
139
- version: 0.76.0
154
+ version: '1.11'
140
155
  - !ruby/object:Gem::Dependency
141
156
  name: rubocop-rails
142
157
  requirement: !ruby/object:Gem::Requirement
143
158
  requirements:
144
159
  - - "~>"
145
160
  - !ruby/object:Gem::Version
146
- version: '2.0'
161
+ version: '2.11'
147
162
  type: :development
148
163
  prerelease: false
149
164
  version_requirements: !ruby/object:Gem::Requirement
150
165
  requirements:
151
166
  - - "~>"
152
167
  - !ruby/object:Gem::Version
153
- version: '2.0'
168
+ version: '2.11'
154
169
  - !ruby/object:Gem::Dependency
155
170
  name: rubocop-rspec
156
171
  requirement: !ruby/object:Gem::Requirement
157
172
  requirements:
158
173
  - - "~>"
159
174
  - !ruby/object:Gem::Version
160
- version: 1.36.0
175
+ version: '2.4'
161
176
  type: :development
162
177
  prerelease: false
163
178
  version_requirements: !ruby/object:Gem::Requirement
164
179
  requirements:
165
180
  - - "~>"
166
181
  - !ruby/object:Gem::Version
167
- version: 1.36.0
182
+ version: '2.4'
168
183
  - !ruby/object:Gem::Dependency
169
184
  name: sqlite3
170
185
  requirement: !ruby/object:Gem::Requirement
@@ -183,6 +198,7 @@ description:
183
198
  email:
184
199
  - howeszy@gmail.com
185
200
  - dmurph24@gmail.com
201
+ - cliffcampbell@hey.com
186
202
  executables: []
187
203
  extensions: []
188
204
  extra_rdoc_files: []
@@ -205,6 +221,7 @@ files:
205
221
  - lib/generators/sn_foil/policy/templates/policy.erb
206
222
  - lib/generators/sn_foil/searcher/searcher_generator.rb
207
223
  - lib/generators/sn_foil/searcher/templates/searcher.erb
224
+ - lib/sn_foil/configuration/lazy_jsonapi_serializer.rb
208
225
  - lib/sn_foil/controller/api.rb
209
226
  - lib/sn_foil/controller/base.rb
210
227
  - lib/sn_foil/controller/concerns/change_controller_concern.rb
@@ -221,7 +238,7 @@ files:
221
238
  - lib/sn_foil/rails/version.rb
222
239
  - lib/sn_foil/searcher.rb
223
240
  - lib/snfoil-rails.rb
224
- homepage: https://github.com/howeszy/snfoil-rails
241
+ homepage: https://github.com/limited-effort/snfoil-rails
225
242
  licenses:
226
243
  - MIT
227
244
  metadata: {}
@@ -233,14 +250,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
233
250
  requirements:
234
251
  - - ">="
235
252
  - !ruby/object:Gem::Version
236
- version: '0'
253
+ version: 2.5.0
237
254
  required_rubygems_version: !ruby/object:Gem::Requirement
238
255
  requirements:
239
256
  - - ">="
240
257
  - !ruby/object:Gem::Version
241
258
  version: '0'
242
259
  requirements: []
243
- rubygems_version: 3.0.3
260
+ rubygems_version: 3.1.6
244
261
  signing_key:
245
262
  specification_version: 4
246
263
  summary: Additional functionality gem for using SnFoil with Rails