invision_support 0.0.3

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e963ce017549ca6962d7486d0657d1b80fbebab7
4
+ data.tar.gz: 503c935d87c6accfd6f82feee83ff13714ce1eb6
5
+ SHA512:
6
+ metadata.gz: e6ec565b4ec5befa17daa3f5f362953317d80a2a5e1894402ca6a0af84674960fd51f8289113285c53401103cfd97b9f3f99d7a5be9c93b910d5c3d147ee9a00
7
+ data.tar.gz: 53cd1d305274f42a1250cd08197e0d7fd58ef518d25eb5365057717f6b07958ccde96e9cc9ebc5740e300377bfbafbd9a7e8e9e6efbd07624e2c2a7744643b49
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ .ruby-version
7
+ .ruby-gemset
8
+ Gemfile.lock
9
+ InstalledFiles
10
+ _yardoc
11
+ coverage
12
+ doc/
13
+ lib/bundler/man
14
+ pkg
15
+ rdoc
16
+ spec/reports
17
+ test/tmp
18
+ test/version_tmp
19
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in invision_support.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Sophy Eung
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # InvisionSupport
2
+
3
+ Utility library that is used by [sketch.rb](https://github.com/InVisionApp/sketch.rb) and [psd.rb](https://github.com/InVisionApp/psd.rb).
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'invision_support'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install invision_support
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.pattern = './test/lib/**/*_test.rb'
6
+ end
7
+ task default: :test
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'invision_support/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "invision_support"
8
+ spec.version = InvisionSupport::VERSION
9
+ spec.authors = ["Sophy Eung"]
10
+ spec.email = ["ungsophy@gmail.com"]
11
+ spec.description = "A utility library"
12
+ spec.summary = "A utility library"
13
+ spec.homepage = "https://github.com/ungsophy/invision_support"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency 'minitest', '~> 5.2.0'
24
+ end
@@ -0,0 +1,7 @@
1
+ require 'invision_support/version'
2
+ require 'invision_support/filename'
3
+ require 'invision_support/node_name'
4
+ require 'invision_support/path'
5
+
6
+ module InvisionSupport
7
+ end
@@ -0,0 +1,26 @@
1
+ module InvisionSupport
2
+ module Filename
3
+ def preview_filename(file_path, output_filename = nil)
4
+ filename = !output_filename.nil? && !output_filename.empty? ? output_filename : file_path
5
+ filename = File.basename(filename, File.extname(filename))
6
+
7
+ filename_in_png(filename)
8
+ end
9
+
10
+ def filename_in_png(str1, str2 = '', has_at2x = false)
11
+ str2 = '' if str2.nil?
12
+ str2 = str2.strip.gsub(/^\& /, '').gsub(/\W/, '-')
13
+
14
+ at2x = has_at2x ? '@2x' : ''
15
+
16
+ arr = str1.strip.split(' ')
17
+ arr << str2 unless str2.empty?
18
+
19
+ index = arr.size > 1 ? 1 : 0
20
+ filename = arr.slice(index, arr.size).join('-')
21
+ filename = File.basename(filename, '.png') if filename =~ /\.png$/
22
+
23
+ "#{filename}#{at2x}.png"
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,73 @@
1
+ module InvisionSupport
2
+ module NodeName
3
+
4
+ include Filename
5
+
6
+ GLOBAL = '*'
7
+ SCREEN = '+'
8
+ VARIANT = '&'
9
+ EXCLUDE = '-'
10
+
11
+ ASSET_EXTS = %W(.png .jpg .jpeg .gif)
12
+
13
+ # Check if a node is an asset node
14
+ #
15
+ # Returns boolean
16
+ def icon?(node_or_str)
17
+ filename = get_filename(node_or_str)
18
+ File.extname(filename).downcase == '.ico'
19
+ end
20
+
21
+ # Check if a node is an asset node
22
+ #
23
+ # Returns boolean
24
+ def asset?(node_or_str)
25
+ filename = get_filename(node_or_str)
26
+ extname = File.extname(filename).downcase
27
+
28
+ ASSET_EXTS.include?(extname)
29
+ end
30
+
31
+ # Check if a node is a screen node
32
+ #
33
+ # Returns boolean
34
+ def screen?(node)
35
+ symbol(node.name).include?(SCREEN) && node.text.nil?
36
+ rescue NameError
37
+ symbol(node).include?(SCREEN)
38
+ end
39
+
40
+ # Check if a node is a global node
41
+ #
42
+ # Returns boolean
43
+ def global?(node)
44
+ symbol(node.name).include?(GLOBAL)
45
+ end
46
+
47
+ # Check if a node is a variant node
48
+ #
49
+ # Returns boolean
50
+ def variant?(node)
51
+ symbol(node.name).include?(VARIANT)
52
+ end
53
+
54
+ # Check if a node is an exclude node
55
+ #
56
+ # Returns boolean
57
+ def exclude?(node)
58
+ symbol(node.name).include?(EXCLUDE)
59
+ end
60
+
61
+ private
62
+
63
+ def get_filename(node_or_str)
64
+ node_or_str.name.strip
65
+ rescue NameError
66
+ node_or_str
67
+ end
68
+
69
+ def symbol(name)
70
+ name.strip.split(' ').first
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,69 @@
1
+ module InvisionSupport
2
+ module Path
3
+
4
+ include NodeName
5
+
6
+ # Example:
7
+ # root_path: /var/www/output/mail-app
8
+ # fonts_path: /var/www/output/mail-app/assets/fonts
9
+ # images_path: /var/www/output/mail-app/assets/images
10
+ # screens_path: /var/www/output/mail-app/screens
11
+ # icons_path: /var/www/output/mail-app/icons
12
+ attr_accessor :root_path, :images_path, :fonts_path, :screens_path, :icons_path,
13
+ :output_filename
14
+
15
+ # Preview image path e.g. /var/www/output/mail-app/screens/mail-app.png
16
+ #
17
+ # Returns string
18
+ def preview_path(file_path, output_filename = nil)
19
+ filename = preview_filename(file_path, output_filename)
20
+ File.join(screens_path, filename)
21
+ end
22
+
23
+ # preview image path in zip e.g. screens/mail-app.png
24
+ #
25
+ # Returns string
26
+ def preview_path_in_zip(file_path, output_filename = nil)
27
+ filename = preview_filename(file_path, output_filename)
28
+ File.join(screens_path_in_zip, filename)
29
+ end
30
+
31
+ %w(font image screen icon).each do |type|
32
+ class_eval(<<END_OF_CODE)
33
+ def #{type}s_path_in_zip
34
+ raise ArgumentError, 'root_path is empty' unless root_path
35
+ raise ArgumentError, '#{type}s_path is empty' unless #{type}s_path
36
+
37
+ @#{type}s_path_in_zip ||= #{type}s_path.gsub(/^\#\{root_path\}\\//, '')
38
+ end
39
+
40
+ def #{type}_path_in_zip(name1, name2, has_at2x = false)
41
+ path = file_path_in_zip('#{type}', name1, name2, has_at2x)
42
+ extnames = path.split('.').last(2)
43
+
44
+ if extnames.last == 'png' && asset?("foo.\#\{extnames.first\}")
45
+ return path.gsub(/\.png$/, '')
46
+ end
47
+
48
+ path
49
+ end
50
+
51
+ def #{type}_path(name1, name2, has_at2x = false)
52
+ file_path('#{type}', name1, name2, has_at2x)
53
+ end
54
+ END_OF_CODE
55
+ end
56
+
57
+ private
58
+
59
+ def file_path(type, name1, name2, has_at2x = false)
60
+ filename = filename_in_png(name1, name2, has_at2x)
61
+ File.join(__send__("#{type}s_path"), filename)
62
+ end
63
+
64
+ def file_path_in_zip(type, name1, name2, has_at2x = false)
65
+ filename = filename_in_png(name1, name2, has_at2x)
66
+ File.join(__send__("#{type}s_path_in_zip"), filename)
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,3 @@
1
+ module InvisionSupport
2
+ VERSION = '0.0.3'
3
+ end
@@ -0,0 +1,53 @@
1
+ require './test/test_helper'
2
+
3
+ class Foo
4
+ include InvisionSupport::Filename
5
+ end
6
+
7
+ describe InvisionSupport::Filename do
8
+ let(:foo) { Foo.new }
9
+
10
+ describe '#preview_filename' do
11
+ describe 'when output_filename is present' do
12
+ it 'uses output filename' do
13
+ foo.preview_filename('123-94757-jkfh89.sketch', 'mail-app.sketch').must_equal 'mail-app.png'
14
+ end
15
+ end
16
+
17
+ describe 'when output_filename is not present' do
18
+ it 'uses file path' do
19
+ foo.preview_filename('aaa.sketch', '').must_equal 'aaa.png'
20
+ foo.preview_filename('aaa.sketch').must_equal 'aaa.png'
21
+ end
22
+ end
23
+ end
24
+
25
+ describe '#filename_in_png' do
26
+ describe 'only one name' do
27
+ it 'returns filename with .png as extension' do
28
+ foo.filename_in_png('+ inbox').must_equal 'inbox.png'
29
+ foo.filename_in_png('* inbox').must_equal 'inbox.png'
30
+ foo.filename_in_png(' + inbox').must_equal 'inbox.png'
31
+ foo.filename_in_png('+ inbox.png').must_equal 'inbox.png'
32
+ end
33
+ end
34
+
35
+ describe 'one name with has_at2x' do
36
+ it 'returns filename with @2x.png' do
37
+ foo.filename_in_png('+ inbox', '', true).must_equal 'inbox@2x.png'
38
+ foo.filename_in_png('* inbox', '', true).must_equal 'inbox@2x.png'
39
+ foo.filename_in_png(' + inbox', '', true).must_equal 'inbox@2x.png'
40
+ foo.filename_in_png('+ inbox.png', '', true).must_equal 'inbox@2x.png'
41
+ end
42
+ end
43
+
44
+ describe 'two names' do
45
+ it 'returns the combination of two names' do
46
+ foo.filename_in_png('+ inbox', '& primary', false).must_equal 'inbox-primary.png'
47
+ foo.filename_in_png('+ inbox', ' & primary', false).must_equal 'inbox-primary.png'
48
+ foo.filename_in_png(' + inbox', ' & primary', false).must_equal 'inbox-primary.png'
49
+ foo.filename_in_png(' + inbox', '& primary', false).must_equal 'inbox-primary.png'
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,154 @@
1
+ require './test/test_helper'
2
+
3
+ FakeNode = Struct.new(:name, :text)
4
+
5
+ class FakeHelper
6
+ include InvisionSupport::NodeName
7
+ end
8
+
9
+ describe InvisionSupport::NodeName do
10
+ let(:helper) { FakeHelper.new }
11
+
12
+ describe '#filename_in_png' do
13
+ describe 'only one name' do
14
+ it 'returns filename with .png as extension' do
15
+ helper.filename_in_png('+ inbox').must_equal 'inbox.png'
16
+ helper.filename_in_png('* inbox').must_equal 'inbox.png'
17
+ helper.filename_in_png(' + inbox').must_equal 'inbox.png'
18
+ helper.filename_in_png('+ inbox.png').must_equal 'inbox.png'
19
+ helper.filename_in_png('+ inbox.jpg').must_equal 'inbox.jpg.png'
20
+ end
21
+ end
22
+
23
+ describe 'one name with has_at2x' do
24
+ it 'returns filename with @2x.png' do
25
+ helper.filename_in_png('+ inbox', '', true).must_equal 'inbox@2x.png'
26
+ helper.filename_in_png('* inbox', '', true).must_equal 'inbox@2x.png'
27
+ helper.filename_in_png(' + inbox', '', true).must_equal 'inbox@2x.png'
28
+ helper.filename_in_png('+ inbox.png', '', true).must_equal 'inbox@2x.png'
29
+ end
30
+ end
31
+
32
+ describe 'two names' do
33
+ it 'returns the combination of two names' do
34
+ helper.filename_in_png('+ inbox', '& primary', false).must_equal 'inbox-primary.png'
35
+ helper.filename_in_png('+ inbox', ' & primary', false).must_equal 'inbox-primary.png'
36
+ helper.filename_in_png(' + inbox', ' & primary', false).must_equal 'inbox-primary.png'
37
+ helper.filename_in_png(' + inbox', '& primary', false).must_equal 'inbox-primary.png'
38
+ end
39
+ end
40
+ end
41
+
42
+ describe '#icon?' do
43
+ it 'returns true when name has .ico extension' do
44
+ helper.icon?(FakeNode.new('button.ico')).must_equal true
45
+ helper.icon?('button.ico').must_equal true
46
+ end
47
+
48
+ it 'returns false when name does not has .ico extension' do
49
+ helper.icon?(FakeNode.new('button')).must_equal false
50
+ helper.icon?(FakeNode.new('button.ico.jpg')).must_equal false
51
+
52
+ helper.icon?('button').must_equal false
53
+ helper.icon?('button.ico.jpg').must_equal false
54
+ end
55
+ end
56
+
57
+ describe '#asset?' do
58
+ it 'returns true when name has .png, .jpg, .jpeg or .git extension' do
59
+ helper.asset?(FakeNode.new('button.png')).must_equal true
60
+ helper.asset?(FakeNode.new('button.jpg')).must_equal true
61
+ helper.asset?(FakeNode.new('button.jpeg')).must_equal true
62
+ helper.asset?(FakeNode.new('button.gif')).must_equal true
63
+
64
+ helper.asset?('button.png').must_equal true
65
+ helper.asset?('button.jpg').must_equal true
66
+ helper.asset?('button.jpeg').must_equal true
67
+ helper.asset?('button.gif').must_equal true
68
+ end
69
+
70
+ it 'returns false when name does not has .png extension' do
71
+ helper.asset?(FakeNode.new('button')).must_equal false
72
+ helper.asset?(FakeNode.new('button.png.ico')).must_equal false
73
+ helper.asset?(FakeNode.new('button.bmp')).must_equal false
74
+
75
+ helper.asset?('button').must_equal false
76
+ helper.asset?('button.png.ico').must_equal false
77
+ helper.asset?('button.bmp').must_equal false
78
+ end
79
+ end
80
+
81
+ describe '#screen?' do
82
+ it 'returns true when name has + prefix and node is not text node' do
83
+ node1 = FakeNode.new('+ inbox')
84
+ node2 = FakeNode.new(' + inbox')
85
+ node3 = FakeNode.new(' + inbox')
86
+
87
+ helper.screen?(node1).must_equal true
88
+ helper.screen?(node2).must_equal true
89
+ helper.screen?(node3).must_equal true
90
+ end
91
+
92
+ it 'returns false when name has no + prefix' do
93
+ node1 = FakeNode.new('inbox')
94
+ node2 = FakeNode.new('inbox', {})
95
+
96
+ helper.screen?(node1).must_equal false
97
+ helper.screen?(node2).must_equal false
98
+ end
99
+
100
+ it 'returns false when name has + prefix, but node is text node' do
101
+ node = FakeNode.new('+ inbox', {})
102
+
103
+ helper.screen?(node).must_equal false
104
+ end
105
+ end
106
+
107
+ describe '#global?' do
108
+ it 'returns true when name has * prefix' do
109
+ node1 = FakeNode.new('* inbox')
110
+ node2 = FakeNode.new(' * inbox')
111
+ node3 = FakeNode.new(' * inbox')
112
+
113
+ helper.global?(node1).must_equal true
114
+ helper.global?(node2).must_equal true
115
+ helper.global?(node3).must_equal true
116
+ end
117
+
118
+ it 'returns false when name has no * prefix' do
119
+ node = FakeNode.new('inbox')
120
+
121
+ helper.screen?(node).must_equal false
122
+ end
123
+ end
124
+
125
+ describe '#variant?' do
126
+ it 'returns true when name has & prefix' do
127
+ node1 = FakeNode.new('& inbox')
128
+ node2 = FakeNode.new(' & inbox')
129
+ node3 = FakeNode.new(' & inbox')
130
+
131
+ helper.variant?(node1).must_equal true
132
+ helper.variant?(node2).must_equal true
133
+ helper.variant?(node3).must_equal true
134
+ end
135
+
136
+ it 'returns false when name has no * prefix' do
137
+ node = FakeNode.new('inbox')
138
+
139
+ helper.variant?(node).must_equal false
140
+ end
141
+ end
142
+
143
+ describe '#exclude?' do
144
+ it 'returns true when name has & prefix' do
145
+ node1 = FakeNode.new('- inbox')
146
+ node2 = FakeNode.new(' - inbox')
147
+ node3 = FakeNode.new(' - inbox')
148
+
149
+ helper.exclude?(node1).must_equal true
150
+ helper.exclude?(node2).must_equal true
151
+ helper.exclude?(node3).must_equal true
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,94 @@
1
+ require './test/test_helper'
2
+
3
+ class Foo
4
+ include InvisionSupport::Path
5
+ end
6
+
7
+ describe InvisionSupport::Path do
8
+ def create_foo
9
+ foo = Foo.new
10
+ foo.root_path = '/foo'
11
+ foo.screens_path = '/foo/screens'
12
+ foo.images_path = '/foo/assets/images'
13
+ foo.fonts_path = '/foo/assets/fonts'
14
+ foo.icons_path = '/foo/assets/icons'
15
+
16
+ foo
17
+ end
18
+
19
+ let(:foo) { create_foo }
20
+
21
+ describe '#screens_path_in_zip' do
22
+ it 'returns screens path in zip file' do
23
+ foo.screens_path_in_zip.must_equal 'screens'
24
+ end
25
+ end
26
+
27
+ describe '#screen_path' do
28
+ it 'returns screen path' do
29
+ foo.screen_path('+ inbox', '').must_equal '/foo/screens/inbox.png'
30
+ end
31
+ end
32
+
33
+ describe '#screen_path_in_zip' do
34
+ it 'returns screen path in zip' do
35
+ foo.screen_path_in_zip('+ inbox', '').must_equal 'screens/inbox.png'
36
+ end
37
+ end
38
+
39
+ describe '#preview_path' do
40
+ it 'returns preview path' do
41
+ foo.preview_path('/foo/var/sample.sketch').must_equal '/foo/screens/sample.png'
42
+ end
43
+ end
44
+
45
+ describe '#preview_path_in_zip' do
46
+ it 'returns preview path in zip' do
47
+ foo.preview_path_in_zip('/foo/var/sample.sketch', 'new-sample.sketch').must_equal 'screens/new-sample.png'
48
+ end
49
+ end
50
+
51
+ describe '#images_path_in_zip' do
52
+ it 'returns images path in zip file' do
53
+ foo.images_path_in_zip.must_equal 'assets/images'
54
+ end
55
+ end
56
+
57
+ describe '#image_path' do
58
+ it 'returns image path' do
59
+ foo.image_path('button.png', '').must_equal '/foo/assets/images/button.png'
60
+ end
61
+ end
62
+
63
+ describe '#image_path_in_zip' do
64
+ it 'returns image path in zip' do
65
+ foo.image_path_in_zip('+ inbox', '').must_equal 'assets/images/inbox.png'
66
+ foo.image_path_in_zip('inbox.gif.png', '').must_equal 'assets/images/inbox.gif'
67
+ foo.image_path_in_zip('inbox.jpg.png', '').must_equal 'assets/images/inbox.jpg'
68
+ end
69
+ end
70
+
71
+ describe '#fonts_path_in_zip' do
72
+ it 'returns fonts path in zip file' do
73
+ foo.fonts_path_in_zip.must_equal 'assets/fonts'
74
+ end
75
+ end
76
+
77
+ describe '#icons_path_in_zip' do
78
+ it 'returns icons path in zip file' do
79
+ foo.icons_path_in_zip.must_equal 'assets/icons'
80
+ end
81
+ end
82
+
83
+ describe '#icon_path' do
84
+ it 'returns icon path' do
85
+ foo.icon_path('btn.png', '').must_equal '/foo/assets/icons/btn.png'
86
+ end
87
+ end
88
+
89
+ describe '#icon_path_in_zip' do
90
+ it 'returns icon path in zip' do
91
+ foo.icon_path_in_zip('btn.png', '').must_equal 'assets/icons/btn.png'
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,5 @@
1
+ gem 'minitest'
2
+ require 'minitest/autorun'
3
+ require 'pp'
4
+
5
+ require 'invision_support'
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: invision_support
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Sophy Eung
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 5.2.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 5.2.0
55
+ description: A utility library
56
+ email:
57
+ - ungsophy@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - .gitignore
63
+ - Gemfile
64
+ - LICENSE.txt
65
+ - README.md
66
+ - Rakefile
67
+ - invision_support.gemspec
68
+ - lib/invision_support.rb
69
+ - lib/invision_support/filename.rb
70
+ - lib/invision_support/node_name.rb
71
+ - lib/invision_support/path.rb
72
+ - lib/invision_support/version.rb
73
+ - test/lib/invision_support/filename_test.rb
74
+ - test/lib/invision_support/node_name_test.rb
75
+ - test/lib/invision_support/path_test.rb
76
+ - test/test_helper.rb
77
+ homepage: https://github.com/ungsophy/invision_support
78
+ licenses:
79
+ - MIT
80
+ metadata: {}
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubyforge_project:
97
+ rubygems_version: 2.2.2
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: A utility library
101
+ test_files:
102
+ - test/lib/invision_support/filename_test.rb
103
+ - test/lib/invision_support/node_name_test.rb
104
+ - test/lib/invision_support/path_test.rb
105
+ - test/test_helper.rb