# File lib/version-one/query.rb, line 33 def self.primary_work_items Query.new 'PrimaryWorkitem' end
class VersionOne::Query
Constants
- REQUIRED_FIELDS
Public Class Methods
issues()
click to toggle source
# File lib/version-one/query.rb, line 49 def self.issues Query.new 'Issue' end
new(_asset_type, _client=nil)
click to toggle source
# File lib/version-one/query.rb, line 6 def initialize(_asset_type, _client=nil) @asset_type = _asset_type @select = [] @filter = [] @order = [] @cache = nil @asof = nil @limit = nil @offset = nil @client = VersionOne::Client.new end
primary_work_items()
click to toggle source
projects()
click to toggle source
# File lib/version-one/query.rb, line 41 def self.projects Query.new 'Scope' end
requests()
click to toggle source
# File lib/version-one/query.rb, line 53 def self.requests Query.new 'Request' end
sprints()
click to toggle source
# File lib/version-one/query.rb, line 45 def self.sprints Query.new 'Timebox' end
stories()
click to toggle source
# File lib/version-one/query.rb, line 37 def self.stories Query.new 'Story' end
Public Instance Methods
active()
click to toggle source
# File lib/version-one/query.rb, line 142 def active where('IsInactive' => 'false') end
all()
click to toggle source
# File lib/version-one/query.rb, line 170 def all find(nil) end
asof(date)
click to toggle source
# File lib/version-one/query.rb, line 160 def asof(date) dup do @asof = date end end
cache(key, options={})
click to toggle source
# File lib/version-one/query.rb, line 174 def cache(key, options={}) dup do options[:namespace] ||= 'VersionOne' @cache = { :key => key, :options => options } end end
dup(&block)
click to toggle source
# File lib/version-one/query.rb, line 18 def dup(&block) q = Query.new(@asset_type) [:@select, :@filter, :@order, :@asof, :@limit, :@offset, :@cache, :@client].each do |sym| val = instance_variable_get(sym) unless val.nil? val = val.dup if val.is_a? Array q.instance_variable_set(sym, val) end end q.instance_eval(&block) q end
each(&block)
click to toggle source
# File lib/version-one/query.rb, line 188 def each(&block) to_a.each(&block) end
find(what)
click to toggle source
# File lib/version-one/query.rb, line 69 def find(what) url = to_url(what) find_by_url(url) end
find_by_url(url)
click to toggle source
# File lib/version-one/query.rb, line 57 def find_by_url(url) xml = @client.get(url, cache: @cache) if xml.name == 'Error' msg = 'VersionOne Error: %s (%s)' % [xml.find_first('Message').content, xml.attributes['href']] raise msg else VersionOne::Asset.from_xml(xml) end end
first()
click to toggle source
# File lib/version-one/query.rb, line 166 def first limit(1).all.first end
for_project_and_children(project)
click to toggle source
# File lib/version-one/query.rb, line 128 def for_project_and_children(project) project_id = case project when Asset project.id when Integer "Scope:#{project}" when /^(Scope:)?(\d+)(:\d+)?$/ ($1 || 'Scope:') + $2 else raise ArgumentError, 'Invalid project argument' end where('Scope.ParentMeAndUp' => project_id) end
limit(size)
click to toggle source
# File lib/version-one/query.rb, line 156 def limit(size) dup { @limit = size } end
offset(index)
click to toggle source
# File lib/version-one/query.rb, line 152 def offset(index) dup { @offset = index } end
order(attrib, dir=:asc)
click to toggle source
# File lib/version-one/query.rb, line 146 def order(attrib, dir=:asc) raise ArgumentError unless attrib.is_a? String attrib = '-' + attrib if dir == :desc dup { @order << attrib } end
select(*fields)
click to toggle source
# File lib/version-one/query.rb, line 108 def select(*fields) dup do @select = @select + fields end end
to_a()
click to toggle source
# File lib/version-one/query.rb, line 184 def to_a all end
to_url(what=nil)
click to toggle source
# File lib/version-one/query.rb, line 74 def to_url(what=nil) what = what.id.to_s if what.is_a?(Asset) what = case what when NilClass what when Integer what.to_s when /^[A-Z]+((?::\d+)+)$/i $1.gsub(':', '/') else :bad end raise ArgumentError, 'Invalid parameter type' if what == :bad url = ['rest-1.v1/Data', @asset_type, what].compact.join('/') query = [ select_query, filter_query, page_query, order_query, asof_query ].compact.join('&') if query && !query.empty? url << '?' url << query end url end
where(criteria)
click to toggle source
# File lib/version-one/query.rb, line 114 def where(criteria) criteria = case criteria when String [criteria] when Hash criteria.map{|k,v| "#{k}='#{v.to_s}'"} else raise ArgumentError end dup do @filter.concat criteria end end
Private Instance Methods
asof_query()
click to toggle source
# File lib/version-one/query.rb, line 257 def asof_query if @asof.nil? nil else 'asof=' + @asof.xmlschema end end
filter_query()
click to toggle source
# File lib/version-one/query.rb, line 233 def filter_query if @filter.empty? nil else 'where=' + uri_escape(@filter.collect{|s| "(#{s})"}.join(';')) end end
order_query()
click to toggle source
# File lib/version-one/query.rb, line 249 def order_query if @order.empty? nil else 'sort=' + uri_escape(@order.join(',')) end end
page_query()
click to toggle source
# File lib/version-one/query.rb, line 241 def page_query if @limit "page=#{@limit},#{@offset || 0}" else nil end end
select_query()
click to toggle source
def http_get(uri)
xml = nil http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true request_path = uri.path request_path += '?' + uri.query unless uri.query.blank? Rails.logger.debug("Uri path = #{request_path}") http.start do request = Net::HTTP::Get.new(request_path) request.basic_auth(VersionOne.user, VersionOne.password) response = http.request(request) xml = response.body Rails.logger.debug(xml) end xml
end
def cache_store
Rails.cache
end
def can_cache?
@cache && cache_store
end
# File lib/version-one/query.rb, line 224 def select_query if @select.empty? nil else REQUIRED_FIELDS.each {|f| @select << f unless @select.include?(f) } 'sel=' + uri_escape(@select.join(',')) end end
uri_escape(s)
click to toggle source
# File lib/version-one/query.rb, line 265 def uri_escape(s) @uri_parser ||= URI::Parser.new @uri_parser.escape(s, /[^A-za-z0-9\-()']/) end