diane 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98fcb7ec286e01666ff8367b214104fed956bba09deda226f66910bfe6749ba2
4
- data.tar.gz: 37fd5c4cf665cb094a8536fe8b8703b9228b07fca61265c804cd3f54dfc19c01
3
+ metadata.gz: a498134b66cff3720bf6a9ed4ae8008f614d1c53dd31cf7f817ddf8c9f2c1620
4
+ data.tar.gz: 7cc6fb3d5c528603b62aeaa9f5a3de09f4f375b2a80ed3071b2063b69ced3f38
5
5
  SHA512:
6
- metadata.gz: 58194d040d9fa9ab90bd5806aa86547640956842b59849465b30bda25264981c8aacf10d85a1cab648599f231b40cb5be97f0a93235915231161ac6661932146
7
- data.tar.gz: 69bdc8c0eaef3ef0ec0bb8672f0fe95233735a4a44759187210b9b6899b2242410ef629c56347e988c828d5101065bb403b89ca0a6646aba4e830cae91b84b3a
6
+ metadata.gz: 99f447ec106a71c7223201c7d712d7cb28c596a9bee7b9c9491efab50960715ff3ff708f4305e1f51d176a79920d0d613a0717f6835edf9f91eacc0bbc55535b
7
+ data.tar.gz: 39ccea1b9bd4acf12b039ca9a105f6568912ae7dc3d907f5fecd72df9caac9a02ec34403f45c8771f04d6be50a5b911994b7438aeb5af042b403998a27bcc949
data/.gitignore CHANGED
@@ -7,4 +7,5 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  Gemfile.lock
10
- ./DIANE
10
+ *.gem
11
+ /DIANE
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --require spec_helper
3
+ --format documentation
@@ -0,0 +1,8 @@
1
+ AllCops:
2
+ Exclude:
3
+ - 'spec/**'
4
+ Metrics/MethodLength:
5
+ Max: 12
6
+ Metrics/BlockLength:
7
+ Exclude:
8
+ - 'bin/**'
@@ -0,0 +1,19 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0
4
+ - 2.2
5
+ - 2.3
6
+ - 2.4
7
+ - 2.5
8
+ env:
9
+ global:
10
+ - CC_TEST_REPORTER_ID=f771d5ac414479894286db3ea5f2f2ae8f90fb301593b37a5df1ac358d61d2a9
11
+ before_script:
12
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
13
+ - chmod +x ./cc-test-reporter
14
+ - ./cc-test-reporter before-build
15
+ script:
16
+ - bundle exec rubocop
17
+ - bundle exec rspec
18
+ after_script:
19
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in diane.gemspec
1
+ source 'https://rubygems.org'
4
2
  gemspec
3
+
4
+ gem 'simplecov', require: false
data/README.md CHANGED
@@ -1,12 +1,23 @@
1
1
  # Diane
2
+ [![Gem Version](https://badge.fury.io/rb/diane.svg)](https://badge.fury.io/rb/diane) ![license](https://img.shields.io/github/license/mnyrop/diane.svg) ![GitHub top language](https://img.shields.io/github/languages/top/mnyrop/diane.svg)
2
3
 
3
- > *I have been assigned a secretary. Her name is Diane. She seems an interesting cross between a saint and a cabaret singer.*
4
+ [![Build Status](https://travis-ci.org/mnyrop/diane.svg?branch=master)](https://travis-ci.org/mnyrop/diane) [![Maintainability](https://api.codeclimate.com/v1/badges/0e84a1657af9d2258136/maintainability)](https://codeclimate.com/github/mnyrop/diane/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/0e84a1657af9d2258136/test_coverage)](https://codeclimate.com/github/mnyrop/diane/test_coverage) ![Libraries.io](https://img.shields.io/librariesio/github/mnyrop/diane.svg)
4
5
 
5
- A tiny + salty Ruby CL utility for recording and playing back your thoughts/intel/motivations, without bloating the Git logs.
6
+
7
+
8
+
9
+ ### A Ruby CL documentation utility for recording and playing back your thoughts/intel/motivations, without bloating the Git logs. ☕️
10
+
11
+ <br>
12
+
13
+ > *I have been assigned a secretary. Her name is Diane.*<br>
14
+ > *She seems an interesting cross between a saint and a cabaret singer.*
15
+
16
+ <br>
6
17
 
7
18
  <img src="https://media.giphy.com/media/WubJTtnWXKfmM/giphy.gif" width="400"/>
8
19
 
9
- ![diane screen gif](./docs/diane.gif)
20
+ <br>
10
21
 
11
22
  ## Installation
12
23
 
@@ -24,9 +35,82 @@ Or install it yourself as:
24
35
 
25
36
  $ gem install diane
26
37
 
38
+ <br>
39
+
27
40
  ## Usage
41
+ <br>
42
+
43
+ ![diane screen gif](./diane.gif)
44
+
45
+ <br>
46
+
47
+ Diane has two subcommands: [`record`](#record) and [`playback`](#playback):
48
+
49
+
50
+ ### Record
51
+
52
+
53
+ #### Usage:
54
+ ```sh
55
+ diane record MESSAGE
56
+ ```
57
+
58
+ #### Example:
59
+ ```sh
60
+ diane record "I'm in the middle of adding git-lfs. Remind me to return + test."
61
+ ```
62
+
63
+ #### Options:
64
+
65
+ - `--user USER` : By default, Diane records the message and attributes it to the git user currently logged in. To override this, use the `--user` option:
66
+
67
+ ```sh
68
+ diane record "the owls are not what they seem" --user "the_giant"
69
+ ```
70
+
71
+ ### Playback
72
+
73
+ #### Usage:
74
+ ```sh
75
+ diane playback NUMBER
76
+ ```
77
+
78
+ #### Example:
79
+ ```sh
80
+ diane playback 3
81
+ ```
82
+
83
+ #### Options:
84
+
85
+ - `--all` : By default, Diane plays back 1 recording or the `NUMBER` specified. To override this, use the `--all` option to return every recording that matches the query.
86
+
87
+ ```sh
88
+ diane playback --all
89
+ ```
90
+
91
+ - `--user USER` : By default, Diane plays back the recording(s) attributed to the git user currently logged in. To override this, use the `--user` option:
92
+
93
+ ```sh
94
+ diane playback 3 --user "bob"
95
+ ```
96
+ - `--everyone` : If you want to return a `NUMBER` of recordings irrespective of user, use the `--everyone` option.
97
+
98
+ ```sh
99
+ diane playback --all --everyone
100
+ ```
101
+ - `--inorder` : By default, diane plays back the most recent recordings first. You can override this and reverse them with the option `--inorder`.
102
+
103
+ ```sh
104
+ diane playback 5 --inorder
105
+ ```
106
+ <br>
107
+
108
+ > __Note:__ By default, `diane playback` with no number or options returns the single most recent result by the logged in user.
109
+
110
+ <br>
28
111
 
29
- TODO: Write usage instructions here
112
+ For more, see Diane's [Yardoc](https://www.rubydoc.info/github/mnyrop/diane/master/Diane).
30
113
 
114
+ <hr>
31
115
 
32
116
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "diane"
3
+ require 'bundler/setup'
4
+ require 'diane'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
10
+ # require 'pry'
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start(__FILE__)
data/bin/diane CHANGED
@@ -5,29 +5,32 @@ require 'diane'
5
5
 
6
6
  Mercenary.program(:diane) do |p|
7
7
  p.version Diane::VERSION
8
- p.description ''
9
- p.syntax "diane <subcommand> [options]"
8
+ p.description %(CL gem for recording and playing back thoughts/
9
+ intel/ motivations without bloating the Git logs.)
10
+ p.syntax 'diane <subcommand> [options]'
10
11
 
11
12
  p.command(:record) do |c|
12
13
  c.syntax 'record MESSAGE'
13
- c.description ''
14
- c.option 'user', '--user', 'Override'
15
- c.action do |args, opts|
16
- message = args.first
17
- Diane::Recorder.new(message, opts)
18
- end
14
+ c.description 'Record a new message with/to Diane'
15
+ c.option :user, '--user USER', %(Set user manually,
16
+ instead of fetching from git config (default))
17
+ c.action { |args, opts| Diane::Recorder.new(args.first, opts).record }
19
18
  end
20
19
 
21
20
  p.command(:playback) do |c|
22
21
  c.syntax 'playback NUMBER'
23
- c.description ''
24
- c.option 'all', '--all', 'Playback all matching recordings (no int limit)'
25
- c.option 'inorder', '--inorder', 'Playback oldest recordings first'
26
- c.option 'everyone', '--everyone', 'Playback everyone\'s recording, not just your own'
22
+ c.description %(Playback existing recordings by querying Diane)
23
+ c.option :all, '--all', %(Playback all matching recordings,
24
+ instead of 1 (default) or a specified NUMBER)
25
+ c.option :inorder, '--inorder', %(Playback oldest recordings first,
26
+ instead of most recent (default))
27
+ c.option :user, '--user USER', %(Playback a specific user/all
28
+ recordings, instead of your own (default))
29
+ c.option :everyone, '--everyone', %(Playback a recordings regardless
30
+ of user, instead of your own (default))
27
31
  c.action do |args, opts|
28
- num = args.first.to_i.abs
29
- num += 1 if num == 0
30
- Diane::Player.new(num, opts)
32
+ opts['num'] = args.first.to_i.abs
33
+ Diane::Player.new(opts).play
31
34
  end
32
35
  end
33
36
  end
@@ -1,26 +1,28 @@
1
-
2
- lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "diane/version"
1
+ $LOAD_PATH.push File.expand_path('lib')
5
2
 
6
3
  Gem::Specification.new do |spec|
7
- spec.name = "diane"
8
- spec.version = Diane::VERSION
9
- spec.authors = ["mnyrop"]
10
- spec.email = ["m.nyrop@columbia.edu"]
4
+ spec.name = 'diane'
5
+ spec.version = '0.0.2'
6
+ spec.authors = ['mnyrop']
7
+ spec.email = ['m.nyrop@columbia.edu']
11
8
 
12
- spec.summary = %q{CL gem for recording and playing back thoughts/intel/motivations without bloating the Git logs.}
13
- spec.description = %q{I have been assigned a secretary. Her name is Diane. She seems an interesting cross between a saint and a cabaret singer.}
14
- spec.homepage = "https://github.com/mnyrop/diane"
15
- spec.license = "MIT"
9
+ spec.summary = %(CL gem for recording and playing back thoughts.)
10
+ spec.description = %(CL gem for recording and playing back thoughts/
11
+ intel/ motivations without bloating the Git logs.)
12
+ spec.homepage = 'https://github.com/mnyrop/diane'
13
+ spec.license = 'MIT'
16
14
 
17
15
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
16
  f.match(%r{^(test|spec|features)/})
19
17
  end
20
- spec.executables = ["diane"]
21
- spec.require_paths = ["lib"]
22
18
 
23
- spec.add_dependency "mercenary", "~> 0.3"
24
- spec.add_dependency "colorize", "~> 0.3"
25
- spec.add_development_dependency "bundler", "~> 1.16"
19
+ spec.executables = ['diane']
20
+ spec.require_paths = ['lib']
21
+
22
+ spec.add_dependency 'colorize', '~> 0.8'
23
+ spec.add_dependency 'mercenary', '~> 0.3'
24
+ spec.add_development_dependency 'bundler', '~> 1.16'
25
+ spec.add_development_dependency 'faker', '~> 1'
26
+ spec.add_development_dependency 'rspec', '~> 3'
27
+ spec.add_development_dependency 'rubocop', '>= 0.5'
26
28
  end
File without changes
@@ -1,11 +1,9 @@
1
- require 'date'
2
-
3
- require 'diane/version'
4
1
  require 'diane/player'
5
2
  require 'diane/recorder'
6
3
 
4
+ # Umbrella module for Diane player/recorder
7
5
  module Diane
8
- DIFILE = './DIANE'
9
- USER = `git config user.name`.strip
10
- TIME = DateTime.now.strftime("%d/%m/%Y %H:%M")
6
+ DIFILE = "#{`pwd`.strip}/DIANE".freeze # Location of Diane file
7
+ USER = `git config user.name`.strip # Git user initiating the recording
8
+ VERSION = '0.0.2'.freeze # Gem version
11
9
  end
@@ -2,46 +2,65 @@ require 'csv'
2
2
  require 'colorize'
3
3
 
4
4
  module Diane
5
+ # Reconstructs and plays back recordings
5
6
  class Player
6
- def initialize(num, opts)
7
- @num = num
8
- @inorder = opts.fetch('inorder', false)
9
- @everyone = opts.fetch('everyone', false)
10
- @all = opts.fetch('all', false)
11
- @recordings = recordings
7
+ attr_reader :recordings, :user
12
8
 
13
- play
9
+ def initialize(opts)
10
+ @num = opts.fetch(:num, 1)
11
+ @inorder = opts.fetch(:inorder, false)
12
+ @user = opts.fetch(:user, USER)
13
+ @everyone = opts.fetch(:everyone, false)
14
+ @all = opts.fetch(:all, false)
15
+ @recordings = query(all_recordings)
14
16
  end
15
17
 
16
- def recordings
17
- r = CSV.read(DIFILE, { headers: true }).map(&:to_hash)
18
- r.select!{ |d| d['user'] == USER } unless @everyone
19
- limit = @all ? r.length : [@num, r.length].min
20
- r.reverse! unless @inorder
21
- r.take(limit)
18
+ # Returns hash array of all
19
+ # recordings in DIANE file
20
+ def all_recordings
21
+ opts = {
22
+ headers: true,
23
+ header_converters: :symbol,
24
+ encoding: 'utf-8'
25
+ }
26
+ CSV.read(DIFILE, opts).map(&:to_hash)
22
27
  end
23
28
 
29
+ # Generates a subset of recordings
30
+ # using command options (number, user, order)
31
+ def query(recordings)
32
+ @num += 1 if @num.zero?
33
+ recordings.select! { |r| r[:user] == @user } unless @everyone
34
+ limit = @all ? recordings.length : [@num, recordings.length].min
35
+ recordings.reverse! unless @inorder
36
+ recordings.take(limit)
37
+ end
38
+
39
+ # generates shell message describing
40
+ # the recordings returned by query
24
41
  def preface
25
42
  position = @inorder ? 'first' : 'last'
26
- scope = @everyone ? "everyone's" : 'your'
27
- if @recordings.length == 1
28
- preface = "\nHere's the #{position} of #{scope} recordings:"
29
- else
30
- preface = "\nHere's the #{position} #{@recordings.length} of #{scope} recordings:"
31
- end
43
+ scope = @user == USER ? 'your' : "#{@user}'s"
44
+ preface = if @recordings.length == 1
45
+ %(Here's the #{position} of #{scope} recordings:\n)
46
+ else
47
+ %(Here's the #{position} #{@recordings.length}
48
+ of #{scope} recordings:\n)
49
+ end
32
50
  preface.green
33
51
  end
34
52
 
53
+ # returns and puts formatted recordings
54
+ # returned by query
35
55
  def play
36
- if @recordings.empty?
37
- puts "\nFuck off.".magenta
38
- else
39
- puts preface
40
- recordings.each do |r|
41
- puts "\n#{r['time']} : ".cyan + "@#{r['user']}".yellow
42
- puts "#{r['message']}"
43
- end
56
+ abort %(None from #{@user}. Fuck off.).magenta if @recordings.empty?
57
+ stdout = preface
58
+ @recordings.each do |r|
59
+ stdout += "\n#{r[:time]} : ".cyan + "@#{r[:user]}".yellow
60
+ stdout += "\n#{r[:message]}\n\n"
44
61
  end
62
+ puts stdout
63
+ stdout
45
64
  end
46
65
  end
47
66
  end
@@ -1,28 +1,38 @@
1
+ require 'csv'
1
2
 
2
3
  module Diane
4
+ # Records messages and metadata
3
5
  class Recorder
6
+ attr_reader :user
7
+
4
8
  def initialize(message, opts)
5
- @message = escape(message)
6
- record
9
+ abort 'Message is Nil. Fuck off.'.magenta if message.nil?
10
+ @message = message
11
+ @user = slug(opts.fetch(:user, USER))
12
+ @time = Time.now.asctime
7
13
  end
8
14
 
15
+ # generates new recording as csv row
16
+ # to new or existing DIANE file
9
17
  def record
10
18
  if File.exist? DIFILE
11
- File.open(DIFILE, 'a') { |f| f.puts("#{USER},#{@message},#{TIME}") }
19
+ CSV.open(DIFILE, 'a') { |csv| csv << [@user, @message, @time] }
12
20
  else
13
- File.open(DIFILE, 'a') do |f|
14
- f.puts('user,message,time')
15
- f.puts("#{USER},#{@message},#{TIME}")
21
+ CSV.open(DIFILE, 'a') do |csv|
22
+ csv << %w[user message time]
23
+ csv << [@user, @message, @time]
16
24
  end
17
25
  end
18
- puts "".green
19
- rescue => e
20
- abort "Broken".magenta + "#{e}"
26
+ puts ''.green
27
+ rescue StandardError => e
28
+ abort 'Broken'.magenta + e
21
29
  end
22
30
 
23
- def escape(s)
24
- abort "Message is Nil. Fuck off.".magenta if s.nil?
25
- "\"#{s.gsub('"','\\"')}\""
31
+ # normalizes and slugifies
32
+ # recording user handle
33
+ def slug(user)
34
+ abort 'User is nil. Fuck off.'.magenta if user.nil?
35
+ user.downcase.strip.tr(' ', '_').gsub(/[^\w-]/, '')
26
36
  end
27
37
  end
28
38
  end
metadata CHANGED
@@ -1,31 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diane
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - mnyrop
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-01 00:00:00.000000000 Z
11
+ date: 2018-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: mercenary
14
+ name: colorize
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.3'
19
+ version: '0.8'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.3'
26
+ version: '0.8'
27
27
  - !ruby/object:Gem::Dependency
28
- name: colorize
28
+ name: mercenary
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
@@ -52,8 +52,51 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.16'
55
- description: I have been assigned a secretary. Her name is Diane. She seems an interesting
56
- cross between a saint and a cabaret singer.
55
+ - !ruby/object:Gem::Dependency
56
+ name: faker
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0.5'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0.5'
97
+ description: |-
98
+ CL gem for recording and playing back thoughts/
99
+ intel/ motivations without bloating the Git logs.
57
100
  email:
58
101
  - m.nyrop@columbia.edu
59
102
  executables:
@@ -62,7 +105,9 @@ extensions: []
62
105
  extra_rdoc_files: []
63
106
  files:
64
107
  - ".gitignore"
65
- - DIANE
108
+ - ".rspec"
109
+ - ".rubocop.yml"
110
+ - ".travis.yml"
66
111
  - Gemfile
67
112
  - LICENSE.txt
68
113
  - README.md
@@ -70,12 +115,10 @@ files:
70
115
  - bin/diane
71
116
  - bin/setup
72
117
  - diane.gemspec
73
- - docs/DIANE
74
- - docs/diane.gif
118
+ - diane.gif
75
119
  - lib/diane.rb
76
120
  - lib/diane/player.rb
77
121
  - lib/diane/recorder.rb
78
- - lib/diane/version.rb
79
122
  homepage: https://github.com/mnyrop/diane
80
123
  licenses:
81
124
  - MIT
@@ -99,6 +142,5 @@ rubyforge_project:
99
142
  rubygems_version: 2.7.6
100
143
  signing_key:
101
144
  specification_version: 4
102
- summary: CL gem for recording and playing back thoughts/intel/motivations without
103
- bloating the Git logs.
145
+ summary: CL gem for recording and playing back thoughts.
104
146
  test_files: []
data/DIANE DELETED
@@ -1,3 +0,0 @@
1
- user,message,time
2
- mnyrop,"test",01/06/2018 17:12
3
- mnyrop,"test",01/06/2018 17:30
data/docs/DIANE DELETED
@@ -1,11 +0,0 @@
1
- user,message,time
2
- cooper,"entering the town of twin peaks, five miles south of the canadian border, twelve miles west of the state line",01/06/2018 15:02
3
- cooper,"i've never seen so many trees in my life",01/06/2018 15:02
4
- cooper,"i almost forgot, i've got to find out what kind of trees these are. they're really something.",01/06/2018 15:03
5
- cooper,"the owls are not what they seem",01/06/2018 15:03
6
- cooper,"I have no idea where this will lead us. But I have a definite feeling it will be a place both wonderful and strange.",01/06/2018 16:46
7
- cooper,"MAY A SMILE BE YOUR UMBRELLA. WE'VE ALL HAD OUR SOCKS TOSSED AROUND.",01/06/2018 16:46
8
- cooper,"Pie. Whoever invented the pie? Here was a great person.",01/06/2018 16:48
9
- cooper,"I believe I was visited by a giant last night. Twice.",01/06/2018 16:53
10
- mnyrop,"when you see me again, it won't be me",01/06/2018 16:58
11
- mnyrop,"one day my log will have something to say about this",01/06/2018 17:04
@@ -1,3 +0,0 @@
1
- module Diane
2
- VERSION = "0.0.1"
3
- end