shopify_theme 0.0.14 → 0.0.15
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.
- data/README.md +25 -19
- data/lib/shopify_theme.rb +2 -0
- data/lib/shopify_theme/cli.rb +40 -21
- data/lib/shopify_theme/version.rb +1 -1
- data/shopify_theme.gemspec +1 -1
- data/spec/unit/cli_spec.rb +24 -1
- metadata +9 -9
data/README.md
CHANGED
@@ -1,26 +1,32 @@
|
|
1
|
+
# Edit your Shopify theme locally
|
2
|
+
|
3
|
+
The Shopify theme gem is a command line tool that lets you make live changes to your published theme.
|
4
|
+
|
5
|
+
It will watch your local folders for any changes in your theme (including adding and removing files) and will update your .myshopify.com store to the latest changes.
|
6
|
+
|
1
7
|
# Requirements
|
2
8
|
|
3
9
|
Ruby 1.9
|
4
10
|
|
5
11
|
# Installation
|
6
12
|
|
7
|
-
|
13
|
+
```
|
8
14
|
gem install shopify_theme [optional_theme_id]
|
9
|
-
|
15
|
+
```
|
10
16
|
|
11
17
|
# Usage
|
12
18
|
|
13
|
-
Generate the config file. Go get a valid api_key and password for your store head to https://[your store].myshopify.com/admin/apps/private and generate a private application. Default it adds the main theme, if you want to edit one of your other themes, add the theme_id
|
19
|
+
Generate the config file. Go get a valid api_key and password for your store head to `https://[your store].myshopify.com/admin/apps/private` and generate a private application. Default it adds the main theme, if you want to edit one of your other themes, add the `theme_id`.
|
14
20
|
|
15
|
-
|
21
|
+
```
|
16
22
|
theme configure api_key password store_url
|
17
|
-
|
23
|
+
```
|
18
24
|
|
19
25
|
Example of config.yml. Notice store has no http or https declaration. You can
|
20
26
|
use `:whitelist_files:` to specify files for upload. The `assets/`, `config/`,
|
21
27
|
`layout/`, `snippets/` and `templates/` directories are included by default.
|
22
28
|
|
23
|
-
|
29
|
+
```yaml
|
24
30
|
---
|
25
31
|
:api_key: 7a8da86d3dd730b67a357dedabaac5d6
|
26
32
|
:password: 552338ce0d3aba7fc501dcf99bc57a81
|
@@ -29,43 +35,43 @@ use `:whitelist_files:` to specify files for upload. The `assets/`, `config/`,
|
|
29
35
|
:whitelist_files:
|
30
36
|
- directoryToUpload/
|
31
37
|
- importantFile.txt
|
32
|
-
|
38
|
+
```
|
33
39
|
|
34
40
|
Download all the theme files
|
35
41
|
|
36
|
-
|
42
|
+
```
|
37
43
|
theme download
|
38
|
-
|
44
|
+
```
|
39
45
|
|
40
46
|
Upload a theme file
|
41
47
|
|
42
|
-
|
48
|
+
```
|
43
49
|
theme upload assets/layout.liquid
|
44
|
-
|
50
|
+
```
|
45
51
|
|
46
52
|
Remove a theme file
|
47
53
|
|
48
|
-
|
54
|
+
```
|
49
55
|
theme remove assets/layout.liquid
|
50
|
-
|
56
|
+
```
|
51
57
|
|
52
58
|
Completely replace shop theme assets with the local assets
|
53
59
|
|
54
|
-
|
60
|
+
```
|
55
61
|
theme replace
|
56
|
-
|
62
|
+
```
|
57
63
|
|
58
64
|
Watch the theme directory and upload any files as they change
|
59
65
|
|
60
|
-
|
66
|
+
```
|
61
67
|
theme watch
|
62
|
-
|
68
|
+
```
|
63
69
|
|
64
70
|
Open the store in the default browser
|
65
71
|
|
66
|
-
|
72
|
+
```
|
67
73
|
theme open
|
68
|
-
|
74
|
+
```
|
69
75
|
|
70
76
|
# Common Problems
|
71
77
|
|
data/lib/shopify_theme.rb
CHANGED
data/lib/shopify_theme/cli.rb
CHANGED
@@ -5,7 +5,7 @@ require 'abbrev'
|
|
5
5
|
require 'base64'
|
6
6
|
require 'fileutils'
|
7
7
|
require 'json'
|
8
|
-
require '
|
8
|
+
require 'filewatcher'
|
9
9
|
require 'launchy'
|
10
10
|
|
11
11
|
module ShopifyTheme
|
@@ -50,9 +50,7 @@ module ShopifyTheme
|
|
50
50
|
|
51
51
|
desc "open", "open the store in your browser"
|
52
52
|
def open(*keys)
|
53
|
-
|
54
|
-
url = config[:store]
|
55
|
-
if Launchy.open url
|
53
|
+
if Launchy.open shop_theme_url
|
56
54
|
say("Done.", :green)
|
57
55
|
end
|
58
56
|
end
|
@@ -100,30 +98,51 @@ module ShopifyTheme
|
|
100
98
|
method_option :keep_files, :type => :boolean, :default => false
|
101
99
|
def watch
|
102
100
|
puts "Watching current folder: #{Dir.pwd}"
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
send_asset(filePath, options['quiet']) if local_assets_list.include?(filePath)
|
111
|
-
end
|
112
|
-
unless options['keep_files']
|
113
|
-
removed.each do |filePath|
|
114
|
-
filePath.slice!(Dir.pwd + "/")
|
115
|
-
delete_asset(filePath, options['quiet']) if !local_assets_list.include?(filePath)
|
101
|
+
watcher do |filename, event|
|
102
|
+
filename = filename.gsub("#{Dir.pwd}/", '')
|
103
|
+
if local_assets_list.include?(filename)
|
104
|
+
action = case event
|
105
|
+
when :changed, :new then :send_asset
|
106
|
+
when :delete then :delete_asset
|
107
|
+
else raise NotImplementedError, "Unknown event -- #{event}"
|
116
108
|
end
|
109
|
+
send(action, filename, options['quiet'])
|
117
110
|
end
|
118
111
|
end
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
112
|
+
end
|
113
|
+
|
114
|
+
desc "systeminfo", "print out system information and actively loaded libraries for aiding in submitting bug reports"
|
115
|
+
def systeminfo
|
116
|
+
ruby_version = "#{RUBY_VERSION}"
|
117
|
+
ruby_version += "-p#{RUBY_PATCHLEVEL}" if RUBY_PATCHLEVEL
|
118
|
+
puts "Ruby: v#{ruby_version}"
|
119
|
+
puts "Operating System: #{RUBY_PLATFORM}"
|
120
|
+
%w(Thor Listen HTTParty Launchy).each do |lib|
|
121
|
+
require "#{lib.downcase}/version"
|
122
|
+
puts "#{lib}: v" + Kernel.const_get("#{lib}::VERSION")
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
protected
|
127
|
+
|
128
|
+
def config
|
129
|
+
@config ||= YAML.load_file 'config.yml'
|
130
|
+
end
|
131
|
+
|
132
|
+
def shop_theme_url
|
133
|
+
url = config[:store]
|
134
|
+
url += "?preview_theme_id=#{config[:theme_id]}" if config[:theme_id] && config[:theme_id].to_i > 0
|
135
|
+
url
|
123
136
|
end
|
124
137
|
|
125
138
|
private
|
126
139
|
|
140
|
+
def watcher
|
141
|
+
FileWatcher.new(Dir.pwd).watch() do |filename, event|
|
142
|
+
yield(filename, event)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
127
146
|
def local_assets_list
|
128
147
|
local_files.reject do |p|
|
129
148
|
@permitted_files ||= (DEFAULT_WHITELIST | ShopifyTheme.whitelist_files).map{|pattern| Regexp.new(pattern)}
|
data/shopify_theme.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.add_dependency("thor", [">= 0.14.4"])
|
18
18
|
s.add_dependency("httparty", "~> 0.10.0")
|
19
19
|
s.add_dependency("json", "~> 1.5.4")
|
20
|
-
s.add_dependency("
|
20
|
+
s.add_dependency("filewatcher")
|
21
21
|
s.add_dependency("launchy")
|
22
22
|
|
23
23
|
s.add_development_dependency 'rake'
|
data/spec/unit/cli_spec.rb
CHANGED
@@ -6,7 +6,17 @@ module ShopifyTheme
|
|
6
6
|
describe "Cli" do
|
7
7
|
|
8
8
|
class CliDouble < Cli
|
9
|
-
attr_writer :local_files
|
9
|
+
attr_writer :local_files, :mock_config
|
10
|
+
|
11
|
+
desc "",""
|
12
|
+
def config
|
13
|
+
@mock_config || super
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "",""
|
17
|
+
def shop_theme_url
|
18
|
+
super
|
19
|
+
end
|
10
20
|
|
11
21
|
desc "", ""
|
12
22
|
def local_files
|
@@ -23,5 +33,18 @@ module ShopifyTheme
|
|
23
33
|
assert_equal 2, @cli.send(:local_assets_list).length
|
24
34
|
assert_equal false, @cli.send(:local_assets_list).include?('config.yml')
|
25
35
|
end
|
36
|
+
|
37
|
+
it "should generate the shop path URL to the query parameter preview_theme_id if the id is present" do
|
38
|
+
@cli.mock_config = {store: 'somethingfancy.myshopify.com', theme_id: 12345}
|
39
|
+
assert_equal "somethingfancy.myshopify.com?preview_theme_id=12345", @cli.shop_theme_url
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should generate the shop path URL withouth the preview_theme_id if the id is not present" do
|
43
|
+
@cli.mock_config = {store: 'somethingfancy.myshopify.com'}
|
44
|
+
assert_equal "somethingfancy.myshopify.com", @cli.shop_theme_url
|
45
|
+
|
46
|
+
@cli.mock_config = {store: 'somethingfancy.myshopify.com', theme_id: ''}
|
47
|
+
assert_equal "somethingfancy.myshopify.com", @cli.shop_theme_url
|
48
|
+
end
|
26
49
|
end
|
27
50
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shopify_theme
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.15
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-01-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -60,21 +60,21 @@ dependencies:
|
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 1.5.4
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: filewatcher
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - ! '>='
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
69
|
+
version: '0'
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: '
|
77
|
+
version: '0'
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
79
|
name: launchy
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -162,7 +162,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
162
162
|
version: '0'
|
163
163
|
segments:
|
164
164
|
- 0
|
165
|
-
hash: -
|
165
|
+
hash: -577831141083631280
|
166
166
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
167
167
|
none: false
|
168
168
|
requirements:
|
@@ -171,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
171
171
|
version: '0'
|
172
172
|
segments:
|
173
173
|
- 0
|
174
|
-
hash: -
|
174
|
+
hash: -577831141083631280
|
175
175
|
requirements: []
|
176
176
|
rubyforge_project: shopify_theme
|
177
177
|
rubygems_version: 1.8.23
|