gisture 0.0.1 → 0.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1591610180e1a8283d0e621e169aee97c6ea087f
4
- data.tar.gz: 62806f3fdbc112e0bd160040ca477e10f220bcea
3
+ metadata.gz: 63c10c0aa36f2eb7e0eb2db5a9c37476717f1e74
4
+ data.tar.gz: f30b1941956c1bc94d58f3f352e11760c29de1df
5
5
  SHA512:
6
- metadata.gz: f2780e01f675f1dfc795f61ebb196f4eb1342930d264727317fae8dc42b59a199a3739efb4624dfda4e4823aadb23a78ebb234aedc7d0094d4529c44580dc28d
7
- data.tar.gz: b1c91b023e303e80abc77a8b97c172c3722b56ae188277fec2117048ce07fe873623d1e4b4f038646ebab066ccc224bb13b954e65c87f4061589f04604cb7fdb
6
+ metadata.gz: e030f036dd3f9e4351f351d7ed029f0cd0427fac14785206389b7240e88a1f70fc6a96279c9e0edf10ed66fa9c655f3f34e8d3f25554c0eeb9761907797e8904
7
+ data.tar.gz: 90d4c4092cd55cae22442c3cb589eee2608a5b70409f5f5c23655c22cc45e0430699a4d4393da760f770c38f4beca0f633d7e08749a3f33703568bc62a2da0cf
@@ -0,0 +1,12 @@
1
+ module Gisture
2
+ class Evaluator
3
+ attr_reader :raw
4
+
5
+ protected
6
+
7
+ def initialize(raw)
8
+ @raw = raw
9
+ instance_eval { eval raw }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,100 @@
1
+ require 'tempfile'
2
+
3
+ module Gisture
4
+ class Gist
5
+ attr_reader :filename, :gist_id, :strategy
6
+
7
+ STRATEGIES = [:eval, :load, :require]
8
+
9
+ def self.run!(gist_id: nil, strategy: nil, filename: nil, &block)
10
+ new(gist_id: gist_id, strategy: strategy, filename: filename).run!(&block)
11
+ end
12
+
13
+ def run!(&block)
14
+ send "#{strategy}!".to_sym, &block
15
+ end
16
+
17
+ def require!(&block)
18
+ required = require tempfile.path
19
+ unlink_tempfile
20
+ block_given? ? yield : required
21
+ end
22
+
23
+ def load!(&block)
24
+ loaded = load tempfile.path
25
+ unlink_tempfile
26
+ block_given? ? yield : loaded
27
+ end
28
+
29
+ def eval!(&block)
30
+ clean_room = Evaluator.new(raw)
31
+ clean_room.instance_eval &block if block_given?
32
+ clean_room
33
+ end
34
+
35
+ def github
36
+ @github ||= begin
37
+ github_config = Gisture::GITHUB_CONFIG_OPTS.map { |key| [key, Gisture.configuration.send(key)] }.to_h
38
+ Github.new(github_config)
39
+ end
40
+ end
41
+
42
+ def gist
43
+ @gist ||= github.gists.get(gist_id)
44
+ end
45
+
46
+ def gist_file
47
+ return @gist_file unless @gist_file.nil?
48
+
49
+ if gist.files.count > 1
50
+ raise ArgumentError, "You must specify a filename if your gist contains more than one file" if filename.nil?
51
+ gist.files.each do |file|
52
+ @gist_file = file if file[0] == filename
53
+ end
54
+ raise ArgumentError, "The filename '#{filename}' was not found in the list of files for the gist '#{gist_id}'" if @gist_file.nil?
55
+ else
56
+ @gist_file = gist.files.first
57
+ end
58
+
59
+ @gist_file
60
+ end
61
+
62
+ def raw
63
+ gist_file[1].content
64
+ end
65
+
66
+ def strategy=(strat)
67
+ raise ArgumentError, "Invalid strategy '#{strat}'. Must be one of #{STRATEGIES.join(', ')}" unless STRATEGIES.include?(strat.to_sym)
68
+ @strategy = strat.to_sym
69
+ end
70
+
71
+ def tempfile
72
+ @tempfile ||= begin
73
+ file = Tempfile.new([gist_id, '.rb'], Gisture.configuration.tmpdir)
74
+ file.write(raw)
75
+ file.close
76
+ file
77
+ end
78
+ end
79
+
80
+ def to_h
81
+ { gist_id: gist_id,
82
+ strategy: strategy,
83
+ filename: filename }
84
+ end
85
+
86
+ protected
87
+
88
+ def initialize(gist_id: nil, strategy: nil, filename: nil)
89
+ raise ArgumentError, "Invalid gist_id" if gist_id.nil?
90
+ @gist_id = gist_id
91
+ @filename = filename
92
+ self.strategy = strategy || :eval
93
+ end
94
+
95
+ def unlink_tempfile
96
+ tempfile.unlink
97
+ @tempfile = nil
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,7 @@
1
+ module Gisture
2
+ class Railtie < Rails::Railtie
3
+ rake_tasks do
4
+ Dir[File.join(File.dirname(__FILE__),'../tasks/*.rake')].each { |f| load f }
5
+ end
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module Gisture
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
data/lib/gisture.rb CHANGED
@@ -1,4 +1,32 @@
1
+ require 'canfig'
2
+ require 'github_api'
1
3
  require 'gisture/version'
4
+ require 'gisture/evaluator'
5
+ require 'gisture/gist'
6
+ require 'gisture/railtie' if defined?(Rails)
2
7
 
3
8
  module Gisture
9
+ include Canfig::Module
10
+
11
+ GITHUB_CONFIG_OPTS = [:basic_auth, :oauth_token, :client_id, :client_secret, :user, :org]
12
+
13
+ configure do |config|
14
+ # config options for the github_api gem
15
+ config.basic_auth = nil # user:password string
16
+ config.oauth_token = nil # oauth authorization token
17
+ config.client_id = nil # oauth client id
18
+ config.client_secret = nil # oauth client secret
19
+ config.user = nil # global user used in requets if none provided
20
+ config.org = nil # global organization used in request if none provided
21
+
22
+ config.tmpdir = Dir.tmpdir # location to store gist tempfiles
23
+ end
24
+
25
+ def self.new(gist_id, strategy=nil, filename=nil)
26
+ Gisture::Gist.new(gist_id: gist_id, strategy: strategy, filename: filename)
27
+ end
28
+
29
+ def self.run(gist_id, strategy=nil, filename=nil, &block)
30
+ new(gist_id, strategy, filename).run!(&block)
31
+ end
4
32
  end
@@ -0,0 +1,9 @@
1
+ require 'gisture'
2
+
3
+ namespace 'gisture' do
4
+ desc 'Run a github gist in a rake task'
5
+ task :run, [:gist_id, :strategy, :filename, :runner] => :environment do |t,args|
6
+ runner = Proc.new { eval(args.runner.to_s) }
7
+ Gisture.run(args.gist_id, args.strategy, args.filename, &runner)
8
+ end
9
+ end
@@ -0,0 +1,16 @@
1
+ class GistTestClass
2
+ def self.gist_testing
3
+ 10.times do
4
+ puts "Hello"
5
+ end
6
+ end
7
+
8
+ def gist_testing
9
+ 10.times do
10
+ puts "Hello"
11
+ end
12
+ end
13
+ end
14
+
15
+ GistTestClass.gist_testing
16
+ GistTestClass.new.gist_testing
@@ -0,0 +1,7 @@
1
+ def gist_testing
2
+ 10.times do
3
+ puts "Hello"
4
+ end
5
+ end
6
+
7
+ gist_testing
@@ -0,0 +1,13 @@
1
+ class GistTestClass
2
+ def self.gist_testing
3
+ 10.times do
4
+ puts "Hello"
5
+ end
6
+ end
7
+
8
+ def gist_testing
9
+ 10.times do
10
+ puts "Hello"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ def gist_testing
2
+ 10.times do
3
+ puts "Hello"
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ 10.times do
2
+ puts "Hello"
3
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Gisture::Evaluator do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Gisture::Gist do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Gisture do
4
+ end
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.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Rebec
@@ -10,6 +10,34 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2015-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: canfig
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: github_api
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: rake
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -46,7 +74,19 @@ extensions: []
46
74
  extra_rdoc_files: []
47
75
  files:
48
76
  - lib/gisture.rb
77
+ - lib/gisture/evaluator.rb
78
+ - lib/gisture/gist.rb
79
+ - lib/gisture/railtie.rb
49
80
  - lib/gisture/version.rb
81
+ - lib/tasks/gisture.rake
82
+ - spec/gists/called_class.rb
83
+ - spec/gists/called_method.rb
84
+ - spec/gists/class.rb
85
+ - spec/gists/method.rb
86
+ - spec/gists/simple.rb
87
+ - spec/gisture/evaluator_spec.rb
88
+ - spec/gisture/gist_spec.rb
89
+ - spec/gisture_spec.rb
50
90
  - spec/spec_helper.rb
51
91
  homepage: http://github.com/markrebec/gisture
52
92
  licenses: []
@@ -72,4 +112,12 @@ signing_key:
72
112
  specification_version: 4
73
113
  summary: Execute one-off gists inline or in the background.
74
114
  test_files:
115
+ - spec/gists/called_class.rb
116
+ - spec/gists/called_method.rb
117
+ - spec/gists/class.rb
118
+ - spec/gists/method.rb
119
+ - spec/gists/simple.rb
120
+ - spec/gisture/evaluator_spec.rb
121
+ - spec/gisture/gist_spec.rb
122
+ - spec/gisture_spec.rb
75
123
  - spec/spec_helper.rb