workarea-product_badges 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.editorconfig +16 -0
- data/.eslintrc +25 -0
- data/.gitignore +19 -0
- data/.markdownlint.json +10 -0
- data/.rails-rubocop.yml +119 -0
- data/.rubocop.yml +8 -0
- data/.scss-lint.yml +192 -0
- data/CHANGELOG.md +101 -0
- data/Gemfile +16 -0
- data/README.md +167 -0
- data/Rakefile +63 -0
- data/app/assets/stylesheets/workarea/product_badges/components/_badges.scss +47 -0
- data/app/models/workarea/catalog/product.decorator +11 -0
- data/app/view_models/workarea/storefront/product_view_model.decorator +52 -0
- data/app/views/workarea/admin/catalog_products/_badge_fields.html.haml +40 -0
- data/app/views/workarea/storefront/products/_badges.haml +5 -0
- data/bin/rails +20 -0
- data/config/initializers/appends.rb +21 -0
- data/config/initializers/workarea.rb +9 -0
- data/config/locales/en.yml +19 -0
- data/lib/workarea/product_badges/engine.rb +8 -0
- data/lib/workarea/product_badges/version.rb +5 -0
- data/lib/workarea/product_badges.rb +30 -0
- data/script/admin_ci +9 -0
- data/script/ci +11 -0
- data/script/core_ci +9 -0
- data/script/plugins_ci +9 -0
- data/script/storefront_ci +9 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/config/manifest.js +4 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/jobs/application_job.rb +2 -0
- data/test/dummy/app/mailers/application_mailer.rb +4 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +38 -0
- data/test/dummy/bin/update +29 -0
- data/test/dummy/bin/yarn +11 -0
- data/test/dummy/config/application.rb +26 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/cable.yml +10 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +54 -0
- data/test/dummy/config/environments/production.rb +91 -0
- data/test/dummy/config/environments/test.rb +44 -0
- data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
- data/test/dummy/config/initializers/assets.rb +14 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/workarea.rb +5 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +33 -0
- data/test/dummy/config/puma.rb +56 -0
- data/test/dummy/config/routes.rb +5 -0
- data/test/dummy/config/secrets.yml +32 -0
- data/test/dummy/config/spring.rb +6 -0
- data/test/dummy/config.ru +5 -0
- data/test/dummy/db/seeds.rb +2 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.keep +0 -0
- data/test/dummy/package.json +5 -0
- data/test/integration/workarea/admin/products_badging_integration_test.rb +15 -0
- data/test/system/workarea/admin/product_badges_system_test.rb +29 -0
- data/test/system/workarea/storefront/product_badges_system_test.rb +62 -0
- data/test/teaspoon_env.rb +6 -0
- data/test/test_helper.rb +10 -0
- data/test/view_models/workarea/storefront/product_view_model_badging_test.rb +81 -0
- data/workarea-product_badges.gemspec +17 -0
- metadata +143 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e3632e4f228e57a2fc9484b0c8cdc4e65f9b42c562768e987481e1a93ae5c7c8
|
4
|
+
data.tar.gz: 70dacdddb4287037759a4a90263cc2ef602b47ac542f3110497bc8aec8cd9e35
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 28fe68b38b069e53fc71a386e0408763e23b94e37803855ce23a933cb1ac938c1ec2870a8be1036b2b03738b882f15c165ef92e6aff900f9dc07f0dbcce18d9b
|
7
|
+
data.tar.gz: fd4b8439d1f4a8e89221df01fe6da7bf9167cbc650b06949df7291b179f48fdfb9da42e31d7f541706a191fbc2e2ff5f194f5f4724f9565e30f48992624a5fba
|
data/.editorconfig
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# editorconfig.org
|
2
|
+
root = true
|
3
|
+
|
4
|
+
[*]
|
5
|
+
charset = utf-8
|
6
|
+
indent_style = space
|
7
|
+
end_of_line = lf
|
8
|
+
trim_trailing_whitespace = true
|
9
|
+
insert_final_newline = true
|
10
|
+
|
11
|
+
[{*.rb,*.haml,*.decorator}]
|
12
|
+
indent_size = 2
|
13
|
+
indent_style = space
|
14
|
+
|
15
|
+
[{*.js,*.jst,*.ejs,*.scss}]
|
16
|
+
indent_size = 4
|
data/.eslintrc
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
{
|
2
|
+
"extends": "eslint:recommended",
|
3
|
+
"rules": {
|
4
|
+
"semi": ["error", "always"],
|
5
|
+
"eqeqeq": ["error", "always"]
|
6
|
+
},
|
7
|
+
"globals": {
|
8
|
+
"window": true,
|
9
|
+
"document": true,
|
10
|
+
"WORKAREA": true,
|
11
|
+
"$": true,
|
12
|
+
"jQuery": true,
|
13
|
+
"_": true,
|
14
|
+
"feature": true,
|
15
|
+
"JST": true,
|
16
|
+
"Turbolinks": true,
|
17
|
+
"I18n": true,
|
18
|
+
"Chart": true,
|
19
|
+
"Dropzone": true,
|
20
|
+
"strftime": true,
|
21
|
+
"Waypoint": true,
|
22
|
+
"wysihtml": true,
|
23
|
+
"LocalTime": true
|
24
|
+
}
|
25
|
+
}
|
data/.gitignore
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
.bundle/
|
2
|
+
log/*.log
|
3
|
+
pkg/
|
4
|
+
test/dummy/db/*.sqlite3
|
5
|
+
test/dummy/db/*.sqlite3-journal
|
6
|
+
test/dummy/log/*.log
|
7
|
+
test/dummy/tmp/
|
8
|
+
.DS_Store
|
9
|
+
.byebug_history
|
10
|
+
.bundle/
|
11
|
+
.sass-cache/
|
12
|
+
Gemfile.lock
|
13
|
+
pkg/
|
14
|
+
test/dummy/tmp/
|
15
|
+
test/dummy/public/
|
16
|
+
log/*.log
|
17
|
+
test/dummy/log/*.log
|
18
|
+
test/dummy/db/*.sqlite3
|
19
|
+
test/dummy/db/*.sqlite3-journal
|
data/.markdownlint.json
ADDED
data/.rails-rubocop.yml
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
AllCops:
|
2
|
+
# RuboCop has a bunch of cops enabled by default. This setting tells RuboCop
|
3
|
+
# to ignore them, so only the ones explicitly set in this file are enabled.
|
4
|
+
DisabledByDefault: true
|
5
|
+
|
6
|
+
# Prefer &&/|| over and/or.
|
7
|
+
Style/AndOr:
|
8
|
+
Enabled: true
|
9
|
+
|
10
|
+
# Do not use braces for hash literals when they are the last argument of a
|
11
|
+
# method call.
|
12
|
+
Style/BracesAroundHashParameters:
|
13
|
+
Enabled: true
|
14
|
+
|
15
|
+
# Align `when` with `case`.
|
16
|
+
Layout/CaseIndentation:
|
17
|
+
Enabled: true
|
18
|
+
|
19
|
+
# Align comments with method definitions.
|
20
|
+
Layout/CommentIndentation:
|
21
|
+
Enabled: true
|
22
|
+
|
23
|
+
# No extra empty lines.
|
24
|
+
Layout/EmptyLines:
|
25
|
+
Enabled: true
|
26
|
+
|
27
|
+
# In a regular class definition, no empty lines around the body.
|
28
|
+
Layout/EmptyLinesAroundClassBody:
|
29
|
+
Enabled: true
|
30
|
+
|
31
|
+
# In a regular method definition, no empty lines around the body.
|
32
|
+
Layout/EmptyLinesAroundMethodBody:
|
33
|
+
Enabled: true
|
34
|
+
|
35
|
+
# In a regular module definition, no empty lines around the body.
|
36
|
+
Layout/EmptyLinesAroundModuleBody:
|
37
|
+
Enabled: true
|
38
|
+
|
39
|
+
# Use Ruby >= 1.9 syntax for hashes. Prefer { a: :b } over { :a => :b }.
|
40
|
+
Style/HashSyntax:
|
41
|
+
Enabled: true
|
42
|
+
|
43
|
+
# Method definitions after `private` or `protected` isolated calls need one
|
44
|
+
# extra level of indentation.
|
45
|
+
Layout/IndentationConsistency:
|
46
|
+
Enabled: true
|
47
|
+
EnforcedStyle: rails
|
48
|
+
|
49
|
+
# Two spaces, no tabs (for indentation).
|
50
|
+
Layout/IndentationWidth:
|
51
|
+
Enabled: true
|
52
|
+
|
53
|
+
Layout/SpaceAfterColon:
|
54
|
+
Enabled: true
|
55
|
+
|
56
|
+
Layout/SpaceAfterComma:
|
57
|
+
Enabled: true
|
58
|
+
|
59
|
+
Layout/SpaceAroundEqualsInParameterDefault:
|
60
|
+
Enabled: true
|
61
|
+
|
62
|
+
Layout/SpaceAroundKeyword:
|
63
|
+
Enabled: true
|
64
|
+
|
65
|
+
Layout/SpaceAroundOperators:
|
66
|
+
Enabled: true
|
67
|
+
|
68
|
+
Layout/SpaceBeforeFirstArg:
|
69
|
+
Enabled: true
|
70
|
+
|
71
|
+
# Defining a method with parameters needs parentheses.
|
72
|
+
Style/MethodDefParentheses:
|
73
|
+
Enabled: true
|
74
|
+
|
75
|
+
# Use `foo {}` not `foo{}`.
|
76
|
+
Layout/SpaceBeforeBlockBraces:
|
77
|
+
Enabled: true
|
78
|
+
|
79
|
+
# Use `foo { bar }` not `foo {bar}`.
|
80
|
+
Layout/SpaceInsideBlockBraces:
|
81
|
+
Enabled: true
|
82
|
+
|
83
|
+
# Use `{ a: 1 }` not `{a:1}`.
|
84
|
+
Layout/SpaceInsideHashLiteralBraces:
|
85
|
+
Enabled: true
|
86
|
+
|
87
|
+
Layout/SpaceInsideParens:
|
88
|
+
Enabled: true
|
89
|
+
|
90
|
+
# Check quotes usage according to lint rule below.
|
91
|
+
Style/StringLiterals:
|
92
|
+
Enabled: true
|
93
|
+
EnforcedStyle: double_quotes
|
94
|
+
|
95
|
+
# Detect hard tabs, no hard tabs.
|
96
|
+
Layout/Tab:
|
97
|
+
Enabled: true
|
98
|
+
|
99
|
+
# Blank lines should not have any spaces.
|
100
|
+
Layout/TrailingBlankLines:
|
101
|
+
Enabled: true
|
102
|
+
|
103
|
+
# No trailing whitespace.
|
104
|
+
Layout/TrailingWhitespace:
|
105
|
+
Enabled: true
|
106
|
+
|
107
|
+
# Use quotes for string literals when they are enough.
|
108
|
+
Style/UnneededPercentQ:
|
109
|
+
Enabled: true
|
110
|
+
|
111
|
+
# Align `end` with the matching keyword or starting expression except for
|
112
|
+
# assignments, where it should be aligned with the LHS.
|
113
|
+
Lint/EndAlignment:
|
114
|
+
Enabled: true
|
115
|
+
EnforcedStyleAlignWith: variable
|
116
|
+
|
117
|
+
# Use my_method(my_arg) not my_method( my_arg ) or my_method my_arg.
|
118
|
+
Lint/RequireParentheses:
|
119
|
+
Enabled: true
|
data/.rubocop.yml
ADDED
data/.scss-lint.yml
ADDED
@@ -0,0 +1,192 @@
|
|
1
|
+
# Extension of the default configuration:
|
2
|
+
# https://github.com/causes/scss-lint/blob/master/config/default.yml
|
3
|
+
|
4
|
+
exclude: 'docs/**'
|
5
|
+
|
6
|
+
linters:
|
7
|
+
Comment:
|
8
|
+
enabled: false
|
9
|
+
|
10
|
+
DeclarationOrder:
|
11
|
+
enabled: true
|
12
|
+
|
13
|
+
ElsePlacement:
|
14
|
+
enabled: true
|
15
|
+
|
16
|
+
EmptyRule:
|
17
|
+
enabled: false
|
18
|
+
|
19
|
+
HexLength:
|
20
|
+
enabled: true
|
21
|
+
style: long
|
22
|
+
|
23
|
+
Indentation:
|
24
|
+
enabled: true
|
25
|
+
allow_non_nested_indentation: true
|
26
|
+
character: space
|
27
|
+
width: 4
|
28
|
+
|
29
|
+
LeadingZero:
|
30
|
+
enabled: true
|
31
|
+
style: include_zero
|
32
|
+
|
33
|
+
MergeableSelector:
|
34
|
+
enabled: true
|
35
|
+
force_nesting: false
|
36
|
+
|
37
|
+
PropertySortOrder:
|
38
|
+
enabled: true
|
39
|
+
ignore_unspecified: false
|
40
|
+
separate_groups: false
|
41
|
+
order:
|
42
|
+
- display
|
43
|
+
-
|
44
|
+
- position
|
45
|
+
- top
|
46
|
+
- right
|
47
|
+
- bottom
|
48
|
+
- left
|
49
|
+
- z-index
|
50
|
+
-
|
51
|
+
- margin
|
52
|
+
- margin-top
|
53
|
+
- margin-right
|
54
|
+
- margin-bottom
|
55
|
+
- margin-left
|
56
|
+
-
|
57
|
+
- margin-collapse
|
58
|
+
- margin-top-collapse
|
59
|
+
- margin-right-collapse
|
60
|
+
- margin-bottom-collapse
|
61
|
+
- margin-left-collapse
|
62
|
+
-
|
63
|
+
- padding
|
64
|
+
- padding-top
|
65
|
+
- padding-right
|
66
|
+
- padding-bottom
|
67
|
+
- padding-left
|
68
|
+
-
|
69
|
+
- width
|
70
|
+
- height
|
71
|
+
- max-width
|
72
|
+
- max-height
|
73
|
+
- min-width
|
74
|
+
- min-height
|
75
|
+
-
|
76
|
+
- float
|
77
|
+
- clear
|
78
|
+
-
|
79
|
+
- color
|
80
|
+
-
|
81
|
+
- font
|
82
|
+
- font-size
|
83
|
+
- font-style
|
84
|
+
- font-family
|
85
|
+
- font-weight
|
86
|
+
- font-variant
|
87
|
+
- font-smoothing
|
88
|
+
-
|
89
|
+
- line-height
|
90
|
+
- letter-spacing
|
91
|
+
- word-spacing
|
92
|
+
-
|
93
|
+
- text-align
|
94
|
+
- text-indent
|
95
|
+
- text-shadow
|
96
|
+
- text-overflow
|
97
|
+
- text-rendering
|
98
|
+
- text-transform
|
99
|
+
- text-decoration
|
100
|
+
- text-size-adjust
|
101
|
+
-
|
102
|
+
- word-break
|
103
|
+
- word-wrap
|
104
|
+
-
|
105
|
+
- white-space
|
106
|
+
-
|
107
|
+
- background
|
108
|
+
- background-size
|
109
|
+
- background-color
|
110
|
+
- background-image
|
111
|
+
- background-repeat
|
112
|
+
- background-position
|
113
|
+
- background-attachment
|
114
|
+
-
|
115
|
+
- border
|
116
|
+
- border-top
|
117
|
+
- border-right
|
118
|
+
- border-bottom
|
119
|
+
- border-left
|
120
|
+
-
|
121
|
+
- border-image
|
122
|
+
- border-spacing
|
123
|
+
- border-collapse
|
124
|
+
-
|
125
|
+
- border-color
|
126
|
+
- border-top-color
|
127
|
+
- border-right-color
|
128
|
+
- border-bottom-color
|
129
|
+
- border-left-color
|
130
|
+
-
|
131
|
+
- border-style
|
132
|
+
- border-top-style
|
133
|
+
- border-right-style
|
134
|
+
- border-bottom-style
|
135
|
+
- border-left-style
|
136
|
+
-
|
137
|
+
- border-width
|
138
|
+
- border-top-width
|
139
|
+
- border-right-width
|
140
|
+
- border-bottom-width
|
141
|
+
- border-left-width
|
142
|
+
-
|
143
|
+
- border-radius
|
144
|
+
- border-top-right-radius
|
145
|
+
- border-bottom-right-radius
|
146
|
+
- border-bottom-left-radius
|
147
|
+
- border-top-left-radius
|
148
|
+
- border-radius-topright
|
149
|
+
- border-radius-bottomright
|
150
|
+
- border-radius-bottomleft
|
151
|
+
- border-radius-topleft
|
152
|
+
-
|
153
|
+
- box-shadow
|
154
|
+
|
155
|
+
SelectorFormat:
|
156
|
+
enabled: true
|
157
|
+
convention: hyphenated_BEM
|
158
|
+
|
159
|
+
SingleLinePerSelector:
|
160
|
+
enabled: false
|
161
|
+
|
162
|
+
SpaceAfterPropertyColon:
|
163
|
+
enabled: true
|
164
|
+
style: at_least_one_space
|
165
|
+
|
166
|
+
SpaceBeforeBrace:
|
167
|
+
enabled: true
|
168
|
+
style: space
|
169
|
+
allow_single_line_padding: true
|
170
|
+
|
171
|
+
VariableForProperty:
|
172
|
+
enabled: true
|
173
|
+
properties:
|
174
|
+
- color
|
175
|
+
- font-family
|
176
|
+
- background-color
|
177
|
+
|
178
|
+
PseudoElement:
|
179
|
+
enabled: false
|
180
|
+
|
181
|
+
# These default settings may be problematic to implementors. They are not
|
182
|
+
# ommitted so that they may be adjusted as needed during an implementation.
|
183
|
+
#
|
184
|
+
# For documentation:
|
185
|
+
# https://github.com/causes/scss-lint/blob/master/lib/scss_lint/linter/README.md
|
186
|
+
|
187
|
+
DuplicateProperty:
|
188
|
+
enabled: true
|
189
|
+
|
190
|
+
PropertySpelling:
|
191
|
+
enabled: true
|
192
|
+
extra_properties: [] # Add experimental CSS to this array, if needed
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
Workarea Product Badges 1.3.2 (2019-08-21)
|
2
|
+
--------------------------------------------------------------------------------
|
3
|
+
|
4
|
+
* Open Source!
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
Workarea Product Badges 1.3.1 (2019-06-11)
|
9
|
+
--------------------------------------------------------------------------------
|
10
|
+
|
11
|
+
* Add minimum version requirement for Workarea v3.4
|
12
|
+
|
13
|
+
* As of v1.3.0 product badges requries workarea v3.4.0 or higher
|
14
|
+
|
15
|
+
PRODBADGE-10
|
16
|
+
Jake Beresford
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
Workarea Product Badges 1.3.0 (2019-03-19)
|
21
|
+
--------------------------------------------------------------------------------
|
22
|
+
|
23
|
+
* Update for v3.4 compatibility
|
24
|
+
|
25
|
+
* Update implementation of top_sellers badge to use new Insights properly
|
26
|
+
* Update gemfile format
|
27
|
+
* Use integration tests instead of system tests for speed and to prevent weirdness.
|
28
|
+
* Set test/dummy to use 5.2
|
29
|
+
* Fix engine_path in bin/rails
|
30
|
+
* Remove require workarea from bin/rails
|
31
|
+
* rubocop fixes
|
32
|
+
|
33
|
+
PRODBADGE-8
|
34
|
+
Jake Beresford
|
35
|
+
|
36
|
+
* Update for v3.4 compatibility
|
37
|
+
|
38
|
+
* Use Insights instead of deprecated Analytics when determining best sellers
|
39
|
+
* Update CI scripts
|
40
|
+
|
41
|
+
PRODBADGE-8
|
42
|
+
Matt Dunphy
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
Workarea Product Badges 1.2.0 (2018-10-30)
|
47
|
+
--------------------------------------------------------------------------------
|
48
|
+
|
49
|
+
* Allow field used for new badge to be configured
|
50
|
+
|
51
|
+
PRODBADGE-4
|
52
|
+
Jake Beresford
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
Workarea Product Badges 1.1.0 (2018-09-19)
|
57
|
+
--------------------------------------------------------------------------------
|
58
|
+
|
59
|
+
* Add badges to product detail page
|
60
|
+
|
61
|
+
* Append badges partial to storefront.product_description
|
62
|
+
* Add scoped styles for badges on PDP
|
63
|
+
|
64
|
+
PRODBADGE-7
|
65
|
+
Jake Beresford
|
66
|
+
|
67
|
+
* Prevent pointer events on badges
|
68
|
+
|
69
|
+
* Allow user to click link behind a badge component, like a linked product_summary image
|
70
|
+
|
71
|
+
PRODBADGE-6
|
72
|
+
Jake Beresford
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
Workarea Product Badges 1.0.0 (2018-04-11 10:58:26 -0400)
|
77
|
+
--------------------------------------------------------------------------------
|
78
|
+
|
79
|
+
* Workarea Product Badges Plugin
|
80
|
+
|
81
|
+
Allows products to be 'badged' either manually via the admin/product import or
|
82
|
+
via logic-based automatic badges. Admins can add badges via a CSV of
|
83
|
+
values or toggle rule-based badges like 'sale' or 'new'. Badges are
|
84
|
+
displayed on product summary.
|
85
|
+
|
86
|
+
PRODBADGE-1
|
87
|
+
Jake Beresford
|
88
|
+
|
89
|
+
|
90
|
+
Workarea Product Badges 1.0.0 (2018-04-10 15:14:42 -0400)
|
91
|
+
--------------------------------------------------------------------------------
|
92
|
+
|
93
|
+
* Workarea Product Badges Plugin
|
94
|
+
|
95
|
+
Allows products to be 'badged' either manually via the admin/product import or
|
96
|
+
via logic-based automatic badges. Admins can add badges via a CSV of
|
97
|
+
values or toggle rule-based badges like 'sale' or 'new'. Badges are
|
98
|
+
displayed on product summary.
|
99
|
+
|
100
|
+
PRODBADGE-1
|
101
|
+
Jake Beresford
|
data/Gemfile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
# Declare your gem"s dependencies in accordions.gemspec.
|
4
|
+
# Bundler will treat runtime dependencies like base dependencies, and
|
5
|
+
# development dependencies will be added by default to the :development group.
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
# Declare any dependencies that are still in development here instead of in
|
9
|
+
# your gemspec. These might include edge Rails or gems from your path or
|
10
|
+
# Git. Remember to move these dependencies to your gemspec before releasing
|
11
|
+
# your gem to rubygems.org.
|
12
|
+
|
13
|
+
# To use a debugger
|
14
|
+
# gem "byebug", group: [:development, :test]
|
15
|
+
|
16
|
+
gem "workarea", source: "https://gems.weblinc.com"
|
data/README.md
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
Workarea Badges
|
2
|
+
================================================================================
|
3
|
+
|
4
|
+
Badges plugin for the Workarea platform.
|
5
|
+
Adds badges to product summary and product detail views.
|
6
|
+
|
7
|
+
Badges can be added to products manually, or via a product import by specifying
|
8
|
+
a comma-separated list in the product[:badges] field.
|
9
|
+
|
10
|
+
In addition to custom badges via the product[:badges] field this plugin provides
|
11
|
+
automatic badging for products. Out of the box automatic badges are:
|
12
|
+
|
13
|
+
* New
|
14
|
+
* Sale
|
15
|
+
* Best Seller
|
16
|
+
|
17
|
+
Configuration
|
18
|
+
--------------------------------------------------------------------------------
|
19
|
+
|
20
|
+
The following configuration can be added to your host app and adjusted as necessary:
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
Workarea.configure do |config|
|
24
|
+
config.product_badges = {
|
25
|
+
new_threshold: 30,
|
26
|
+
new_date_field: :created_at,
|
27
|
+
number_of_top_sellers: 10,
|
28
|
+
max_badges: nil,
|
29
|
+
sort: ->(badges) { badges.sort_by{ |b| ["New", "Sale", "Best Seller"].find_index(b) || 999 } }
|
30
|
+
}
|
31
|
+
end
|
32
|
+
```
|
33
|
+
|
34
|
+
### new_threshold
|
35
|
+
|
36
|
+
* type: integer
|
37
|
+
* default: 30
|
38
|
+
* products created in this time will receive a 'New' badge
|
39
|
+
|
40
|
+
### new_date_field
|
41
|
+
|
42
|
+
* type: symbol
|
43
|
+
* default: :created_at
|
44
|
+
* Specify which field will be used to calculate whether a product should display
|
45
|
+
the 'new' badge.
|
46
|
+
|
47
|
+
### number_of_top_sellers
|
48
|
+
|
49
|
+
* type: integer
|
50
|
+
* default: 10
|
51
|
+
* Description: Number of products from top sellers to apply a badge to
|
52
|
+
|
53
|
+
### max_badges
|
54
|
+
|
55
|
+
* type: integer
|
56
|
+
* default: nil
|
57
|
+
* Description: limits the number of badges that can be applied to any product
|
58
|
+
|
59
|
+
### sort
|
60
|
+
|
61
|
+
* type: Lambda
|
62
|
+
* default: ->(badges) { badges.sort_by{ |b| ["New", "Sale", "Best Seller"].find_index(b) || 999 } }
|
63
|
+
* Description: Specify the order in which badges should appear, this lambda can
|
64
|
+
be updated to sort badges according to any business logic without decoration.
|
65
|
+
By default the plugin will sort automatic badges first followed by custom badges.
|
66
|
+
Custom badges will display in the order they appear in the admin.
|
67
|
+
|
68
|
+
#### Implementing a custom sort class
|
69
|
+
|
70
|
+
For more complicated sorting logic, a sorting class can be implemented as long as
|
71
|
+
it responds to .call example
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
class MyBadgeSort
|
75
|
+
def self.call(badges)
|
76
|
+
new(badges).results
|
77
|
+
end
|
78
|
+
|
79
|
+
def initialize(badges)
|
80
|
+
@badges = badges
|
81
|
+
end
|
82
|
+
|
83
|
+
def results
|
84
|
+
# do all sorts of crazy complex stuff
|
85
|
+
end
|
86
|
+
end
|
87
|
+
```
|
88
|
+
|
89
|
+
Then update your configuration to:
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
Workarea.config.product_badges[:sort] = MyBadgeSort
|
93
|
+
```
|
94
|
+
|
95
|
+
Adding new automatic badges
|
96
|
+
--------------------------------------------------------------------------------
|
97
|
+
|
98
|
+
To add a new automatic badge in your host application you should decorate the
|
99
|
+
product_view_model automatic_badges method, calling super and injecting your badge
|
100
|
+
to the array.
|
101
|
+
|
102
|
+
Example:
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
module Workarea
|
106
|
+
decorate Storefront::ProductViewModel, with: :your_app_name do
|
107
|
+
def automatic_badges
|
108
|
+
super << custom_badge_method
|
109
|
+
end
|
110
|
+
|
111
|
+
private
|
112
|
+
|
113
|
+
def custom_badge_method
|
114
|
+
if logic_for_automatic_badge
|
115
|
+
t('workarea.storefront.products.badges.[custom_badge_key]')
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
```
|
121
|
+
|
122
|
+
Getting Started
|
123
|
+
--------------------------------------------------------------------------------
|
124
|
+
|
125
|
+
This gem contains a rails engine that must be mounted onto a host Rails application.
|
126
|
+
|
127
|
+
To access Workarea gems and source code, you must be an employee of WebLinc or a licensed retailer or partner.
|
128
|
+
|
129
|
+
Workarea gems are hosted privately at https://gems.weblinc.com/.
|
130
|
+
You must have individual or team credentials to install gems from this server. Add your gems server credentials to Bundler:
|
131
|
+
|
132
|
+
bundle config gems.weblinc.com my_username:my_password
|
133
|
+
|
134
|
+
Or set the appropriate environment variable in a shell startup file:
|
135
|
+
|
136
|
+
export BUNDLE_GEMS__WEBLINC__COM='my_username:my_password'
|
137
|
+
|
138
|
+
Then add the gem to your application's Gemfile specifying the source:
|
139
|
+
|
140
|
+
# ...
|
141
|
+
gem 'workarea-badges', source: 'https://gems.weblinc.com'
|
142
|
+
# ...
|
143
|
+
|
144
|
+
Or use a source block:
|
145
|
+
|
146
|
+
# ...
|
147
|
+
source 'https://gems.weblinc.com' do
|
148
|
+
gem 'workarea-badges'
|
149
|
+
end
|
150
|
+
# ...
|
151
|
+
|
152
|
+
Update your application's bundle.
|
153
|
+
|
154
|
+
cd path/to/application
|
155
|
+
bundle
|
156
|
+
|
157
|
+
Workarea Platform Documentation
|
158
|
+
--------------------------------------------------------------------------------
|
159
|
+
|
160
|
+
See [http://developer.weblinc.com](http://developer.weblinc.com) for Workarea platform documentation.
|
161
|
+
|
162
|
+
Copyright & Licensing
|
163
|
+
--------------------------------------------------------------------------------
|
164
|
+
|
165
|
+
Copyright WebLinc 2018. All rights reserved.
|
166
|
+
|
167
|
+
For licensing, contact sales@workarea.com.
|