- Notifications
You must be signed in to change notification settings - Fork0
Use Sales Force as an Active Model
License
k2p-ed/active_force
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
A ruby gem to interact withSalesForce as if it were Active Record. ItusesRestforce to interact with the API, so it is fast and stable.
Add this line to your application's Gemfile:
gem 'active_force'And then execute:
$ bundleOr install it yourself as:
$ gem install active_forceRestforce is used to interact with the API, so you will need to setupenvironment variables to set up credentials.
SALESFORCE_USERNAME = your-email@gmail.comSALESFORCE_PASSWORD = your-sfdc-passwordSALESFORCE_SECURITY_TOKEN = security-tokenSALESFORCE_CLIENT_ID = your-client-idSALESFORCE_CLIENT_SECRET = your-client-secretYou might be interested indotenv-rails to set up those in development.
Also, you may specify which client to use as a configuration option, which is usefulwhen having to reauthenticate utilizing oauth.
ActiveForce.sfdc_client=Restforce.new(oauth_token:current_user.oauth_token,refresh_token:current_user.refresh_token,instance_url:current_user.instance_url,client_id:SALESFORCE_CLIENT_ID,client_secret:SALESFORCE_CLIENT_SECRET)
classMedication <ActiveForce::SObjectfield:name,from:'Name'field:max_dossage# defaults to "Max_Dossage__c"field:updated_from### You can cast field value using `as`# field :address_primary_active, from: 's360a__AddressPrimaryActive__c', as: :boolean## Available options are :boolean, :int, :double, :percent, :date, :datetime, :string, :base64,# :byte, :ID, :reference, :currency, :textarea, :phone, :url, :email, :combobox, :picklist,# :multipicklist, :anyType, :location, :compound### Table name is inferred from class name.## self.table_name = 'Medication__c' # default one.### Validations#validates:name,:login,:email,presence:true# Use any validation from active record.# validates :text, length: { minimum: 2 }# validates :text, format: { with: /\A[a-zA-Z]+\z/, message: "only allows letters" }# validates :size, inclusion: { in: %w(small medium large),# message: "%{value} is not a valid size" }### Callbacks#before_save:set_as_updated_from_railsprivatedefset_as_updated_from_railsself.updated_from='Rails'endend
Altenative you can try the generator. (requires setting up the connection)
rails generate active_force_model Medication__cclassAccount <ActiveForce::SObjecthas_many:pages# Use optional parameters in the declaration.has_many:medications,scoped_as:->{where("Discontinued__c > ? OR Discontinued__c = ?",Date.today.strftime("%Y-%m-%d"),nil)}has_many:today_log_entries,model:DailyLogEntry,scoped_as:->{where(date:Time.now.in_time_zone.strftime("%Y-%m-%d"))}has_many:labs,scoped_as:->{where("Category__c = 'EMR' AND Date__c <> NULL").order('Date__c DESC')}end
classPage <ActiveForce::SObjectfield:account_id,from:'Account__c'belongs_to:accountend
You can retrieve SObject from the database using chained conditions to buildthe query.
Account.where(web_enable:1,contact_by:['web','email']).limit(2)#=> this will query "SELECT Id, Name, WebEnable__c# FROM Account# WHERE WebEnable__C = 1 AND ContactBy__c IN ('web','email')# LIMIT 2
It is also possible to eager load associations:
Comment.includes(:post)
When using rails, you can generate a model with all the fields you have on your SFDC table by running:
rails g active_force:model <table name>- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new pull request so we can talk about it.
- Once accepted, please add an entry in the CHANGELOG and rebase your changesto squash typos or corrections.
About
Use Sales Force as an Active Model
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Languages
- Ruby99.8%
- HTML0.2%