peaty 0.3.0

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.
data/Gemfile ADDED
@@ -0,0 +1,24 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'activesupport', '~> 3.0.1'
4
+
5
+ gem 'nokogiri'
6
+ gem 'nokogiri-happymapper'
7
+
8
+ gem 'rest-client'
9
+ gem 'xml_to_json', '0.0.1'
10
+ gem 'yajl-ruby'
11
+
12
+ group :development do
13
+ gem 'yajl-ruby'
14
+ gem 'builder'
15
+
16
+ gem "rspec", "2.1.0"
17
+ gem "bundler", "~> 1.0.0"
18
+ gem "jeweler", "~> 1.5.0.pre6"
19
+ gem "rails_code_qa", ">= 0"
20
+ end
21
+
22
+ group :test do
23
+ gem "fakeweb", "1.3.0"
24
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,62 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activesupport (3.0.1)
5
+ builder (3.0.0)
6
+ diff-lcs (1.1.2)
7
+ fakeweb (1.3.0)
8
+ flay (1.4.1)
9
+ ruby_parser (~> 2.0)
10
+ sexp_processor (~> 3.0)
11
+ flog (2.5.0)
12
+ ruby_parser (~> 2.0)
13
+ sexp_processor (~> 3.0)
14
+ git (1.2.5)
15
+ jeweler (1.5.1)
16
+ bundler (~> 1.0.0)
17
+ git (>= 1.2.5)
18
+ rake
19
+ mime-types (1.16)
20
+ nokogiri (1.4.3.1)
21
+ nokogiri-happymapper (0.3.4)
22
+ nokogiri (>= 1.4.0)
23
+ rails_code_qa (0.4.1)
24
+ flay (= 1.4.1)
25
+ flog (= 2.5.0)
26
+ rcov (= 0.9.9)
27
+ rake (0.8.7)
28
+ rcov (0.9.9)
29
+ rest-client (1.6.1)
30
+ mime-types (>= 1.16)
31
+ rspec (2.1.0)
32
+ rspec-core (~> 2.1.0)
33
+ rspec-expectations (~> 2.1.0)
34
+ rspec-mocks (~> 2.1.0)
35
+ rspec-core (2.1.0)
36
+ rspec-expectations (2.1.0)
37
+ diff-lcs (~> 1.1.2)
38
+ rspec-mocks (2.1.0)
39
+ ruby_parser (2.0.5)
40
+ sexp_processor (~> 3.0)
41
+ sexp_processor (3.0.5)
42
+ xml_to_json (0.0.1)
43
+ nokogiri
44
+ nokogiri (= 1.4.3.1)
45
+ yajl-ruby (0.7.8)
46
+
47
+ PLATFORMS
48
+ ruby
49
+
50
+ DEPENDENCIES
51
+ activesupport (~> 3.0.1)
52
+ builder
53
+ bundler (~> 1.0.0)
54
+ fakeweb (= 1.3.0)
55
+ jeweler (~> 1.5.0.pre6)
56
+ nokogiri
57
+ nokogiri-happymapper
58
+ rails_code_qa
59
+ rest-client
60
+ rspec (= 2.1.0)
61
+ xml_to_json (= 0.0.1)
62
+ yajl-ruby
data/Rakefile ADDED
@@ -0,0 +1,55 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'rake'
11
+
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
+ gem.name = "peaty"
16
+ gem.homepage = "http://github.com/mtodd/peaty"
17
+ gem.license = "MIT"
18
+ gem.summary = %Q{Pivotal Tracker API Implementation}
19
+ gem.description = %Q{Just another Pivotal Tracker API Implementation}
20
+ gem.email = "chiology@gmail.com"
21
+ gem.authors = ["Matt Todd"]
22
+
23
+ gem.add_runtime_dependency 'nokogiri', '1.4.3.1'
24
+
25
+ gem.add_development_dependency 'yajl-ruby', '0.7.8'
26
+ gem.add_development_dependency 'activesupport', '~> 3.0.1'
27
+ gem.add_development_dependency 'builder', '2.1.2'
28
+
29
+ gem.add_development_dependency 'rspec', '2.1.0'
30
+ gem.add_development_dependency 'bundler', '~> 1.0.0'
31
+ gem.add_development_dependency 'jeweler', '~> 1.5.0.pre6'
32
+ gem.add_development_dependency 'rails_code_qa', '>= 0'
33
+ end
34
+ Jeweler::RubygemsDotOrgTasks.new
35
+
36
+ require 'rake/testtask'
37
+
38
+ Rake::TestTask.new("test") do |t|
39
+ t.libs << "test"
40
+ t.pattern = 'test/*_test.rb'
41
+ t.verbose = true
42
+ t.warning = true
43
+ end
44
+
45
+ task :default => :test
46
+
47
+ require 'rake/rdoctask'
48
+ Rake::RDocTask.new do |rdoc|
49
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
50
+
51
+ rdoc.rdoc_dir = 'rdoc'
52
+ rdoc.title = "xml_to_json #{version}"
53
+ rdoc.rdoc_files.include('README*')
54
+ rdoc.rdoc_files.include('lib/**/*.rb')
55
+ end
data/Readme.textile ADDED
@@ -0,0 +1,67 @@
1
+ h1. Peaty
2
+
3
+ Peaty (PT, 'pee-tee'): A PivotalTracker API Client
4
+
5
+ h2. Usage
6
+
7
+ NOTE: This is not live and only reference while development is still early.
8
+
9
+ <pre>
10
+ class User < ActiveRecord::Base
11
+ pivotal_tracker_for :pivotal_tracker_api_key, :method_prefix => :pt, :table_prefix => :pt
12
+ end
13
+
14
+ u = User.first
15
+
16
+ team = []
17
+ releases = []
18
+
19
+ u.pt_projects.each do |project|
20
+ project.stories.all
21
+ project.releases.all
22
+ project.stories(:type => :release)
23
+
24
+ # add team members to team list
25
+ team.concat project.users # but ensure uniqueness later
26
+
27
+ # collect our releases
28
+ releases.concat project.releases
29
+ end
30
+ </pre>
31
+
32
+ See how current API works for selecting types of stories (chores, bugs, releases, and features)
33
+
34
+ h2. Contributing
35
+
36
+ Step 1: Submit a failing test.
37
+ Step 2: ???
38
+ Step 3: Profit.
39
+
40
+ h2. Other PivotalTracker RubyGems
41
+
42
+ * https://github.com/joslynesser/pivotal_tracker
43
+ * https://github.com/jsmestad/pivotal-tracker
44
+
45
+ h2. License
46
+
47
+ The MIT License
48
+
49
+ Copyright (c) 2010 Matt Todd, Highgroove Studios.
50
+
51
+ Permission is hereby granted, free of charge, to any person obtaining a copy
52
+ of this software and associated documentation files (the "Software"), to deal
53
+ in the Software without restriction, including without limitation the rights
54
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
55
+ copies of the Software, and to permit persons to whom the Software is
56
+ furnished to do so, subject to the following conditions:
57
+
58
+ The above copyright notice and this permission notice shall be included in
59
+ all copies or substantial portions of the Software.
60
+
61
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
62
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
63
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
64
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
65
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
66
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
67
+ THE SOFTWARE.
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.3.0
data/lib/peaty/base.rb ADDED
@@ -0,0 +1,104 @@
1
+ module Peaty
2
+
3
+ class Base
4
+ attr_accessor :attributes, :connection
5
+
6
+ FILTERS = [
7
+ :id, :type, :state, :label, :has_attachment,
8
+ :created_since, :modified_since,
9
+ :requester, :owner,
10
+ :mywork,
11
+ :integration, :external_id, :has_external_id,
12
+ :includedone
13
+ ]
14
+
15
+ def initialize(attrs)
16
+ raise ArgumentError unless attrs.is_a?(Hash)
17
+ @connection = self.class.connection
18
+ # if we get a hash like {"item"=>{...}}, pull out the attributes
19
+ @attributes = if attrs.key?(self.class.element); attrs.dup.delete(self.class.element)
20
+ else attrs.dup
21
+ end
22
+ end
23
+
24
+ def method_missing(method, *args)
25
+ return self.attributes[method.to_s] if respond_to?(method)
26
+ super
27
+ end
28
+ def respond_to?(method)
29
+ super or self.attributes.key?(method.to_s)
30
+ end
31
+
32
+ def id
33
+ self.attributes["id"]
34
+ end
35
+
36
+ class << self
37
+ attr_accessor :connection
38
+
39
+ def with_connection(connection)
40
+ @connection = connection
41
+ self # chaining
42
+ end
43
+
44
+ # Takes the XML result, transforms to JSON, parses to objects, and
45
+ # returns an array of results, regardless of one or many results.
46
+ def parse(response, element)
47
+ result = JSON.parse(XmlToJson.transform(response))
48
+ Array.wrap(result[element] || result[element.pluralize]).map{ |r| new(r) }
49
+ end
50
+
51
+ def find(*args)
52
+ options = args.extract_options!
53
+ selection = args.shift
54
+ case selection
55
+ when :first; self.first(options)
56
+ when :all; self.all(options)
57
+ when Array; selection.map{ |s| self.find_by_id(s, options) }
58
+ when Numeric; self.find_by_id(selection, options)
59
+ else self.find_by_id(selection, options)
60
+ end
61
+ end
62
+
63
+ def find_by_id(id, options = {})
64
+ self.parse(self.connection[self.member_path(id, options)].get(:params => self.filter_options(options)).body, self.element).
65
+ first.
66
+ tap{ |e| e.connection = self.connection }
67
+ end
68
+
69
+ def all(options = {})
70
+ self.parse(self.connection[self.collection_path(options)].get(:params => self.filter_options(options)).body, self.element).
71
+ each { |e| e.connection = self.connection }
72
+ end
73
+
74
+ def first(options = {})
75
+ self.all(options).first
76
+ end
77
+
78
+ def filter_options(options = {}, filter = [])
79
+ options = options.dup # make sure we're working on a copy
80
+ # and delete any keys not supported for queries
81
+ options.each { |(k,_)| options.delete(k) unless FILTERS.include?(k.to_sym) }
82
+
83
+ FILTERS.each do |term|
84
+ value = Array.wrap(options.delete(term))
85
+ filter << "%s:%s" % [ term,
86
+ value.map do |v|
87
+ v = %("%s") % v if v.to_s =~ /\s/
88
+ v
89
+ end.join(',') ] unless value.empty?
90
+ end
91
+
92
+ # handle the rest of the filter strings
93
+ Array.wrap(options.delete(:rest)).each do |value|
94
+ value = %("%s") % value if value.to_s =~ /\s/
95
+ filter << value
96
+ end
97
+
98
+ return options if filter.empty?
99
+ options.merge(:filter => filter.join(" "))
100
+ end
101
+ end
102
+ end
103
+
104
+ end
@@ -0,0 +1,37 @@
1
+ module Peaty
2
+
3
+ module Integration
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ self.__pivotal_tracker_options.tap do |opts|
8
+ alias_method [opts[:method_prefix], :projects].compact.map(&:to_s).join('_').to_sym, :__pivotal_tracker_projects
9
+ end
10
+ end
11
+
12
+ module InstanceMethods
13
+ def __pivotal_tracker_connection
14
+ @__pivotal_tracker_connection ||= begin
15
+ RestClient.log ||= STDOUT
16
+ RestClient::Resource.new("http://www.pivotaltracker.com/services/v3", :headers => {"X-TrackerToken" => self.send(self.class.__pivotal_tracker_options[:attribute])})
17
+ end
18
+ end
19
+ def __pivotal_tracker_projects
20
+ Proxy.new(Project, self.__pivotal_tracker_connection, :user => self)
21
+ end
22
+ end
23
+ end
24
+
25
+ end
26
+
27
+ class Object
28
+ def self.pivotal_tracker_for(attribute, options = {})
29
+ options = options.with_indifferent_access
30
+ options.reverse_merge!( :attribute => attribute,
31
+ :method_prefix => :pivotal_tracker )
32
+
33
+ class << self; attr_accessor :__pivotal_tracker_options; end
34
+ self.__pivotal_tracker_options = options
35
+ self.send(:include, Peaty::Integration)
36
+ end
37
+ end
@@ -0,0 +1,25 @@
1
+ module Peaty
2
+
3
+ class Iteration < Base
4
+
5
+ def stories(options = {})
6
+ Array.wrap(self.attributes["stories"]).map do |story|
7
+ Story.with_connection(self.connection).new(story)
8
+ end
9
+ end
10
+
11
+ class << self
12
+ def element
13
+ "iteration"
14
+ end
15
+ def collection_path(options = {})
16
+ "/projects/%i/iterations" % options[:project_id].to_i
17
+ end
18
+ def member_path(group, options = {})
19
+ "/projects/%i/iterations/%s" % [options[:project_id].to_i, group]
20
+ end
21
+ end
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,47 @@
1
+ module Peaty
2
+
3
+ class Project < Base
4
+
5
+ def users(options = {})
6
+ Array.wrap(self.memberships).map do |membership|
7
+ membership = membership["membership"] if membership.key?("membership")
8
+ User.with_connection(self.connection).new(membership["person"])
9
+ end
10
+ end
11
+
12
+ def stories(options = {})
13
+ Proxy.new(Story, self.class.connection, options.merge(:project_id => self.id))
14
+ end
15
+
16
+ def iterations(options = {})
17
+ Proxy.new(Iteration, self.class.connection, options.merge(:project_id => self.id))
18
+ end
19
+
20
+ def features(options = {})
21
+ self.stories.filter(:type => :feature)
22
+ end
23
+ def releases(options = {})
24
+ self.stories.filter(:type => :release)
25
+ end
26
+ def chores(options = {})
27
+ self.stories.filter(:type => :chore)
28
+ end
29
+ def bugs(options = {})
30
+ self.stories.filter(:type => :bug)
31
+ end
32
+
33
+ class << self
34
+ def element
35
+ "project"
36
+ end
37
+ def collection_path(options = {})
38
+ "/projects"
39
+ end
40
+ def member_path(id, options = {})
41
+ "/projects/%i" % id
42
+ end
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,29 @@
1
+ module Peaty
2
+
3
+ class Proxy
4
+ attr_accessor :target, :connection, :options
5
+
6
+ def initialize(target, connection, options = {})
7
+ @target, @connection, @options = target, connection, options
8
+ end
9
+
10
+ def method_missing(method, *args)
11
+ return @target.method(method).unbind.bind(self).call(*args) if @target.class.respond_to?(method)
12
+ options = args.extract_options!
13
+ args << @options.merge(options)
14
+ @target.with_connection(@connection).send(method, *args)
15
+ end
16
+
17
+ def filter(*args)
18
+ options = args.extract_options!
19
+ options.each do |(key, value)|
20
+ @options[key] = Array.wrap(@options.delete(:key)).concat(Array.wrap(value))
21
+ end
22
+
23
+ @options[:rest] = Array.wrap(@options.delete(:rest)).concat(args)
24
+
25
+ self
26
+ end
27
+ end
28
+
29
+ end
@@ -0,0 +1,39 @@
1
+ module Peaty
2
+
3
+ class Story < Base
4
+
5
+ def story_type
6
+ self.attributes["story_type"].to_sym
7
+ end
8
+ alias type story_type
9
+
10
+ # chores, bugs, releases may or may not have estimates
11
+ def estimate
12
+ self.attributes["estimate"].to_i
13
+ end
14
+
15
+ def project
16
+ Project.with_connection(self.class.connection).find(self.project_id)
17
+ end
18
+
19
+ class << self
20
+ def element
21
+ "story"
22
+ end
23
+ def collection_path(options = {})
24
+ "/projects/%i/stories" % options[:project_id].to_i
25
+ end
26
+ def member_path(id, options = {})
27
+ "/projects/%i/stories/%i" % [options[:project_id].to_i, id]
28
+ end
29
+
30
+ ### Filters
31
+
32
+ def releases(options = {})
33
+ self.filter(:type => :release)
34
+ end
35
+ end
36
+
37
+ end
38
+
39
+ end
data/lib/peaty/user.rb ADDED
@@ -0,0 +1,15 @@
1
+ module Peaty
2
+
3
+ class User < Base
4
+
5
+ class << self
6
+
7
+ def element
8
+ "person"
9
+ end
10
+
11
+ end
12
+
13
+ end
14
+
15
+ end
data/lib/peaty.rb ADDED
@@ -0,0 +1,33 @@
1
+ require 'logger'
2
+
3
+ require 'active_support/concern'
4
+ require 'active_support/inflector'
5
+ require 'active_support/core_ext/benchmark'
6
+ require 'active_support/core_ext/array/extract_options'
7
+ require 'active_support/core_ext/array/wrap'
8
+ require 'active_support/core_ext/hash/indifferent_access'
9
+ require 'active_support/core_ext/hash/reverse_merge'
10
+
11
+ require 'rest-client'
12
+ require 'nokogiri'
13
+ require 'xml_to_json'
14
+ require 'yajl/json_gem'
15
+
16
+ $:.unshift Pathname.new(__FILE__).dirname
17
+ require 'peaty/integration'
18
+ require 'peaty/proxy'
19
+ require 'peaty/base'
20
+ require 'peaty/project'
21
+ require 'peaty/iteration'
22
+ require 'peaty/story'
23
+ require 'peaty/user'
24
+
25
+ module Peaty
26
+
27
+ VERSION = "0.0.0"
28
+
29
+ def self.root
30
+ @root ||= Pathname.new(__FILE__).dirname.parent
31
+ end
32
+
33
+ end
data/peaty.gemspec ADDED
@@ -0,0 +1,126 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{peaty}
8
+ s.version = "0.3.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Matt Todd"]
12
+ s.date = %q{2010-12-01}
13
+ s.description = %q{Just another Pivotal Tracker API Implementation}
14
+ s.email = %q{chiology@gmail.com}
15
+ s.files = [
16
+ "Gemfile",
17
+ "Gemfile.lock",
18
+ "Rakefile",
19
+ "Readme.textile",
20
+ "VERSION",
21
+ "lib/peaty.rb",
22
+ "lib/peaty/base.rb",
23
+ "lib/peaty/integration.rb",
24
+ "lib/peaty/iteration.rb",
25
+ "lib/peaty/project.rb",
26
+ "lib/peaty/proxy.rb",
27
+ "lib/peaty/story.rb",
28
+ "lib/peaty/user.rb",
29
+ "peaty.gemspec",
30
+ "test/.gitignore",
31
+ "test/fixtures/bugs.xml",
32
+ "test/fixtures/chores.xml",
33
+ "test/fixtures/features.xml",
34
+ "test/fixtures/iterations.xml",
35
+ "test/fixtures/iterations_done.xml",
36
+ "test/fixtures/project.xml",
37
+ "test/fixtures/projects.xml",
38
+ "test/fixtures/release.xml",
39
+ "test/fixtures/releases.xml",
40
+ "test/fixtures/stories.xml",
41
+ "test/fixtures/stories_with_done.xml",
42
+ "test/fixtures/story.xml",
43
+ "test/peaty_test.rb",
44
+ "test/test_helper.rb"
45
+ ]
46
+ s.homepage = %q{http://github.com/mtodd/peaty}
47
+ s.licenses = ["MIT"]
48
+ s.require_paths = ["lib"]
49
+ s.rubygems_version = %q{1.3.7}
50
+ s.summary = %q{Pivotal Tracker API Implementation}
51
+ s.test_files = [
52
+ "test/peaty_test.rb",
53
+ "test/test_helper.rb"
54
+ ]
55
+
56
+ if s.respond_to? :specification_version then
57
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
58
+ s.specification_version = 3
59
+
60
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
61
+ s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.1"])
62
+ s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
63
+ s.add_runtime_dependency(%q<nokogiri-happymapper>, [">= 0"])
64
+ s.add_runtime_dependency(%q<rest-client>, [">= 0"])
65
+ s.add_runtime_dependency(%q<xml_to_json>, ["= 0.0.1"])
66
+ s.add_runtime_dependency(%q<yajl-ruby>, [">= 0"])
67
+ s.add_development_dependency(%q<yajl-ruby>, [">= 0"])
68
+ s.add_development_dependency(%q<builder>, [">= 0"])
69
+ s.add_development_dependency(%q<rspec>, ["= 2.1.0"])
70
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
71
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.0.pre6"])
72
+ s.add_development_dependency(%q<rails_code_qa>, [">= 0"])
73
+ s.add_runtime_dependency(%q<nokogiri>, ["= 1.4.3.1"])
74
+ s.add_development_dependency(%q<yajl-ruby>, ["= 0.7.8"])
75
+ s.add_development_dependency(%q<activesupport>, ["~> 3.0.1"])
76
+ s.add_development_dependency(%q<builder>, ["= 2.1.2"])
77
+ s.add_development_dependency(%q<rspec>, ["= 2.1.0"])
78
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
79
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.0.pre6"])
80
+ s.add_development_dependency(%q<rails_code_qa>, [">= 0"])
81
+ else
82
+ s.add_dependency(%q<activesupport>, ["~> 3.0.1"])
83
+ s.add_dependency(%q<nokogiri>, [">= 0"])
84
+ s.add_dependency(%q<nokogiri-happymapper>, [">= 0"])
85
+ s.add_dependency(%q<rest-client>, [">= 0"])
86
+ s.add_dependency(%q<xml_to_json>, ["= 0.0.1"])
87
+ s.add_dependency(%q<yajl-ruby>, [">= 0"])
88
+ s.add_dependency(%q<yajl-ruby>, [">= 0"])
89
+ s.add_dependency(%q<builder>, [">= 0"])
90
+ s.add_dependency(%q<rspec>, ["= 2.1.0"])
91
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
92
+ s.add_dependency(%q<jeweler>, ["~> 1.5.0.pre6"])
93
+ s.add_dependency(%q<rails_code_qa>, [">= 0"])
94
+ s.add_dependency(%q<nokogiri>, ["= 1.4.3.1"])
95
+ s.add_dependency(%q<yajl-ruby>, ["= 0.7.8"])
96
+ s.add_dependency(%q<activesupport>, ["~> 3.0.1"])
97
+ s.add_dependency(%q<builder>, ["= 2.1.2"])
98
+ s.add_dependency(%q<rspec>, ["= 2.1.0"])
99
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
100
+ s.add_dependency(%q<jeweler>, ["~> 1.5.0.pre6"])
101
+ s.add_dependency(%q<rails_code_qa>, [">= 0"])
102
+ end
103
+ else
104
+ s.add_dependency(%q<activesupport>, ["~> 3.0.1"])
105
+ s.add_dependency(%q<nokogiri>, [">= 0"])
106
+ s.add_dependency(%q<nokogiri-happymapper>, [">= 0"])
107
+ s.add_dependency(%q<rest-client>, [">= 0"])
108
+ s.add_dependency(%q<xml_to_json>, ["= 0.0.1"])
109
+ s.add_dependency(%q<yajl-ruby>, [">= 0"])
110
+ s.add_dependency(%q<yajl-ruby>, [">= 0"])
111
+ s.add_dependency(%q<builder>, [">= 0"])
112
+ s.add_dependency(%q<rspec>, ["= 2.1.0"])
113
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
114
+ s.add_dependency(%q<jeweler>, ["~> 1.5.0.pre6"])
115
+ s.add_dependency(%q<rails_code_qa>, [">= 0"])
116
+ s.add_dependency(%q<nokogiri>, ["= 1.4.3.1"])
117
+ s.add_dependency(%q<yajl-ruby>, ["= 0.7.8"])
118
+ s.add_dependency(%q<activesupport>, ["~> 3.0.1"])
119
+ s.add_dependency(%q<builder>, ["= 2.1.2"])
120
+ s.add_dependency(%q<rspec>, ["= 2.1.0"])
121
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
122
+ s.add_dependency(%q<jeweler>, ["~> 1.5.0.pre6"])
123
+ s.add_dependency(%q<rails_code_qa>, [">= 0"])
124
+ end
125
+ end
126
+
data/test/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.log