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.
- checksums.yaml +7 -0
- data/README.md +32 -0
- data/Rakefile +30 -0
- data/app/controllers/spree/base_controller_decorator.rb +9 -0
- data/lib/solidus_responders.rb +4 -0
- data/lib/solidus_responders/controller_helpers/respond_with.rb +65 -0
- data/lib/solidus_responders/engine.rb +20 -0
- data/lib/solidus_responders/responder.rb +44 -0
- data/lib/solidus_responders/version.rb +3 -0
- metadata +183 -0
checksums.yaml
ADDED
@@ -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
|
data/README.md
ADDED
@@ -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
|
+
```
|
data/Rakefile
ADDED
@@ -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,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
|
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: []
|