shopify_app 5.0.0 → 5.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/Gemfile +1 -1
- data/README.md +9 -4
- data/lib/generators/shopify_app/shopify_app_generator.rb +12 -12
- data/lib/generators/shopify_app/templates/app/views/home/index.html.erb +6 -6
- data/lib/generators/shopify_app/templates/app/views/home/welcome.html.erb +3 -3
- data/lib/generators/shopify_app/templates/config/initializers/rails_4_shim.rb +1 -0
- data/lib/generators/shopify_app/templates/config/initializers/shopify_session_repository.rb +4 -3
- data/lib/shopify_app/login_protection.rb +16 -11
- data/lib/shopify_app/shopify_session_repository.rb +24 -14
- data/lib/shopify_app/version.rb +1 -1
- data/test/lib/shopify_app/login_protection_test.rb +55 -0
- data/test/lib/shopify_app/shopify_session_repository_test.rb +13 -0
- metadata +47 -31
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b63a99a31c373bfa53cba58497efffb6dcd68cd
|
4
|
+
data.tar.gz: 13a5639e78cc51a29c668f5fb15ebf9e48fa1c92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b200f8785a3b3a1ec14a0f295339b812ab86dd968307ac6cd1cf1982e38ea82830b24cda724f55708e95d6662375c7669aaa80a68793dc78b3211c353b4fc796
|
7
|
+
data.tar.gz: 7403b965254769f35af83b07a74602b7ea7ce7483f8f9d1aaf183dc7f1919af370e86e8e355dee4918a0e12efe8c7a562e80e9571dda2a33cd70de63c827b9b5
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
ADDED
Binary file
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -34,7 +34,7 @@ If you don't have an API key yet, create a Shopify Partner account at http://sho
|
|
34
34
|
|
35
35
|
When you create your app in the Shopify Partner Account, set the Application Callback URL to
|
36
36
|
|
37
|
-
http://localhost:3000
|
37
|
+
http://localhost:3000/login
|
38
38
|
|
39
39
|
You can also create a private application that only works for your shop by visiting https://YOUR-SHOP.myshopify.com/admin/apps/private.
|
40
40
|
|
@@ -93,9 +93,10 @@ class Shop < ActiveRecord::Base
|
|
93
93
|
shop.id
|
94
94
|
end
|
95
95
|
|
96
|
-
def retrieve(id)
|
97
|
-
shop = Shop.
|
98
|
-
|
96
|
+
def self.retrieve(id)
|
97
|
+
if shop = Shop.where(id: id).first
|
98
|
+
ShopifyAPI::Session.new(shop.domain, shop.token)
|
99
|
+
end
|
99
100
|
end
|
100
101
|
end
|
101
102
|
```
|
@@ -110,6 +111,10 @@ when a dyno is killed due to inactivity.
|
|
110
111
|
Changing the `ShopifySessionRepository.storage` can simply be done by editing
|
111
112
|
`config/initializers/shopify_session_repository.rb` to use the correct model.
|
112
113
|
|
114
|
+
```ruby
|
115
|
+
ShopifySessionRepository.storage = 'Shop'
|
116
|
+
```
|
117
|
+
|
113
118
|
## Set your required API permissions
|
114
119
|
|
115
120
|
Before making API requests, your application must state which API permissions it requires from the shop it's installed in. These requested permissions will be listed on the screen the merchant sees when approving your app to be installed in their shop.
|
@@ -3,28 +3,28 @@ require 'rails/generators'
|
|
3
3
|
class ShopifyAppGenerator < Rails::Generators::Base
|
4
4
|
argument :api_key, :type => :string, :required => false
|
5
5
|
argument :secret, :type => :string, :required => false
|
6
|
-
|
6
|
+
|
7
7
|
class_option :skip_routes, :type => :boolean, :default => false, :desc => 'pass true to skip route generation'
|
8
|
-
|
8
|
+
|
9
9
|
def self.source_root
|
10
10
|
File.join(File.dirname(__FILE__), 'templates')
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
def copy_files
|
14
14
|
directory 'app'
|
15
15
|
directory 'public'
|
16
16
|
directory 'config'
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
def remove_static_index
|
20
20
|
remove_file 'public/index.html'
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
def add_config_variables
|
24
24
|
return if api_key.blank? || secret.blank?
|
25
|
-
|
25
|
+
|
26
26
|
inject_into_file 'config/application.rb', <<-DATA, :after => "class Application < Rails::Application\n"
|
27
|
-
|
27
|
+
|
28
28
|
# Shopify API connection credentials:
|
29
29
|
config.shopify.api_key = '#{api_key}'
|
30
30
|
config.shopify.secret = '#{secret}'
|
@@ -37,7 +37,7 @@ class ShopifyAppGenerator < Rails::Generators::Base
|
|
37
37
|
gem 'therubyracer', :platforms => :ruby
|
38
38
|
end
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
def add_routes
|
42
42
|
unless options[:skip_routes]
|
43
43
|
route_without_newline "root :to => 'home#index'"
|
@@ -51,7 +51,7 @@ class ShopifyAppGenerator < Rails::Generators::Base
|
|
51
51
|
route_without_newline "get 'welcome' => 'home#welcome'"
|
52
52
|
end
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
def display_readme
|
56
56
|
Bundler.with_clean_env do
|
57
57
|
run 'bundle install'
|
@@ -59,11 +59,11 @@ class ShopifyAppGenerator < Rails::Generators::Base
|
|
59
59
|
|
60
60
|
readme '../README'
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
private
|
64
|
-
|
64
|
+
|
65
65
|
def route_without_newline(routing_code)
|
66
66
|
sentinel = /\.routes\.draw do(?:\s*\|map\|)?\s*$/
|
67
67
|
inject_into_file 'config/routes.rb', "\n #{routing_code}", { after: sentinel, verbose: false }
|
68
|
-
end
|
68
|
+
end
|
69
69
|
end
|
@@ -28,7 +28,7 @@
|
|
28
28
|
|
29
29
|
<ul>
|
30
30
|
<li>
|
31
|
-
<%= link_to 'API documentation', 'http://
|
31
|
+
<%= link_to 'API documentation', 'http://docs.shopify.com/api' %>
|
32
32
|
<span class="note">Learn what you can do with the Shopify API</span>
|
33
33
|
</li><br/>
|
34
34
|
<li>
|
@@ -36,11 +36,11 @@
|
|
36
36
|
<span class="note">Find out what you can do with Twitter Bootstrap</span>
|
37
37
|
</li><br/>
|
38
38
|
<li>
|
39
|
-
<%= link_to 'Wiki', 'http://
|
39
|
+
<%= link_to 'Wiki', 'http://docs.shopify.com/' %>
|
40
40
|
<span class="note">Get more information and share your knowledge</span>
|
41
41
|
</li><br/>
|
42
42
|
<li>
|
43
|
-
<%= link_to 'Forum', '
|
43
|
+
<%= link_to 'Forum', 'https://ecommerce.shopify.com/forums' %>
|
44
44
|
<span class="note">Ask questions and see what others already wanted to know</span>
|
45
45
|
</li>
|
46
46
|
</ul>
|
@@ -49,11 +49,11 @@
|
|
49
49
|
|
50
50
|
<h3>Once you're ready</h3>
|
51
51
|
|
52
|
-
<p>We'd love to see what you create using the Shopify API. You can keep up to date on the latest and greatest via the <%= link_to 'Shopify
|
52
|
+
<p>We'd love to see what you create using the Shopify API. You can keep up to date on the latest and greatest via the <%= link_to 'Shopify Developers Twitter Account', 'https://twitter.com/shopifydevs' %>. You can also read the latest information on the <%= link_to 'Building a Shopify App', 'http://docs.shopify.com/partners/partner-resources/for-partners/building-a-shopify-app' %>.</p>
|
53
53
|
|
54
54
|
<br/>
|
55
55
|
|
56
|
-
<a href="https://twitter.com/
|
56
|
+
<a href="https://twitter.com/shopifydevs" class="twitter-follow-button" data-show-count="false" data-size="large">Follow @ShopifyDevs</a>
|
57
57
|
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
|
58
58
|
</div> <!-- span3 / left-column -->
|
59
59
|
|
@@ -165,4 +165,4 @@
|
|
165
165
|
|
166
166
|
</div> <!-- accordion -->
|
167
167
|
</div> <!-- span8 / right-column -->
|
168
|
-
</div>
|
168
|
+
</div>
|
@@ -90,15 +90,15 @@ The callback URL of your app can be changed in the API screen of your Shopify ad
|
|
90
90
|
<ul>
|
91
91
|
<li>
|
92
92
|
<%= link_to 'API documentation', 'http://www.shopify.com/developers/api' %>
|
93
|
-
<span class="hint">(An overview of what you can do with the Shopify API.)
|
93
|
+
<span class="hint">(An overview of what you can do with the Shopify API.)</span>
|
94
94
|
</li>
|
95
95
|
<li>
|
96
96
|
<%= link_to 'Wiki (needs its own API section)', 'http://wiki.shopify.com/' %>
|
97
|
-
<span class="hint">(Get more information and share your knowledge.)
|
97
|
+
<span class="hint">(Get more information and share your knowledge.)</span>
|
98
98
|
</li>
|
99
99
|
<li>
|
100
100
|
<%= link_to 'Forum (needs its own API section)', 'http://forums.shopify.com/community' %>
|
101
|
-
<span class="hint">(Ask questions and see what others already wanted to know.)
|
101
|
+
<span class="hint">(Ask questions and see what others already wanted to know.)</span>
|
102
102
|
</li>
|
103
103
|
</ul>
|
104
104
|
|
@@ -0,0 +1 @@
|
|
1
|
+
Rails.application.config.assets.precompile += %w( twitter/bootstrap/* )
|
@@ -12,9 +12,10 @@
|
|
12
12
|
# shop.id
|
13
13
|
# end
|
14
14
|
#
|
15
|
-
# def retrieve(id)
|
16
|
-
# shop = Shop.
|
17
|
-
#
|
15
|
+
# def self.retrieve(id)
|
16
|
+
# if shop = Shop.where(id: id).first
|
17
|
+
# ShopifyAPI::Session.new(shop.domain, shop.token)
|
18
|
+
# end
|
18
19
|
# end
|
19
20
|
# end
|
20
21
|
|
@@ -1,37 +1,42 @@
|
|
1
1
|
module ShopifyApp::LoginProtection
|
2
2
|
extend ActiveSupport::Concern
|
3
|
-
|
3
|
+
|
4
4
|
included do
|
5
5
|
rescue_from ActiveResource::UnauthorizedAccess, :with => :close_session
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def shopify_session
|
9
9
|
if shop_session
|
10
10
|
begin
|
11
11
|
# session[:shopify] set in LoginController#show
|
12
12
|
ShopifyAPI::Base.activate_session(shop_session)
|
13
13
|
yield
|
14
|
-
ensure
|
14
|
+
ensure
|
15
15
|
ShopifyAPI::Base.clear_session
|
16
16
|
end
|
17
17
|
else
|
18
|
-
|
19
|
-
redirect_to login_path(shop: params[:shop])
|
18
|
+
redirect_to_login
|
20
19
|
end
|
21
20
|
end
|
22
|
-
|
21
|
+
|
23
22
|
def shop_session
|
24
|
-
|
23
|
+
return unless session[:shopify]
|
24
|
+
@shop_session ||= ShopifySessionRepository.retrieve(session[:shopify])
|
25
25
|
end
|
26
26
|
|
27
27
|
def login_again_if_different_shop
|
28
28
|
if shop_session && params[:shop] && params[:shop].is_a?(String) && shop_session.url != params[:shop]
|
29
|
-
|
30
|
-
end
|
29
|
+
redirect_to_login
|
30
|
+
end
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
protected
|
34
|
-
|
34
|
+
|
35
|
+
def redirect_to_login
|
36
|
+
session[:return_to] = request.fullpath if request.get?
|
37
|
+
redirect_to login_path(shop: params[:shop])
|
38
|
+
end
|
39
|
+
|
35
40
|
def close_session
|
36
41
|
session[:shopify] = nil
|
37
42
|
redirect_to login_path
|
@@ -1,22 +1,32 @@
|
|
1
1
|
class ShopifySessionRepository
|
2
2
|
class ConfigurationError < StandardError; end
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
class << self
|
5
|
+
def storage=(storage)
|
6
|
+
@storage = storage
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
unless storage.nil? || self.storage.respond_to?(:store) && self.storage.respond_to?(:retrieve)
|
9
|
+
raise ArgumentError, "storage must respond to :store and :retrieve"
|
10
|
+
end
|
11
|
+
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
13
|
+
def retrieve(id)
|
14
|
+
storage.retrieve(id)
|
15
|
+
end
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
def store(session)
|
18
|
+
storage.store(session)
|
19
|
+
end
|
21
20
|
|
21
|
+
def storage
|
22
|
+
load_storage || raise(ConfigurationError.new("ShopifySessionRepository.storage is not configured!"))
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def load_storage
|
28
|
+
return unless @storage
|
29
|
+
@storage.respond_to?(:safe_constantize) ? @storage.safe_constantize : @storage
|
30
|
+
end
|
31
|
+
end
|
22
32
|
end
|
data/lib/shopify_app/version.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'action_controller'
|
3
|
+
|
4
|
+
class LoginProtectionController < ActionController::Base
|
5
|
+
include ShopifyApp::LoginProtection
|
6
|
+
helper_method :shop_session
|
7
|
+
|
8
|
+
def index
|
9
|
+
render nothing: true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class LoginProtectionTest < ActionController::TestCase
|
14
|
+
tests LoginProtectionController
|
15
|
+
|
16
|
+
def setup
|
17
|
+
ShopifySessionRepository.storage = InMemorySessionStore
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_calling_shop_session_returns_nil_when_session_is_nil
|
21
|
+
with_application_test_routes do
|
22
|
+
session[:shopify] = nil
|
23
|
+
get :index
|
24
|
+
assert_nil @controller.shop_session
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_calling_shop_session_retreives_session_from_storage
|
29
|
+
with_application_test_routes do
|
30
|
+
session[:shopify] = "foobar"
|
31
|
+
get :index
|
32
|
+
ShopifySessionRepository.expects(:retrieve).returns(session).once
|
33
|
+
assert @controller.shop_session
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_shop_session_is_memoized_and_does_not_retreive_session_twice
|
38
|
+
with_application_test_routes do
|
39
|
+
session[:shopify] = "foobar"
|
40
|
+
get :index
|
41
|
+
ShopifySessionRepository.expects(:retrieve).returns(session).once
|
42
|
+
assert @controller.shop_session
|
43
|
+
assert @controller.shop_session
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def with_application_test_routes
|
48
|
+
with_routing do |set|
|
49
|
+
set.draw do
|
50
|
+
get '/' => 'login_protection#index'
|
51
|
+
end
|
52
|
+
yield
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -17,6 +17,14 @@ class TestSessionStore
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
class TestSessionStoreClass
|
21
|
+
def self.store(session)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.retrieve(id)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
20
28
|
class ShopifySessionRepositoryTest < Minitest::Test
|
21
29
|
attr_reader :session_store, :session
|
22
30
|
def setup
|
@@ -54,4 +62,9 @@ class ShopifySessionRepositoryTest < Minitest::Test
|
|
54
62
|
ShopifySessionRepository.store(session)
|
55
63
|
end
|
56
64
|
end
|
65
|
+
|
66
|
+
def test_accepts_a_string_and_constantizes_it
|
67
|
+
ShopifySessionRepository.storage = 'TestSessionStoreClass'
|
68
|
+
assert_equal TestSessionStoreClass, ShopifySessionRepository.storage
|
69
|
+
end
|
57
70
|
end
|
metadata
CHANGED
@@ -1,117 +1,139 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shopify_app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MQ8wDQYDVQQDDAZhZG1p
|
14
|
+
bnMxFzAVBgoJkiaJk/IsZAEZFgdzaG9waWZ5MRMwEQYKCZImiZPyLGQBGRYDY29t
|
15
|
+
MB4XDTE0MDUxNTIwMzM0OFoXDTE1MDUxNTIwMzM0OFowPzEPMA0GA1UEAwwGYWRt
|
16
|
+
aW5zMRcwFQYKCZImiZPyLGQBGRYHc2hvcGlmeTETMBEGCgmSJomT8ixkARkWA2Nv
|
17
|
+
bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0/81O3e1vh5smcwp2G
|
18
|
+
MpLQ6q0kejQLa65bPYPxdzWA1SYOKyGfw+yR9LdFzsuKpwWzKq6zX35lj1IckWS4
|
19
|
+
bNBEQzxmufUxU0XPM02haFB8fOfDJzdXsWte9Ge4IFwahwn68gpMqN+BvxL+KMYz
|
20
|
+
Iut9YmN44d4LZdsENEIO5vmybuG2vYDz7R56qB0PA+Q2P2CdhymsBad2DQs69FBo
|
21
|
+
uico9V6VMYYctL9lCYdzu9IXrOYNTt88suKIVzzAlHOKeN0Ng5qdztFoTR8sfxDr
|
22
|
+
Ydg3KHl5n47wlpgd8R0f/4b5gGxW+v9pyJCgQnLlRu7DedVSvv7+GMtj3g9r3nhJ
|
23
|
+
KqECAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFI/o
|
24
|
+
maf34HXbUOQsdoLHacEKQgunMB0GA1UdEQQWMBSBEmFkbWluc0BzaG9waWZ5LmNv
|
25
|
+
bTAdBgNVHRIEFjAUgRJhZG1pbnNAc2hvcGlmeS5jb20wDQYJKoZIhvcNAQEFBQAD
|
26
|
+
ggEBADkK9aj5T0HPExsov4EoMWFnO+G7RQ28C30VAfKxnL2UxG6i4XMHVs6Xi94h
|
27
|
+
qXFw1ec9Y2eDUqaolT3bviOk9BB197+A8Vz/k7MC6ci2NE+yDDB7HAC8zU6LAx8Y
|
28
|
+
Iqvw7B/PSZ/pz4bUVFlTATif4mi1vO3lidRkdHRtM7UePSn2rUpOi0gtXBP3bLu5
|
29
|
+
YjHJN7wx5cugMEyroKITG5gL0Nxtu21qtOlHX4Hc4KdE2JqzCPOsS4zsZGhgwhPs
|
30
|
+
fl3hbtVFTqbOlwL9vy1fudXcolIE/ZTcxQ+er07ZFZdKCXayR9PPs64heamfn0fp
|
31
|
+
TConQSX2BnZdhIEYW+cKzEC/bLc=
|
32
|
+
-----END CERTIFICATE-----
|
33
|
+
date: 2014-12-19 00:00:00.000000000 Z
|
12
34
|
dependencies:
|
13
35
|
- !ruby/object:Gem::Dependency
|
14
36
|
name: rails
|
15
37
|
requirement: !ruby/object:Gem::Requirement
|
16
38
|
requirements:
|
17
|
-
- -
|
39
|
+
- - ">="
|
18
40
|
- !ruby/object:Gem::Version
|
19
41
|
version: '3.1'
|
20
|
-
- - <
|
42
|
+
- - "<"
|
21
43
|
- !ruby/object:Gem::Version
|
22
44
|
version: '5.0'
|
23
45
|
type: :runtime
|
24
46
|
prerelease: false
|
25
47
|
version_requirements: !ruby/object:Gem::Requirement
|
26
48
|
requirements:
|
27
|
-
- -
|
49
|
+
- - ">="
|
28
50
|
- !ruby/object:Gem::Version
|
29
51
|
version: '3.1'
|
30
|
-
- - <
|
52
|
+
- - "<"
|
31
53
|
- !ruby/object:Gem::Version
|
32
54
|
version: '5.0'
|
33
55
|
- !ruby/object:Gem::Dependency
|
34
56
|
name: shopify_api
|
35
57
|
requirement: !ruby/object:Gem::Requirement
|
36
58
|
requirements:
|
37
|
-
- - ~>
|
59
|
+
- - "~>"
|
38
60
|
- !ruby/object:Gem::Version
|
39
61
|
version: 3.2.0
|
40
62
|
type: :runtime
|
41
63
|
prerelease: false
|
42
64
|
version_requirements: !ruby/object:Gem::Requirement
|
43
65
|
requirements:
|
44
|
-
- - ~>
|
66
|
+
- - "~>"
|
45
67
|
- !ruby/object:Gem::Version
|
46
68
|
version: 3.2.0
|
47
69
|
- !ruby/object:Gem::Dependency
|
48
70
|
name: omniauth-shopify-oauth2
|
49
71
|
requirement: !ruby/object:Gem::Requirement
|
50
72
|
requirements:
|
51
|
-
- - ~>
|
73
|
+
- - "~>"
|
52
74
|
- !ruby/object:Gem::Version
|
53
75
|
version: 1.1.4
|
54
76
|
type: :runtime
|
55
77
|
prerelease: false
|
56
78
|
version_requirements: !ruby/object:Gem::Requirement
|
57
79
|
requirements:
|
58
|
-
- - ~>
|
80
|
+
- - "~>"
|
59
81
|
- !ruby/object:Gem::Version
|
60
82
|
version: 1.1.4
|
61
83
|
- !ruby/object:Gem::Dependency
|
62
84
|
name: less-rails-bootstrap
|
63
85
|
requirement: !ruby/object:Gem::Requirement
|
64
86
|
requirements:
|
65
|
-
- - ~>
|
87
|
+
- - "~>"
|
66
88
|
- !ruby/object:Gem::Version
|
67
89
|
version: '2.0'
|
68
90
|
type: :runtime
|
69
91
|
prerelease: false
|
70
92
|
version_requirements: !ruby/object:Gem::Requirement
|
71
93
|
requirements:
|
72
|
-
- - ~>
|
94
|
+
- - "~>"
|
73
95
|
- !ruby/object:Gem::Version
|
74
96
|
version: '2.0'
|
75
97
|
- !ruby/object:Gem::Dependency
|
76
98
|
name: rake
|
77
99
|
requirement: !ruby/object:Gem::Requirement
|
78
100
|
requirements:
|
79
|
-
- -
|
101
|
+
- - ">="
|
80
102
|
- !ruby/object:Gem::Version
|
81
103
|
version: '0'
|
82
104
|
type: :development
|
83
105
|
prerelease: false
|
84
106
|
version_requirements: !ruby/object:Gem::Requirement
|
85
107
|
requirements:
|
86
|
-
- -
|
108
|
+
- - ">="
|
87
109
|
- !ruby/object:Gem::Version
|
88
110
|
version: '0'
|
89
111
|
- !ruby/object:Gem::Dependency
|
90
112
|
name: minitest
|
91
113
|
requirement: !ruby/object:Gem::Requirement
|
92
114
|
requirements:
|
93
|
-
- -
|
115
|
+
- - ">="
|
94
116
|
- !ruby/object:Gem::Version
|
95
117
|
version: '0'
|
96
118
|
type: :development
|
97
119
|
prerelease: false
|
98
120
|
version_requirements: !ruby/object:Gem::Requirement
|
99
121
|
requirements:
|
100
|
-
- -
|
122
|
+
- - ">="
|
101
123
|
- !ruby/object:Gem::Version
|
102
124
|
version: '0'
|
103
125
|
- !ruby/object:Gem::Dependency
|
104
126
|
name: mocha
|
105
127
|
requirement: !ruby/object:Gem::Requirement
|
106
128
|
requirements:
|
107
|
-
- -
|
129
|
+
- - ">="
|
108
130
|
- !ruby/object:Gem::Version
|
109
131
|
version: '0'
|
110
132
|
type: :development
|
111
133
|
prerelease: false
|
112
134
|
version_requirements: !ruby/object:Gem::Requirement
|
113
135
|
requirements:
|
114
|
-
- -
|
136
|
+
- - ">="
|
115
137
|
- !ruby/object:Gem::Version
|
116
138
|
version: '0'
|
117
139
|
description: Creates a basic sessions controller for authenticating with your Shop
|
@@ -124,7 +146,7 @@ executables: []
|
|
124
146
|
extensions: []
|
125
147
|
extra_rdoc_files: []
|
126
148
|
files:
|
127
|
-
- .gitignore
|
149
|
+
- ".gitignore"
|
128
150
|
- CHANGELOG
|
129
151
|
- Gemfile
|
130
152
|
- LICENSE
|
@@ -158,6 +180,7 @@ files:
|
|
158
180
|
- lib/generators/shopify_app/templates/app/views/layouts/application.html.erb
|
159
181
|
- lib/generators/shopify_app/templates/app/views/sessions/new.html.erb
|
160
182
|
- lib/generators/shopify_app/templates/config/initializers/omniauth.rb
|
183
|
+
- lib/generators/shopify_app/templates/config/initializers/rails_4_shim.rb
|
161
184
|
- lib/generators/shopify_app/templates/config/initializers/shopify_session_repository.rb
|
162
185
|
- lib/generators/shopify_app/templates/public/404.html
|
163
186
|
- lib/generators/shopify_app/templates/public/422.html
|
@@ -181,6 +204,7 @@ files:
|
|
181
204
|
- test/config/shopify_app.yml
|
182
205
|
- test/lib/shopify_app/configuration_test.rb
|
183
206
|
- test/lib/shopify_app/in_memory_session_store_test.rb
|
207
|
+
- test/lib/shopify_app/login_protection_test.rb
|
184
208
|
- test/lib/shopify_app/shopify_session_repository_test.rb
|
185
209
|
- test/test_helper.rb
|
186
210
|
homepage: http://www.shopify.com/developers
|
@@ -192,12 +216,12 @@ require_paths:
|
|
192
216
|
- lib
|
193
217
|
required_ruby_version: !ruby/object:Gem::Requirement
|
194
218
|
requirements:
|
195
|
-
- -
|
219
|
+
- - ">="
|
196
220
|
- !ruby/object:Gem::Version
|
197
221
|
version: '0'
|
198
222
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
223
|
requirements:
|
200
|
-
- -
|
224
|
+
- - ">="
|
201
225
|
- !ruby/object:Gem::Version
|
202
226
|
version: '0'
|
203
227
|
requirements: []
|
@@ -206,12 +230,4 @@ rubygems_version: 2.2.2
|
|
206
230
|
signing_key:
|
207
231
|
specification_version: 4
|
208
232
|
summary: This gem is used to get quickly started with the Shopify API
|
209
|
-
test_files:
|
210
|
-
- test/config/development_config_file.yml
|
211
|
-
- test/config/empty_config_file.yml
|
212
|
-
- test/config/other_config_file.yml
|
213
|
-
- test/config/shopify_app.yml
|
214
|
-
- test/lib/shopify_app/configuration_test.rb
|
215
|
-
- test/lib/shopify_app/in_memory_session_store_test.rb
|
216
|
-
- test/lib/shopify_app/shopify_session_repository_test.rb
|
217
|
-
- test/test_helper.rb
|
233
|
+
test_files: []
|
metadata.gz.sig
ADDED
Binary file
|