spigot 0.2.2 → 0.3.0
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 +4 -4
- data/.gitignore +1 -0
- data/README.md +5 -3
- data/Rakefile +1 -5
- data/examples/active_record.rb +18 -28
- data/examples/model.rb +4 -4
- data/examples/multi_resource.rb +61 -0
- data/lib/spigot.rb +11 -7
- data/lib/spigot/active_record.rb +28 -33
- data/lib/spigot/base.rb +5 -12
- data/lib/spigot/configuration.rb +1 -1
- data/lib/spigot/map/base.rb +4 -5
- data/lib/spigot/map/definition.rb +19 -9
- data/lib/spigot/map/option.rb +1 -13
- data/lib/spigot/map/resource.rb +11 -6
- data/lib/spigot/map/service.rb +5 -5
- data/lib/spigot/patch.rb +5 -5
- data/lib/spigot/proxy.rb +32 -20
- data/lib/spigot/record.rb +40 -13
- data/lib/spigot/translator.rb +27 -43
- data/lib/spigot/version.rb +2 -1
- data/script/active_record.rb +35 -0
- data/script/console.rb +19 -2
- data/spec/fixtures/data/active_user.rb +2 -4
- data/spec/fixtures/data/post.rb +1 -5
- data/spec/fixtures/data/user.rb +5 -5
- data/spec/fixtures/mappings/active_user_map.rb +11 -5
- data/spec/fixtures/mappings/post_map.rb +6 -18
- data/spec/fixtures/mappings/user_map.rb +1 -5
- data/spec/spec_helper.rb +13 -6
- data/spec/spigot/active_record_spec.rb +12 -5
- data/spec/spigot/base_spec.rb +2 -14
- data/spec/spigot/configuration_spec.rb +7 -7
- data/spec/spigot/map/base_spec.rb +12 -6
- data/spec/spigot/map/definition_spec.rb +51 -4
- data/spec/spigot/map/resource_spec.rb +4 -4
- data/spec/spigot/map/service_spec.rb +19 -14
- data/spec/spigot/patch_spec.rb +12 -0
- data/spec/spigot/proxy_spec.rb +17 -17
- data/spec/spigot/record_spec.rb +75 -4
- data/spec/spigot/spigot_spec.rb +9 -4
- data/spec/spigot/translator_spec.rb +86 -87
- data/spigot.gemspec +9 -10
- metadata +33 -47
- data/lib/spigot/config/spigot/github.yml +0 -7
- data/spec/support/active_record.rb +0 -15
data/lib/spigot/version.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
ActiveRecord::Base.establish_connection({
|
2
|
+
adapter: 'sqlite3',
|
3
|
+
database: ':memory:'
|
4
|
+
})
|
5
|
+
|
6
|
+
ActiveRecord::Schema.define do
|
7
|
+
self.verbose = false
|
8
|
+
|
9
|
+
create_table :active_users, force: true do |t|
|
10
|
+
t.integer :github_id
|
11
|
+
t.integer :profile_id
|
12
|
+
t.string :name
|
13
|
+
t.string :username
|
14
|
+
t.string :token
|
15
|
+
end
|
16
|
+
|
17
|
+
create_table :posts, force: true do |t|
|
18
|
+
t.integer :active_user_id
|
19
|
+
t.string :title
|
20
|
+
t.text :body
|
21
|
+
t.timestamps
|
22
|
+
end
|
23
|
+
|
24
|
+
create_table :events, force: true do |t|
|
25
|
+
t.string :github_id
|
26
|
+
t.integer :active_user_id
|
27
|
+
t.string :name
|
28
|
+
t.timestamps
|
29
|
+
end
|
30
|
+
|
31
|
+
create_table :profiles, force: true do |t|
|
32
|
+
t.string :image_url
|
33
|
+
t.timestamps
|
34
|
+
end
|
35
|
+
end
|
data/script/console.rb
CHANGED
@@ -15,6 +15,17 @@ Spigot.resource(:active_user) do
|
|
15
15
|
"https://github.com/#{value}"
|
16
16
|
end
|
17
17
|
end
|
18
|
+
options do
|
19
|
+
primary_key :username
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
Spigot.resource(:post) do
|
24
|
+
headline :title
|
25
|
+
content :body
|
26
|
+
options do
|
27
|
+
primary_key :username
|
28
|
+
end
|
18
29
|
end
|
19
30
|
|
20
31
|
Spigot.service(:twitter) do
|
@@ -25,10 +36,16 @@ Spigot.service(:twitter) do
|
|
25
36
|
end
|
26
37
|
|
27
38
|
ActiveRecord::Base.logger = Spigot.logger
|
28
|
-
require File.join(Spigot.root, '
|
39
|
+
require File.join(Spigot.root, 'script', 'active_record')
|
29
40
|
|
30
41
|
class ActiveUser < ActiveRecord::Base
|
31
42
|
include Spigot::Base
|
43
|
+
has_many :posts
|
44
|
+
end
|
45
|
+
|
46
|
+
class Post < ActiveRecord::Base
|
47
|
+
include Spigot::Base
|
48
|
+
belongs_to :user
|
32
49
|
end
|
33
50
|
|
34
|
-
|
51
|
+
ActiveUser.create(name: 'Matt', username: 'mwerner', token: 'abc123')
|
@@ -2,15 +2,13 @@ module Spigot
|
|
2
2
|
module Data
|
3
3
|
class ActiveUser
|
4
4
|
class << self
|
5
|
-
|
6
5
|
def basic
|
7
|
-
{full_name: 'Dean Martin', login: 'classyasfuck', auth_token: '123abc'}
|
6
|
+
{ full_name: 'Dean Martin', login: 'classyasfuck', auth_token: '123abc' }
|
8
7
|
end
|
9
8
|
|
10
9
|
def alt
|
11
|
-
{full_name: 'Frank Sinatra', login: 'livetilidie', auth_token: '987zyx'}
|
10
|
+
{ full_name: 'Frank Sinatra', login: 'livetilidie', auth_token: '987zyx' }
|
12
11
|
end
|
13
|
-
|
14
12
|
end
|
15
13
|
end
|
16
14
|
end
|
data/spec/fixtures/data/post.rb
CHANGED
@@ -3,11 +3,7 @@ module Spigot
|
|
3
3
|
class Post
|
4
4
|
class << self
|
5
5
|
def basic
|
6
|
-
{'title' => 'Brief Article', 'body' => 'lorem ipsum'}
|
7
|
-
end
|
8
|
-
|
9
|
-
def alt
|
10
|
-
{'title' => 'Regular Article', 'body' => 'dolor sit amet', 'author' => 'Dean Martin'}
|
6
|
+
{ 'title' => 'Brief Article', 'body' => 'lorem ipsum' }
|
11
7
|
end
|
12
8
|
end
|
13
9
|
end
|
data/spec/fixtures/data/user.rb
CHANGED
@@ -3,11 +3,11 @@ module Spigot
|
|
3
3
|
class User
|
4
4
|
class << self
|
5
5
|
def basic
|
6
|
-
{'id' => '123', 'full_name' => 'Dean Martin', 'login' => 'classyasfuck'}
|
6
|
+
{ 'id' => '123', 'full_name' => 'Dean Martin', 'login' => 'classyasfuck' }
|
7
7
|
end
|
8
8
|
|
9
9
|
def alt
|
10
|
-
{'full_name' => 'Frank Sinatra', 'login' => 'livetilidie', 'auth_token' => '456bcd'}
|
10
|
+
{ 'full_name' => 'Frank Sinatra', 'login' => 'livetilidie', 'auth_token' => '456bcd' }
|
11
11
|
end
|
12
12
|
|
13
13
|
def full
|
@@ -19,7 +19,7 @@ module Spigot
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def nested_array
|
22
|
-
{'account' => 'Rockafella', 'users' => array, 'count' => 2}
|
22
|
+
{ 'account' => 'Rockafella', 'users' => array, 'count' => 2 }
|
23
23
|
end
|
24
24
|
|
25
25
|
def nested
|
@@ -27,13 +27,13 @@ module Spigot
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def double_nested
|
30
|
-
full.merge('login' => {'contact' => login_info, 'last_seen_ip' => '127.0.0.1'})
|
30
|
+
full.merge('login' => { 'contact' => login_info, 'last_seen_ip' => '127.0.0.1' })
|
31
31
|
end
|
32
32
|
|
33
33
|
private
|
34
34
|
|
35
35
|
def login_info
|
36
|
-
{'email' => 'dino@amore.io', 'user_name' => 'classyasfuck'}
|
36
|
+
{ 'email' => 'dino@amore.io', 'user_name' => 'classyasfuck' }
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Spigot
|
2
2
|
module Mapping
|
3
3
|
class ActiveUser
|
4
|
-
|
5
4
|
def self.stub
|
6
5
|
template do
|
7
6
|
login :username
|
@@ -24,7 +23,16 @@ module Spigot
|
|
24
23
|
full_name :name
|
25
24
|
options do
|
26
25
|
primary_key :username
|
27
|
-
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.invalid_primary_key
|
31
|
+
template do
|
32
|
+
login :username
|
33
|
+
full_name :name
|
34
|
+
options do
|
35
|
+
primary_key :doesnotexist
|
28
36
|
end
|
29
37
|
end
|
30
38
|
end
|
@@ -36,7 +44,6 @@ module Spigot
|
|
36
44
|
auth_token :token
|
37
45
|
options do
|
38
46
|
primary_key :token
|
39
|
-
foreign_key :auth_token
|
40
47
|
end
|
41
48
|
end
|
42
49
|
end
|
@@ -47,12 +54,11 @@ module Spigot
|
|
47
54
|
Spigot.define do
|
48
55
|
service :github do
|
49
56
|
resource :active_user do
|
50
|
-
|
57
|
+
instance_eval(&block)
|
51
58
|
end
|
52
59
|
end
|
53
60
|
end
|
54
61
|
end
|
55
|
-
|
56
62
|
end
|
57
63
|
end
|
58
64
|
end
|
@@ -1,22 +1,10 @@
|
|
1
|
-
module Spigot
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
Spigot.define do
|
9
|
-
service :github do
|
10
|
-
resource 'wrapper/post' do
|
11
|
-
title :title
|
12
|
-
body :description
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
1
|
+
module Spigot::Mapping::Post
|
2
|
+
def self.basic
|
3
|
+
Spigot.service(:github) do
|
4
|
+
resource 'wrapper/post' do
|
5
|
+
title :title
|
6
|
+
body :description
|
17
7
|
end
|
18
|
-
|
19
|
-
|
20
8
|
end
|
21
9
|
end
|
22
10
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Spigot
|
2
2
|
module Mapping
|
3
3
|
class User
|
4
|
-
|
5
4
|
def self.basic
|
6
5
|
template do
|
7
6
|
full_name :name
|
@@ -116,7 +115,6 @@ module Spigot
|
|
116
115
|
login :username
|
117
116
|
options do
|
118
117
|
primary_key :username
|
119
|
-
foreign_key :login
|
120
118
|
end
|
121
119
|
end
|
122
120
|
end
|
@@ -127,7 +125,6 @@ module Spigot
|
|
127
125
|
login :username
|
128
126
|
options do
|
129
127
|
primary_key :username
|
130
|
-
foreign_key :login
|
131
128
|
end
|
132
129
|
end
|
133
130
|
end
|
@@ -138,12 +135,11 @@ module Spigot
|
|
138
135
|
Spigot.define do
|
139
136
|
service :github do
|
140
137
|
resource :user do
|
141
|
-
|
138
|
+
instance_eval(&block)
|
142
139
|
end
|
143
140
|
end
|
144
141
|
end
|
145
142
|
end
|
146
|
-
|
147
143
|
end
|
148
144
|
end
|
149
145
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -5,21 +5,28 @@ require 'rspec'
|
|
5
5
|
require 'spigot'
|
6
6
|
require 'hashie'
|
7
7
|
require 'active_record'
|
8
|
-
require "test/unit"
|
9
|
-
require "mocha/setup"
|
10
8
|
|
11
|
-
|
12
|
-
|
13
|
-
end
|
9
|
+
require File.join(Spigot.root, 'script/active_record.rb')
|
10
|
+
Dir[File.join(Spigot.root, 'spec/fixtures/**/*.rb')].each { |f| require f }
|
14
11
|
|
15
12
|
# Mocked Classes
|
16
|
-
User = Class.new(Hashie::Mash)
|
13
|
+
User = Class.new(Hashie::Mash) do
|
14
|
+
include Spigot::Base
|
15
|
+
end
|
17
16
|
Post = Class.new(Hashie::Mash)
|
18
17
|
|
19
18
|
class ActiveUser < ActiveRecord::Base
|
20
19
|
include Spigot::Base
|
21
20
|
end
|
22
21
|
|
22
|
+
class Event < ActiveRecord::Base
|
23
|
+
include Spigot::Base
|
24
|
+
end
|
25
|
+
|
26
|
+
class Profile < ActiveRecord::Base
|
27
|
+
include Spigot::Base
|
28
|
+
end
|
29
|
+
|
23
30
|
module Wrapper
|
24
31
|
Post = Class.new(Hashie::Mash)
|
25
32
|
end
|
@@ -1,16 +1,23 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Spigot::ActiveRecord do
|
4
|
-
let(:subject){ActiveUser}
|
5
|
-
let(:data){ Spigot::Data::ActiveUser.basic.merge(id: '987') }
|
6
|
-
let(:user){ subject.create(name: 'Dean Martin', username: 'classyasfuck') }
|
4
|
+
let(:subject) { ActiveUser }
|
5
|
+
let(:data) { Spigot::Data::ActiveUser.basic.merge(id: '987') }
|
6
|
+
let(:user) { subject.create(name: 'Dean Martin', username: 'classyasfuck') }
|
7
7
|
|
8
8
|
context 'with invalid mapping' do
|
9
9
|
it 'requires the primary key to be accurate' do
|
10
10
|
expect {
|
11
|
-
subject.find_by_api(
|
11
|
+
subject.find_by_api(full_name: 'Dean Martin')
|
12
12
|
}.to raise_error(Spigot::MissingResourceError)
|
13
13
|
end
|
14
|
+
|
15
|
+
it 'requires valid primary_keys' do
|
16
|
+
Spigot::Mapping::ActiveUser.invalid_primary_key
|
17
|
+
expect {
|
18
|
+
subject.find_by_api(github: { full_name: 'Dean Martin' })
|
19
|
+
}.to raise_error(Spigot::InvalidSchemaError)
|
20
|
+
end
|
14
21
|
end
|
15
22
|
|
16
23
|
context 'with valid mapping' do
|
@@ -38,7 +45,7 @@ describe Spigot::ActiveRecord do
|
|
38
45
|
end
|
39
46
|
|
40
47
|
context '#create_by_api' do
|
41
|
-
before{ Spigot::Mapping::ActiveUser.with_options }
|
48
|
+
before { Spigot::Mapping::ActiveUser.with_options }
|
42
49
|
it 'creates a record' do
|
43
50
|
record = subject.create_by_api(github: data)
|
44
51
|
record.id.should_not be_nil
|
data/spec/spigot/base_spec.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Spigot::Base do
|
4
|
-
let(:data){Spigot::Data::User.basic}
|
5
|
-
before{ Spigot::Mapping::ActiveUser.stub }
|
4
|
+
let(:data) { Spigot::Data::User.basic }
|
5
|
+
before { Spigot::Mapping::ActiveUser.stub }
|
6
6
|
|
7
7
|
context '#new_by_api' do
|
8
8
|
it 'instantiates a record' do
|
@@ -11,18 +11,6 @@ describe Spigot::Base do
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
context '#formatted_api_data' do
|
15
|
-
it 'calls format on the translator' do
|
16
|
-
Spigot::Translator.any_instance.should_receive(:format)
|
17
|
-
ActiveUser.formatted_api_data(github: data)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'returns formatted data' do
|
21
|
-
Spigot::Translator.any_instance.should_receive(:format)
|
22
|
-
formatted = ActiveUser.formatted_api_data(github: data)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
14
|
context '#spigot' do
|
27
15
|
it 'returns a spigot proxy' do
|
28
16
|
ActiveUser.spigot(:github).should be_a_kind_of(Spigot::Proxy)
|
@@ -8,24 +8,24 @@ describe Spigot::Configuration do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
context 'access' do
|
11
|
-
it
|
11
|
+
it 'is callable from .configure' do
|
12
12
|
Spigot.configure do |c|
|
13
13
|
expect(c).to be_kind_of(Spigot::Configuration)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
context 'options' do
|
18
|
-
let(:map){{'user' => {a: 1}}}
|
19
|
-
let(:options_key){'my_special_key'}
|
18
|
+
let(:map) { { 'user' => { a: 1 } } }
|
19
|
+
let(:options_key) { 'my_special_key' }
|
20
20
|
|
21
|
-
it
|
22
|
-
Spigot.configure{|config| config.options_key = options_key }
|
21
|
+
it 'is able to set the options_key' do
|
22
|
+
Spigot.configure { |config| config.options_key = options_key }
|
23
23
|
expect(Spigot.config.options_key).to eq(options_key)
|
24
24
|
end
|
25
25
|
|
26
|
-
it
|
26
|
+
it 'is able to set the logger' do
|
27
27
|
logger = Logger.new(STDOUT)
|
28
|
-
Spigot.configure{|config| config.logger = logger }
|
28
|
+
Spigot.configure { |config| config.logger = logger }
|
29
29
|
expect(Spigot.config.logger).to eq(logger)
|
30
30
|
end
|
31
31
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Spigot::Map::Base do
|
4
|
-
let(:subject){Spigot::Map::Base.new}
|
5
|
-
let(:service){Spigot::Map::Service.new(:github)}
|
4
|
+
let(:subject) { Spigot::Map::Base.new }
|
5
|
+
let(:service) { Spigot::Map::Service.new(:github) }
|
6
6
|
|
7
7
|
context '#initialize' do
|
8
8
|
it 'initializes a services array' do
|
@@ -10,10 +10,16 @@ describe Spigot::Map::Base do
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
+
context '#inspect' do
|
14
|
+
it 'returns a string' do
|
15
|
+
subject.inspect.should match(/Spigot::Map::Base/)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
13
19
|
context '.define' do
|
14
20
|
it 'accepts a block' do
|
15
21
|
Spigot::Map::Service.should_receive(:class_eval)
|
16
|
-
subject.define{'foo'}
|
22
|
+
subject.define { 'foo' }
|
17
23
|
end
|
18
24
|
|
19
25
|
it 'does not require a block' do
|
@@ -48,8 +54,8 @@ describe Spigot::Map::Base do
|
|
48
54
|
end
|
49
55
|
|
50
56
|
it 'allows multiple updates' do
|
51
|
-
subject.define{ service(:github) }
|
52
|
-
subject.define{ service(:twitter) }
|
57
|
+
subject.define { service(:github) }
|
58
|
+
subject.define { service(:twitter) }
|
53
59
|
|
54
60
|
subject.services.length.should eq(2)
|
55
61
|
end
|
@@ -72,7 +78,7 @@ describe Spigot::Map::Base do
|
|
72
78
|
context '.to_hash' do
|
73
79
|
it 'returns a hash of current services' do
|
74
80
|
subject.update(:github, service)
|
75
|
-
subject.to_hash.should eq(
|
81
|
+
subject.to_hash.should eq(github: {})
|
76
82
|
end
|
77
83
|
end
|
78
84
|
|