active_force 0.0.7.alfa → 0.1.1
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/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
|
+
[](http://badge.fury.io/rb/active_force)
|
2
|
+
[](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:
|