active_force 0.0.7.alfa → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +67 -3
- data/lib/active_force.rb +1 -0
- data/lib/active_force/association.rb +39 -0
- data/lib/active_force/query.rb +94 -0
- data/lib/active_force/sobject.rb +58 -34
- data/lib/active_force/version.rb +1 -1
- data/spec/active_force/association_spec.rb +86 -0
- data/spec/active_query/query_spec.rb +101 -0
- metadata +28 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: acf8e175727f61a6fc99099804f1759a8539d11f
|
4
|
+
data.tar.gz: df64cceabf34fba0ff538283ac59b278b91acf98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f32456704f543150f8d8f7ba414adfade927cea8f3abe9ea0d847f43ab1dd3f74644d15e607961759f98538315fd9d7ab72c872c0284eb9012bc0ce97081237
|
7
|
+
data.tar.gz: c410492b5afdf5e9110415ae1abe3f5869df4806e4d77af708573f335e2fda9143b4bae722a544d64da08f4ad58ec786bc30b344caa90994fc3b6216a2c30642
|
data/README.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
[![Gem Version](http://img.shields.io/gem/v/active_force.svg)](http://badge.fury.io/rb/active_force)
|
2
|
+
[![Code Climate](http://img.shields.io/codeclimate/github/eloyesp/active_force.svg)](https://codeclimate.com/github/eloyesp/active_force)
|
3
|
+
|
4
|
+
# ActiveForce
|
5
|
+
|
6
|
+
A ruby gem to interact with SalesForce as if it were Active Record. It
|
7
|
+
uses Restforce to interact with the API, so it is fast and stable.
|
3
8
|
|
4
9
|
## Installation
|
5
10
|
|
@@ -17,7 +22,66 @@ Or install it yourself as:
|
|
17
22
|
|
18
23
|
## Usage
|
19
24
|
|
20
|
-
|
25
|
+
### Define a class
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
class Page < ActiveForce::SObject
|
29
|
+
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
33
|
+
### Add Attributes
|
34
|
+
```ruby
|
35
|
+
class Page < ActiveForce::SObject
|
36
|
+
#field, attribute name. from: 'Name in Salesforce database'
|
37
|
+
field :id, from: 'Id'
|
38
|
+
field :name, from: 'Medication__c'
|
39
|
+
self.fields = mappings.values
|
40
|
+
#set SalesForce table name.
|
41
|
+
self.table_name = 'Patient_Medication__c'
|
42
|
+
end
|
43
|
+
```
|
44
|
+
### Relation ships
|
45
|
+
|
46
|
+
#### Has Many
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
class Account < ActiveForce::SObject
|
50
|
+
has_many :pages
|
51
|
+
end
|
52
|
+
|
53
|
+
class Page < ActiveForce::SObject
|
54
|
+
field :account_id, from: 'Account__c'
|
55
|
+
end
|
56
|
+
```
|
57
|
+
|
58
|
+
you could send a option parameter in the declaration.
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
class Account < ActiveForce::SObject
|
62
|
+
has_many :medications,
|
63
|
+
where: "(Date_Discontinued__c > #{ Date.today.strftime("%Y-%m-%d") } or Date_Discontinued__c = NULL)"
|
64
|
+
|
65
|
+
has_many :today_log_entrys,
|
66
|
+
model: DailyLogEntry,
|
67
|
+
where: "Date__c = #{ Time.now.in_time_zone.strftime("%Y-%m-%d") }"
|
68
|
+
|
69
|
+
has_many :labs,
|
70
|
+
where: "Category__c = 'EMR' And Date__c <> NULL",
|
71
|
+
order: 'Date__c DESC'
|
72
|
+
end
|
73
|
+
```
|
74
|
+
|
75
|
+
#### Belongs to
|
76
|
+
```ruby
|
77
|
+
class Account < ActiveForce::SObject
|
78
|
+
end
|
79
|
+
|
80
|
+
class Page < ActiveForce::SObject
|
81
|
+
field :account_id, from: 'Account__c'
|
82
|
+
belongs_to :account
|
83
|
+
end
|
84
|
+
```
|
21
85
|
|
22
86
|
## Contributing
|
23
87
|
|
data/lib/active_force.rb
CHANGED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'active_force/query'
|
2
|
+
|
3
|
+
module ActiveForce
|
4
|
+
module Association
|
5
|
+
module ClassMethods
|
6
|
+
def has_many relation_name, options = {}
|
7
|
+
model = options[:model] || relation_model(relation_name)
|
8
|
+
association_name = options[:table] || model.table_name || "#{ model }__c"
|
9
|
+
foreing_key = options[:foreing_key] || default_foreing_key(model, self.name) || table_name
|
10
|
+
|
11
|
+
define_method "#{ relation_name }_query" do
|
12
|
+
query = ActiveForce::Query.new(association_name)
|
13
|
+
query.fields model.fields
|
14
|
+
query.where(options[:where]) if options[:where]
|
15
|
+
query.order(options[:order]) if options[:order]
|
16
|
+
query.limit(options[:limit]) if options[:limit]
|
17
|
+
query.where("#{ foreing_key } = '#{ id }'")
|
18
|
+
query
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def relation_model sym
|
23
|
+
sym.to_s.singularize.camelcase.constantize
|
24
|
+
end
|
25
|
+
|
26
|
+
def default_foreing_key relation_model, model
|
27
|
+
relation_model.mappings["#{model.downcase}_id".to_sym]
|
28
|
+
end
|
29
|
+
|
30
|
+
def belongs_to relation_name, options = {}
|
31
|
+
model = options[:model] || relation_model(relation_name)
|
32
|
+
foreing_key = options[:foreing_key] || "#{ relation_name }_id".to_sym
|
33
|
+
define_method "#{ relation_name }" do
|
34
|
+
model.find(self.send foreing_key)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module ActiveForce
|
2
|
+
class Query
|
3
|
+
attr_reader :table
|
4
|
+
|
5
|
+
attr_accessor :table_id
|
6
|
+
|
7
|
+
def initialize table
|
8
|
+
@table = table
|
9
|
+
@conditions = []
|
10
|
+
@table_id = 'Id'
|
11
|
+
@query_fields = [@table_id]
|
12
|
+
end
|
13
|
+
|
14
|
+
def fields fields_collection = []
|
15
|
+
@query_fields = @query_fields + fields_collection.to_a
|
16
|
+
end
|
17
|
+
|
18
|
+
def all
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_s
|
23
|
+
query = <<-SOQL.gsub(/\s+/, " ").strip
|
24
|
+
SELECT
|
25
|
+
#{ @query_fields.uniq.join(', ') }
|
26
|
+
FROM
|
27
|
+
#{ @table }
|
28
|
+
#{ build_where }
|
29
|
+
#{ build_order }
|
30
|
+
#{ build_limit }
|
31
|
+
#{ build_offset }
|
32
|
+
SOQL
|
33
|
+
query
|
34
|
+
end
|
35
|
+
|
36
|
+
def where condition
|
37
|
+
@conditions << condition
|
38
|
+
self
|
39
|
+
end
|
40
|
+
|
41
|
+
def order order
|
42
|
+
@order = order
|
43
|
+
self
|
44
|
+
end
|
45
|
+
|
46
|
+
def limit size
|
47
|
+
@size = size
|
48
|
+
self
|
49
|
+
end
|
50
|
+
|
51
|
+
def limit_value
|
52
|
+
@size
|
53
|
+
end
|
54
|
+
|
55
|
+
def offset offset
|
56
|
+
@offset = offset
|
57
|
+
self
|
58
|
+
end
|
59
|
+
|
60
|
+
def offset_value
|
61
|
+
@offset
|
62
|
+
end
|
63
|
+
|
64
|
+
def find id
|
65
|
+
where "#{ @table_id } = '#{ id }'"
|
66
|
+
limit 1
|
67
|
+
self
|
68
|
+
end
|
69
|
+
|
70
|
+
def join object_query
|
71
|
+
fields ["(#{ object_query.to_s })"]
|
72
|
+
self
|
73
|
+
end
|
74
|
+
|
75
|
+
protected
|
76
|
+
def build_where
|
77
|
+
unless @conditions.empty?
|
78
|
+
"WHERE #{ @conditions.join(' AND ') }"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def build_limit
|
83
|
+
"LIMIT #{ @size }" if @size
|
84
|
+
end
|
85
|
+
|
86
|
+
def build_order
|
87
|
+
"ORDER BY #{ @order }" if @order
|
88
|
+
end
|
89
|
+
|
90
|
+
def build_offset
|
91
|
+
"OFFSET #{ @offset }" if @offset
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
data/lib/active_force/sobject.rb
CHANGED
@@ -1,14 +1,19 @@
|
|
1
1
|
require 'active_model'
|
2
2
|
require 'active_attr'
|
3
3
|
require 'active_attr/dirty'
|
4
|
+
require 'active_force/query'
|
5
|
+
require 'active_force/association'
|
6
|
+
require 'yaml'
|
4
7
|
|
5
8
|
module ActiveForce
|
6
9
|
class SObject
|
7
10
|
include ActiveAttr::Model
|
8
11
|
include ActiveAttr::Dirty
|
12
|
+
include ActiveForce::Association
|
9
13
|
|
10
|
-
|
11
|
-
|
14
|
+
extend ClassMethods
|
15
|
+
|
16
|
+
STANDARD_TYPES = %w[ Account Contact Opportunity Campaign]
|
12
17
|
|
13
18
|
class_attribute :mappings, :fields, :table_name
|
14
19
|
|
@@ -22,6 +27,14 @@ module ActiveForce
|
|
22
27
|
end
|
23
28
|
end
|
24
29
|
|
30
|
+
def self.has_many relation_name, options = {}
|
31
|
+
super
|
32
|
+
model = options[:model] || relation_model(relation_name)
|
33
|
+
define_method relation_name do
|
34
|
+
model.send_query(self.send "#{ relation_name }_query".to_sym)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
25
38
|
def self.build sobject
|
26
39
|
return nil if sobject.nil?
|
27
40
|
model = new
|
@@ -32,37 +45,51 @@ module ActiveForce
|
|
32
45
|
model
|
33
46
|
end
|
34
47
|
|
48
|
+
def self.query
|
49
|
+
query = ActiveForce::Query.new(table_name)
|
50
|
+
query.fields fields
|
51
|
+
query
|
52
|
+
end
|
53
|
+
|
35
54
|
def self.all
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
SOQL
|
42
|
-
all.map do |mash|
|
55
|
+
send_query query
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.send_query query
|
59
|
+
Client.query(query.to_s).to_a.map do |mash|
|
43
60
|
build mash
|
44
61
|
end
|
45
62
|
end
|
46
63
|
|
47
64
|
def self.find id
|
48
|
-
|
49
|
-
SELECT #{fields.join(', ')}
|
50
|
-
FROM #{table_name}
|
51
|
-
WHERE Id = '#{id}'
|
52
|
-
SOQL
|
65
|
+
send_query(query.find(id)).first
|
53
66
|
end
|
54
67
|
|
55
|
-
def
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
object
|
68
|
+
def update_attributes! attributes = {}
|
69
|
+
assign_attributes attributes
|
70
|
+
return false unless valid?
|
71
|
+
sobject_hash = { 'Id' => id }
|
72
|
+
changed.each do |field|
|
73
|
+
sobject_hash[mappings[field.to_sym]] = read_attribute(field)
|
62
74
|
end
|
75
|
+
result = Client.update! table_name, sobject_hash
|
76
|
+
changed_attributes.clear
|
77
|
+
result
|
63
78
|
end
|
64
79
|
|
65
|
-
def
|
80
|
+
def update_attributes attributes = {}
|
81
|
+
update_attributes! attributes
|
82
|
+
rescue Faraday::Error::ClientError => error
|
83
|
+
Rails.logger.info do
|
84
|
+
"[SFDC] [#{self.class.model_name}] [#{self.class.table_name}] Error while updating, params: #{hash}, error: #{error.inspect}"
|
85
|
+
end
|
86
|
+
errors[:base] << error.message
|
87
|
+
false
|
88
|
+
end
|
89
|
+
|
90
|
+
alias_method :update, :update_attributes
|
91
|
+
|
92
|
+
def create!
|
66
93
|
return false unless valid?
|
67
94
|
hash = {}
|
68
95
|
mappings.map do |field, name_in_sfdc|
|
@@ -71,26 +98,23 @@ module ActiveForce
|
|
71
98
|
end
|
72
99
|
self.id = Client.create! table_name, hash
|
73
100
|
changed_attributes.clear
|
101
|
+
end
|
102
|
+
|
103
|
+
def create
|
104
|
+
create!
|
74
105
|
rescue Faraday::Error::ClientError => error
|
75
|
-
Rails.logger.
|
106
|
+
Rails.logger.info do
|
76
107
|
"[SFDC] [#{self.class.model_name}] [#{self.class.table_name}] Error while creating, params: #{hash}, error: #{error.inspect}"
|
77
108
|
end
|
78
109
|
errors[:base] << error.message
|
79
110
|
false
|
80
111
|
end
|
81
112
|
|
82
|
-
def
|
83
|
-
|
84
|
-
|
85
|
-
sobject_hash = { 'Id' => id }
|
86
|
-
changed.each do |field|
|
87
|
-
sobject_hash[mappings[field.to_sym]] = read_attribute(field)
|
88
|
-
end
|
89
|
-
result = Client.update table_name, sobject_hash
|
90
|
-
changed_attributes.clear if result
|
91
|
-
result
|
113
|
+
def save
|
114
|
+
if persisted?
|
115
|
+
update
|
92
116
|
else
|
93
|
-
|
117
|
+
create
|
94
118
|
end
|
95
119
|
end
|
96
120
|
|
data/lib/active_force/version.rb
CHANGED
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'active_force/association'
|
3
|
+
|
4
|
+
describe ActiveForce::SObject do
|
5
|
+
|
6
|
+
before do
|
7
|
+
class Post < ActiveForce::SObject
|
8
|
+
self.table_name = "Post__c"
|
9
|
+
end
|
10
|
+
|
11
|
+
class Comment < ActiveForce::SObject
|
12
|
+
self.table_name = "Comment__c"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "has_many_query" do
|
17
|
+
|
18
|
+
before do
|
19
|
+
class Post < ActiveForce::SObject
|
20
|
+
has_many :comments
|
21
|
+
end
|
22
|
+
|
23
|
+
@post = Post.new
|
24
|
+
@post.stub(:id).and_return("1")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return a Query object" do
|
28
|
+
@post.comments_query.class.should be ActiveForce::Query
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'to_s' do
|
32
|
+
it "should retrun a OSQL statment" do
|
33
|
+
@post.comments_query.to_s.should ==
|
34
|
+
"SELECT Id FROM Comment__c WHERE Post__c = '1'"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'has_many(options)' do
|
40
|
+
|
41
|
+
it 'should allow to send a different query table name' do
|
42
|
+
class Post < ActiveForce::SObject
|
43
|
+
has_many :comments, { table: 'Comment' }
|
44
|
+
end
|
45
|
+
@post = Post.new
|
46
|
+
@post.stub(:id).and_return("1")
|
47
|
+
@post.comments_query.to_s.should ==
|
48
|
+
"SELECT Id FROM Comment WHERE Post__c = '1'"
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should allow to change the foreing key' do
|
52
|
+
class Post < ActiveForce::SObject
|
53
|
+
has_many :comments, { foreing_key: 'Post' }
|
54
|
+
end
|
55
|
+
@post = Post.new
|
56
|
+
@post.stub(:id).and_return("1")
|
57
|
+
@post.comments_query.to_s.should ==
|
58
|
+
"SELECT Id FROM Comment__c WHERE Post = '1'"
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should allow to add a where condition' do
|
62
|
+
class Post < ActiveForce::SObject
|
63
|
+
has_many :comments, { where: '1 = 1' }
|
64
|
+
end
|
65
|
+
@post = Post.new
|
66
|
+
@post.stub(:id).and_return("1")
|
67
|
+
@post.comments_query.to_s.should ==
|
68
|
+
"SELECT Id FROM Comment__c WHERE 1 = 1 AND Post__c = '1'"
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should use a convention name for the foreing key' do
|
72
|
+
class Comment < ActiveForce::SObject
|
73
|
+
field :post_id, from: 'PostId'
|
74
|
+
end
|
75
|
+
|
76
|
+
class Post < ActiveForce::SObject
|
77
|
+
has_many :comments
|
78
|
+
end
|
79
|
+
|
80
|
+
@post = Post.new
|
81
|
+
@post.stub(:id).and_return("1")
|
82
|
+
@post.comments_query.to_s.should ==
|
83
|
+
"SELECT Id FROM Comment__c WHERE PostId = '1'"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'active_force/query'
|
3
|
+
|
4
|
+
describe ActiveForce::Query do
|
5
|
+
|
6
|
+
before do
|
7
|
+
@query = ActiveForce::Query.new 'table_name'
|
8
|
+
@query.fields ['name', 'etc']
|
9
|
+
end
|
10
|
+
|
11
|
+
after do
|
12
|
+
end
|
13
|
+
|
14
|
+
describe ".all" do
|
15
|
+
it "table should return table name" do
|
16
|
+
@query.all.table.should be(@query.table)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "fields should return fields" do
|
20
|
+
@query.all.fields.should == @query.fields
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe ".all.to_s" do
|
25
|
+
it "should return a query for all records" do
|
26
|
+
@query.all.to_s.should == "SELECT Id, name, etc FROM table_name"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should ignore dupicated attributes in select statment" do
|
30
|
+
@query.fields ['Id', 'name', 'etc']
|
31
|
+
@query.all.to_s.should == "SELECT Id, name, etc FROM table_name"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe ".where" do
|
36
|
+
it "should add a where condition to a query" do
|
37
|
+
@query.where("name like '%a%'").to_s.should == "SELECT Id, name, etc FROM table_name WHERE name like '%a%'"
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should add multiples conditions to a query" do
|
41
|
+
@query.where("condition1 = 1").where("condition2 = 2").to_s.should ==
|
42
|
+
"SELECT Id, name, etc FROM table_name WHERE condition1 = 1 AND condition2 = 2"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe ".limit" do
|
47
|
+
it "should add a limit to a query" do
|
48
|
+
@query.limit("25").to_s.should == "SELECT Id, name, etc FROM table_name LIMIT 25"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe ".limit_value" do
|
53
|
+
it "should return the limit value" do
|
54
|
+
@query.limit(4)
|
55
|
+
@query.limit_value.should == 4
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe ".offset" do
|
60
|
+
it "should add an offset to a query" do
|
61
|
+
@query.offset(4).to_s.should == "SELECT Id, name, etc FROM table_name OFFSET 4"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe ".offset_value" do
|
66
|
+
it "should return the offset value" do
|
67
|
+
@query.offset(4)
|
68
|
+
@query.offset_value.should == 4
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe ".find.to_s" do
|
73
|
+
it "should return a query for 1 record" do
|
74
|
+
@query.find(2).to_s.should == "SELECT Id, name, etc FROM table_name WHERE Id = '2' LIMIT 1"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe ".order" do
|
79
|
+
it "should add a order condition in the statment" do
|
80
|
+
@query.order("name desc").to_s.should == "SELECT Id, name, etc FROM table_name ORDER BY name desc"
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should add a order condition in the statment with WHERE and LIMIT" do
|
84
|
+
@query.where("condition1 = 1").order("name desc").limit(1).to_s.should ==
|
85
|
+
"SELECT Id, name, etc FROM table_name WHERE condition1 = 1 ORDER BY name desc LIMIT 1"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '.join' do
|
90
|
+
|
91
|
+
before do
|
92
|
+
@join = ActiveForce::Query.new 'join_table_name'
|
93
|
+
@join.fields ['name', 'etc']
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'sould add another select statment on the current select' do
|
97
|
+
@query.join(@join).to_s.should ==
|
98
|
+
'SELECT Id, name, etc, (SELECT Id, name, etc FROM join_table_name) FROM table_name'
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_force
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eloy Espinaco
|
@@ -9,90 +9,90 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-05-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: active_attr
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - ~>
|
18
|
+
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '0.8'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - ~>
|
25
|
+
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0.8'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: restforce
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - ~>
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '1.4'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - ~>
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '1.4'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: bundler
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - ~>
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '1.3'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - ~>
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '1.3'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: rake
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- -
|
60
|
+
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '0'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rspec
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- -
|
81
|
+
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: pry
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- -
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
98
|
description: Use SalesForce as an ActiveModel
|
@@ -101,9 +101,9 @@ executables: []
|
|
101
101
|
extensions: []
|
102
102
|
extra_rdoc_files: []
|
103
103
|
files:
|
104
|
-
- .gitignore
|
105
|
-
- .rspec
|
106
|
-
- .travis.yml
|
104
|
+
- ".gitignore"
|
105
|
+
- ".rspec"
|
106
|
+
- ".travis.yml"
|
107
107
|
- CHANGELOG.md
|
108
108
|
- Gemfile
|
109
109
|
- LICENSE.txt
|
@@ -112,14 +112,18 @@ files:
|
|
112
112
|
- active_force.gemspec
|
113
113
|
- lib/active_attr/dirty.rb
|
114
114
|
- lib/active_force.rb
|
115
|
+
- lib/active_force/association.rb
|
116
|
+
- lib/active_force/query.rb
|
115
117
|
- lib/active_force/sobject.rb
|
116
118
|
- lib/active_force/version.rb
|
117
119
|
- lib/generators/active_force/active_force_model/USAGE
|
118
120
|
- lib/generators/active_force/active_force_model/active_force_model_generator.rb
|
119
121
|
- lib/generators/active_force/active_force_model/templates/model.rb.erb
|
122
|
+
- spec/active_force/association_spec.rb
|
120
123
|
- spec/active_force/sobject/table_name_spec.rb
|
121
124
|
- spec/active_force/sobject_spec.rb
|
122
125
|
- spec/active_force_spec.rb
|
126
|
+
- spec/active_query/query_spec.rb
|
123
127
|
- spec/fixtures/sobject/single_sobject_hash.yml
|
124
128
|
- spec/spec_helper.rb
|
125
129
|
- spec/support/fixture_helpers.rb
|
@@ -134,25 +138,28 @@ require_paths:
|
|
134
138
|
- lib
|
135
139
|
required_ruby_version: !ruby/object:Gem::Requirement
|
136
140
|
requirements:
|
137
|
-
- -
|
141
|
+
- - ">="
|
138
142
|
- !ruby/object:Gem::Version
|
139
143
|
version: '0'
|
140
144
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
145
|
requirements:
|
142
|
-
- -
|
146
|
+
- - ">="
|
143
147
|
- !ruby/object:Gem::Version
|
144
|
-
version:
|
148
|
+
version: '0'
|
145
149
|
requirements: []
|
146
150
|
rubyforge_project:
|
147
|
-
rubygems_version: 2.
|
151
|
+
rubygems_version: 2.2.2
|
148
152
|
signing_key:
|
149
153
|
specification_version: 4
|
150
154
|
summary: Help you implement models persisting on Sales Force within Rails using RESTForce
|
151
155
|
test_files:
|
156
|
+
- spec/active_force/association_spec.rb
|
152
157
|
- spec/active_force/sobject/table_name_spec.rb
|
153
158
|
- spec/active_force/sobject_spec.rb
|
154
159
|
- spec/active_force_spec.rb
|
160
|
+
- spec/active_query/query_spec.rb
|
155
161
|
- spec/fixtures/sobject/single_sobject_hash.yml
|
156
162
|
- spec/spec_helper.rb
|
157
163
|
- spec/support/fixture_helpers.rb
|
158
164
|
- spec/support/whizbang.rb
|
165
|
+
has_rdoc:
|