workarea-share 1.2.4

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.
Files changed (98) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +20 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +37 -0
  4. data/.github/ISSUE_TEMPLATE/documentation-request.md +17 -0
  5. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  6. data/.gitignore +14 -0
  7. data/CHANGELOG.md +108 -0
  8. data/CODE_OF_CONDUCT.md +3 -0
  9. data/CONTRIBUTING.md +3 -0
  10. data/Gemfile +9 -0
  11. data/LICENSE +52 -0
  12. data/README.md +59 -0
  13. data/Rakefile +52 -0
  14. data/app/assets/images/workarea/storefront/share/icons/email.svg +4 -0
  15. data/app/assets/stylesheets/workarea/storefront/share/components/_share_buttons.scss +14 -0
  16. data/app/controllers/workarea/storefront/shares_controller.rb +42 -0
  17. data/app/helpers/workarea/storefront/shares_helper.rb +39 -0
  18. data/app/mailers/workarea/storefront/share_mailer.rb +17 -0
  19. data/app/models/workarea/email/share.rb +39 -0
  20. data/app/seeds/shares_seeds.rb +22 -0
  21. data/app/view_models/workarea/storefront/share_view_model.rb +43 -0
  22. data/app/views/workarea/storefront/pages/_shares_robots.text +1 -0
  23. data/app/views/workarea/storefront/products/_share.html.haml +1 -0
  24. data/app/views/workarea/storefront/share_mailer/share.html.haml +21 -0
  25. data/app/views/workarea/storefront/shares/_share_buttons.html.haml +16 -0
  26. data/app/views/workarea/storefront/shares/new.html.haml +50 -0
  27. data/app/views/workarea/storefront/style_guides/components/_share_buttons.html.haml +14 -0
  28. data/bin/rails +17 -0
  29. data/config/initializers/appends.rb +14 -0
  30. data/config/initializers/configuration.rb +6 -0
  31. data/config/initializers/rack_attack.rb +10 -0
  32. data/config/initializers/recaptcha.rb +9 -0
  33. data/config/locales/en.yml +30 -0
  34. data/config/routes.rb +5 -0
  35. data/lib/tasks/share_tasks.rake +4 -0
  36. data/lib/workarea/mailer_previews/storefront/share_mailer_preview.rb +10 -0
  37. data/lib/workarea/share.rb +13 -0
  38. data/lib/workarea/share/engine.rb +15 -0
  39. data/lib/workarea/share/version.rb +5 -0
  40. data/test/dummy/Rakefile +6 -0
  41. data/test/dummy/app/assets/config/manifest.js +4 -0
  42. data/test/dummy/app/assets/images/.keep +0 -0
  43. data/test/dummy/app/assets/javascripts/application.js +13 -0
  44. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  45. data/test/dummy/app/controllers/application_controller.rb +3 -0
  46. data/test/dummy/app/controllers/concerns/.keep +0 -0
  47. data/test/dummy/app/helpers/application_helper.rb +2 -0
  48. data/test/dummy/app/jobs/application_job.rb +2 -0
  49. data/test/dummy/app/mailers/application_mailer.rb +4 -0
  50. data/test/dummy/app/models/concerns/.keep +0 -0
  51. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  52. data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
  53. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  54. data/test/dummy/bin/bundle +3 -0
  55. data/test/dummy/bin/rails +4 -0
  56. data/test/dummy/bin/rake +4 -0
  57. data/test/dummy/bin/setup +34 -0
  58. data/test/dummy/bin/update +29 -0
  59. data/test/dummy/config.ru +5 -0
  60. data/test/dummy/config/application.rb +17 -0
  61. data/test/dummy/config/boot.rb +5 -0
  62. data/test/dummy/config/cable.yml +9 -0
  63. data/test/dummy/config/environment.rb +5 -0
  64. data/test/dummy/config/environments/development.rb +54 -0
  65. data/test/dummy/config/environments/production.rb +86 -0
  66. data/test/dummy/config/environments/test.rb +43 -0
  67. data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
  68. data/test/dummy/config/initializers/assets.rb +11 -0
  69. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  70. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  71. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  72. data/test/dummy/config/initializers/inflections.rb +16 -0
  73. data/test/dummy/config/initializers/mime_types.rb +4 -0
  74. data/test/dummy/config/initializers/new_framework_defaults.rb +21 -0
  75. data/test/dummy/config/initializers/session_store.rb +5 -0
  76. data/test/dummy/config/initializers/workarea.rb +5 -0
  77. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  78. data/test/dummy/config/locales/en.yml +23 -0
  79. data/test/dummy/config/puma.rb +47 -0
  80. data/test/dummy/config/routes.rb +5 -0
  81. data/test/dummy/config/secrets.yml +22 -0
  82. data/test/dummy/config/spring.rb +6 -0
  83. data/test/dummy/lib/assets/.keep +0 -0
  84. data/test/dummy/log/.keep +0 -0
  85. data/test/dummy/public/404.html +67 -0
  86. data/test/dummy/public/422.html +67 -0
  87. data/test/dummy/public/500.html +66 -0
  88. data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  89. data/test/dummy/public/apple-touch-icon.png +0 -0
  90. data/test/dummy/public/favicon.ico +1 -0
  91. data/test/helpers/shares_helper_test.rb +30 -0
  92. data/test/integration/workarea/storefront/sharing_integration_test.rb +40 -0
  93. data/test/models/workarea/email/share_test.rb +28 -0
  94. data/test/system/workarea/storefront/sharing_system_test.rb +51 -0
  95. data/test/test_helper.rb +10 -0
  96. data/test/view_models/workarea/storefront/share_view_model_test.rb +65 -0
  97. data/workarea-share.gemspec +22 -0
  98. metadata +168 -0
File without changes
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,30 @@
1
+ require 'test_helper'
2
+
3
+ module Workarea
4
+ module Storefront
5
+ class SharesHelperTest < ViewTest
6
+ def test_facebook_query_string
7
+ query_string = facebook_query_string('test')
8
+ assert_equal('u=test', query_string)
9
+ end
10
+
11
+ def test_twitter_query_string
12
+ query_string = twitter_query_string('foo', 'bar')
13
+ assert_includes(query_string, 'text=bar')
14
+ assert_includes(query_string, 'url=foo')
15
+ end
16
+
17
+ def test_share_query_string
18
+ query_string = share_query_string('foo', 'bar', 'baz')
19
+ assert_includes(query_string, 'description=bar')
20
+ assert_includes(query_string, 'media=baz')
21
+ assert_includes(query_string, 'url=foo')
22
+
23
+ query_string = share_query_string('foo')
24
+ assert_includes(query_string, 'url=foo')
25
+ refute_includes(query_string, 'description')
26
+ refute_includes(query_string, 'media')
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,40 @@
1
+ require 'test_helper'
2
+
3
+ module Workarea
4
+ module Storefront
5
+ class SharingIntegrationTest < Workarea::IntegrationTest
6
+ def test_sends_a_sharing_email
7
+ from_email = 'bcrouse@workarea.com'
8
+ to_email = 'bcrouse-friend@workarea.com'
9
+
10
+ product = create_product(
11
+ name: 'Integration Product',
12
+ variants: [{ sku: 'SKU1', regular: 10.to_m }]
13
+ )
14
+
15
+ post storefront.shares_path(product),
16
+ params: {
17
+ url: storefront.product_url(product, host: Workarea.config.host),
18
+ title: product.name,
19
+ to_email: to_email,
20
+ from_email: from_email,
21
+ message: 'test message'
22
+ }
23
+
24
+ assert_redirected_to(storefront.product_path(product))
25
+
26
+ email = ActionMailer::Base.deliveries.last
27
+
28
+ email.parts.each do |part|
29
+ assert_includes(part.body, product.name)
30
+ assert_includes(part.body, 'test message')
31
+ assert_includes(part.body, storefront.product_url(product))
32
+ end
33
+
34
+ assert_includes(email.to, to_email)
35
+ assert_includes(email.from, Workarea.config.email_from)
36
+ assert_includes(email.reply_to, from_email)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ module Workarea
4
+ module Email
5
+ class ShareTest < TestCase
6
+ def url
7
+ @url ||= 'http://www.reddit.com/r/ruby?q=a'
8
+ end
9
+
10
+ def path
11
+ @path ||= '/r/ruby?q=a'
12
+ end
13
+
14
+ def test_initialize
15
+ share = Email::Share.new(url: url)
16
+ assert_equal(path, share.url)
17
+ end
18
+
19
+ def test_valid
20
+ share = Email::Share.new
21
+ share.url = url
22
+ share.valid?
23
+
24
+ assert_equal(path, share.url)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,51 @@
1
+ require 'test_helper'
2
+
3
+ module Workarea
4
+ module Storefront
5
+ class SharingSystemTest < Workarea::SystemTest
6
+ include Storefront::SystemTest
7
+
8
+ def test_sharing_through_email
9
+ Recaptcha.with_configuration(site_key: '12345') do
10
+ from_email = 'bcrouse@workarea.com'
11
+ to_name = 'Ben Crouse'
12
+ to_email = 'bcrouse-friend@workarea.com'
13
+
14
+ product = create_product(
15
+ name: 'Integration Product',
16
+ variants: [{ sku: 'SKU1', regular: 10.to_m }]
17
+ )
18
+
19
+ visit storefront.product_path(product)
20
+ click_link 'Share by Email'
21
+
22
+ fill_in 'to_name', with: to_name
23
+ fill_in 'to_email', with: to_email
24
+ fill_in 'from_email', with: from_email
25
+ fill_in 'message', with: 'test message'
26
+ click_button 'email_friend'
27
+
28
+ assert(page.has_content?("Thanks for sharing! An email has been sent to #{to_name} (#{to_email})."))
29
+ end
30
+ end
31
+
32
+ def test_announcing_share_event
33
+ product = create_product
34
+ visit storefront.product_path(product)
35
+
36
+ find(%{[title="#{t('workarea.storefront.shares.share_on_twitter')}"]}).click
37
+
38
+ events =
39
+ page.evaluate_script('WORKAREA.analytics.events')
40
+ .select { |e| e['name'] == 'share' }
41
+
42
+ assert_equal(1, events.count)
43
+ payload = events.first['arguments'].first
44
+
45
+ assert_equal('twitter', payload['type'])
46
+ assert_match('http://', payload['url'])
47
+ assert_match(storefront.product_path(product), payload['url'])
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,10 @@
1
+ # Configure Rails Environment
2
+ ENV['RAILS_ENV'] = 'test'
3
+
4
+ require File.expand_path('../../test/dummy/config/environment.rb', __FILE__)
5
+ require 'rails/test_help'
6
+ require 'workarea/test_help'
7
+
8
+ # Filter out Minitest backtrace while allowing backtrace from other libraries
9
+ # to be shown.
10
+ Minitest.backtrace_filter = Minitest::BacktraceFilter.new
@@ -0,0 +1,65 @@
1
+ require 'test_helper'
2
+
3
+ module Workarea
4
+ module Storefront
5
+ class ShareViewModelTest < TestCase
6
+ def share
7
+ @share ||= Email::Share.new
8
+ end
9
+
10
+ def test_to
11
+ view_model = ShareViewModel.new(share)
12
+
13
+ share.to_email = 'bcrouse@workarea.com'
14
+ assert_equal('bcrouse@workarea.com', view_model.to)
15
+
16
+ share.to_name = 'Ben Crouse'
17
+ assert_equal('Ben Crouse <bcrouse@workarea.com>', view_model.to)
18
+ end
19
+
20
+ def test_from
21
+ view_model = ShareViewModel.new(share)
22
+
23
+ share.from_email = 'bcrouse@workarea.com'
24
+ assert_equal('bcrouse@workarea.com', view_model.from)
25
+
26
+ share.from_name = 'Ben Crouse'
27
+ assert_equal('Ben Crouse <bcrouse@workarea.com>', view_model.from)
28
+ end
29
+
30
+ def test_from_name
31
+ user = create_user
32
+ view_model = ShareViewModel.new(share, user: user)
33
+
34
+ assert_equal(user.name, view_model.from_name)
35
+ end
36
+
37
+ def test_from_email
38
+ user = create_user
39
+ view_model = ShareViewModel.new(share, user: user)
40
+
41
+ assert_equal(user.email, view_model.from_email)
42
+ end
43
+
44
+ def test_friendly_from
45
+ view_model = ShareViewModel.new(share)
46
+
47
+ share.from_email = 'bcrouse@workarea.com'
48
+ assert_equal('bcrouse@workarea.com', view_model.friendly_from)
49
+
50
+ share.from_name = 'Ben Crouse'
51
+ assert_equal('Ben Crouse', view_model.friendly_from)
52
+ end
53
+
54
+ def test_friendly_to
55
+ view_model = ShareViewModel.new(share)
56
+
57
+ share.to_email = 'bcrouse@workarea.com'
58
+ assert_equal('bcrouse@workarea.com', view_model.friendly_to)
59
+
60
+ share.to_name = 'Ben Crouse'
61
+ assert_equal('Ben Crouse (bcrouse@workarea.com)', view_model.friendly_to)
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,22 @@
1
+ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
2
+
3
+ # Maintain your gem's version:
4
+ require 'workarea/share/version'
5
+
6
+ # Describe your gem and declare its dependencies:
7
+ Gem::Specification.new do |s|
8
+ s.name = 'workarea-share'
9
+ s.version = Workarea::Share::VERSION
10
+ s.authors = ['Matt Duffy']
11
+ s.email = ['mduffy@workarea.com']
12
+ s.homepage = 'https://github.com/workarea-commerce/workarea-share'
13
+ s.summary = 'Page share plugin for Workarea Commerce Platform.'
14
+ s.description = 'Adds sharing pages on social networks or email to the Workarea Commerce Platform.'
15
+ s.files = `git ls-files`.split("\n")
16
+ s.license = 'Business Software License'
17
+
18
+ s.required_ruby_version = '>= 2.3.0'
19
+
20
+ s.add_dependency 'workarea', '~> 3.x'
21
+ s.add_dependency 'recaptcha', '~> 4.3.1'
22
+ end
metadata ADDED
@@ -0,0 +1,168 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: workarea-share
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.4
5
+ platform: ruby
6
+ authors:
7
+ - Matt Duffy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-08-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: workarea
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 3.x
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 3.x
27
+ - !ruby/object:Gem::Dependency
28
+ name: recaptcha
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 4.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: 4.3.1
41
+ description: Adds sharing pages on social networks or email to the Workarea Commerce
42
+ Platform.
43
+ email:
44
+ - mduffy@workarea.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - ".editorconfig"
50
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
51
+ - ".github/ISSUE_TEMPLATE/documentation-request.md"
52
+ - ".github/ISSUE_TEMPLATE/feature_request.md"
53
+ - ".gitignore"
54
+ - CHANGELOG.md
55
+ - CODE_OF_CONDUCT.md
56
+ - CONTRIBUTING.md
57
+ - Gemfile
58
+ - LICENSE
59
+ - README.md
60
+ - Rakefile
61
+ - app/assets/images/workarea/storefront/share/icons/email.svg
62
+ - app/assets/stylesheets/workarea/storefront/share/components/_share_buttons.scss
63
+ - app/controllers/workarea/storefront/shares_controller.rb
64
+ - app/helpers/workarea/storefront/shares_helper.rb
65
+ - app/mailers/workarea/storefront/share_mailer.rb
66
+ - app/models/workarea/email/share.rb
67
+ - app/seeds/shares_seeds.rb
68
+ - app/view_models/workarea/storefront/share_view_model.rb
69
+ - app/views/workarea/storefront/pages/_shares_robots.text
70
+ - app/views/workarea/storefront/products/_share.html.haml
71
+ - app/views/workarea/storefront/share_mailer/share.html.haml
72
+ - app/views/workarea/storefront/shares/_share_buttons.html.haml
73
+ - app/views/workarea/storefront/shares/new.html.haml
74
+ - app/views/workarea/storefront/style_guides/components/_share_buttons.html.haml
75
+ - bin/rails
76
+ - config/initializers/appends.rb
77
+ - config/initializers/configuration.rb
78
+ - config/initializers/rack_attack.rb
79
+ - config/initializers/recaptcha.rb
80
+ - config/locales/en.yml
81
+ - config/routes.rb
82
+ - lib/tasks/share_tasks.rake
83
+ - lib/workarea/mailer_previews/storefront/share_mailer_preview.rb
84
+ - lib/workarea/share.rb
85
+ - lib/workarea/share/engine.rb
86
+ - lib/workarea/share/version.rb
87
+ - test/dummy/Rakefile
88
+ - test/dummy/app/assets/config/manifest.js
89
+ - test/dummy/app/assets/images/.keep
90
+ - test/dummy/app/assets/javascripts/application.js
91
+ - test/dummy/app/assets/stylesheets/application.css
92
+ - test/dummy/app/controllers/application_controller.rb
93
+ - test/dummy/app/controllers/concerns/.keep
94
+ - test/dummy/app/helpers/application_helper.rb
95
+ - test/dummy/app/jobs/application_job.rb
96
+ - test/dummy/app/mailers/application_mailer.rb
97
+ - test/dummy/app/models/concerns/.keep
98
+ - test/dummy/app/views/layouts/application.html.erb
99
+ - test/dummy/app/views/layouts/mailer.html.erb
100
+ - test/dummy/app/views/layouts/mailer.text.erb
101
+ - test/dummy/bin/bundle
102
+ - test/dummy/bin/rails
103
+ - test/dummy/bin/rake
104
+ - test/dummy/bin/setup
105
+ - test/dummy/bin/update
106
+ - test/dummy/config.ru
107
+ - test/dummy/config/application.rb
108
+ - test/dummy/config/boot.rb
109
+ - test/dummy/config/cable.yml
110
+ - test/dummy/config/environment.rb
111
+ - test/dummy/config/environments/development.rb
112
+ - test/dummy/config/environments/production.rb
113
+ - test/dummy/config/environments/test.rb
114
+ - test/dummy/config/initializers/application_controller_renderer.rb
115
+ - test/dummy/config/initializers/assets.rb
116
+ - test/dummy/config/initializers/backtrace_silencers.rb
117
+ - test/dummy/config/initializers/cookies_serializer.rb
118
+ - test/dummy/config/initializers/filter_parameter_logging.rb
119
+ - test/dummy/config/initializers/inflections.rb
120
+ - test/dummy/config/initializers/mime_types.rb
121
+ - test/dummy/config/initializers/new_framework_defaults.rb
122
+ - test/dummy/config/initializers/session_store.rb
123
+ - test/dummy/config/initializers/workarea.rb
124
+ - test/dummy/config/initializers/wrap_parameters.rb
125
+ - test/dummy/config/locales/en.yml
126
+ - test/dummy/config/puma.rb
127
+ - test/dummy/config/routes.rb
128
+ - test/dummy/config/secrets.yml
129
+ - test/dummy/config/spring.rb
130
+ - test/dummy/lib/assets/.keep
131
+ - test/dummy/log/.keep
132
+ - test/dummy/public/404.html
133
+ - test/dummy/public/422.html
134
+ - test/dummy/public/500.html
135
+ - test/dummy/public/apple-touch-icon-precomposed.png
136
+ - test/dummy/public/apple-touch-icon.png
137
+ - test/dummy/public/favicon.ico
138
+ - test/helpers/shares_helper_test.rb
139
+ - test/integration/workarea/storefront/sharing_integration_test.rb
140
+ - test/models/workarea/email/share_test.rb
141
+ - test/system/workarea/storefront/sharing_system_test.rb
142
+ - test/test_helper.rb
143
+ - test/view_models/workarea/storefront/share_view_model_test.rb
144
+ - workarea-share.gemspec
145
+ homepage: https://github.com/workarea-commerce/workarea-share
146
+ licenses:
147
+ - Business Software License
148
+ metadata: {}
149
+ post_install_message:
150
+ rdoc_options: []
151
+ require_paths:
152
+ - lib
153
+ required_ruby_version: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: 2.3.0
158
+ required_rubygems_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ requirements: []
164
+ rubygems_version: 3.0.4
165
+ signing_key:
166
+ specification_version: 4
167
+ summary: Page share plugin for Workarea Commerce Platform.
168
+ test_files: []