shopifydev 0.0.1
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/.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
|