solidus_responders 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2efd3622b02ca6e57e36593071f2b856ff387e8b
4
+ data.tar.gz: 5e3bb4ee396eecbe4c0600a215eaa5749e81ce2b
5
+ SHA512:
6
+ metadata.gz: bd13ad3fa5d62dd2060b962ab096f16a67cb4c625cbb6abe19f6e0ec7a5b422987b9f6d02bccf3dbbdc5a28fe8f9bfcee387b082f32c38f37f6d5d2f74c4f5c0
7
+ data.tar.gz: 6d28f740b8315fdb9e3d2a9e650525f882a925f1fa378000d26bf9aae21c2ea11ec35426b6e04dd9f49ca54a35b006f0d36eac0efdbcbd15a199d3e3b003197c
@@ -0,0 +1,32 @@
1
+ Solidus Responders
2
+ ==============
3
+
4
+ Solidus responders allows customizing and overriding responders within solidus.
5
+ For more information about responders, see the responders gem:
6
+
7
+ [plataformatec/responders](https://github.com/plataformatec/responders)
8
+
9
+ Installation
10
+ ------------
11
+
12
+ Add solidus_responders to your Gemfile:
13
+
14
+ ```ruby
15
+ gem 'solidus_responders'
16
+ ```
17
+
18
+ Bundle your dependencies:
19
+
20
+ ```shell
21
+ bundle
22
+ ```
23
+
24
+ Testing
25
+ -------
26
+
27
+ First bundle your dependencies, then run `rake`. `rake` will default to building the dummy app if it does not exist, then it will run specs, and [Rubocop](https://github.com/bbatsov/rubocop) static code analysis. The dummy app can be regenerated by using `rake test_app`.
28
+
29
+ ```shell
30
+ bundle
31
+ bundle exec rake
32
+ ```
@@ -0,0 +1,30 @@
1
+ require 'bundler'
2
+
3
+ Bundler::GemHelper.install_tasks
4
+
5
+ begin
6
+ require 'spree/testing_support/extension_rake'
7
+ require 'rubocop/rake_task'
8
+ require 'rspec/core/rake_task'
9
+
10
+ RSpec::Core::RakeTask.new(:spec)
11
+
12
+ RuboCop::RakeTask.new
13
+
14
+ task default: %i(first_run rubocop spec)
15
+ rescue LoadError
16
+ # no rspec available
17
+ end
18
+
19
+ task :first_run do
20
+ if Dir['spec/dummy'].empty?
21
+ Rake::Task[:test_app].invoke
22
+ Dir.chdir('../../')
23
+ end
24
+ end
25
+
26
+ desc 'Generates a dummy app for testing'
27
+ task :test_app do
28
+ ENV['LIB_NAME'] = 'solidus_responders'
29
+ Rake::Task['extension:test_app'].invoke
30
+ end
@@ -0,0 +1,9 @@
1
+ module Spree
2
+ module RespondWith
3
+ def self.prepended(base)
4
+ base.include Spree::Core::ControllerHelpers::RespondWith
5
+ end
6
+ end
7
+ end
8
+
9
+ Spree::BaseController.prepend Spree::RespondWith
@@ -0,0 +1,4 @@
1
+ require 'solidus_core'
2
+ require 'solidus_responders/engine'
3
+ require 'solidus_responders/responder'
4
+ require 'solidus_responders/controller_helpers/respond_with'
@@ -0,0 +1,65 @@
1
+ require 'solidus_responders/responder'
2
+
3
+ module ActionController
4
+ class Base
5
+ def respond_with(*resources, &block)
6
+ if Spree::BaseController.spree_responders.keys.include?(self.class.to_s.to_sym)
7
+ # Checkout AS Array#extract_options! and original respond_with
8
+ # implementation for a better picture of this hack
9
+ if resources.last.is_a? Hash
10
+ resources.last[:action_name] = action_name.to_sym
11
+ else
12
+ resources.push action_name: action_name.to_sym
13
+ end
14
+ end
15
+
16
+ super
17
+ end
18
+ end
19
+ end
20
+
21
+ module Spree
22
+ module Core
23
+ module ControllerHelpers
24
+ module RespondWith
25
+ extend ActiveSupport::Concern
26
+
27
+ included do
28
+ cattr_accessor :spree_responders
29
+ self.spree_responders = {}
30
+ self.responder = Spree::Responder
31
+ end
32
+
33
+ module ClassMethods
34
+ def clear_overrides!
35
+ self.spree_responders = {}
36
+ end
37
+
38
+ def respond_override(options = {})
39
+ unless options.blank?
40
+ action_name = options.keys.first
41
+ action_value = options.values.first
42
+
43
+ if action_name.blank? || action_value.blank?
44
+ raise ArgumentError, "invalid values supplied #{options.inspect}"
45
+ end
46
+
47
+ format_name = action_value.keys.first
48
+ format_value = action_value.values.first
49
+
50
+ if format_name.blank? || format_value.blank?
51
+ raise ArgumentError, "invalid values supplied #{options.inspect}"
52
+ end
53
+
54
+ if format_value.is_a?(Proc)
55
+ options = { action_name.to_sym => { format_name.to_sym => { success: format_value } } }
56
+ end
57
+
58
+ spree_responders.deep_merge!(name.to_sym => options)
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,20 @@
1
+ module SolidusResponders
2
+ class Engine < Rails::Engine
3
+ require 'spree/core'
4
+ isolate_namespace Spree
5
+ engine_name 'solidus_responders'
6
+
7
+ # use rspec for tests
8
+ config.generators do |g|
9
+ g.test_framework :rspec
10
+ end
11
+
12
+ def self.activate
13
+ Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
14
+ Rails.configuration.cache_classes ? require(c) : load(c)
15
+ end
16
+ end
17
+
18
+ config.to_prepare(&method(:activate).to_proc)
19
+ end
20
+ end
@@ -0,0 +1,44 @@
1
+ module Spree
2
+ class Responder < ::ActionController::Responder #:nodoc:
3
+ attr_accessor :on_success, :on_failure
4
+
5
+ def initialize(controller, resources, options = {})
6
+ super
7
+
8
+ class_name = controller.class.name.to_sym
9
+ action_name = options.delete(:action_name)
10
+
11
+ if result = Spree::BaseController.spree_responders[class_name].try(:[], action_name).try(:[], format.to_sym)
12
+ self.on_success = handler(controller, result, :success)
13
+ self.on_failure = handler(controller, result, :failure)
14
+ end
15
+ end
16
+
17
+ def to_html
18
+ super && return if !(on_success || on_failure)
19
+ has_errors? ? controller.instance_exec(&on_failure) : controller.instance_exec(&on_success)
20
+ end
21
+
22
+ def to_format
23
+ super && return if !(on_success || on_failure)
24
+ has_errors? ? controller.instance_exec(&on_failure) : controller.instance_exec(&on_success)
25
+ end
26
+
27
+ private
28
+
29
+ def handler(controller, result, status)
30
+ return result if result.respond_to? :call
31
+
32
+ case result
33
+ when Hash
34
+ if result[status].is_a? Symbol
35
+ controller.method(result[status])
36
+ else
37
+ result[status]
38
+ end
39
+ when Symbol
40
+ controller.method(result)
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,3 @@
1
+ module SolidusResponders
2
+ VERSION = '0.0.1'
3
+ end
metadata ADDED
@@ -0,0 +1,183 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solidus_responders
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Graham Bouvier
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-07-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: solidus_core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "<"
18
+ - !ruby/object:Gem::Version
19
+ version: '3'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.1.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "<"
28
+ - !ruby/object:Gem::Version
29
+ version: '3'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.1.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: responders
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: database_cleaner
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: factory_girl
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rspec-rails
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rubocop
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - '='
94
+ - !ruby/object:Gem::Version
95
+ version: '0.43'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - '='
101
+ - !ruby/object:Gem::Version
102
+ version: '0.43'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rubocop-rspec
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 1.4.0
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - '='
115
+ - !ruby/object:Gem::Version
116
+ version: 1.4.0
117
+ - !ruby/object:Gem::Dependency
118
+ name: simplecov
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: sqlite3
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ description: Removing responders out of solidus core
146
+ email: graham@stembolt.com
147
+ executables: []
148
+ extensions: []
149
+ extra_rdoc_files: []
150
+ files:
151
+ - README.md
152
+ - Rakefile
153
+ - app/controllers/spree/base_controller_decorator.rb
154
+ - lib/solidus_responders.rb
155
+ - lib/solidus_responders/controller_helpers/respond_with.rb
156
+ - lib/solidus_responders/engine.rb
157
+ - lib/solidus_responders/responder.rb
158
+ - lib/solidus_responders/version.rb
159
+ homepage:
160
+ licenses:
161
+ - BSD-3-Clause
162
+ metadata: {}
163
+ post_install_message:
164
+ rdoc_options: []
165
+ require_paths:
166
+ - lib
167
+ required_ruby_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ required_rubygems_version: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
177
+ requirements: []
178
+ rubyforge_project:
179
+ rubygems_version: 2.5.1
180
+ signing_key:
181
+ specification_version: 4
182
+ summary: Provide custom responders for Solidus
183
+ test_files: []