Sha256: 6ab24773ac90f87d291deafdc09aaa8a45be54666e07e2cd10e72758572987d2

Contents?: true

Size: 1.48 KB

Versions: 26

Compression:

Stored size: 1.48 KB

Contents

module NetSuite
  module Support
    module Fields
      include Attributes

      def self.included(base)
        base.send(:extend, ClassMethods)
      end

      module ClassMethods

        def fields(*args)
          if args.empty?
             @fields ||= Set.new
          else
            args.each do |arg|
              field arg
            end
          end
        end

        def field(name, klass = nil)
          name_sym = name.to_sym
          fields << name_sym
          if klass
            define_method(name_sym) do
              attributes[name_sym] ||= klass.new
            end

            define_method("#{name_sym}=") do |value|
              if value.nil?
                attributes.delete(name_sym)
              else
                attributes[name_sym] = value.kind_of?(klass) ? value : klass.new(value)
              end
            end
          else
            define_method(name_sym) do
              attributes[name_sym]
            end

            define_method("#{name_sym}=") do |value|
              attributes[name_sym] = value
            end
          end
        end

        def read_only_fields(*args)
          if args.empty?
             @read_only_fields ||= Set.new
          else
            args.each do |arg|
              read_only_field arg
            end
          end
        end

        def read_only_field(name)
          name_sym = name.to_sym
          read_only_fields << name_sym
          field name
        end
      end

    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
netsuite-0.6.7 lib/netsuite/support/fields.rb
netsuite-0.6.6 lib/netsuite/support/fields.rb
netsuite-0.6.5 lib/netsuite/support/fields.rb
netsuite-0.6.4 lib/netsuite/support/fields.rb
netsuite-0.6.3 lib/netsuite/support/fields.rb
netsuite-0.6.2 lib/netsuite/support/fields.rb