dashdate 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7684f2b9292684f6e856305d5756f7773356316b
4
+ data.tar.gz: d79618a6575b59a100d38fd1bcc114408ea8c475
5
+ SHA512:
6
+ metadata.gz: 1c4f8f0389fea0ba7738fab2727e3d99a66ca3ec9bd21a9658aaeeb21a1f49d27e416044849918a5db28d8154df60917be8d51badd844ee9187ea4d188e0e1c3
7
+ data.tar.gz: c7b611967f4062209578f15f4c80efc34233ddc38075d09c33a64027777fa508cf3452b67cae8163bbfdeb6d773c63e95720d7e7f4f1c1f43d887aeacbccfad3
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --warnings
3
+ --require spec_helper
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.3"
4
+ - "2.0.0"
5
+ - "2.1.0"
6
+ - "2.1.1"
7
+ # uncomment this line if your project needs to run something other than `rake`:
8
+ script: bundle exec rake
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in dashdate.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Kyle McKee
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,30 @@
1
+ # Dashdate
2
+ [![Build Status](https://travis-ci.org/kmckee/dashdate.png)](https://travis-ci.org/kmckee/dashdate)
3
+
4
+ Update your dashing dashboards from a command line.
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ gem 'dashdate'
11
+
12
+ And then execute:
13
+
14
+ $ bundle
15
+
16
+ Or install it yourself as:
17
+
18
+ $ gem install dashdate
19
+
20
+ ## Usage
21
+
22
+ TODO: Write usage instructions here
23
+
24
+ ## Contributing
25
+
26
+ 1. Fork it ( https://github.com/[my-github-username]/dashdate/fork )
27
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
28
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
29
+ 4. Push to the branch (`git push origin my-new-feature`)
30
+ 5. Create a new Pull Request
@@ -0,0 +1,16 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+ require 'cucumber'
5
+ require 'cucumber/rake/task'
6
+
7
+ RSpec::Core::RakeTask.new(:spec)
8
+
9
+ Cucumber::Rake::Task.new(:cucumber) do |t|
10
+ t.cucumber_opts = "features --format pretty"
11
+ end
12
+
13
+ desc 'Run all specs and cukes'
14
+ task :test => ['spec', 'cucumber']
15
+
16
+ task :default => :test
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'app'
4
+
5
+ Dashdate::App.build.handle_args(ARGV)
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'dashdate/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "dashdate"
8
+ spec.version = Dashdate::VERSION
9
+ spec.authors = ["Kyle McKee"]
10
+ spec.email = ["mckee.kyle@gmail.com"]
11
+ spec.summary = %q{Update your Dashing dashboards from the command line.}
12
+ spec.description = %q{This gem allows you to update Dashing dashboards from a command line.}
13
+ spec.homepage = "http://aptobits.com"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = ['dashdate']
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "cucumber", "~> 1.3"
24
+ spec.add_development_dependency "rspec", "~> 2.0"
25
+ spec.add_development_dependency "rspec-mocks", "~>2.0"
26
+ spec.add_development_dependency "fakeweb", "~> 1.3"
27
+ spec.add_development_dependency "json", "~> 1.8"
28
+ spec.add_dependency "require_all", "~> 1.3"
29
+ spec.add_dependency "httparty", "~> 0.13"
30
+ spec.add_dependency "trollop", "~> 2.0"
31
+ end
@@ -0,0 +1,9 @@
1
+ Feature: Command Line Interface
2
+ So that I can update my dashboard without having to write and code
3
+ I want a command line interface for the dashdate gem
4
+
5
+ Scenario: Updating the Karma sample widget with a new value
6
+ When I enter the following in a terminal: "dashdate --widget Karma --values value=100"
7
+ Then the Karma widget should be updated with the following values:
8
+ | value |
9
+ | 100 |
@@ -0,0 +1,17 @@
1
+
2
+ When(/^I enter the following in a terminal: "(.*?)"$/) do |user_input|
3
+ Dashdate::App.build.handle_args(user_input)
4
+ end
5
+
6
+ Then(/^the (.*) widget should be updated with the following values:$/) do |widget_name, expected_values_table|
7
+ request = FakeWeb.last_request
8
+ expect(request.method).to eq 'POST'
9
+ expect(request.path).to eq "/widgets/#{widget_name}"
10
+
11
+ sent_values = JSON.parse(request.body)
12
+ expected = expected_values_table.hashes.first
13
+ expected.keys.each do |key|
14
+ value = expected[key]
15
+ expect(sent_values[key]).to eq value
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ require 'cucumber/rspec/doubles'
2
+ require 'fakeweb'
3
+ require 'app'
4
+ require 'json'
5
+ require 'net/http'
@@ -0,0 +1,7 @@
1
+ Before do
2
+ FakeWeb.register_uri(:any, /(.*)/, body: "Success", status: [204, ''])
3
+ end
4
+
5
+ After do
6
+ FakeWeb.clean_registry
7
+ end
@@ -0,0 +1,19 @@
1
+ require 'publisher'
2
+ require 'arg_parser'
3
+
4
+ module Dashdate
5
+ class App
6
+ attr_accessor :publisher, :arg_parser
7
+ def self.build
8
+ new(Dashdate::Publisher.build, Dashdate::ArgParser.new)
9
+ end
10
+ def initialize publisher, arg_parser
11
+ @publisher = publisher
12
+ @arg_parser = arg_parser
13
+ end
14
+ def handle_args args
15
+ parsed = @arg_parser.parse(args)
16
+ @publisher.update(parsed[:widget], parsed[:values], parsed[:auth])
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,29 @@
1
+ require 'trollop'
2
+
3
+ module Dashdate
4
+ class ArgParser
5
+ def parse args
6
+ args = args.split.drop(1) unless args.class == Array
7
+ opts = parse_arg_array(args)
8
+ return {
9
+ :widget => opts[:widget].to_sym,
10
+ :values => parse_value_string(opts[:values]),
11
+ :auth => opts[:auth]
12
+ }
13
+ end
14
+ def parse_arg_array args
15
+ Trollop::options(args) do
16
+ opt :widget, "The name of the widget to publish to", :required => true, :short => :w, :type => String
17
+ opt :values, "The values to push to the widget. Format is: key1=value1,key2=value2", :required => true, :type => String
18
+ opt :auth, "Your auth token. Should match whats in config.ru.", :type => String
19
+ end
20
+ end
21
+ def parse_value_string string
22
+ string.split(',').each_with_object({}) do |key_equals_value, hash|
23
+ key_value_pair = key_equals_value.split('=')
24
+ hash[key_value_pair.first.to_sym] = key_value_pair.last
25
+ end
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,5 @@
1
+ require "dashdate/version"
2
+
3
+ module Dashdate
4
+
5
+ end
@@ -0,0 +1,3 @@
1
+ module Dashdate
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,22 @@
1
+ require 'writer'
2
+
3
+ module Dashdate
4
+ class Notifier
5
+ def initialize writer
6
+ @writer = writer
7
+ end
8
+ def self.build
9
+ new(Dashdate::Writer.new)
10
+ end
11
+ def received_http_response_code code
12
+ case code
13
+ when 204
14
+ @writer.write('Successfully updated dashboard!')
15
+ when 401
16
+ @writer.write('Error: Invalid Authentication Token. Check your config.ru file.')
17
+ else
18
+ @writer.write("Unknown error. Received HTTP Response code: #{code}")
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ require 'httparty'
2
+ require 'notifier'
3
+
4
+ module Dashdate
5
+ class Publisher
6
+ def initialize notifier
7
+ @notifier = notifier
8
+ end
9
+ def self.build
10
+ new(Dashdate::Notifier.build)
11
+ end
12
+ def update(widget, values, auth)
13
+ url = "http://localhost:3030/widgets/#{widget.to_s}"
14
+ values[:auth_token] = auth
15
+ result = HTTParty.post(url, :body => values.to_json)
16
+ @notifier.received_http_response_code(result.code)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,8 @@
1
+
2
+ module Dashdate
3
+ class Writer
4
+ def write message
5
+ puts message
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dashdate::App do
4
+ describe '#build' do
5
+ it 'creates an instance of a publisher' do
6
+ app = Dashdate::App.build()
7
+ app.publisher.should_not be_nil
8
+ end
9
+ it 'creates an instance of an arg_parser' do
10
+ app = Dashdate::App.build()
11
+ app.arg_parser.should_not be_nil
12
+ end
13
+ end
14
+ describe '#initialize' do
15
+ it 'assigns the publisher' do
16
+ publisher = double('publisher')
17
+ app = Dashdate::App.new(publisher, nil)
18
+ app.publisher.should == publisher
19
+ end
20
+ end
21
+ describe '#handle_args' do
22
+ let (:publisher) { double('publisher', :update => nil) }
23
+ let (:arg_parser) { double('arg_parser', :parse => {}) }
24
+ subject { Dashdate::App.new(publisher, arg_parser) }
25
+
26
+ it 'sends the arguments into the parser' do
27
+ expected_args = 'dashdate --widget karma --values valuation=100'
28
+ subject.handle_args(expected_args)
29
+ expect(arg_parser).to have_received(:parse).with(expected_args)
30
+ end
31
+ it 'publishes to the correct widget' do
32
+ allow(arg_parser).to receive(:parse).and_return({ :widget => :karma })
33
+ subject.handle_args('')
34
+ expect(publisher).to have_received(:update).with(:karma, anything, anything)
35
+ end
36
+ it 'publishes to other widgets' do
37
+ allow(arg_parser).to receive(:parse).and_return({ :widget => :valuation })
38
+ subject.handle_args('')
39
+ expect(publisher).to have_received(:update).with(:valuation, anything, anything)
40
+ end
41
+ it 'passes the values to the publisher' do
42
+ expected_values = { :value => 100 }
43
+ allow(arg_parser).to receive(:parse).and_return({ :values => expected_values })
44
+ subject.handle_args('')
45
+ expect(publisher).to have_received(:update).with(anything, expected_values, anything)
46
+ end
47
+ it 'passes the auth_token to the publisher' do
48
+ expected_auth = { :auth => 'foo' }
49
+ allow(arg_parser).to receive(:parse).and_return({ :auth => expected_auth })
50
+ subject.handle_args('')
51
+ expect(publisher).to have_received(:update).with(anything, anything, expected_auth)
52
+ end
53
+ end
54
+ end
55
+
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dashdate::ArgParser do
4
+ subject { Dashdate::ArgParser.new }
5
+ it 'parses the long form of a widget name' do
6
+ subject.parse('dashdate --widget karma --values foo=1')[:widget].should == :karma
7
+ end
8
+ it 'parses the short form of a widget name' do
9
+ subject.parse('dashdate -w valuation --values foo=1')[:widget].should == :valuation
10
+ end
11
+ it 'parses the widget name regardless of location' do
12
+ subject.parse('dashdate --values foo=1 --widget karma')[:widget].should == :karma
13
+ end
14
+ it 'parses the values into a hash' do
15
+ subject.parse('dashdate -w karma --values foo=1')[:values].should be_kind_of(Hash)
16
+ end
17
+ it 'sets the keys in the values hash' do
18
+ values = subject.parse('dashdate -w karma --values foo=1')[:values]
19
+ values.keys.should include :foo
20
+ end
21
+ it 'sets the values in the values hash' do
22
+ values = subject.parse('dashdate -w karma --values foo=1')[:values]
23
+ values[:foo].should == '1'
24
+ end
25
+ it 'parses the short form of an auth token' do
26
+ subject.parse('dashdate -w karma --values foo=1 -a mytoken')[:auth].should == 'mytoken'
27
+ end
28
+ it 'parses the long form of an auth token' do
29
+ subject.parse('dashdate -w karma --values foo=1 --auth mytoken')[:auth].should == 'mytoken'
30
+ end
31
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dashdate::Notifier do
4
+ let(:writer) { double('writer', :write => nil) }
5
+ subject { Dashdate::Notifier.new(writer) }
6
+ it 'notifies success when 204 is received' do
7
+ subject.received_http_response_code(204)
8
+ expect(writer).to have_received(:write).with('Successfully updated dashboard!')
9
+ end
10
+ it 'notifies an authentication problem when a 401 is received.' do
11
+ subject.received_http_response_code(401)
12
+ expect(writer).to have_received(:write).with('Error: Invalid Authentication Token. Check your config.ru file.')
13
+ end
14
+ it 'notifies if an unknown error occurs' do
15
+ code = 500
16
+ subject.received_http_response_code(code)
17
+ expect(writer).to have_received(:write).with("Unknown error. Received HTTP Response code: #{code}")
18
+ end
19
+ it 'includes the response code if an unknown error occurs' do
20
+ code = 555
21
+ subject.received_http_response_code(code)
22
+ expect(writer).to have_received(:write).with("Unknown error. Received HTTP Response code: #{code}")
23
+ end
24
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+ require 'httparty'
3
+
4
+ describe Dashdate::Publisher do
5
+ let(:response) { double('response', :code => 200) }
6
+ before(:each) { allow(HTTParty).to receive(:post).and_return(response) }
7
+ describe "#update" do
8
+ let(:notifier) { double('notifier', :received_http_response_code => nil) }
9
+ subject { Dashdate::Publisher.new(notifier) }
10
+ it "sends a http post to a url" do
11
+ subject.update(:karma, {:current => 100}, 'auth')
12
+ expect(HTTParty).to have_received(:post).with(any_args)
13
+ end
14
+ it "posts to localhost:3030 by default" do
15
+ subject.update(:karma, {:current => 100}, 'auth')
16
+ expect(HTTParty).to have_received(:post).with(/^http:\/\/localhost:3030\//, anything)
17
+ end
18
+ it "posts to the specified widget" do
19
+ subject.update(:valuation, {:current => 100}, 'auth')
20
+ expect(HTTParty).to have_received(:post).with(/\/widgets\/valuation$/, anything)
21
+ end
22
+ it "posts the values as json" do
23
+ values = {:some_key => "some value"}
24
+ subject.update(:any, values, 'auth')
25
+ expect(HTTParty).to have_received(:post).with(anything, { body: values.to_json })
26
+ end
27
+ it "posts the auth_token" do
28
+ expected_auth_token = 'myAuthToken'
29
+ subject.update(:any, {}, expected_auth_token)
30
+ expect(HTTParty).to have_received(:post).with(anything, { body: {auth_token: expected_auth_token }.to_json })
31
+ end
32
+ it "passes the response code to the notifier" do
33
+ subject.update(:any, {}, 'auth')
34
+ expect(notifier).to have_received(:received_http_response_code).with(200)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,81 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # The generated `.rspec` file contains `--require spec_helper` which will cause this
4
+ # file to always be loaded, without a need to explicitly require it in any files.
5
+ #
6
+ # Given that it is always loaded, you are encouraged to keep this file as
7
+ # light-weight as possible. Requiring heavyweight dependencies from this file
8
+ # will add to the boot time of your test suite on EVERY test run, even for an
9
+ # individual file that may not need all of that loaded. Instead, make a
10
+ # separate helper file that requires this one and then use it only in the specs
11
+ # that actually need it.
12
+ #
13
+ # The `.rspec` file also contains a few flags that are not defaults but that
14
+ # users commonly want.
15
+ #
16
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
17
+ RSpec.configure do |config|
18
+ # The settings below are suggested to provide a good initial experience
19
+ # with RSpec, but feel free to customize to your heart's content.
20
+ =begin
21
+ # These two settings work together to allow you to limit a spec run
22
+ # to individual examples or groups you care about by tagging them with
23
+ # `:focus` metadata. When nothing is tagged with `:focus`, all examples
24
+ # get run.
25
+ config.filter_run :focus
26
+ config.run_all_when_everything_filtered = true
27
+
28
+ # Many RSpec users commonly either run the entire suite or an individual
29
+ # file, and it's useful to allow more verbose output when running an
30
+ # individual spec file.
31
+ if config.files_to_run.one?
32
+ # Use the documentation formatter for detailed output,
33
+ # unless a formatter has already been configured
34
+ # (e.g. via a command-line flag).
35
+ config.default_formatter = 'doc'
36
+ end
37
+
38
+ # Print the 10 slowest examples and example groups at the
39
+ # end of the spec run, to help surface which specs are running
40
+ # particularly slow.
41
+ config.profile_examples = 10
42
+
43
+ # Run specs in random order to surface order dependencies. If you find an
44
+ # order dependency and want to debug it, you can fix the order by providing
45
+ # the seed, which is printed after each run.
46
+ # --seed 1234
47
+ config.order = :random
48
+
49
+ # Seed global randomization in this process using the `--seed` CLI option.
50
+ # Setting this allows you to use `--seed` to deterministically reproduce
51
+ # test failures related to randomization by passing the same `--seed` value
52
+ # as the one that triggered the failure.
53
+ Kernel.srand config.seed
54
+
55
+ # rspec-expectations config goes here. You can use an alternate
56
+ # assertion/expectation library such as wrong or the stdlib/minitest
57
+ # assertions if you prefer.
58
+ config.expect_with :rspec do |expectations|
59
+ # Enable only the newer, non-monkey-patching expect syntax.
60
+ # For more details, see:
61
+ # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
62
+ expectations.syntax = :expect
63
+ end
64
+
65
+ # rspec-mocks config goes here. You can use an alternate test double
66
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
67
+ config.mock_with :rspec do |mocks|
68
+ # Enable only the newer, non-monkey-patching expect syntax.
69
+ # For more details, see:
70
+ # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
71
+ mocks.syntax = :expect
72
+
73
+ # Prevents you from mocking or stubbing a method that does not exist on
74
+ # a real object. This is generally recommended.
75
+ mocks.verify_partial_doubles = true
76
+ end
77
+ =end
78
+ end
79
+
80
+ require 'require_all'
81
+ require_all 'lib'
metadata ADDED
@@ -0,0 +1,220 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dashdate
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kyle McKee
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: cucumber
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec-mocks
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: fakeweb
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: json
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.8'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.8'
111
+ - !ruby/object:Gem::Dependency
112
+ name: require_all
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.3'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.3'
125
+ - !ruby/object:Gem::Dependency
126
+ name: httparty
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.13'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.13'
139
+ - !ruby/object:Gem::Dependency
140
+ name: trollop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '2.0'
153
+ description: This gem allows you to update Dashing dashboards from a command line.
154
+ email:
155
+ - mckee.kyle@gmail.com
156
+ executables:
157
+ - dashdate
158
+ extensions: []
159
+ extra_rdoc_files: []
160
+ files:
161
+ - ".gitignore"
162
+ - ".rspec"
163
+ - ".travis.yml"
164
+ - Gemfile
165
+ - LICENSE.txt
166
+ - README.md
167
+ - Rakefile
168
+ - bin/dashdate
169
+ - dashdate.gemspec
170
+ - features/command_line_interface.feature
171
+ - features/step_definitions/command_line_steps.rb
172
+ - features/support/env.rb
173
+ - features/support/hooks.rb
174
+ - lib/app.rb
175
+ - lib/arg_parser.rb
176
+ - lib/dashdate.rb
177
+ - lib/dashdate/version.rb
178
+ - lib/notifier.rb
179
+ - lib/publisher.rb
180
+ - lib/writer.rb
181
+ - spec/app_spec.rb
182
+ - spec/arg_parser_spec.rb
183
+ - spec/notifier_spec.rb
184
+ - spec/publisher_spec.rb
185
+ - spec/spec_helper.rb
186
+ homepage: http://aptobits.com
187
+ licenses:
188
+ - MIT
189
+ metadata: {}
190
+ post_install_message:
191
+ rdoc_options: []
192
+ require_paths:
193
+ - lib
194
+ required_ruby_version: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ required_rubygems_version: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - ">="
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ requirements: []
205
+ rubyforge_project:
206
+ rubygems_version: 2.2.2
207
+ signing_key:
208
+ specification_version: 4
209
+ summary: Update your Dashing dashboards from the command line.
210
+ test_files:
211
+ - features/command_line_interface.feature
212
+ - features/step_definitions/command_line_steps.rb
213
+ - features/support/env.rb
214
+ - features/support/hooks.rb
215
+ - spec/app_spec.rb
216
+ - spec/arg_parser_spec.rb
217
+ - spec/notifier_spec.rb
218
+ - spec/publisher_spec.rb
219
+ - spec/spec_helper.rb
220
+ has_rdoc: