netsuite_rails 0.3.3 → 0.3.4
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/Gemfile +0 -3
- data/lib/netsuite_rails/record_sync.rb +2 -0
- data/lib/netsuite_rails/record_sync/poll_manager.rb +31 -2
- data/lib/netsuite_rails/sync_trigger.rb +1 -0
- data/lib/netsuite_rails/transformations.rb +5 -2
- data/lib/netsuite_rails/url_helper.rb +2 -0
- data/netsuite_rails.gemspec +1 -1
- data/spec/models/poll_manager_spec.rb +68 -1
- data/spec/models/transformations_spec.rb +4 -0
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: f2f2197544aa8884365eda94c0b6d23069430e0e
         | 
| 4 | 
            +
              data.tar.gz: 65012b398bc868048b9de452df38820ac102f383
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c486c007a6d97f0633e82a2d37a7b57321de8115e0a99c80331978b86137b649820bc7bd28c17c6223adfaca23ccf11c1df2fcf2cc1dca4f8409362cdce2b6f2
         | 
| 7 | 
            +
              data.tar.gz: 87ef0a329e7ed7af87244d1b058dde0f390e5d887628dc200ee0f49c8d79f4aec525c879da73111003ced628549294d35261315adf0c453e0c0d27264b073423
         | 
    
        data/Gemfile
    CHANGED
    
    
| @@ -60,7 +60,7 @@ module NetSuiteRails | |
| 60 60 | 
             
                    search_criteria = {
         | 
| 61 61 | 
             
                      criteria: {
         | 
| 62 62 | 
             
                        basic: poll_basic_criteria(klass, opts)
         | 
| 63 | 
            -
                      }
         | 
| 63 | 
            +
                      }.merge(poll_join_criteria(klass, opts))
         | 
| 64 64 | 
             
                    }
         | 
| 65 65 |  | 
| 66 66 | 
             
                    if opts[:saved_search_id]
         | 
| @@ -85,7 +85,7 @@ module NetSuiteRails | |
| 85 85 | 
             
                    }.merge(opts)
         | 
| 86 86 |  | 
| 87 87 | 
             
                    # allow custom criteria to be passed directly to the sync call
         | 
| 88 | 
            -
                    criteria = opts[:criteria] | 
| 88 | 
            +
                    criteria = extract_basic_search_criteria(opts[:criteria])
         | 
| 89 89 |  | 
| 90 90 | 
             
                    # allow custom criteria from the model level
         | 
| 91 91 | 
             
                    criteria += klass.netsuite_sync_options[:criteria] || []
         | 
| @@ -112,6 +112,35 @@ module NetSuiteRails | |
| 112 112 | 
             
                    criteria
         | 
| 113 113 | 
             
                  end
         | 
| 114 114 |  | 
| 115 | 
            +
                  def poll_join_criteria(klass, opts)
         | 
| 116 | 
            +
                    extract_advanced_search_criteria(opts[:criteria])
         | 
| 117 | 
            +
                  end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                  def extract_advanced_search_criteria(criteria_option)
         | 
| 120 | 
            +
                    if criteria_option.is_a?(Hash)
         | 
| 121 | 
            +
                      criteria_option = criteria_option.dup
         | 
| 122 | 
            +
                      criteria_option.delete(:basic)
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                      criteria_option
         | 
| 125 | 
            +
                    elsif criteria_option.is_a?(Array) || criteria_option.nil?
         | 
| 126 | 
            +
                      {}
         | 
| 127 | 
            +
                    else
         | 
| 128 | 
            +
                      # TODO unhandled criteria type
         | 
| 129 | 
            +
                    end
         | 
| 130 | 
            +
                  end
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                  def extract_basic_search_criteria(criteria_option)
         | 
| 133 | 
            +
                    # TODO use `kind_of?` instead?
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                    if criteria_option.is_a?(Hash)
         | 
| 136 | 
            +
                      criteria_option[:basic] || []
         | 
| 137 | 
            +
                    elsif criteria_option.is_a?(Array)
         | 
| 138 | 
            +
                      criteria_option
         | 
| 139 | 
            +
                    else
         | 
| 140 | 
            +
                      # TODO unhandled criteria class
         | 
| 141 | 
            +
                    end
         | 
| 142 | 
            +
                  end
         | 
| 143 | 
            +
             | 
| 115 144 | 
             
                  def process_search_results(klass, opts, search)
         | 
| 116 145 | 
             
                    opts = {
         | 
| 117 146 | 
             
                      skip_existing: false,
         | 
| @@ -79,6 +79,7 @@ module NetSuiteRails | |
| 79 79 |  | 
| 80 80 | 
             
                  sync_options = local.netsuite_sync_options
         | 
| 81 81 |  | 
| 82 | 
            +
                  # TODO should migrate to push_if for better self-documentation
         | 
| 82 83 | 
             
                  # :if option is a block that returns a boolean
         | 
| 83 84 | 
             
                  return if sync_options.has_key?(:if) && !local.instance_exec(&sync_options[:if])
         | 
| 84 85 |  | 
| @@ -49,8 +49,11 @@ module NetSuiteRails | |
| 49 49 | 
             
                        return nil
         | 
| 50 50 | 
             
                      end
         | 
| 51 51 |  | 
| 52 | 
            -
                       | 
| 53 | 
            -
             | 
| 52 | 
            +
                      email = email.
         | 
| 53 | 
            +
                        # an error will be thrown if period is on the end of a sentence
         | 
| 54 | 
            +
                        gsub(/[^A-Za-z]+$/, '').
         | 
| 55 | 
            +
                        # any commas in the email with throw an error
         | 
| 56 | 
            +
                        gsub(',', '')
         | 
| 54 57 |  | 
| 55 58 | 
             
                      email
         | 
| 56 59 | 
             
                    else
         | 
| @@ -62,6 +62,8 @@ module NetSuiteRails | |
| 62 62 | 
             
                    "/accounting/transactions/transaction.nl?id=#{internal_id}"
         | 
| 63 63 | 
             
                  elsif NetSuite::Records::Account == record_class
         | 
| 64 64 | 
             
                    "/accounting/account/account.nl?id=#{internal_id}"
         | 
| 65 | 
            +
                  elsif NetSuite::Records::Subsidiary == record_class
         | 
| 66 | 
            +
                    "/common/otherlists/subsidiarytype.nl?id=#{internal_id}"
         | 
| 65 67 | 
             
                  else
         | 
| 66 68 | 
             
                    # TODO unsupported record type error?
         | 
| 67 69 | 
             
                  end
         | 
    
        data/netsuite_rails.gemspec
    CHANGED
    
    | @@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) | |
| 4 4 |  | 
| 5 5 | 
             
            Gem::Specification.new do |s|
         | 
| 6 6 | 
             
              s.name          = "netsuite_rails"
         | 
| 7 | 
            -
              s.version       = "0.3. | 
| 7 | 
            +
              s.version       = "0.3.4"
         | 
| 8 8 | 
             
              s.authors       = ["Michael Bianco"]
         | 
| 9 9 | 
             
              s.email         = ["mike@cliffsidemedia.com"]
         | 
| 10 10 | 
             
              s.summary       = %q{Write Rails applications that integrate with NetSuite}
         | 
| @@ -22,7 +22,8 @@ describe NetSuiteRails::RecordSync::PollManager do | |
| 22 22 | 
             
              end
         | 
| 23 23 |  | 
| 24 24 | 
             
              it "should poll list sync objects" do
         | 
| 25 | 
            -
              	allow(NetSuite::Records::CustomList).to receive(:get) | 
| 25 | 
            +
              	allow(NetSuite::Records::CustomList).to receive(:get)
         | 
| 26 | 
            +
                  .and_return(OpenStruct.new(custom_value_list: OpenStruct.new(custom_value: [])))
         | 
| 26 27 |  | 
| 27 28 | 
             
              	StandardList.netsuite_poll(import_all: true)
         | 
| 28 29 |  | 
| @@ -51,4 +52,70 @@ describe NetSuiteRails::RecordSync::PollManager do | |
| 51 52 |  | 
| 52 53 | 
             
                expect(record).to have_received(:netsuite_pull)
         | 
| 53 54 | 
             
              end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
              describe 'custom search criteria' do
         | 
| 57 | 
            +
                let(:basic_search_field) do
         | 
| 58 | 
            +
                  {
         | 
| 59 | 
            +
                    field: 'type',
         | 
| 60 | 
            +
                    operator: 'anyOf',
         | 
| 61 | 
            +
                    value: [ '_itemFulfillment' ]
         | 
| 62 | 
            +
                  }
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                let(:advanced_search_criteria) do
         | 
| 66 | 
            +
                  {
         | 
| 67 | 
            +
                    createdFromJoin: [
         | 
| 68 | 
            +
                      {
         | 
| 69 | 
            +
                        field: 'type',
         | 
| 70 | 
            +
                        operator: 'anyOf',
         | 
| 71 | 
            +
                        value: [ '_transferOrder' ]
         | 
| 72 | 
            +
                      }
         | 
| 73 | 
            +
                    ]
         | 
| 74 | 
            +
                  }
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                it 'should merge basic search criteria' do
         | 
| 78 | 
            +
                  expect(NetSuite::Records::Customer).to receive(:search)
         | 
| 79 | 
            +
                    .with(hash_including(
         | 
| 80 | 
            +
                      criteria: hash_including(
         | 
| 81 | 
            +
                        basic: array_including(
         | 
| 82 | 
            +
                          basic_search_field
         | 
| 83 | 
            +
                        )
         | 
| 84 | 
            +
                      )
         | 
| 85 | 
            +
                    ))
         | 
| 86 | 
            +
                    .and_return(OpenStruct.new(results: []))
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                  NetSuiteRails::RecordSync::PollManager.poll(StandardRecord,
         | 
| 89 | 
            +
                    criteria: [ basic_search_field ]
         | 
| 90 | 
            +
                  )
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                it 'merges advanced and basic criteria' do
         | 
| 94 | 
            +
                  expect(NetSuite::Records::Customer).to receive(:search)
         | 
| 95 | 
            +
                    .with(hash_including(
         | 
| 96 | 
            +
                      criteria: {
         | 
| 97 | 
            +
                        basic: array_including(
         | 
| 98 | 
            +
                          basic_search_field
         | 
| 99 | 
            +
                        )
         | 
| 100 | 
            +
                      }.merge(advanced_search_criteria)
         | 
| 101 | 
            +
                    ))
         | 
| 102 | 
            +
                    .and_return(OpenStruct.new(results: []))
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                  NetSuiteRails::RecordSync::PollManager.poll(StandardRecord,
         | 
| 105 | 
            +
                    criteria: {
         | 
| 106 | 
            +
                      basic: [ basic_search_field ]
         | 
| 107 | 
            +
                    }.merge(advanced_search_criteria)
         | 
| 108 | 
            +
                  )
         | 
| 109 | 
            +
                end
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                it 'should merge join/advanced criteria' do
         | 
| 112 | 
            +
                  expect(NetSuite::Records::Customer).to receive(:search)
         | 
| 113 | 
            +
                    .with(hash_including(criteria: hash_including(advanced_search_criteria)))
         | 
| 114 | 
            +
                    .and_return(OpenStruct.new(results: []))
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                  NetSuiteRails::RecordSync::PollManager.poll(StandardRecord,
         | 
| 117 | 
            +
                    criteria: advanced_search_criteria
         | 
| 118 | 
            +
                  )
         | 
| 119 | 
            +
                end
         | 
| 120 | 
            +
              end
         | 
| 54 121 | 
             
            end
         | 
| @@ -58,5 +58,9 @@ describe NetSuiteRails::Transformations do | |
| 58 58 | 
             
                netsuite_email = ' example+second@example.family. '
         | 
| 59 59 | 
             
                transformed_netsuite_email = NetSuiteRails::Transformations.email(netsuite_email, :push)
         | 
| 60 60 | 
             
                expect(transformed_netsuite_email.to_s).to eq('example+second@example.family')
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                netsuite_email = ' example,second@example.com '
         | 
| 63 | 
            +
                transformed_netsuite_email = NetSuiteRails::Transformations.email(netsuite_email, :push)
         | 
| 64 | 
            +
                expect(transformed_netsuite_email.to_s).to eq('examplesecond@example.com')
         | 
| 61 65 | 
             
              end
         | 
| 62 66 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: netsuite_rails
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.3. | 
| 4 | 
            +
              version: 0.3.4
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Michael Bianco
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016- | 
| 11 | 
            +
            date: 2016-05-31 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: netsuite
         |