shopify_app 5.0.2 → 6.0.0
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.gitignore +4 -1
- data/.travis.yml +9 -0
- data/CHANGELOG +12 -1
- data/README.md +73 -108
- data/Rakefile +0 -1
- data/app/controllers/sessions_controller.rb +3 -0
- data/app/views/sessions/new.html.erb +17 -0
- data/config/routes.rb +10 -0
- data/lib/generators/shopify_app/controllers/controllers_generator.rb +29 -0
- data/lib/generators/shopify_app/install/install_generator.rb +83 -0
- data/lib/generators/shopify_app/install/templates/embedded_app.html.erb +22 -0
- data/lib/generators/shopify_app/install/templates/home_controller.rb +11 -0
- data/lib/generators/shopify_app/install/templates/index.html.erb +12 -0
- data/lib/generators/shopify_app/install/templates/omniauth.rb +2 -0
- data/lib/generators/shopify_app/install/templates/shopify_app.rb +6 -0
- data/lib/generators/shopify_app/install/templates/shopify_app_ready_script.html +8 -0
- data/lib/generators/shopify_app/install/templates/shopify_provider.rb +11 -0
- data/lib/generators/shopify_app/{templates/config/initializers → install/templates}/shopify_session_repository.rb +3 -3
- data/lib/generators/shopify_app/routes/routes_generator.rb +31 -0
- data/lib/generators/shopify_app/routes/templates/routes.rb +7 -0
- data/lib/generators/shopify_app/shop_model/shop_model_generator.rb +42 -0
- data/lib/generators/shopify_app/shop_model/templates/db/migrate/create_shops.rb +15 -0
- data/lib/generators/shopify_app/shop_model/templates/session_storage.rb +16 -0
- data/lib/generators/shopify_app/shop_model/templates/shop.rb +3 -0
- data/lib/generators/shopify_app/shop_model/templates/shopify_session_repository.rb +7 -0
- data/lib/generators/shopify_app/shopify_app_generator.rb +10 -63
- data/lib/generators/shopify_app/views/views_generator.rb +29 -0
- data/lib/shopify_app.rb +14 -13
- data/lib/shopify_app/configuration.rb +26 -36
- data/lib/shopify_app/controller.rb +18 -0
- data/lib/shopify_app/engine.rb +5 -0
- data/lib/shopify_app/login_protection.rb +34 -32
- data/lib/shopify_app/sessions_controller.rb +64 -0
- data/lib/shopify_app/shop.rb +15 -0
- data/lib/shopify_app/shopify_session_repository.rb +23 -21
- data/lib/shopify_app/version.rb +1 -1
- data/shopify_app.gemspec +5 -10
- data/test/app_templates/app/controllers/application_controller.rb +2 -0
- data/test/app_templates/config/application.rb +24 -0
- data/test/app_templates/config/initializers/shopify_app.rb +6 -0
- data/test/app_templates/config/routes.rb +3 -0
- data/test/controllers/sessions_controller_test.rb +82 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/home_controller.rb +7 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +26 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/shopify_app.rb +6 -0
- data/test/dummy/config/routes.rb +10 -0
- data/test/dummy/config/secrets.yml +17 -0
- data/test/generators/install_generator_test.rb +103 -0
- data/test/generators/routes_generator_test.rb +33 -0
- data/test/generators/shop_model_generator_test.rb +40 -0
- data/test/generators/shopify_app_generator.rb +15 -0
- data/test/generators/views_generator_test.rb +15 -0
- data/test/shopify_app/configuration_test.rb +17 -0
- data/test/{lib/shopify_app → shopify_app}/in_memory_session_store_test.rb +6 -6
- data/test/{lib/shopify_app → shopify_app}/login_protection_test.rb +10 -7
- data/test/shopify_app/shopify_session_repository_test.rb +73 -0
- data/test/support/generator_test_helpers.rb +29 -0
- data/test/test_helper.rb +11 -3
- metadata +79 -61
- metadata.gz.sig +0 -0
- data/install.rb +0 -25
- data/lib/generators/shopify_app/README +0 -23
- data/lib/generators/shopify_app/USAGE +0 -22
- data/lib/generators/shopify_app/templates/app/assets/images/favicon.png +0 -0
- data/lib/generators/shopify_app/templates/app/assets/images/grid-18px.png +0 -0
- data/lib/generators/shopify_app/templates/app/assets/images/shopify-114.png +0 -0
- data/lib/generators/shopify_app/templates/app/assets/images/shopify-57.png +0 -0
- data/lib/generators/shopify_app/templates/app/assets/images/shopify-72.png +0 -0
- data/lib/generators/shopify_app/templates/app/assets/images/shopify.png +0 -0
- data/lib/generators/shopify_app/templates/app/assets/javascripts/application.js +0 -15
- data/lib/generators/shopify_app/templates/app/assets/stylesheets/application.css +0 -10
- data/lib/generators/shopify_app/templates/app/assets/stylesheets/imports.css.less +0 -5
- data/lib/generators/shopify_app/templates/app/assets/stylesheets/shopify_app.css.scss +0 -150
- data/lib/generators/shopify_app/templates/app/assets/stylesheets/shopify_app_buttons.css.less +0 -77
- data/lib/generators/shopify_app/templates/app/controllers/application_controller.rb +0 -13
- data/lib/generators/shopify_app/templates/app/controllers/home_controller.rb +0 -18
- data/lib/generators/shopify_app/templates/app/controllers/sessions_controller.rb +0 -52
- data/lib/generators/shopify_app/templates/app/helpers/home_helper.rb +0 -9
- data/lib/generators/shopify_app/templates/app/helpers/login_helper.rb +0 -3
- data/lib/generators/shopify_app/templates/app/helpers/tabs_helper.rb +0 -11
- data/lib/generators/shopify_app/templates/app/views/home/design.html.erb +0 -3542
- data/lib/generators/shopify_app/templates/app/views/home/index.html.erb +0 -168
- data/lib/generators/shopify_app/templates/app/views/home/welcome.html.erb +0 -110
- data/lib/generators/shopify_app/templates/app/views/layouts/application.html.erb +0 -79
- data/lib/generators/shopify_app/templates/app/views/sessions/new.html.erb +0 -21
- data/lib/generators/shopify_app/templates/config/initializers/omniauth.rb +0 -14
- data/lib/generators/shopify_app/templates/config/initializers/rails_4_shim.rb +0 -1
- data/lib/generators/shopify_app/templates/public/404.html +0 -40
- data/lib/generators/shopify_app/templates/public/422.html +0 -40
- data/lib/generators/shopify_app/templates/public/500.html +0 -40
- data/lib/generators/shopify_app/templates/public/favicon.png +0 -0
- data/lib/generators/shopify_app/templates/public/shopify-114.png +0 -0
- data/lib/generators/shopify_app/templates/public/shopify-57.png +0 -0
- data/lib/generators/shopify_app/templates/public/shopify-72.png +0 -0
- data/lib/shopify_app/railtie.rb +0 -17
- data/test/config/development_config_file.yml +0 -8
- data/test/config/empty_config_file.yml +0 -1
- data/test/config/other_config_file.yml +0 -4
- data/test/config/shopify_app.yml +0 -4
- data/test/lib/shopify_app/configuration_test.rb +0 -91
- data/test/lib/shopify_app/shopify_session_repository_test.rb +0 -70
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html>
|
|
3
|
-
<head>
|
|
4
|
-
<title>500 Error: Something went horribly wrong</title>
|
|
5
|
-
|
|
6
|
-
<style>
|
|
7
|
-
.container { text-align:center;}
|
|
8
|
-
.navbar .brand { float:none;}
|
|
9
|
-
</style>
|
|
10
|
-
</head>
|
|
11
|
-
|
|
12
|
-
<body>
|
|
13
|
-
<div class="navbar navbar-fixed-top">
|
|
14
|
-
<div class="navbar-inner">
|
|
15
|
-
<div class="container">
|
|
16
|
-
<a href="/" class="brand">Shopify Demo App</a>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
</div>
|
|
20
|
-
|
|
21
|
-
<div class="container">
|
|
22
|
-
<div class="content">
|
|
23
|
-
|
|
24
|
-
<div class="page-header">
|
|
25
|
-
<h1>AH! 500 Error!</h1>
|
|
26
|
-
</div>
|
|
27
|
-
|
|
28
|
-
<h3><i class="icon-warning-sign" style="margin-top:6px; opacity:.5;"></i> We're sorry, but something went wrong.</h3>
|
|
29
|
-
<p class="muted">The developer of this app has been notified.</p>
|
|
30
|
-
|
|
31
|
-
<p><button type="button" value ="back" onClick="window.history.back();" class='btn btn-primary'><i class="icon-chevron-left" style="opacity:.25"></i> Back to the app</button></p>
|
|
32
|
-
|
|
33
|
-
</div>
|
|
34
|
-
|
|
35
|
-
<footer>
|
|
36
|
-
<p>A Shopify app by (company name here)</p>
|
|
37
|
-
</footer>
|
|
38
|
-
</div> <!-- /container -->
|
|
39
|
-
</body>
|
|
40
|
-
</html>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/lib/shopify_app/railtie.rb
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
require 'rails'
|
|
2
|
-
|
|
3
|
-
class ShopifyApp::Railtie < ::Rails::Railtie
|
|
4
|
-
|
|
5
|
-
config.before_configuration do
|
|
6
|
-
config.shopify = ShopifyApp.configuration
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
initializer "shopify_app.action_controller_integration" do
|
|
10
|
-
ActionController::Base.send :include, ShopifyApp::LoginProtection
|
|
11
|
-
ActionController::Base.send :helper_method, :shop_session
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
initializer "shopify_app.setup_session" do
|
|
15
|
-
ShopifyApp.setup_session
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
common:
|
data/test/config/shopify_app.yml
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
require 'test_helper'
|
|
2
|
-
|
|
3
|
-
class ConfigurationTest < Minitest::Test
|
|
4
|
-
def setup
|
|
5
|
-
Rails.stubs(:env).returns('development')
|
|
6
|
-
Rails.stubs(:root).returns(File.expand_path('../..', File.dirname(__FILE__)))
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def config_file(filename)
|
|
10
|
-
filepath = File.expand_path("../../config/#{filename}", File.dirname(__FILE__))
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def test_define_method_creates_readers
|
|
14
|
-
config = ShopifyApp::Configuration.new
|
|
15
|
-
config.respond_to?(:api_key)
|
|
16
|
-
config.respond_to?(:secret)
|
|
17
|
-
config.respond_to?(:myshopify_domain)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def test_defaults_to_empty_string
|
|
21
|
-
config = ShopifyApp::Configuration.new(config_file: config_file('empty_config_file.yml'))
|
|
22
|
-
|
|
23
|
-
assert_equal '', config.api_key
|
|
24
|
-
assert_equal '', config.secret
|
|
25
|
-
assert_equal '', config.myshopify_domain
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def test_environment_has_precedence_over_common
|
|
29
|
-
config = ShopifyApp::Configuration.new(config_file: config_file('development_config_file.yml'))
|
|
30
|
-
|
|
31
|
-
assert_equal 'development key', config.api_key
|
|
32
|
-
assert_equal 'development secret', config.secret
|
|
33
|
-
assert_equal 'myshopify.com', config.myshopify_domain
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def test_rails_has_precedence_over_environment
|
|
37
|
-
config = ShopifyApp::Configuration.new(config_file: config_file('development_config_file.yml'))
|
|
38
|
-
|
|
39
|
-
assert_equal 'development key', config.api_key
|
|
40
|
-
assert_equal 'development secret', config.secret
|
|
41
|
-
assert_equal 'myshopify.com', config.myshopify_domain
|
|
42
|
-
|
|
43
|
-
config.api_key = 'rails key'
|
|
44
|
-
config.secret = 'rails secret'
|
|
45
|
-
config.myshopify_domain = 'example.com'
|
|
46
|
-
|
|
47
|
-
assert_equal 'rails key', config.api_key
|
|
48
|
-
assert_equal 'rails secret', config.secret
|
|
49
|
-
assert_equal 'example.com', config.myshopify_domain
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def test_env_has_precedence_over_rails
|
|
53
|
-
config = ShopifyApp::Configuration.new
|
|
54
|
-
config.api_key = 'rails key'
|
|
55
|
-
config.secret = 'rails secret'
|
|
56
|
-
config.myshopify_domain = 'myshopify.com'
|
|
57
|
-
|
|
58
|
-
assert_equal 'rails key', config.api_key
|
|
59
|
-
assert_equal 'rails secret', config.secret
|
|
60
|
-
assert_equal 'myshopify.com', config.myshopify_domain
|
|
61
|
-
|
|
62
|
-
ENV.expects(:[]).with('SHOPIFY_APP_API_KEY').returns('env key')
|
|
63
|
-
ENV.expects(:[]).with('SHOPIFY_APP_SECRET').returns('env secret')
|
|
64
|
-
ENV.expects(:[]).with('SHOPIFY_APP_MYSHOPIFY_DOMAIN').returns('example.com')
|
|
65
|
-
|
|
66
|
-
assert_equal 'env key', config.api_key
|
|
67
|
-
assert_equal 'env secret', config.secret
|
|
68
|
-
assert_equal 'example.com', config.myshopify_domain
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def test_reads_config_from_default_config_file
|
|
72
|
-
config = ShopifyApp::Configuration.new
|
|
73
|
-
assert_equal 'api key from default file', config.api_key
|
|
74
|
-
assert_equal 'secret from default file', config.secret
|
|
75
|
-
assert_equal 'myshopify.com', config.myshopify_domain
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def test_reads_config_from_specified_config_file
|
|
79
|
-
config = ShopifyApp::Configuration.new(config_file: config_file('other_config_file.yml'))
|
|
80
|
-
assert_equal 'api key from other file', config.api_key
|
|
81
|
-
assert_equal 'secret from other file', config.secret
|
|
82
|
-
assert_equal 'example.com', config.myshopify_domain
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def test_handles_missing_config_file
|
|
86
|
-
config = ShopifyApp::Configuration.new(config_file: config_file('missing_config_file.yml'))
|
|
87
|
-
assert_equal '', config.api_key
|
|
88
|
-
assert_equal '', config.secret
|
|
89
|
-
assert_equal '', config.myshopify_domain
|
|
90
|
-
end
|
|
91
|
-
end
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
require 'test_helper'
|
|
2
|
-
|
|
3
|
-
class TestSessionStore
|
|
4
|
-
attr_reader :storage
|
|
5
|
-
def initialize
|
|
6
|
-
@storage = []
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def retrieve(id)
|
|
10
|
-
storage[id]
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def store(session)
|
|
14
|
-
id = storage.length
|
|
15
|
-
storage[id] = session
|
|
16
|
-
id
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
class TestSessionStoreClass
|
|
21
|
-
def self.store(session)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def self.retrieve(id)
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
class ShopifySessionRepositoryTest < Minitest::Test
|
|
29
|
-
attr_reader :session_store, :session
|
|
30
|
-
def setup
|
|
31
|
-
@session_store = TestSessionStore.new
|
|
32
|
-
@session = ShopifyAPI::Session.new('shop.myshopify.com', 'abracadabra')
|
|
33
|
-
ShopifySessionRepository.storage = session_store
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def teardown
|
|
37
|
-
ShopifySessionRepository.storage = nil
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def test_adding_a_session_to_the_repository
|
|
41
|
-
assert_equal 0, ShopifySessionRepository.store(session)
|
|
42
|
-
assert_equal session, session_store.retrieve(0)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def test_retrieving_a_session_from_the_repository
|
|
46
|
-
session_store.storage[9] = session
|
|
47
|
-
assert_equal session, ShopifySessionRepository.retrieve(9)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def test_retrieving_a_session_for_an_id_that_does_not_exist
|
|
51
|
-
ShopifySessionRepository.store(session)
|
|
52
|
-
assert !ShopifySessionRepository.retrieve(100), "The session with id 100 should not exist in the Repository"
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def test_retrieving_a_session_for_a_misconfigured_shops_repository
|
|
56
|
-
ShopifySessionRepository.storage = nil
|
|
57
|
-
assert_raises ShopifySessionRepository::ConfigurationError do
|
|
58
|
-
ShopifySessionRepository.retrieve(0)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
assert_raises ShopifySessionRepository::ConfigurationError do
|
|
62
|
-
ShopifySessionRepository.store(session)
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def test_accepts_a_string_and_constantizes_it
|
|
67
|
-
ShopifySessionRepository.storage = 'TestSessionStoreClass'
|
|
68
|
-
assert_equal TestSessionStoreClass, ShopifySessionRepository.storage
|
|
69
|
-
end
|
|
70
|
-
end
|