gisture 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/gisture/file.rb +55 -0
- data/lib/gisture/gist.rb +10 -38
- data/lib/gisture/railtie.rb +1 -1
- data/lib/gisture/version.rb +1 -1
- data/lib/gisture.rb +2 -0
- data/spec/gisture/file_spec.rb +44 -0
- data/spec/gisture/gist_spec.rb +6 -64
- data/spec/spec_helper.rb +8 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 03e7d1d1abd295d696f903a9017625ef7f4523f0
|
4
|
+
data.tar.gz: 4e7d8c8ddb6570ff3b8c1f366f791701e0640bdc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1e213b93a08f3c3a552e28e8fb9900a7f504c5bdd1de7265901a8480dd8d869a85f2f6132bcf42cdd1ec88a85013c69d50da5f0fa91bc311a7f30e579990dc5
|
7
|
+
data.tar.gz: 8f9244489caba893887c4ecac9352b881e75f1b241c9a7c858cf3d41e8ad0a439dbf926d2dc3eaf7d8352e111b1148c7ae22549e1c2bf443432d796524cba5ea
|
data/lib/gisture/file.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
|
3
|
+
module Gisture
|
4
|
+
class File
|
5
|
+
attr_reader :file, :basename
|
6
|
+
|
7
|
+
def require!(&block)
|
8
|
+
required = require tempfile.path
|
9
|
+
unlink_tempfile
|
10
|
+
block_given? ? yield : required
|
11
|
+
end
|
12
|
+
|
13
|
+
def load!(&block)
|
14
|
+
loaded = load tempfile.path
|
15
|
+
unlink_tempfile
|
16
|
+
block_given? ? yield : loaded
|
17
|
+
end
|
18
|
+
|
19
|
+
def eval!(&block)
|
20
|
+
clean_room = Evaluator.new(content)
|
21
|
+
clean_room.instance_eval &block if block_given?
|
22
|
+
clean_room
|
23
|
+
end
|
24
|
+
|
25
|
+
def tempfile
|
26
|
+
@tempfile ||= begin
|
27
|
+
file = Tempfile.new([basename, filename, ::File.extname(filename)].compact, Gisture.configuration.tmpdir)
|
28
|
+
file.write(content)
|
29
|
+
file.close
|
30
|
+
file
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def unlink_tempfile
|
35
|
+
tempfile.unlink
|
36
|
+
@tempfile = nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def method_missing(meth, *args, &block)
|
40
|
+
return file.send(meth, *args, &block) if file.respond_to?(meth)
|
41
|
+
super
|
42
|
+
end
|
43
|
+
|
44
|
+
def respond_to_missing?(meth, include_private=false)
|
45
|
+
file.respond_to?(meth, include_private)
|
46
|
+
end
|
47
|
+
|
48
|
+
protected
|
49
|
+
|
50
|
+
def initialize(file, basename=nil)
|
51
|
+
@file = file
|
52
|
+
@basename = basename
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/gisture/gist.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'tempfile'
|
2
|
-
|
3
1
|
module Gisture
|
4
2
|
class Gist
|
5
3
|
attr_reader :filename, :gist_id, :strategy, :version
|
@@ -17,21 +15,15 @@ module Gisture
|
|
17
15
|
end
|
18
16
|
|
19
17
|
def require!(&block)
|
20
|
-
|
21
|
-
unlink_tempfile
|
22
|
-
block_given? ? yield : required
|
18
|
+
file.require! &block
|
23
19
|
end
|
24
20
|
|
25
21
|
def load!(&block)
|
26
|
-
|
27
|
-
unlink_tempfile
|
28
|
-
block_given? ? yield : loaded
|
22
|
+
file.load! &block
|
29
23
|
end
|
30
24
|
|
31
25
|
def eval!(&block)
|
32
|
-
|
33
|
-
clean_room.instance_eval &block if block_given?
|
34
|
-
clean_room
|
26
|
+
file.eval! &block
|
35
27
|
end
|
36
28
|
|
37
29
|
def github
|
@@ -51,24 +43,18 @@ module Gisture
|
|
51
43
|
end
|
52
44
|
end
|
53
45
|
|
54
|
-
def
|
55
|
-
return @
|
46
|
+
def file
|
47
|
+
return @file unless @file.nil?
|
56
48
|
|
57
49
|
if gist.files.count > 1
|
58
50
|
raise ArgumentError, "You must specify a filename if your gist contains more than one file" if filename.nil?
|
59
|
-
gist.files
|
60
|
-
|
61
|
-
end
|
62
|
-
raise ArgumentError, "The filename '#{filename}' was not found in the list of files for the gist '#{gist_id}'" if @gist_file.nil?
|
51
|
+
@file = Gisture::File.new(gist.files[filename], gist_id)
|
52
|
+
raise ArgumentError, "The filename '#{filename}' was not found in the list of files for the gist '#{gist_id}'" if @file.nil?
|
63
53
|
else
|
64
|
-
@
|
54
|
+
@file = Gisture::File.new(gist.files.first[1], gist_id)
|
65
55
|
end
|
66
56
|
|
67
|
-
@
|
68
|
-
end
|
69
|
-
|
70
|
-
def raw
|
71
|
-
gist_file[1].content
|
57
|
+
@file
|
72
58
|
end
|
73
59
|
|
74
60
|
def strategy=(strat)
|
@@ -76,15 +62,6 @@ module Gisture
|
|
76
62
|
@strategy = strat.to_sym
|
77
63
|
end
|
78
64
|
|
79
|
-
def tempfile
|
80
|
-
@tempfile ||= begin
|
81
|
-
file = Tempfile.new([gist_id, File.extname(gist_file[0])], Gisture.configuration.tmpdir)
|
82
|
-
file.write(raw)
|
83
|
-
file.close
|
84
|
-
file
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
65
|
def to_h
|
89
66
|
{ gist_id: gist_id,
|
90
67
|
version: version,
|
@@ -95,7 +72,7 @@ module Gisture
|
|
95
72
|
protected
|
96
73
|
|
97
74
|
def initialize(gist, strategy: nil, filename: nil, version: nil)
|
98
|
-
self.strategy = strategy ||
|
75
|
+
self.strategy = strategy || Gisture.configuration.strategy
|
99
76
|
@filename = filename
|
100
77
|
|
101
78
|
if gist.match(/[^a-f0-9]+/i) # non-hex chars, probably a URL
|
@@ -108,11 +85,6 @@ module Gisture
|
|
108
85
|
|
109
86
|
end
|
110
87
|
|
111
|
-
def unlink_tempfile
|
112
|
-
tempfile.unlink
|
113
|
-
@tempfile = nil
|
114
|
-
end
|
115
|
-
|
116
88
|
def parse_gist_url(gist_url)
|
117
89
|
case gist_url.to_s
|
118
90
|
when GIST_URL_WITH_VERSION_REGEX
|
data/lib/gisture/railtie.rb
CHANGED
data/lib/gisture/version.rb
CHANGED
data/lib/gisture.rb
CHANGED
@@ -3,6 +3,7 @@ require 'github_api'
|
|
3
3
|
require 'gisture/github_api/client/gists'
|
4
4
|
require 'gisture/version'
|
5
5
|
require 'gisture/evaluator'
|
6
|
+
require 'gisture/file'
|
6
7
|
require 'gisture/gist'
|
7
8
|
require 'gisture/railtie' if defined?(Rails)
|
8
9
|
|
@@ -20,6 +21,7 @@ module Gisture
|
|
20
21
|
config.user = nil # global user used in requets if none provided
|
21
22
|
config.org = nil # global organization used in request if none provided
|
22
23
|
|
24
|
+
config.strategy = :eval # default execution strategy
|
23
25
|
config.tmpdir = Dir.tmpdir # location to store gist tempfiles
|
24
26
|
end
|
25
27
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Gisture::Gist do
|
4
|
+
subject { Gisture::File.new(Gisture::Gist.new(TEST_GIST_ID).gist.files.first[1], TEST_GIST_ID) }
|
5
|
+
|
6
|
+
it "delegates missing methods to the file hash" do
|
7
|
+
expect(subject.respond_to?(:content)).to be_true
|
8
|
+
expect(subject.respond_to?(:filename)).to be_true
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#tempfile" do
|
12
|
+
it "creates and returns a tempfile" do
|
13
|
+
expect(subject.tempfile).to be_a(Tempfile)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "uses the gist_id as the base of the filename" do
|
17
|
+
matched = ::File.basename(subject.tempfile.path).match(/#{TEST_GIST_ID}/)
|
18
|
+
expect(matched).to_not be_nil
|
19
|
+
end
|
20
|
+
|
21
|
+
it "uses the same extension as the gist's filename" do
|
22
|
+
expect(::File.extname(subject.tempfile.path)).to eql(::File.extname(subject.file.filename))
|
23
|
+
end
|
24
|
+
|
25
|
+
it "creates the file in the configured tempdir" do
|
26
|
+
tmp_path = ::File.join(::File.dirname(__FILE__), '../', 'tmp')
|
27
|
+
begin
|
28
|
+
FileUtils.mkdir_p tmp_path
|
29
|
+
Gisture.configure do |config|
|
30
|
+
config.tmpdir = tmp_path
|
31
|
+
end
|
32
|
+
|
33
|
+
expect(::File.dirname(subject.tempfile.path)).to eql(tmp_path)
|
34
|
+
rescue => e
|
35
|
+
raise e
|
36
|
+
ensure
|
37
|
+
Gisture.configure do |config|
|
38
|
+
config.tmpdir = Dir.tmpdir
|
39
|
+
end
|
40
|
+
FileUtils.rm_rf tmp_path
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/spec/gisture/gist_spec.rb
CHANGED
@@ -1,13 +1,5 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
TEST_GIST_ID = "520b474ea0248d1a0a74"
|
4
|
-
TEST_GIST_URL = "https://gist.github.com/markrebec/520b474ea0248d1a0a74"
|
5
|
-
TEST_GIST_VERSION = "49a9d887eeb8c723ab23deddfbbb75d4b70e8014"
|
6
|
-
TEST_GIST_VERSION_URL = "https://gist.github.com/markrebec/520b474ea0248d1a0a74/49a9d887eeb8c723ab23deddfbbb75d4b70e8014"
|
7
|
-
TEST_GIST_FILENAME = "test.rb"
|
8
|
-
MULTI_FILE_TEST_GIST_ID = "0417bf78a7c2b825b4ef"
|
9
|
-
MULTI_FILE_TEST_GIST_FILENAMES = ['file_one.rb', 'file_two.rb']
|
10
|
-
|
11
3
|
RSpec.describe Gisture::Gist do
|
12
4
|
context "when passing a gist ID" do
|
13
5
|
it "sets the gist ID as the gist_id" do
|
@@ -87,20 +79,14 @@ RSpec.describe Gisture::Gist do
|
|
87
79
|
end
|
88
80
|
end
|
89
81
|
|
90
|
-
describe "#
|
91
|
-
it "returns
|
92
|
-
expect(Gisture::Gist.new(TEST_GIST_ID).
|
93
|
-
end
|
94
|
-
|
95
|
-
it "contains the filename and file object" do
|
96
|
-
gist = Gisture::Gist.new(TEST_GIST_ID)
|
97
|
-
expect(gist.gist_file[0]).to eql(TEST_GIST_FILENAME)
|
98
|
-
expect(gist.gist_file[1]).to be_a(Hashie::Mash)
|
82
|
+
describe "#file" do
|
83
|
+
it "returns a Gisture::File" do
|
84
|
+
expect(Gisture::Gist.new(TEST_GIST_ID).file).to be_a(Gisture::File)
|
99
85
|
end
|
100
86
|
|
101
87
|
context "when a gist contains a single file" do
|
102
88
|
it "returns the file" do
|
103
|
-
expect(Gisture::Gist.new(TEST_GIST_ID).
|
89
|
+
expect(Gisture::Gist.new(TEST_GIST_ID).file.filename).to eql(TEST_GIST_FILENAME)
|
104
90
|
end
|
105
91
|
end
|
106
92
|
|
@@ -109,7 +95,7 @@ RSpec.describe Gisture::Gist do
|
|
109
95
|
subject { Gisture::Gist.new(MULTI_FILE_TEST_GIST_ID, filename: MULTI_FILE_TEST_GIST_FILENAMES.sample) }
|
110
96
|
|
111
97
|
it "returns the specified file" do
|
112
|
-
expect(subject.
|
98
|
+
expect(subject.file.filename).to eql(subject.filename)
|
113
99
|
end
|
114
100
|
end
|
115
101
|
|
@@ -117,20 +103,12 @@ RSpec.describe Gisture::Gist do
|
|
117
103
|
subject { Gisture::Gist.new(MULTI_FILE_TEST_GIST_ID) }
|
118
104
|
|
119
105
|
it "raises an ArgumentError" do
|
120
|
-
expect { subject.
|
106
|
+
expect { subject.file }.to raise_exception(ArgumentError)
|
121
107
|
end
|
122
108
|
end
|
123
109
|
end
|
124
110
|
end
|
125
111
|
|
126
|
-
describe "#raw" do
|
127
|
-
subject { Gisture::Gist.new(TEST_GIST_ID) }
|
128
|
-
|
129
|
-
it "returns the raw gist content" do
|
130
|
-
expect(subject.raw).to eql(subject.gist_file[1].content)
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
112
|
describe "#strategy=" do
|
135
113
|
subject { Gisture::Gist.new(TEST_GIST_ID) }
|
136
114
|
|
@@ -148,42 +126,6 @@ RSpec.describe Gisture::Gist do
|
|
148
126
|
end
|
149
127
|
end
|
150
128
|
|
151
|
-
describe "#tempfile" do
|
152
|
-
subject { Gisture::Gist.new(TEST_GIST_ID) }
|
153
|
-
|
154
|
-
it "creates and returns a tempfile" do
|
155
|
-
expect(subject.tempfile).to be_a(Tempfile)
|
156
|
-
end
|
157
|
-
|
158
|
-
it "uses the gist_id as the base of the filename" do
|
159
|
-
matched = File.basename(subject.tempfile.path).match(/#{TEST_GIST_ID}/)
|
160
|
-
expect(matched).to_not be_nil
|
161
|
-
end
|
162
|
-
|
163
|
-
it "uses the same extension as the gist's filename" do
|
164
|
-
expect(File.extname(subject.tempfile.path)).to eql(File.extname(subject.gist_file[0]))
|
165
|
-
end
|
166
|
-
|
167
|
-
it "creates the file in the configured tempdir" do
|
168
|
-
tmp_path = File.join(File.dirname(__FILE__), '../', 'tmp')
|
169
|
-
begin
|
170
|
-
FileUtils.mkdir_p tmp_path
|
171
|
-
Gisture.configure do |config|
|
172
|
-
config.tmpdir = tmp_path
|
173
|
-
end
|
174
|
-
|
175
|
-
expect(File.dirname(subject.tempfile.path)).to eql(tmp_path)
|
176
|
-
rescue => e
|
177
|
-
raise e
|
178
|
-
ensure
|
179
|
-
Gisture.configure do |config|
|
180
|
-
config.tmpdir = Dir.tmpdir
|
181
|
-
end
|
182
|
-
FileUtils.rm_rf tmp_path
|
183
|
-
end
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
129
|
describe "#to_h" do
|
188
130
|
subject { Gisture::Gist.new(TEST_GIST_ID, filename: "test.rb") }
|
189
131
|
|
data/spec/spec_helper.rb
CHANGED
@@ -9,6 +9,14 @@ Gisture.configure do |config|
|
|
9
9
|
config.oauth_token = ENV['GITHUB_OAUTH_TOKEN']
|
10
10
|
end
|
11
11
|
|
12
|
+
TEST_GIST_ID = "520b474ea0248d1a0a74"
|
13
|
+
TEST_GIST_URL = "https://gist.github.com/markrebec/520b474ea0248d1a0a74"
|
14
|
+
TEST_GIST_VERSION = "49a9d887eeb8c723ab23deddfbbb75d4b70e8014"
|
15
|
+
TEST_GIST_VERSION_URL = "https://gist.github.com/markrebec/520b474ea0248d1a0a74/49a9d887eeb8c723ab23deddfbbb75d4b70e8014"
|
16
|
+
TEST_GIST_FILENAME = "test.rb"
|
17
|
+
MULTI_FILE_TEST_GIST_ID = "0417bf78a7c2b825b4ef"
|
18
|
+
MULTI_FILE_TEST_GIST_FILENAMES = ['file_one.rb', 'file_two.rb']
|
19
|
+
|
12
20
|
RSpec.configure do |config|
|
13
21
|
#config.before(:suite) do
|
14
22
|
# ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gisture
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Rebec
|
@@ -75,6 +75,7 @@ extra_rdoc_files: []
|
|
75
75
|
files:
|
76
76
|
- lib/gisture.rb
|
77
77
|
- lib/gisture/evaluator.rb
|
78
|
+
- lib/gisture/file.rb
|
78
79
|
- lib/gisture/gist.rb
|
79
80
|
- lib/gisture/github_api/client/gists.rb
|
80
81
|
- lib/gisture/railtie.rb
|
@@ -86,6 +87,7 @@ files:
|
|
86
87
|
- spec/gists/method.rb
|
87
88
|
- spec/gists/simple.rb
|
88
89
|
- spec/gisture/evaluator_spec.rb
|
90
|
+
- spec/gisture/file_spec.rb
|
89
91
|
- spec/gisture/gist_spec.rb
|
90
92
|
- spec/gisture_spec.rb
|
91
93
|
- spec/spec_helper.rb
|
@@ -121,6 +123,7 @@ test_files:
|
|
121
123
|
- spec/gists/method.rb
|
122
124
|
- spec/gists/simple.rb
|
123
125
|
- spec/gisture/evaluator_spec.rb
|
126
|
+
- spec/gisture/file_spec.rb
|
124
127
|
- spec/gisture/gist_spec.rb
|
125
128
|
- spec/gisture_spec.rb
|
126
129
|
- spec/spec_helper.rb
|