spree_extension 0.0.5 → 0.0.6

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
- SHA1:
3
- metadata.gz: a3492e25f2bd87ac60346588d1fc1a82bc333c22
4
- data.tar.gz: 431439c3875bd228538ab37e7b27f9be3bee0551
2
+ SHA256:
3
+ metadata.gz: 5aa752901e907aa299af94f6d1443798304472eaeccd6851cd254b6dd3f05b59
4
+ data.tar.gz: 0b354e0bab793367ee06a867afdfc98763d1dc556726a8c2924c5952c1f2d788
5
5
  SHA512:
6
- metadata.gz: 967936aa4e90925adf3da8aeda15872e54e0e6f64b3ff1a37b16dab904aa726ea974640a8c0d69bdef5988ee45bed94b4769d3087c11a2cdc372b82a7f5d84d8
7
- data.tar.gz: 3bae962e4588a2c302f130a72fc221a9e255deeb9033b48693ad8ec916d7a63dc76e9f3bc28cfa207800d39416e5c855260e626c668f32bd68981d541a6ddaa2
6
+ metadata.gz: fd05906a4525fdbcdc947c13d3bebf148ca3b2c4971e2371bc4de4de3484a3e892667532cabe5afc20cdf883d478f740f7dcc93d79ad4006103f716433d49e6e
7
+ data.tar.gz: bd05c213363d929dce0f865136ed93b790d4d796c8d82e994c4b11f3543c78977b6ba0937cc16a7522de5e4d5e3ffd26e3aefb1630a9eeecc7587ed581a10044
data/.gitignore CHANGED
@@ -42,9 +42,9 @@ build-iPhoneSimulator/
42
42
 
43
43
  # for a library or gem, you might want to ignore these files since the code is
44
44
  # intended to run in multiple environments; otherwise, check them in:
45
- # Gemfile.lock
46
- # .ruby-version
47
- # .ruby-gemset
45
+ Gemfile.lock
46
+ .ruby-version
47
+ .ruby-gemset
48
48
 
49
49
  # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
50
50
  .rvmrc
data/Gemfile ADDED
@@ -0,0 +1 @@
1
+ gemspec
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2017 Spark Solutions Sp. z o.o.
1
+ Copyright (c) 2017-2019 Spark Solutions Sp. z o.o.
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without modification,
@@ -1 +1,2 @@
1
1
  require 'spree_extension/migration'
2
+ require 'spree_extension/service_module'
@@ -0,0 +1,103 @@
1
+ # This is a backported ServiceModule introduced in Spree 3.7
2
+ # Older versions of Spree don't have this feature
3
+ # see: https://github.com/spree/spree/blob/master/core/lib/spree/service_module.rb
4
+ unless defined?(Spree::ServiceModule)
5
+ module Spree
6
+ module ServiceModule
7
+ module Callable
8
+ def call(*args)
9
+ new.call(*args).tap do |result|
10
+ return yield(result) if block_given?
11
+ end
12
+ end
13
+ end
14
+
15
+ class MethodNotImplemented < StandardError; end
16
+ class WrongDataPassed < StandardError; end
17
+ class NonCallablePassedToRun < StandardError; end
18
+ class IncompatibleParamsPassed < StandardError; end
19
+
20
+ Result = Struct.new(:success, :value, :error) do
21
+ def success?
22
+ success
23
+ end
24
+
25
+ def failure?
26
+ !success
27
+ end
28
+ end
29
+
30
+ ResultError = Struct.new(:value) do
31
+ def to_s
32
+ return value.full_messages.join(', ') if value&.respond_to?(:full_messages)
33
+
34
+ value.to_s
35
+ end
36
+
37
+ def to_h
38
+ return value.messages if value&.respond_to?(:messages)
39
+
40
+ {}
41
+ end
42
+ end
43
+
44
+ module Base
45
+ def self.prepended(base)
46
+ class << base
47
+ prepend Callable
48
+ end
49
+ end
50
+
51
+ def call(input = nil)
52
+ input ||= {}
53
+ @_passed_input = Result.new(true, input)
54
+ result = super
55
+ @_passed_input = result if result.is_a? Result
56
+ enforce_data_format
57
+ @_passed_input
58
+ end
59
+
60
+ private
61
+
62
+ def run(callable)
63
+ return unless @_passed_input.success?
64
+
65
+ if callable.instance_of? Symbol
66
+ unless respond_to?(callable, true)
67
+ raise MethodNotImplemented, "You didn't implement #{callable} method. Implement it before calling this class"
68
+ end
69
+
70
+ callable = method(callable)
71
+ end
72
+
73
+ unless callable.respond_to?(:call)
74
+ raise NonCallablePassedToRun, 'You can pass only symbol with method name or instance of callable class to run method'
75
+ end
76
+
77
+ begin
78
+ @_passed_input = callable.call(@_passed_input.value)
79
+ rescue ArgumentError => e
80
+ if e.message.include? 'missing'
81
+ raise IncompatibleParamsPassed, "You didn't pass #{e.message} to callable '#{callable.name}'"
82
+ else
83
+ raise IncompatibleParamsPassed, "You passed #{e.message} to callable '#{callable.name}'"
84
+ end
85
+ end
86
+ end
87
+
88
+ def success(value)
89
+ Result.new(true, value, nil)
90
+ end
91
+
92
+ def failure(value, error = nil)
93
+ error = value.errors if error.nil? && value.respond_to?(:errors)
94
+ Result.new(false, value, ResultError.new(error))
95
+ end
96
+
97
+ def enforce_data_format
98
+ raise WrongDataPassed, "You didn't use `success` or `failure` method to return value from method." unless @_passed_input.instance_of? Result
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'spree_extension'
3
- s.version = '0.0.5'
3
+ s.version = '0.0.6'
4
4
  s.summary = 'Common tools and helpers for Spree Extensions developers'
5
5
  s.description = 'Common tools and helpers for Spree Extensions developers'
6
6
  s.authors = ['Damian Legawiec']
@@ -14,4 +14,5 @@ Gem::Specification.new do |s|
14
14
  s.require_paths = ['lib']
15
15
 
16
16
  s.add_dependency 'activerecord', '>= 4.2'
17
+ s.add_dependency 'spree_core', '>= 3.1'
17
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_extension
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damian Legawiec
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-28 00:00:00.000000000 Z
11
+ date: 2019-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: spree_core
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '3.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '3.1'
27
41
  description: Common tools and helpers for Spree Extensions developers
28
42
  email: damian@sparksolutions.co
29
43
  executables: []
@@ -31,9 +45,11 @@ extensions: []
31
45
  extra_rdoc_files: []
32
46
  files:
33
47
  - ".gitignore"
48
+ - Gemfile
34
49
  - LICENSE.md
35
50
  - lib/spree_extension.rb
36
51
  - lib/spree_extension/migration.rb
52
+ - lib/spree_extension/service_module.rb
37
53
  - spree_extension.gemspec
38
54
  homepage: https://spreecommerce.org
39
55
  licenses:
@@ -55,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
71
  version: '0'
56
72
  requirements: []
57
73
  rubyforge_project:
58
- rubygems_version: 2.6.10
74
+ rubygems_version: 2.7.8
59
75
  signing_key:
60
76
  specification_version: 4
61
77
  summary: Common tools and helpers for Spree Extensions developers