shopifydev 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +17 -0
- data/.pryrc +3 -0
- data/.root.shopifydev.yaml.sample +21 -0
- data/.ruby-version +1 -0
- data/.shopifydev.yaml.sample +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/NEXTSTEPS.md +33 -0
- data/README.md +78 -0
- data/Rakefile +1 -0
- data/bin/shopify_console +15 -0
- data/bin/shopifydev +100 -0
- data/lib/rails/generators/shopifydev/shops_generator.rb +11 -0
- data/lib/rails/generators/shopifydev/templates/shops.rake +5 -0
- data/lib/rails/tasks/shops.rake +7 -0
- data/lib/shopifydev/asset.rb +58 -0
- data/lib/shopifydev/commands.rb +83 -0
- data/lib/shopifydev/config.rb +9 -0
- data/lib/shopifydev/generators/shop.rb +29 -0
- data/lib/shopifydev/generators/templates/Gemfile +10 -0
- data/lib/shopifydev/generators/templates/gitignore +1 -0
- data/lib/shopifydev/generators/templates/rvmrc +1 -0
- data/lib/shopifydev/generators/templates/shopify-tmbundle +21 -0
- data/lib/shopifydev/pry/commands.rb +194 -0
- data/lib/shopifydev/railtie.rb +11 -0
- data/lib/shopifydev/shop.rb +38 -0
- data/lib/shopifydev/template.rb +73 -0
- data/lib/shopifydev/version.rb +3 -0
- data/lib/shopifydev.rb +10 -0
- data/shopifydev.gemspec +35 -0
- data/spec/shopifydev/config_spec.rb +5 -0
- data/spec/shopifydev/generators/shopifydev/shopifydev_generator_spec.rb +5 -0
- data/spec/shopifydev/pry/commands_spec.rb +5 -0
- data/spec/shopifydev/railtie_spec.rb +5 -0
- data/templates/customers/order.liquid +109 -0
- data/templates/customers/register.liquid +42 -0
- data/templates/page.support.liquid +78 -0
- data/templates/page.verbose.liquid +18 -0
- data/templates/product.liquid +284 -0
- data/templates/search.liquid +63 -0
- data/test_driver.rb +31 -0
- metadata +275 -0
@@ -0,0 +1,284 @@
|
|
1
|
+
{% include 'breadcrumbs' %}
|
2
|
+
|
3
|
+
<div id="product" class="content {{ product.handle }}{% if product.images.size == 1 %} one_image{% endif %} clearfix">
|
4
|
+
|
5
|
+
<div class="wrapper">
|
6
|
+
<div id="product-image">
|
7
|
+
{% if product.images.size > 1 %}
|
8
|
+
<div id="product-image-icons">
|
9
|
+
{% for image in product.images %}
|
10
|
+
<!-- CC attribution
|
11
|
+
magnifying-glass.ico
|
12
|
+
http://www.wpzoom.com
|
13
|
+
Designed by David Ferreira.
|
14
|
+
-->
|
15
|
+
<div class="image">
|
16
|
+
<a href="{{ image.src | product_img_url: 'original' }}" class="cloud-zoom-gallery" rel="useZoom: 'placeholder', smallImage: '{{ image.src | product_img_url: 'grande' }}', tint: '#ffffff'">
|
17
|
+
<img src="{{ image.src | product_img_url: 'small' }}" alt="{{ image.alt | escape }}" />
|
18
|
+
</a>
|
19
|
+
</div>
|
20
|
+
{% endfor %}
|
21
|
+
</div><!-- /.thumbs -->
|
22
|
+
{% endif %}
|
23
|
+
<div id="product-image-large">
|
24
|
+
<div class="image">
|
25
|
+
<a href="{{ product.featured_image.src | product_img_url: 'original' }}" class="cloud-zoom" rel="position: 'inside', showTitle: 'false'" id="placeholder">
|
26
|
+
<img src="{{ product.featured_image.src | product_img_url: 'grande' }}" alt="{{ product.featured_image.alt | escape }}" />
|
27
|
+
</a>
|
28
|
+
</div>
|
29
|
+
|
30
|
+
</div> <!-- /.featured -->
|
31
|
+
<div id="product-image-zoom">Hover over image to zoom</div>
|
32
|
+
</div> <!-- /.images -->
|
33
|
+
|
34
|
+
<div id="product-content">
|
35
|
+
{% if collection %}
|
36
|
+
<div class="more-info clearfix">
|
37
|
+
{% if collection.previous_product %}
|
38
|
+
<div class="fl">
|
39
|
+
<a href="{{ collection.previous_product }}" class="previous_product"><span class="upper">Previous</span> <span class="lower">Product</span></a>
|
40
|
+
</div>
|
41
|
+
{% endif %}
|
42
|
+
{% if collection.next_product %}
|
43
|
+
<div class="fr">
|
44
|
+
<a href="{{ collection.next_product }}" class="next_product"><span class="upper">Next</span> <span class="lower">Product</span></a>
|
45
|
+
</div>
|
46
|
+
{% endif %}
|
47
|
+
</div>
|
48
|
+
{% endif %}
|
49
|
+
|
50
|
+
<div id="product-full-description">
|
51
|
+
<div id="product-category">{{ collection.title | split: ' -- ' | last }}</div>
|
52
|
+
<h2 class="title">{{ product.title }}</h2>
|
53
|
+
{% if product.price_min < product.compare_at_price_min %}
|
54
|
+
<div id="product-price">{{ product.price_min | money }}</div>
|
55
|
+
<div id="product-price-old"><strike>{{ product.compare_at_price_min | money }}</strike></div>
|
56
|
+
{% else %}
|
57
|
+
<div id="product-price">{{ product.price_min | money }}</div>
|
58
|
+
{% endif %}
|
59
|
+
|
60
|
+
{% if settings.product_description_position == "top" %}
|
61
|
+
|
62
|
+
{% include 'shipping-and-return-tabs' %}
|
63
|
+
|
64
|
+
{% endif %}
|
65
|
+
|
66
|
+
<form id="add-item-form" action="/cart/add" method="post" class="variants clearfix">
|
67
|
+
{% if product.options.size > 1 %}
|
68
|
+
<div class="select clearfix">
|
69
|
+
|
70
|
+
<div id="product-color">
|
71
|
+
<div id="variant_details"></div>
|
72
|
+
<h4 style="color:#333">Please choose a color:</h4>
|
73
|
+
{% include 'swatches' %}
|
74
|
+
</div>
|
75
|
+
|
76
|
+
<div id="product-size" class="product-info">
|
77
|
+
<select id="product-select" name='id'>
|
78
|
+
{% for variant in product.variants %}
|
79
|
+
<option value="{{ variant.id }}">{{ variant.title }} - {{ variant.price | money }}</option>
|
80
|
+
{% endfor %}
|
81
|
+
</select>
|
82
|
+
</div>
|
83
|
+
</div>
|
84
|
+
{% elsif product.options.size == 1 and product.variants.size > 1 %}
|
85
|
+
<div class="select clearfix">
|
86
|
+
<label>{{ product.options[0] }}</label>
|
87
|
+
<select id="product-select" name='id'>
|
88
|
+
{% for variant in product.variants %}
|
89
|
+
<option value="{{ variant.id }}">{{ variant.title }} - {{ variant.price | money }}</option>
|
90
|
+
{% endfor %}
|
91
|
+
</select>
|
92
|
+
</div>
|
93
|
+
{% else %}
|
94
|
+
<input type="hidden" name="id" value="{{ product.variants.first.id }}" />
|
95
|
+
{% endif %}
|
96
|
+
|
97
|
+
<div id="product-quantity">
|
98
|
+
<label for="quantity"><h5 style="float:left">Quantity:</h5></label>
|
99
|
+
<input min="1" type="number" id="quantity" name="quantity" value="1" />
|
100
|
+
</div>
|
101
|
+
|
102
|
+
|
103
|
+
{% if product.available %}
|
104
|
+
<div class="purchase clearfix">
|
105
|
+
<span><input type="image" src="{{ 'cart.png' | asset_url }}" name="add" id="add-to-cart" value="Add to Cart" class="cart cufon" /></span>
|
106
|
+
</div>
|
107
|
+
{% else %}
|
108
|
+
<div class="purchase clearfix">
|
109
|
+
<span><input type="submit" name="add" id="add-to-cart" value="Sold Out" class="cart cufon disabled" disabled="disabled" /></span>
|
110
|
+
</div>
|
111
|
+
{% endif %}
|
112
|
+
|
113
|
+
</form>
|
114
|
+
|
115
|
+
<hr />
|
116
|
+
|
117
|
+
{% if settings.product_description_position == "bottom" %}
|
118
|
+
|
119
|
+
{% include 'shipping-and-return-tabs' %}
|
120
|
+
|
121
|
+
<div id="social-media">
|
122
|
+
{% include 'pinterest' %}
|
123
|
+
{% include 'like' %}
|
124
|
+
{% include 'amazon-wish-list' %}
|
125
|
+
</div>
|
126
|
+
{% endif %}
|
127
|
+
|
128
|
+
</div>
|
129
|
+
</div>
|
130
|
+
|
131
|
+
{% comment %} Related Products {% endcomment %}
|
132
|
+
{% include 'related-products' %}
|
133
|
+
|
134
|
+
</div>
|
135
|
+
|
136
|
+
</div> <!-- /#product -->
|
137
|
+
|
138
|
+
<script type="text/javascript">
|
139
|
+
|
140
|
+
// <![CDATA[
|
141
|
+
var selectCallback = function(variant, selector) {
|
142
|
+
|
143
|
+
// #variant_details is in snippets/shipping-and-return-tabs
|
144
|
+
var description = jQuery('#variant_details')
|
145
|
+
|
146
|
+
// if we have product variants with details
|
147
|
+
{% if product.metafields.variants.variant_details %}
|
148
|
+
|
149
|
+
// make an array of the details
|
150
|
+
var metafields = {{ product.metafields.variants.variant_details | json }}.split(':')
|
151
|
+
|
152
|
+
// match the details against the selected variant
|
153
|
+
var match = true
|
154
|
+
for (i = 0; i < variant.options.length; i++) {
|
155
|
+
|
156
|
+
if (variant.options[i].toLowerCase().trim() === metafields[i].trim()) {
|
157
|
+
// NOP
|
158
|
+
} else {
|
159
|
+
match = false;
|
160
|
+
}
|
161
|
+
} // post: if a metafield matched the current variant exactly, match is true
|
162
|
+
|
163
|
+
// if it was a complete match, then post the last detail
|
164
|
+
if (match === true) {
|
165
|
+
description.text(metafields.pop().trim())
|
166
|
+
description.addClass('active')
|
167
|
+
} else {
|
168
|
+
description.text('')
|
169
|
+
description.removeClass('active')
|
170
|
+
}
|
171
|
+
{% endif %}
|
172
|
+
|
173
|
+
if (variant && variant.available == true) {
|
174
|
+
// selected a valid variant
|
175
|
+
jQuery('#add-to-cart').removeClass('disabled').removeAttr('disabled').val('Add to Cart'); // remove unavailable class from add-to-cart button, and re-enable button
|
176
|
+
if(variant.price < variant.compare_at_price){
|
177
|
+
jQuery('#price-preview').html('<span class="money">'
|
178
|
+
+ Shopify.formatMoney(variant.price, "{{ shop.money_format }}")
|
179
|
+
+ '</span>'
|
180
|
+
+ ' was <span class="money">'
|
181
|
+
+ Shopify.formatMoney(variant.compare_at_price, "{{ shop.money_format }}")
|
182
|
+
+ "</span>");
|
183
|
+
} else {
|
184
|
+
jQuery('#price-preview').html('<span class="money">' + Shopify.formatMoney(variant.price, "{{ shop.money_format }}") + '</span>');
|
185
|
+
}
|
186
|
+
|
187
|
+
} else {
|
188
|
+
// variant doesn't exist
|
189
|
+
var message = variant ? "Sold Out" : "Unavailable";
|
190
|
+
jQuery('#add-to-cart').addClass('disabled').attr('disabled', 'disabled').val('Sold Out'); // set add-to-cart button to unavailable class and disable button
|
191
|
+
jQuery('#product .variants .price').text(message); // update price-field message
|
192
|
+
}
|
193
|
+
};
|
194
|
+
|
195
|
+
function remove(s, t) {
|
196
|
+
/*
|
197
|
+
** Remove all occurrences of a token in a string
|
198
|
+
** s string to be processed
|
199
|
+
** t token to be removed
|
200
|
+
** returns new string
|
201
|
+
*/
|
202
|
+
i = s.indexOf(t);
|
203
|
+
r = "";
|
204
|
+
if (i == -1) return s;
|
205
|
+
r += s.substring(0,i) + remove(s.substring(i + t.length), t);
|
206
|
+
return r;
|
207
|
+
}
|
208
|
+
|
209
|
+
// initialize multi selector for product
|
210
|
+
jQuery(function() {
|
211
|
+
/* NOTE we are not using recently-viewed, so I am removing the related code
|
212
|
+
if(jQuery.cookie("viewed-products") != null){ // if cookie exists...
|
213
|
+
var products = jQuery.cookie("viewed-products");
|
214
|
+
var productHandles = products.split(" ");
|
215
|
+
var matches = 0;
|
216
|
+
var limit = 4;
|
217
|
+
for(var i = (productHandles.length - 1); i >= 0; i--) {
|
218
|
+
if(productHandles[i] != "{{ product.handle }}" && productHandles[i] != "" && (matches < limit)){
|
219
|
+
Shopify.getProduct(productHandles[i]);
|
220
|
+
matches++;
|
221
|
+
}
|
222
|
+
}
|
223
|
+
|
224
|
+
if(products.indexOf("{{ product.handle }}") == -1){ // add current product to list if it isn't already there
|
225
|
+
products += " {{ product.handle }}";
|
226
|
+
jQuery.cookie("viewed-products", products, {path: "/"});
|
227
|
+
} else { // if it is already there, push it to the end of the string
|
228
|
+
var newstring = remove(products, '{{ product.handle }}');
|
229
|
+
newstring += " {{ product.handle }}";
|
230
|
+
jQuery.cookie("viewed-products", newstring.replace(/ /g,' '), {path: "/"});
|
231
|
+
}
|
232
|
+
} else { // create cookie if it doesn't already exist
|
233
|
+
jQuery.cookie("viewed-products", "{{ product.handle }}", {path: "/"});
|
234
|
+
} */
|
235
|
+
|
236
|
+
// create the multi-selector
|
237
|
+
{% if product.variants.size > 1 or product.options.size > 1 %}
|
238
|
+
new Shopify.OptionSelectors("product-select", { product: {{ product | json }}, onVariantSelected: selectCallback });
|
239
|
+
|
240
|
+
// wrap the labels for Cufon styling
|
241
|
+
var labels = jQuery('#product-size .selector-wrapper label')
|
242
|
+
labels.wrapInner('<h4 class="selector-label" />')
|
243
|
+
|
244
|
+
// add classes to each option for chaining
|
245
|
+
{% for variant in product.variants %}
|
246
|
+
|
247
|
+
var colour = '{{ variant.option1 }}'
|
248
|
+
var size = '{{ variant.option2 }}'
|
249
|
+
|
250
|
+
jQuery('#product-select-option-1'
|
251
|
+
+ ' option[value="' + size + '"]').addClass(colour)
|
252
|
+
|
253
|
+
{% endfor %}
|
254
|
+
|
255
|
+
// choose a default value for each selector in the cluster
|
256
|
+
{% assign found_one_in_stock = false %}
|
257
|
+
{% for variant in product.variants %}
|
258
|
+
{% if variant.available and found_one_in_stock == false %}
|
259
|
+
|
260
|
+
// for the first variant that is in stock
|
261
|
+
{% assign found_one_in_stock = true %}
|
262
|
+
{% for option in product.options %}
|
263
|
+
jQuery('#product-select-option-' + {{ forloop.index0 }}).val({{ variant.options[forloop.index0] | json }}).trigger('change');
|
264
|
+
|
265
|
+
{% endfor %}
|
266
|
+
{% endif %}
|
267
|
+
{% endfor %}
|
268
|
+
|
269
|
+
{% endif %}
|
270
|
+
|
271
|
+
$("#product-select-option-1").chained("#product-select-option-0"); /* or $("#series").chainedTo("#mark"); */
|
272
|
+
|
273
|
+
});
|
274
|
+
|
275
|
+
/* NOTE we are not using recently-viewed so I am removing the related code
|
276
|
+
Shopify.onProduct = function(product) {
|
277
|
+
jQuery("#recently-viewed").css('display', 'block');
|
278
|
+
jQuery("#recently-viewed .products").append('<div class="product"><div class="image"><a href="' + product.url + '"><img src="' + Shopify.resizeImage(product.featured_image, 'large') + '" alt="' + product.title + '" /></a></div><div class="details clearfix"><a href="' + product.url + '"><span class="title">' + product.title + '</span></a></div></div>');
|
279
|
+
jQuery("#recently-viewed .products .product:nth-child(4)").addClass("last");
|
280
|
+
jQuery("#content-slide .product .details, #content-table .product .details").css({opacity:0.0});
|
281
|
+
}; */
|
282
|
+
// ]]>
|
283
|
+
</script>
|
284
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<div id="search" class="clearfix">
|
2
|
+
{% if search.performed %}
|
3
|
+
<div class="main">
|
4
|
+
{% paginate search.results by settings.pagination_limit %}
|
5
|
+
<div class="more-info clearfix">
|
6
|
+
<div class="fl">
|
7
|
+
<span class="upper">Search Results</span>
|
8
|
+
<span class="lower">{{ search.results_count }} {{ search.results_count | pluralize: 'Match', 'Matches' }} </span>
|
9
|
+
</div>
|
10
|
+
<div class="fr">
|
11
|
+
<span class="upper"> </span>
|
12
|
+
<span class="lower">{% include 'pagination' %}</span>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
{% if search.terms == "" %}
|
16
|
+
<p>Your search query was empty.</p>
|
17
|
+
{% else %}
|
18
|
+
{% if search.results == empty %}
|
19
|
+
<div class="empty">
|
20
|
+
Your search for "{{search.terms | escape}}" did not yield any results
|
21
|
+
</div>
|
22
|
+
{% else %}
|
23
|
+
|
24
|
+
<div class="results">
|
25
|
+
{% for item in search.results %}
|
26
|
+
<div class="item clearfix">
|
27
|
+
<div class="thumbnail">
|
28
|
+
<a href="{{ item.url }}">{{ item.featured_image.src | product_img_url: 'thumb' | img_tag: item.featured_image.alt }}</a>
|
29
|
+
</div>
|
30
|
+
<div class="content">
|
31
|
+
<h4>{{ item.title | link_to: item.url }}</h4>
|
32
|
+
{{ item.content | strip_html | truncatewords: 40 | highlight: search.terms }}
|
33
|
+
</div>
|
34
|
+
</div> <!-- /.item -->
|
35
|
+
{% endfor %}
|
36
|
+
</div> <!-- /.results -->
|
37
|
+
|
38
|
+
{% endif %}
|
39
|
+
{% endif %}
|
40
|
+
|
41
|
+
<div class="more-info clearfix">
|
42
|
+
<div class="fr">
|
43
|
+
<span class="upper"> </span>
|
44
|
+
<span class="lower">{% include 'pagination' %}</span>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
|
48
|
+
{% endpaginate %}
|
49
|
+
</div> <!-- /.main -->
|
50
|
+
{% include "sidebar" %}
|
51
|
+
|
52
|
+
{% else %}
|
53
|
+
|
54
|
+
<div id="not_found">
|
55
|
+
<h2>Search our shop</h2>
|
56
|
+
<form id="search_form" class="searchform" name="search" action="/search">
|
57
|
+
<input type="text" class="replace" name="q" value="Search..." />
|
58
|
+
</form>
|
59
|
+
</div> <!-- /#not_found -->
|
60
|
+
|
61
|
+
{% endif %}
|
62
|
+
</div> <!-- /#search -->
|
63
|
+
{% include 'featured-products' %}
|
data/test_driver.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative "lib/shopifydev.rb"
|
2
|
+
require "shopify_api"
|
3
|
+
|
4
|
+
class TestDriver
|
5
|
+
attr_accessor :devshop
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@devshop = Shopifydev::Shop.new(credentials)
|
9
|
+
end
|
10
|
+
|
11
|
+
def credentials
|
12
|
+
unless @credentials
|
13
|
+
@credentials = YAML::load(
|
14
|
+
File.open(
|
15
|
+
File.join(File.dirname(__FILE__), '.shopifydev.yaml')))
|
16
|
+
end
|
17
|
+
|
18
|
+
@credentials
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
if __FILE__ == $PROGRAM_NAME
|
24
|
+
test_shop = TestDriver.new
|
25
|
+
test_shop.devshop.template.download
|
26
|
+
|
27
|
+
# upload a new asset by file name
|
28
|
+
test_shop.devshop.asset('assets/example.css').upload
|
29
|
+
test_shop.devshop.asset('assets/example.png').upload
|
30
|
+
end
|
31
|
+
|
metadata
ADDED
@@ -0,0 +1,275 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: shopifydev
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Michael Johnston
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-06-06 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: shopify_api
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.0.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: ruby-filemagic
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.4.2
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.4.2
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: gli
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 2.5.2
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.5.2
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: oj
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: dalli
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: shydra
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: pry
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: activesupport
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: term-ansicolor
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :runtime
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: railties
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :runtime
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: rake
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
type: :development
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
description: Tools for using SCM with shopify.
|
191
|
+
email:
|
192
|
+
- lastobelus@mac.com
|
193
|
+
executables:
|
194
|
+
- shopify_console
|
195
|
+
- shopifydev
|
196
|
+
extensions: []
|
197
|
+
extra_rdoc_files: []
|
198
|
+
files:
|
199
|
+
- .gitignore
|
200
|
+
- .pryrc
|
201
|
+
- .root.shopifydev.yaml.sample
|
202
|
+
- .ruby-version
|
203
|
+
- .shopifydev.yaml.sample
|
204
|
+
- Gemfile
|
205
|
+
- LICENSE.txt
|
206
|
+
- NEXTSTEPS.md
|
207
|
+
- README.md
|
208
|
+
- Rakefile
|
209
|
+
- bin/shopify_console
|
210
|
+
- bin/shopifydev
|
211
|
+
- lib/rails/generators/shopifydev/shops_generator.rb
|
212
|
+
- lib/rails/generators/shopifydev/templates/shops.rake
|
213
|
+
- lib/rails/tasks/shops.rake
|
214
|
+
- lib/shopifydev.rb
|
215
|
+
- lib/shopifydev/asset.rb
|
216
|
+
- lib/shopifydev/commands.rb
|
217
|
+
- lib/shopifydev/config.rb
|
218
|
+
- lib/shopifydev/generators/shop.rb
|
219
|
+
- lib/shopifydev/generators/templates/Gemfile
|
220
|
+
- lib/shopifydev/generators/templates/gitignore
|
221
|
+
- lib/shopifydev/generators/templates/rvmrc
|
222
|
+
- lib/shopifydev/generators/templates/shopify-tmbundle
|
223
|
+
- lib/shopifydev/pry/commands.rb
|
224
|
+
- lib/shopifydev/railtie.rb
|
225
|
+
- lib/shopifydev/shop.rb
|
226
|
+
- lib/shopifydev/template.rb
|
227
|
+
- lib/shopifydev/version.rb
|
228
|
+
- shopifydev.gemspec
|
229
|
+
- spec/shopifydev/config_spec.rb
|
230
|
+
- spec/shopifydev/generators/shopifydev/shopifydev_generator_spec.rb
|
231
|
+
- spec/shopifydev/pry/commands_spec.rb
|
232
|
+
- spec/shopifydev/railtie_spec.rb
|
233
|
+
- templates/customers/order.liquid
|
234
|
+
- templates/customers/register.liquid
|
235
|
+
- templates/page.support.liquid
|
236
|
+
- templates/page.verbose.liquid
|
237
|
+
- templates/product.liquid
|
238
|
+
- templates/search.liquid
|
239
|
+
- test_driver.rb
|
240
|
+
homepage: ''
|
241
|
+
licenses: []
|
242
|
+
post_install_message:
|
243
|
+
rdoc_options: []
|
244
|
+
require_paths:
|
245
|
+
- lib
|
246
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
247
|
+
none: false
|
248
|
+
requirements:
|
249
|
+
- - ! '>='
|
250
|
+
- !ruby/object:Gem::Version
|
251
|
+
version: '0'
|
252
|
+
segments:
|
253
|
+
- 0
|
254
|
+
hash: -1632061386653175643
|
255
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
256
|
+
none: false
|
257
|
+
requirements:
|
258
|
+
- - ! '>='
|
259
|
+
- !ruby/object:Gem::Version
|
260
|
+
version: '0'
|
261
|
+
segments:
|
262
|
+
- 0
|
263
|
+
hash: -1632061386653175643
|
264
|
+
requirements: []
|
265
|
+
rubyforge_project:
|
266
|
+
rubygems_version: 1.8.25
|
267
|
+
signing_key:
|
268
|
+
specification_version: 3
|
269
|
+
summary: Abstract out and port to ruby the functionality of the shopify textmate bundle
|
270
|
+
for use in other editors.
|
271
|
+
test_files:
|
272
|
+
- spec/shopifydev/config_spec.rb
|
273
|
+
- spec/shopifydev/generators/shopifydev/shopifydev_generator_spec.rb
|
274
|
+
- spec/shopifydev/pry/commands_spec.rb
|
275
|
+
- spec/shopifydev/railtie_spec.rb
|