workspace 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: '0820d45a42fc51c68fe25a77e024015511f6c817'
4
+ data.tar.gz: c6fdef4a4e5b687e706fab4aeba2b0870c0e458d
5
+ SHA512:
6
+ metadata.gz: fe590c87851b4d6d571cd06d028f82c110c4acb6a7c9e602754120a55067bb5d1abe5e209b3e06eb4607d77e4f7d9c18ceed7ba2d274eece5f0b1a6c52ead6bb
7
+ data.tar.gz: b7eb61ba2f04148ef66d23d6517b2332c1b07237d19add8fc0cfc428949f073e84152c3be5b34e90f59b6a77ce2a2492fc410d3c1bf5d1f66f409adc1f1d7f59
@@ -0,0 +1,11 @@
1
+ version: 2
2
+ jobs:
3
+ build:
4
+ docker:
5
+ - image: circleci/ruby:2.4.1-node-browsers
6
+ steps:
7
+ - checkout
8
+ - run: bundle install --jobs=4 --retry=3
9
+ - run: bundle exec rubocop
10
+ - run: bundle exec rspec
11
+ working_directory: ~/repo
@@ -0,0 +1,4 @@
1
+ /coverage
2
+ /modules
3
+ /Gemfile.lock
4
+ /workspace-*.gem
data/.rspec ADDED
@@ -0,0 +1,8 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ RSpec::Core::RakeTask.new(:spec)
4
+
5
+ --default-path ./
6
+ --require ./spec/spec_helper
7
+ --color
8
+ --format d
@@ -0,0 +1,193 @@
1
+ Style/SymbolArray:
2
+ Enabled: true
3
+ EnforcedStyle: brackets
4
+
5
+ # kind_of? is a good way to check a type
6
+ Style/ClassCheck:
7
+ EnforcedStyle: kind_of?
8
+
9
+ # It's better to be more explicit about the type
10
+ Style/BracesAroundHashParameters:
11
+ Enabled: false
12
+
13
+ Style/TernaryParentheses:
14
+ Enabled: true
15
+ EnforcedStyle: require_parentheses_when_complex
16
+
17
+ # specs sometimes have useless assignments, which is fine
18
+ Lint/UselessAssignment:
19
+ Exclude:
20
+ - '**/spec/**/*'
21
+
22
+ # We could potentially enable the 2 below:
23
+ Layout/IndentHash:
24
+ Enabled: false
25
+
26
+ Layout/AlignHash:
27
+ Enabled: false
28
+
29
+ # HoundCI doesn't like this rule
30
+ Layout/DotPosition:
31
+ Enabled: false
32
+
33
+ # We allow !! as it's an easy way to convert ot boolean
34
+ Style/DoubleNegation:
35
+ Enabled: false
36
+
37
+ Style/NumericPredicate:
38
+ Enabled: false
39
+
40
+ # Sometimes we allow a rescue block that doesn't contain code
41
+ Lint/HandleExceptions:
42
+ Enabled: false
43
+
44
+ # Cop supports --auto-correct.
45
+ Lint/UnusedBlockArgument:
46
+ Enabled: false
47
+
48
+ # Needed for $verbose
49
+ Style/GlobalVars:
50
+ Enabled: false
51
+
52
+ # We want to allow class Fastlane::Class
53
+ Style/ClassAndModuleChildren:
54
+ Enabled: false
55
+
56
+ # $? Exit
57
+ Style/SpecialGlobalVars:
58
+ Enabled: false
59
+
60
+ Metrics/AbcSize:
61
+ Enabled: false
62
+
63
+ Metrics/MethodLength:
64
+ Enabled: false
65
+
66
+ Metrics/ModuleLength:
67
+ Enabled: true
68
+ Max: 110
69
+
70
+ Metrics/CyclomaticComplexity:
71
+ Enabled: false
72
+
73
+ Metrics/BlockNesting:
74
+ Max: 4
75
+
76
+ Metrics/BlockLength:
77
+ Enabled: false
78
+
79
+ # The %w might be confusing for new users
80
+ Style/WordArray:
81
+ MinSize: 19
82
+
83
+ # raise and fail are both okay
84
+ Style/SignalException:
85
+ Enabled: false
86
+
87
+ # Better too much 'return' than one missing
88
+ Style/RedundantReturn:
89
+ Enabled: false
90
+
91
+ # Having if in the same line might not always be good
92
+ Style/IfUnlessModifier:
93
+ Enabled: false
94
+
95
+ # and and or is okay
96
+ Style/AndOr:
97
+ Enabled: false
98
+
99
+ # Configuration parameters: CountComments.
100
+ Metrics/ClassLength:
101
+ Max: 400
102
+
103
+ # Configuration parameters: AllowURI, URISchemes.
104
+ Metrics/LineLength:
105
+ Enabled: false
106
+ Max: 370
107
+
108
+ # Configuration parameters: CountKeywordArgs.
109
+ Metrics/ParameterLists:
110
+ Max: 17
111
+
112
+ Metrics/PerceivedComplexity:
113
+ Max: 25
114
+
115
+ # Sometimes it's easier to read without guards
116
+ Style/GuardClause:
117
+ Enabled: false
118
+
119
+ # We allow both " and '
120
+ Style/StringLiterals:
121
+ Enabled: false
122
+
123
+ # something = if something_else
124
+ # that's confusing
125
+ Style/ConditionalAssignment:
126
+ Enabled: false
127
+
128
+ # Better to have too much self than missing a self
129
+ Style/RedundantSelf:
130
+ Enabled: false
131
+
132
+ # e.g.
133
+ # def self.is_supported?(platform)
134
+ # we may never use `platform`
135
+ Lint/UnusedMethodArgument:
136
+ Enabled: false
137
+
138
+ # the let(:key) { ... }
139
+ Lint/ParenthesesAsGroupedExpression:
140
+ Exclude:
141
+ - '**/spec/**/*'
142
+
143
+ # This would reject is_ in front of methods
144
+ # We use `is_supported?` everywhere already
145
+ Style/PredicateName:
146
+ Enabled: false
147
+
148
+ # We allow the $
149
+ Style/PerlBackrefs:
150
+ Enabled: false
151
+
152
+ # Disable '+ should be surrounded with a single space' for xcodebuild_spec.rb
153
+ Layout/SpaceAroundOperators:
154
+ Exclude:
155
+ - '**/spec/actions_specs/xcodebuild_spec.rb'
156
+
157
+ # We're not there yet
158
+ Style/Documentation:
159
+ Enabled: false
160
+
161
+ # Added after upgrade to 0.38.0
162
+ Style/MutableConstant:
163
+ Enabled: false
164
+
165
+ # length > 0 is good
166
+ Style/ZeroLengthPredicate:
167
+ Enabled: false
168
+
169
+ # Adds complexity
170
+ Style/IfInsideElse:
171
+ Enabled: false
172
+
173
+ Style/RescueModifier:
174
+ Enabled: false
175
+
176
+ Style/VariableNumber:
177
+ Enabled: false
178
+
179
+ Style/ClassVars:
180
+ Enabled: false
181
+
182
+ Style/FrozenStringLiteralComment:
183
+ Enabled: false
184
+
185
+ AllCops:
186
+ Exclude:
187
+ - './vendor/**/*'
188
+ - './db/**/*'
189
+ - './tmp/**/*'
190
+ - './log/**/*'
191
+ - './public/**/*'
192
+ - './bin/**/*'
193
+ - './Gemfile'
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,50 @@
1
+ # Workspace for Ruby
2
+
3
+ > Simplified Files and Directories handling
4
+
5
+ [![CircleCI](https://circleci.com/gh/MagLoft/workspace/tree/master.svg?style=svg)](https://circleci.com/gh/MagLoft/workspace/tree/master)
6
+
7
+ ## Description
8
+
9
+ Workspace makes it a breeze to work with files and directories.
10
+
11
+ ## Synopsis
12
+
13
+ Workspace::Dir and Workspace::File are abstractions of the ruby Dir and File classes (although not extending them).
14
+
15
+ When working with files and folders, these abstractions can significantly help with keeping your code simple, consistent and easy to read.
16
+
17
+ ```ruby
18
+ require "workspace"
19
+
20
+ root = Workspace.dir # initializes a workspace in the current directory
21
+ root = Workspace.tmpdir # initializes a new workspace in a temporary directory
22
+
23
+ root.file("file.txt").write("hello world") # creates the file "file.txt" with contents "hello world"
24
+ root.dir("dir").file("file.txt").create # both the file "file.txt" and its parent directory "dir"
25
+
26
+ root.dir("dir").exists? # => true
27
+ root.dir("dir").delete # deletes the physical file, but keeps the Workspace::Dir
28
+ root.dir("dir").exists? # => false
29
+
30
+ file = root.dir("dir1").file("file.txt")
31
+ file.relative_path(root.dir("dir2")) # => "../dir1/file.txt"
32
+
33
+ root.dir("build").clean # delete and re-create directory
34
+
35
+ root.files # [file1, file2, file3...]
36
+ root.directories # [dir1, dir2, dir3...]
37
+ root.children("**/*.rb") # [...] recursive matched files with .rb extension
38
+ ```
39
+
40
+ ## Installation
41
+
42
+ # install globally
43
+ gem install workspace
44
+
45
+ # install using bundler / Gemfile
46
+ gem "workspace"
47
+
48
+ ## License
49
+
50
+ workspace is available under an MIT-style license.
@@ -0,0 +1,22 @@
1
+ require "workspace/dir"
2
+ require "workspace/file"
3
+
4
+ module Workspace
5
+ def self.dir(path = "/")
6
+ Workspace::Dir.new(path)
7
+ end
8
+
9
+ def self.tmpdir(path = nil, &block)
10
+ if block.nil?
11
+ dir(::Dir.mktmpdir(path))
12
+ else
13
+ ::Dir.mktmpdir(path) do |tmppath|
14
+ yield(dir(tmppath))
15
+ end
16
+ end
17
+ end
18
+
19
+ def self.file(path, workspace: ".")
20
+ Workspace::File.new(workspace, path)
21
+ end
22
+ end
@@ -0,0 +1,108 @@
1
+ module Workspace
2
+ class Dir
3
+ attr_accessor :workspace, :path
4
+
5
+ def ==(other)
6
+ other.class == self.class && other.to_s == self.to_s
7
+ end
8
+
9
+ def initialize(workspace, path = "/")
10
+ @workspace = workspace
11
+ @path = path
12
+ end
13
+
14
+ def to_s
15
+ ::File.join(@workspace, @path)
16
+ end
17
+
18
+ def relative_path(relative_dir = nil)
19
+ if relative_dir
20
+ relative_dir = relative_dir.dir if relative_dir.class == Workspace::File
21
+ first = Pathname.new(relative_dir.path)
22
+ second = Pathname.new(path)
23
+ result = second.relative_path_from(first).to_s
24
+ result
25
+ else
26
+ @path.gsub(%r{^/}, "")
27
+ end
28
+ end
29
+
30
+ def absolute_path
31
+ to_s
32
+ end
33
+
34
+ def name
35
+ ::File.basename(to_s)
36
+ end
37
+
38
+ def create
39
+ FileUtils.mkdir_p(to_s)
40
+ self
41
+ end
42
+
43
+ def exists?
44
+ ::File.directory?(to_s)
45
+ end
46
+
47
+ def empty?
48
+ !exists? or children.count == 0
49
+ end
50
+
51
+ def copy(target_dir)
52
+ target_dir.parent_dir.create unless target_dir.parent_dir.exists?
53
+ FileUtils.cp_r(to_s, target_dir.to_s)
54
+ self
55
+ end
56
+
57
+ def move(target_dir)
58
+ target_dir.parent_dir.create unless target_dir.parent_dir.exists?
59
+ FileUtils.mv(to_s, target_dir.to_s)
60
+ self
61
+ end
62
+
63
+ def delete
64
+ FileUtils.rm_rf(to_s)
65
+ end
66
+
67
+ def clean
68
+ delete
69
+ create
70
+ end
71
+
72
+ def file(file_path)
73
+ Workspace::File.new(@workspace, ::File.join(@path, file_path))
74
+ end
75
+
76
+ def dir(dir_path)
77
+ Workspace::Dir.new(@workspace, ::File.join(@path, dir_path))
78
+ end
79
+
80
+ def root_dir
81
+ Workspace::Dir.new(@workspace, "")
82
+ end
83
+
84
+ def parent_dir
85
+ root_dir.dir(::File.expand_path("..", @path))
86
+ end
87
+
88
+ def children(glob = "*", &block)
89
+ entries = []
90
+ ::Dir.chdir(to_s) do
91
+ ::Dir[glob].each do |path|
92
+ entry = dir(path)
93
+ yield entry if block_given?
94
+ entries.push(entry)
95
+ end
96
+ end
97
+ entries
98
+ end
99
+
100
+ def files(&block)
101
+ children("*.*", &block)
102
+ end
103
+
104
+ def directories(&block)
105
+ children("*/", &block)
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,102 @@
1
+ require "mime/types"
2
+
3
+ module Workspace
4
+ class File
5
+ attr_accessor :workspace, :path
6
+
7
+ def initialize(workspace, path)
8
+ @workspace = workspace
9
+ @path = path
10
+ end
11
+
12
+ def to_s
13
+ ::File.join(@workspace, @path)
14
+ end
15
+
16
+ def name
17
+ "#{basename}.#{extension}"
18
+ end
19
+
20
+ def basename
21
+ ::File.basename(path, ".*")
22
+ end
23
+
24
+ def extension
25
+ ::File.extname(to_s).gsub(/^\./, "")
26
+ end
27
+
28
+ def mimetype
29
+ type = MIME::Types.of(name).first
30
+ type ? type.to_s : nil
31
+ end
32
+
33
+ def relative_path(relative_dir = nil)
34
+ if relative_dir
35
+ relative_dir = relative_dir.dir if relative_dir.class == Workspace::File
36
+ first = Pathname.new(relative_dir.path)
37
+ second = Pathname.new(path)
38
+ result = second.relative_path_from(first).to_s
39
+ result
40
+ else
41
+ @path.gsub(%r{^/}, "")
42
+ end
43
+ end
44
+
45
+ def absolute_path
46
+ ::File.absolute_path(to_s)
47
+ end
48
+
49
+ def dir
50
+ Workspace::Dir.new(@workspace, ::File.dirname(@path))
51
+ end
52
+
53
+ def exists?
54
+ ::File.exist?(to_s)
55
+ end
56
+
57
+ def read
58
+ @contents ||= ::File.open(to_s).read
59
+ end
60
+
61
+ def read_json
62
+ JSON.parse(read)
63
+ end
64
+
65
+ def set(data)
66
+ @contents = data
67
+ self
68
+ end
69
+
70
+ def replace(key, value)
71
+ read.gsub!(key, value)
72
+ self
73
+ end
74
+
75
+ def write(data = nil)
76
+ data ||= @contents
77
+ dir.create unless dir.exists?
78
+ ::File.open(to_s, "wb") { |file| file << data }
79
+ self
80
+ end
81
+
82
+ def copy(target_file)
83
+ target_file.dir.create unless target_file.dir.exists?
84
+ FileUtils.cp(to_s, target_file.to_s)
85
+ end
86
+
87
+ def rename(filename)
88
+ FileUtils.mv(to_s, dir.file(filename).to_s) if exists?
89
+ @path = dir.file(filename).path
90
+ end
91
+
92
+ def move(target_file)
93
+ target_file.dir.create unless target_file.dir.exists?
94
+ FileUtils.mv(to_s, target_file.to_s)
95
+ target_file
96
+ end
97
+
98
+ def delete
99
+ FileUtils.rm_f(to_s)
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,3 @@
1
+ module Workspace
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,8 @@
1
+ require 'simplecov'
2
+ require 'simplecov-console'
3
+ SimpleCov.formatter = SimpleCov::Formatter::Console
4
+ SimpleCov.start
5
+
6
+ require "lib/workspace"
7
+ RSpec.configure do |config|
8
+ end
@@ -0,0 +1,120 @@
1
+ describe Workspace::Dir do
2
+ let(:root) { Workspace.tmpdir("workspace-spec") }
3
+ let(:root_with_contents) do
4
+ result = Workspace.tmpdir("workspace-spec")
5
+ result.dir("folder1").create
6
+ result.dir("folder2").create
7
+ result.dir("folder2").file("file1.txt").write("file1")
8
+ result.dir("folder2").file("file2.txt").write("file2")
9
+ result.file("file1.txt").write("file1")
10
+ result.file("file2.txt").write("file2")
11
+ result
12
+ end
13
+
14
+ it "casts to string" do
15
+ expect(root.to_s).to match("workspace-spec")
16
+ end
17
+
18
+ it "returns a relative path" do
19
+ path = root.dir("subdir1").relative_path(root.dir("subdir2"))
20
+ expect(path).to eq("../subdir1")
21
+ expect(root.dir("subdir1").relative_path).to eq("subdir1")
22
+ end
23
+
24
+ it "returns an absolute path" do
25
+ expect(root.absolute_path).to match("workspace-spec")
26
+ end
27
+
28
+ it "returns a name" do
29
+ expect(root.dir("source").name).to eq("source")
30
+ end
31
+
32
+ it "creates a sub-directory" do
33
+ source = root.dir("source").create
34
+ expect(source.exists?).to be_truthy
35
+ end
36
+
37
+ it "checks for existance" do
38
+ source = root.dir("source")
39
+ expect(source.exists?).to be_falsy
40
+ source.create
41
+ expect(source.exists?).to be_truthy
42
+ source.delete
43
+ expect(source.exists?).to be_falsy
44
+ end
45
+
46
+ it "checks if a folder is empty" do
47
+ source = root.dir("source").create
48
+ expect(source.empty?).to be_truthy
49
+ source.file("foobar.txt").write("helloworld")
50
+ expect(source.empty?).to be_falsy
51
+ end
52
+
53
+ it "copies to another folder" do
54
+ source = root.dir("source").create
55
+ target = root.dir("target")
56
+ source.copy(target)
57
+ expect(target.exists?).to be_truthy
58
+ end
59
+
60
+ it "moves to another folder" do
61
+ source = root.dir("source").create
62
+ target = root.dir("target")
63
+ source.move(target)
64
+ expect(target.exists?).to be_truthy
65
+ expect(source.exists?).to be_falsy
66
+ end
67
+
68
+ it "deletes a folder" do
69
+ source = root.dir("source").create
70
+ expect(source.exists?).to be_truthy
71
+ source.delete
72
+ expect(source.exists?).to be_falsy
73
+ end
74
+
75
+ it "cleans a folder" do
76
+ source = root.dir("source").create
77
+ source.file("foobar.txt").write("helloworld")
78
+ expect(source.empty?).to be_falsy
79
+ source.clean
80
+ expect(source.empty?).to be_truthy
81
+ end
82
+
83
+ it "instantiates a file" do
84
+ expect(root.file("sample")).to be_a Workspace::File
85
+ end
86
+
87
+ it "instantiates a directory" do
88
+ expect(root.dir("sample")).to be_a Workspace::Dir
89
+ end
90
+
91
+ it "returns the root dir" do
92
+ expect(root.dir("sample").dir("sample").root_dir).to eq(root)
93
+ end
94
+
95
+ it "returns the parent dir" do
96
+ expect(root.dir("sample").parent_dir).to eq(root)
97
+ end
98
+
99
+ it "returns a list of children" do
100
+ expect(root_with_contents.children.count).to eq 4
101
+ expect(root_with_contents.children("*/").count).to eq 2
102
+ expect(root_with_contents.children("*.txt").count).to eq 2
103
+ expect(root_with_contents.children("**/*.txt").count).to eq 4
104
+ end
105
+
106
+ it "traverses through children" do
107
+ expect { |b| root_with_contents.children("*", &b) }.to yield_control.exactly(4).times
108
+ expect { |b| root_with_contents.children("*/", &b) }.to yield_control.exactly(2).times
109
+ expect { |b| root_with_contents.children("*.txt", &b) }.to yield_control.exactly(2).times
110
+ expect { |b| root_with_contents.children("**/*.txt", &b) }.to yield_control.exactly(4).times
111
+ end
112
+
113
+ it "traverses through files" do
114
+ expect { |b| root_with_contents.files(&b) }.to yield_control.exactly(2).times
115
+ end
116
+
117
+ it "traverses through directories" do
118
+ expect { |b| root_with_contents.directories(&b) }.to yield_control.exactly(2).times
119
+ end
120
+ end
@@ -0,0 +1,97 @@
1
+ describe Workspace::File do
2
+ let(:root) { Workspace.tmpdir("workspace-spec") }
3
+ let(:file) { root.file("sample.txt").write("hello world") }
4
+
5
+ it "casts to string" do
6
+ expect(file.to_s).to match("sample.txt$")
7
+ end
8
+
9
+ it "returns a name" do
10
+ expect(file.name).to eq("sample.txt")
11
+ end
12
+
13
+ it "returns an basename" do
14
+ expect(file.basename).to eq("sample")
15
+ end
16
+
17
+ it "returns an extension" do
18
+ expect(file.extension).to eq("txt")
19
+ end
20
+
21
+ it "returns an mimetype" do
22
+ expect(file.mimetype).to eq("text/plain")
23
+ end
24
+
25
+ it "returns a relative path" do
26
+ relative_dir = root.dir("subdir").create
27
+ expect(file.relative_path(relative_dir)).to eq("../sample.txt")
28
+ file2 = relative_dir.file("sample.txt")
29
+ expect(file2.relative_path).to eq("subdir/sample.txt")
30
+ end
31
+
32
+ it "returns an absolute path" do
33
+ expect(file.absolute_path).to match("workspace-spec")
34
+ end
35
+
36
+ it "returns its directory" do
37
+ expect(file.dir).to eq(root)
38
+ end
39
+
40
+ it "checks for existance" do
41
+ source = root.file("foobar.txt")
42
+ expect(source.exists?).to be_falsy
43
+ source.write("sample")
44
+ expect(source.exists?).to be_truthy
45
+ end
46
+
47
+ it "reads a file" do
48
+ expect(file.read).to eq("hello world")
49
+ end
50
+
51
+ it "reads a json file" do
52
+ json_data = { "foo" => "bar" }
53
+ json_file = root.file("sample.json").write(JSON.dump(json_data))
54
+ expect(json_file.read_json).to eq(json_data)
55
+ end
56
+
57
+ it "sets contents without writing" do
58
+ file.set("hello bar")
59
+ expect(file.read).to eq("hello bar")
60
+ expect(root.file("sample.txt").read).to eq("hello world")
61
+ end
62
+
63
+ it "replaces contents" do
64
+ file.replace("world", "bar")
65
+ expect(file.read).to eq("hello bar")
66
+ end
67
+
68
+ it "writes a file" do
69
+ file.write("hello bar")
70
+ expect(file.read).to eq("hello bar")
71
+ end
72
+
73
+ it "copies a file" do
74
+ result = root.file("result.txt")
75
+ file.copy(result)
76
+ expect(result.exists?).to be_truthy
77
+ expect(file.read).to eq(result.read)
78
+ end
79
+
80
+ it "renames to another name" do
81
+ file.rename("foobar.txt")
82
+ expect(root.file("foobar.txt").exists?).to be_truthy
83
+ expect(root.file("foobar.txt").read).to eq("hello world")
84
+ end
85
+
86
+ it "moves a file to another file" do
87
+ target_file = root.file("foobar.txt")
88
+ file.move(target_file)
89
+ expect(target_file.exists?).to be_truthy
90
+ expect(target_file.read).to eq("hello world")
91
+ end
92
+
93
+ it "deletes a file" do
94
+ file.delete
95
+ expect(file.exists?).to be_falsy
96
+ end
97
+ end
@@ -0,0 +1,24 @@
1
+ describe Workspace do
2
+ it "creates a Workspace::Dir" do
3
+ expect(Workspace.dir(".")).to be_a Workspace::Dir
4
+ end
5
+
6
+ it "creates a temporary Workspace::Dir for a block" do
7
+ Workspace.tmpdir do |dir|
8
+ expect(dir).to be_a Workspace::Dir
9
+ end
10
+ end
11
+
12
+ it "creates a temporary Workspace::Dir without a block" do
13
+ dir = Workspace.tmpdir("sample")
14
+ expect(dir).to be_a Workspace::Dir
15
+ expect(dir.name).to match(/^sample/)
16
+ expect(dir.exists?).to be_truthy
17
+ dir.delete
18
+ expect(dir.exists?).to be_falsy
19
+ end
20
+
21
+ it "creates a Workspace::File" do
22
+ expect(Workspace.file("sample.txt")).to be_a Workspace::File
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'workspace/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "workspace"
7
+ s.version = Workspace::VERSION
8
+ s.licenses = ["BSD-3-Clause"]
9
+ s.platform = Gem::Platform::RUBY
10
+ s.authors = ["Tobias Strebitzer"]
11
+ s.email = ["tobias.strebitzer@magloft.com"]
12
+ s.homepage = "https://github.com/magloft/workspace"
13
+ s.summary = "Simplified Files and Directories handling"
14
+ s.description = "Workspace makes it a breeze to work with files and directories"
15
+ s.required_ruby_version = '~> 2.0'
16
+ s.required_rubygems_version = '~> 2.4'
17
+ s.add_dependency "bundler", '>= 1.3.0', '< 2.0'
18
+ s.add_runtime_dependency "mime-types", "~> 3.1"
19
+ s.add_development_dependency "rspec", "~> 3.6"
20
+ s.add_development_dependency "pry", "~> 0.10"
21
+ s.add_development_dependency "rubocop", "~> 0.49"
22
+ s.add_development_dependency "simplecov", "~> 0.10"
23
+ s.add_development_dependency "simplecov-console", "~> 0.4"
24
+ s.files = `git ls-files`.split("\n")
25
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
26
+ s.require_path = 'lib'
27
+ end
metadata ADDED
@@ -0,0 +1,163 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: workspace
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Tobias Strebitzer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-08-10 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.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 1.3.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: mime-types
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.1'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.1'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.6'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '3.6'
61
+ - !ruby/object:Gem::Dependency
62
+ name: pry
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.10'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '0.10'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rubocop
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.49'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.49'
89
+ - !ruby/object:Gem::Dependency
90
+ name: simplecov
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0.10'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.10'
103
+ - !ruby/object:Gem::Dependency
104
+ name: simplecov-console
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.4'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0.4'
117
+ description: Workspace makes it a breeze to work with files and directories
118
+ email:
119
+ - tobias.strebitzer@magloft.com
120
+ executables: []
121
+ extensions: []
122
+ extra_rdoc_files: []
123
+ files:
124
+ - ".circleci/config.yml"
125
+ - ".gitignore"
126
+ - ".rspec"
127
+ - ".rubocop.yml"
128
+ - Gemfile
129
+ - README.md
130
+ - lib/workspace.rb
131
+ - lib/workspace/dir.rb
132
+ - lib/workspace/file.rb
133
+ - lib/workspace/version.rb
134
+ - spec/spec_helper.rb
135
+ - spec/workspace/dir_spec.rb
136
+ - spec/workspace/file_spec.rb
137
+ - spec/workspace_spec.rb
138
+ - workspace.gemspec
139
+ homepage: https://github.com/magloft/workspace
140
+ licenses:
141
+ - BSD-3-Clause
142
+ metadata: {}
143
+ post_install_message:
144
+ rdoc_options: []
145
+ require_paths:
146
+ - lib
147
+ required_ruby_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '2.0'
152
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - "~>"
155
+ - !ruby/object:Gem::Version
156
+ version: '2.4'
157
+ requirements: []
158
+ rubyforge_project:
159
+ rubygems_version: 2.6.10
160
+ signing_key:
161
+ specification_version: 4
162
+ summary: Simplified Files and Directories handling
163
+ test_files: []