ignoramos 1.0.1 → 1.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ecbddf5da2625c41dae80c79e62bb08057cc76bd
4
- data.tar.gz: cc445af320c1e3863752c56e1cba8c39a00d8cad
3
+ metadata.gz: b775b7dbb49c4b26b018f96eac206bf6db773142
4
+ data.tar.gz: 565c0ebf1aaf1c829799331d39341f44d1a4fa7f
5
5
  SHA512:
6
- metadata.gz: e1f22d1b188129a2ed77725fd103c0313f6380596f0cf2ed24126668e3939b55c9618e0ee47f981e9ea5bc91981870172e44c47b0fdf08115f786c75f9cfa7ab
7
- data.tar.gz: a9e3c8bd9843ca5733ca7ac0be25cafda703599164ac6988c193abae4e830d7f2dff604b2ec7bfa6710a79300ff02595d50fed65da7994af19e3161b1a3967bf
6
+ metadata.gz: 3f51c2fc953aa4f3e94aa6382ceb2317110d16feed96de03940c3a4af866607b985e28c981945cba492d27d7f8cbfd08d3eb1c9339cd4c339e445200e7a33638
7
+ data.tar.gz: 731ed4f2bce2065b04f5c85ec71881105828d7fd53d858acb12649a53fe60f7453dacc3107308f30b377bf42783020fe82322a5c596d0de95a6a3d8b2263d869
data/README.md CHANGED
@@ -7,6 +7,7 @@ Status](https://travis-ci.org/achan/ignoramos.svg?branch=master)](https://travis
7
7
  Climate](https://codeclimate.com/github/achan/ignoramos/badges/gpa.svg)](https://codeclimate.com/github/achan/ignoramos)
8
8
  [![Coverage
9
9
  Status](https://img.shields.io/coveralls/achan/ignoramos.svg)](https://coveralls.io/r/achan/ignoramos)
10
+ [![Gem Version](https://badge.fury.io/rb/ignoramos.svg)](http://badge.fury.io/rb/ignoramos)
10
11
 
11
12
  Getting started
12
13
  ===============
@@ -42,7 +43,7 @@ Directory structure
42
43
  ```
43
44
 
44
45
  ```
45
- $ ignoramos build
46
+ ~ $ ignoramos build
46
47
  ```
47
48
 
48
49
  The `build` command is expected to be run at the root directory of the
@@ -57,7 +58,37 @@ How posts are built
57
58
  - Render layout as content
58
59
  - Render liquid layout (header, footer, content)
59
60
 
60
- After all posts and pages are generated, all remaining files that are not from a
61
- folder prefixed with `_` will be copied over to `_site`. Custom files take
61
+ After all posts and pages are generated, all remaining files that are not from
62
+ a folder prefixed with `_` will be copied over to `_site`. Custom files take
62
63
  precedence, so if your files conflict with generated ones, yours will overwrite
63
64
  the generated file.
65
+
66
+ Microblogging
67
+ ===============
68
+
69
+ Currently, the only external microblogging platform that is supported is Twitter:
70
+
71
+ ```
72
+ ~ $ ignoramos tweet "hello world #testing"
73
+ ```
74
+
75
+ This command will post to twitter and create a micro blog in your `_posts`
76
+ directory with filename: `tweet-<twitter_id>.md` with the following contents:
77
+
78
+ ```
79
+ ---
80
+ title: tweet 526064479298396163
81
+ timestamp: 2014-10-25T13:35:20-04:00
82
+ layout: tweet
83
+ tweet: https://twitter.com/amoschan/status/526064479298396163
84
+ ---
85
+
86
+ hello world #testing
87
+ ```
88
+
89
+ It is them up to your theme to support the `tweet` layout and optionally use the
90
+ `tweet` variable to link back to Twitter.
91
+
92
+ For an example of tweets in action, see the [achan/amoschan][ac] theme.
93
+
94
+ [ac]: https://github.com/achan/amoschan/commit/f15c149e531a35f9c3a38f8c49311a0f3ce7c612
data/ignoramos.gemspec CHANGED
@@ -4,12 +4,12 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "ignoramos"
7
- spec.version = "1.0.1"
7
+ spec.version = "1.1.0"
8
8
  spec.authors = ["Amos Chan"]
9
9
  spec.email = ["amosschan@gmail.com"]
10
10
  spec.summary = %q{A static site generator for blogs and microposts.}
11
11
  spec.description = spec.summary
12
- spec.homepage = "http://rubygems.org/gems/ignoramos"
12
+ spec.homepage = "http://github.com/achan/ignoramos"
13
13
  spec.license = "MIT"
14
14
 
15
15
  spec.files = `git ls-files -z`.split("\x0")
@@ -0,0 +1,51 @@
1
+ require 'liquid'
2
+ require 'models/post'
3
+ require 'models/app_config'
4
+ require 'twitter'
5
+ require 'twitter/tweet'
6
+ require 'file_helper'
7
+
8
+ class BaseTweetCommand
9
+ attr_reader :file_helper
10
+
11
+ TWEET_LAYOUT = <<-LAYOUT
12
+ ---
13
+ title: tweet {{tweet.id}}
14
+ timestamp: {{tweet.timestamp}}
15
+ layout: tweet
16
+ tweet: {{tweet.url}}
17
+ ---
18
+
19
+ {{tweet.content}}
20
+ LAYOUT
21
+
22
+ def initialize
23
+ @file_helper = FileHelper.new(Dir.pwd)
24
+ end
25
+
26
+ protected
27
+ def app_config
28
+ @config ||= AppConfig.new(file_helper.read_file("_config.yml"))
29
+ end
30
+
31
+ def twitter
32
+ @twitter ||= Twitter::REST::Client.new do |config|
33
+ config.consumer_key = "RerlMuPVgYySMdqvuaBeSw"
34
+ config.consumer_secret = "Ccq3hS7fMplpjwCfvpVyPQXV6nPGGGonXSAdmi8ZIc"
35
+ config.access_token = app_config.vars['twitter']['access_token']
36
+ config.access_token_secret = app_config.vars['twitter']['access_token_secret']
37
+ end
38
+ end
39
+
40
+ def persist_tweet(tweet)
41
+ file_helper.new_file("_posts/tweet-#{tweet.id}.md",
42
+ Liquid::Template.parse(TWEET_LAYOUT).render({
43
+ 'tweet' => {
44
+ 'content' => tweet.text,
45
+ 'id' => tweet.id,
46
+ 'url' => tweet.uri.to_s,
47
+ 'timestamp' => DateTime.parse(tweet.created_at.to_s)
48
+ }
49
+ }))
50
+ end
51
+ end
@@ -1,5 +1,5 @@
1
1
  require 'liquid'
2
- require 'fileutils'
2
+ require 'file_helper'
3
3
  require 'models/post'
4
4
  require 'models/page'
5
5
  require 'models/app_config'
@@ -7,12 +7,13 @@ require 'models/app_config'
7
7
  class BuildCommand
8
8
  def initialize(dir = Dir.pwd)
9
9
  @dir = dir
10
+ @file_helper = FileHelper.new(dir)
10
11
  end
11
12
 
12
13
  def execute
13
14
  Liquid::Template.file_system = Liquid::LocalFileSystem.new("#{ @dir }/_includes")
14
15
  FileUtils.rm_rf("#{ @dir }/_site")
15
- mkdir_p("_site")
16
+ @file_helper.mkdir_p("_site")
16
17
 
17
18
  generate_pages
18
19
  generate_posts
@@ -24,7 +25,7 @@ class BuildCommand
24
25
 
25
26
  private
26
27
  def config
27
- @config ||= AppConfig.new(read_file("_config.yml"))
28
+ @config ||= AppConfig.new(@file_helper.read_file("_config.yml"))
28
29
  end
29
30
 
30
31
  def copy_custom_files
@@ -63,7 +64,7 @@ class BuildCommand
63
64
  Dir.foreach("#{ @dir }/#{ dir }") do |item|
64
65
  next if item == '.' || item == '..'
65
66
 
66
- contents = read_file("#{ dir }/#{ item }")
67
+ contents = @file_helper.read_file("#{ dir }/#{ item }")
67
68
  posts << if block_given?
68
69
  yield contents
69
70
  else
@@ -85,11 +86,11 @@ class BuildCommand
85
86
  def generate_dir(posts, template, &block)
86
87
  posts.each do |post|
87
88
  params = yield post
88
- layout = read_file("_layouts/#{ post.vars['layout'] }/#{ template }.liquid")
89
+ layout = @file_helper.read_file("_layouts/#{ post.vars['layout'] }/#{ template }.liquid")
89
90
  post_params = { 'site' => site_config }.merge(params.merge(post.vars))
90
91
  post_params['title'] = "#{ post_params['title'] } - #{ config.vars['site']['name'] }"
91
- mkdir_p("_site#{ post.path }")
92
- new_file("_site#{ post.permalink }",
92
+ @file_helper.mkdir_p("_site#{ post.path }")
93
+ @file_helper.new_file("_site#{ post.permalink }",
93
94
  Liquid::Template.parse(layout).render(post_params))
94
95
  end
95
96
  end
@@ -117,11 +118,11 @@ class BuildCommand
117
118
  end
118
119
 
119
120
  def tags_layout
120
- @layout ||= read_file("_layouts/default/tags.liquid")
121
+ @layout ||= @file_helper.read_file("_layouts/default/tags.liquid")
121
122
  end
122
123
 
123
124
  def new_tags_index_file(filename, title, tags)
124
- new_file(filename,
125
+ @file_helper.new_file(filename,
125
126
  Liquid::Template.parse(tags_layout).render({
126
127
  'title' => title,
127
128
  'tags' => tags,
@@ -130,7 +131,7 @@ class BuildCommand
130
131
  end
131
132
 
132
133
  def generate_index_per_tag
133
- mkdir_p("_site/tags")
134
+ @file_helper.mkdir_p("_site/tags")
134
135
 
135
136
  tags.each do |tag|
136
137
  new_tags_index_file("_site/tags/#{ tag['name'] }.html",
@@ -144,14 +145,14 @@ class BuildCommand
144
145
  reverse.
145
146
  first(5)
146
147
 
147
- layout = read_file("_layouts/default/posts.liquid")
148
+ layout = @file_helper.read_file("_layouts/default/posts.liquid")
148
149
 
149
- new_file("_site/index.html",
150
- Liquid::Template.parse(layout).render({
151
- 'posts' => homepage_posts,
152
- 'title' => config.vars['site']['name'],
153
- 'site' => site_config
154
- }))
150
+ @file_helper.new_file("_site/index.html",
151
+ Liquid::Template.parse(layout).render({
152
+ 'posts' => homepage_posts,
153
+ 'title' => config.vars['site']['name'],
154
+ 'site' => site_config
155
+ }))
155
156
  end
156
157
 
157
158
  def site_config
@@ -162,27 +163,11 @@ class BuildCommand
162
163
  }
163
164
  end
164
165
 
165
- def mkdir_p(dir)
166
- FileUtils.mkdir_p("#{ @dir }/#{ dir }")
167
- end
168
-
169
- def new_file(filename, contents)
170
- new_post_file = File.new("#{ @dir }/#{ filename }", 'w')
171
- new_post_file.write(contents)
172
- new_post_file.close
173
- end
174
-
175
- def read_file(filename)
176
- File.open("#{ @dir }/#{ filename }", 'r') do |file|
177
- file.read()
178
- end
179
- end
180
-
181
166
  def cache
182
167
  @cache ||= {}
183
168
  end
184
169
 
185
170
  def template(layout)
186
- cache[layout.to_sym] ||= read_file("_layouts/#{ layout }/post.liquid")
171
+ cache[layout.to_sym] ||= @file_helper.read_file("_layouts/#{ layout }/post.liquid")
187
172
  end
188
173
  end
@@ -0,0 +1,11 @@
1
+ require 'commands/base_tweet_command'
2
+ class ImportTweetCommand < BaseTweetCommand
3
+ def initialize(tweet_id)
4
+ super()
5
+ @tweet_id = tweet_id
6
+ end
7
+
8
+ def execute
9
+ persist_tweet(twitter.status(@tweet_id))
10
+ end
11
+ end
@@ -1,10 +1,12 @@
1
1
  require 'fileutils'
2
+ require 'file_helper'
2
3
 
3
4
  class NewCommand
4
5
  attr_accessor :dir
5
6
 
6
7
  def initialize(dir)
7
8
  @dir = dir.to_s
9
+ @file_helper = FileHelper.new(dir)
8
10
  end
9
11
 
10
12
  def execute
@@ -21,14 +23,7 @@ class NewCommand
21
23
  tagline = 'A short description of my blog'
22
24
  desc = 'Site description'
23
25
 
24
- new_file("_config.yml",
25
- "---\nsite:\n name: #{ blog_name }\n tagline: #{ tagline }\n description: #{ desc }")
26
- end
27
-
28
- private
29
- def new_file(filename, contents)
30
- new_post_file = File.new("#{ @dir }/#{ filename }", 'w')
31
- new_post_file.write(contents)
32
- new_post_file.close
26
+ @file_helper.new_file("_config.yml",
27
+ "---\nsite:\n name: #{ blog_name }\n tagline: #{ tagline }\n description: #{ desc }")
33
28
  end
34
29
  end
@@ -1,64 +1,12 @@
1
- require 'liquid'
2
- require 'fileutils'
3
- require 'models/post'
4
- require 'models/app_config'
5
- require 'twitter'
6
- require 'twitter/tweet'
7
-
8
- class TweetCommand
9
- LAYOUT = <<-LAYOUT
10
- ---
11
- title: tweet {{tweet.id}}
12
- timestamp: {{tweet.timestamp}}
13
- layout: tweet
14
- tweet: {{tweet.url}}
15
- ---
16
-
17
- {{tweet.content}}
18
- LAYOUT
1
+ require 'commands/base_tweet_command'
19
2
 
3
+ class TweetCommand < BaseTweetCommand
20
4
  def initialize(tweet)
5
+ super()
21
6
  @tweet = tweet
22
- @dir = Dir.pwd
23
7
  end
24
8
 
25
9
  def execute
26
- tweet = twitter.update(@tweet)
27
-
28
- new_file("_posts/tweet-#{tweet.id}.md",
29
- Liquid::Template.parse(LAYOUT).render({
30
- 'tweet' => {
31
- 'content' => @tweet,
32
- 'id' => tweet.id,
33
- 'url' => tweet.uri.to_s,
34
- 'timestamp' => DateTime.now
35
- }
36
- }))
37
- end
38
-
39
- private
40
- def app_config
41
- @config ||= AppConfig.new(read_file("_config.yml"))
42
- end
43
-
44
- def new_file(filename, contents)
45
- new_post_file = File.new("#{@dir}/#{filename}", 'w')
46
- new_post_file.write(contents)
47
- new_post_file.close
48
- end
49
-
50
- def read_file(filename)
51
- File.open("#{@dir}/#{filename}", 'r') do |file|
52
- file.read()
53
- end
54
- end
55
-
56
- def twitter
57
- @twitter ||= Twitter::REST::Client.new do |config|
58
- config.consumer_key = "RerlMuPVgYySMdqvuaBeSw"
59
- config.consumer_secret = "Ccq3hS7fMplpjwCfvpVyPQXV6nPGGGonXSAdmi8ZIc"
60
- config.access_token = app_config.vars['twitter']['access_token']
61
- config.access_token_secret = app_config.vars['twitter']['access_token_secret']
62
- end
10
+ persist_tweet(twitter.update(@tweet))
63
11
  end
64
12
  end
@@ -0,0 +1,25 @@
1
+ require 'fileutils'
2
+
3
+ class FileHelper
4
+ attr_reader :dir
5
+
6
+ def initialize(dir)
7
+ @dir = dir
8
+ end
9
+
10
+ def new_file(filename, contents)
11
+ new_post_file = File.new("#{dir}/#{filename}", 'w')
12
+ new_post_file.write(contents)
13
+ new_post_file.close
14
+ end
15
+
16
+ def read_file(filename)
17
+ File.open("#{dir}/#{filename}", 'r') do |file|
18
+ file.read()
19
+ end
20
+ end
21
+
22
+ def mkdir_p(dir)
23
+ FileUtils.mkdir_p("#{@dir}/#{dir}")
24
+ end
25
+ end
data/lib/ignoramos.rb CHANGED
@@ -1,29 +1,30 @@
1
- require 'commands/new_command'
2
- require 'commands/build_command'
3
- require 'commands/tweet_command'
4
-
5
1
  class Ignoramos
6
2
  def initialize(args = [])
7
3
  command(args).execute
8
4
  end
9
5
 
10
- def command(args)
11
- cmd = args[0] unless args.empty?
12
-
13
- if cmd == 'new'
14
- NewCommand.new(args[1])
15
- elsif cmd == 'build'
16
- BuildCommand.new
17
- elsif cmd == 'tweet'
18
- TweetCommand.new(args[1])
19
- else
20
- NilCommand.new
21
- end
22
- end
23
-
24
6
  NilCommand = Struct.new(:args) do
25
7
  def execute
26
8
  puts 'command not supported'
27
9
  end
28
10
  end
11
+
12
+ private
13
+ def command(args)
14
+ cmd = args.slice!(0) unless args.empty?
15
+ Object.const_get(classify(cmd)).new(*args)
16
+ rescue NameError
17
+ NilCommand.new
18
+ end
19
+
20
+
21
+ def classify(command)
22
+ snake_class = "#{command}_command"
23
+ begin
24
+ require "commands/#{snake_class}"
25
+ rescue LoadError => e
26
+ puts e.to_s
27
+ end
28
+ snake_class.split('_').collect(&:capitalize).join
29
+ end
29
30
  end
data/rebuild_gem CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/bin/bash
2
2
 
3
- gem uninstall ignoramos-0.0.0.gem
3
+ gem uninstall ignoramos-1.1.0.gem
4
4
  gem build ignoramos.gemspec
5
- gem install ignoramos-0.0.0.gem
5
+ gem install ignoramos-1.1.0.gem
6
6
 
7
7
  rbenv rehash
@@ -0,0 +1,12 @@
1
+ require './lib/commands/import_tweet_command'
2
+ require 'shared_examples/tweet_command_examples'
3
+
4
+ RSpec.describe ImportTweetCommand do
5
+ describe '#execute' do
6
+ let(:command) { ImportTweetCommand.new(tweet_id) }
7
+ let(:client_method) { :status }
8
+ let(:client_args) { tweet_id }
9
+
10
+ it_behaves_like "a command that writes a tweet to file"
11
+ end
12
+ end
@@ -1,59 +1,12 @@
1
- require './lib/commands/new_command'
2
- require './lib/commands/tweet_command'
3
- require 'fakefs/spec_helpers'
4
- require 'timecop'
1
+ require 'commands/tweet_command'
2
+ require 'shared_examples/tweet_command_examples'
5
3
 
6
4
  RSpec.describe TweetCommand do
7
5
  describe '#execute' do
8
- include FakeFS::SpecHelpers
6
+ let(:command) { TweetCommand.new(tweet) }
7
+ let(:client_method) { :update }
8
+ let(:client_args) { tweet }
9
9
 
10
- let(:command) { TweetCommand.new('testdir') }
11
- let(:tweet) { 'this is a tweet' }
12
- let(:tweet_id) { '525483671584002048' }
13
- let(:tweet_url) { "https://twitter.com/amoschan/status/#{tweet_id}" }
14
- let(:tweet_post) do
15
- <<-TWEET
16
- ---
17
- title: tweet #{tweet_id}
18
- timestamp: #{now}
19
- layout: tweet
20
- tweet: #{tweet_url}
21
- ---
22
-
23
- this is a tweet
24
- TWEET
25
- end
26
-
27
- let(:now) { DateTime.now }
28
-
29
- let(:created_tweet) do
30
- double()
31
- end
32
-
33
- before do
34
- created_tweet.stub(:uri).and_return(URI(tweet_url))
35
- created_tweet.stub(:id).and_return(tweet_id)
36
- allow_any_instance_of(AppConfig).
37
- to receive(:vars).and_return({
38
- 'twitter' => { 'access_token' => 'token',
39
- 'access_token_secret' => 'secret' }
40
- })
41
-
42
- expect_any_instance_of(Twitter::REST::Client).
43
- to receive(:update).with(tweet).and_return(created_tweet)
44
-
45
- Timecop.freeze do
46
- NewCommand.new('testdir').execute
47
- Dir.chdir('testdir')
48
- TweetCommand.new('this is a tweet').execute
49
- now
50
- end
51
- end
52
-
53
- it 'creates new tweet' do
54
- File.open("_posts/tweet-#{tweet_id}.md", 'r') do |file|
55
- expect(file.read()).to eq(tweet_post)
56
- end
57
- end
10
+ it_behaves_like "a command that writes a tweet to file"
58
11
  end
59
12
  end
@@ -0,0 +1,68 @@
1
+ require 'commands/build_command'
2
+ require 'commands/tweet_command'
3
+ require 'commands/new_command'
4
+ require 'commands/import_tweet_command'
5
+ require 'pry'
6
+ require 'ignoramos'
7
+
8
+ RSpec.describe Ignoramos do
9
+ shared_examples_for "a command executer" do
10
+ let(:command) { double() }
11
+
12
+ it 'instantiates a command and calls execute' do
13
+ expect(command_class).
14
+ to receive(:new).with(*args[1..-1]).and_return(command)
15
+ expect(command).to receive(:execute)
16
+
17
+ Ignoramos.new(args)
18
+ end
19
+ end
20
+
21
+ shared_examples_for 'a command executer with no args' do
22
+ let(:command) { double() }
23
+
24
+ it 'instantiates a command and calls execute' do
25
+ expect(command_class).to receive(:new).with(no_args).and_return(command)
26
+ expect(command).to receive(:execute)
27
+
28
+ Ignoramos.new(args)
29
+ end
30
+ end
31
+
32
+ describe '#initialize' do
33
+ describe 'when the command passed is "new"' do
34
+ let(:args) { ['new', 'tempsite'] }
35
+ let(:command_class) { NewCommand }
36
+
37
+ it_behaves_like "a command executer"
38
+ end
39
+
40
+ describe 'when the command passed is "tweet"' do
41
+ let(:args) { ['tweet', 'this is a tweet'] }
42
+ let(:command_class) { TweetCommand }
43
+
44
+ it_behaves_like "a command executer"
45
+ end
46
+
47
+ describe 'when the command passed is "build"' do
48
+ let(:args) { ['build'] }
49
+ let(:command_class) { BuildCommand }
50
+
51
+ it_behaves_like "a command executer with no args"
52
+ end
53
+
54
+ describe 'when the command passed is "import_tweet"' do
55
+ let(:args) { ['import_tweet', '1234'] }
56
+ let(:command_class) { ImportTweetCommand }
57
+
58
+ it_behaves_like "a command executer"
59
+ end
60
+
61
+ describe 'when the command is unsupported' do
62
+ let(:args) { ['asdasfsdfsd'] }
63
+ let(:command_class) { Ignoramos::NilCommand }
64
+
65
+ it_behaves_like "a command executer with no args"
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,58 @@
1
+ require './lib/commands/new_command'
2
+ require 'fakefs/spec_helpers'
3
+ require 'timecop'
4
+
5
+ shared_examples_for "a command that writes a tweet to file" do
6
+ include FakeFS::SpecHelpers
7
+
8
+ let(:tweet) { 'this is a tweet' }
9
+ let(:tweet_id) { '525483671584002048' }
10
+ let(:tweet_url) { "https://twitter.com/amoschan/status/#{tweet_id}" }
11
+ let(:tweet_post) do
12
+ <<-TWEET
13
+ ---
14
+ title: tweet #{tweet_id}
15
+ timestamp: #{now}
16
+ layout: tweet
17
+ tweet: #{tweet_url}
18
+ ---
19
+
20
+ #{tweet}
21
+ TWEET
22
+ end
23
+
24
+ let(:now) { DateTime.now }
25
+ let(:now_time) { Time.now }
26
+
27
+ let(:remote_tweet) do
28
+ double()
29
+ end
30
+
31
+ before do
32
+ Timecop.freeze do
33
+ remote_tweet.stub(:uri).and_return(URI(tweet_url))
34
+ remote_tweet.stub(:id).and_return(tweet_id)
35
+ remote_tweet.stub(:created_at).and_return(now_time)
36
+ remote_tweet.stub(:text).and_return(tweet)
37
+ allow_any_instance_of(AppConfig).
38
+ to receive(:vars).and_return({
39
+ 'twitter' => { 'access_token' => 'token',
40
+ 'access_token_secret' => 'secret' }
41
+ })
42
+
43
+ expect_any_instance_of(Twitter::REST::Client).
44
+ to receive(client_method).with(client_args).and_return(remote_tweet)
45
+
46
+ NewCommand.new('testdir').execute
47
+ Dir.chdir('testdir')
48
+ command.execute
49
+ now
50
+ end
51
+ end
52
+
53
+ it 'creates new tweet' do
54
+ File.open("_posts/tweet-#{tweet_id}.md", 'r') do |file|
55
+ expect(file.read()).to eq(tweet_post)
56
+ end
57
+ end
58
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ignoramos
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amos Chan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-25 00:00:00.000000000 Z
11
+ date: 2014-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -56,22 +56,28 @@ files:
56
56
  - Rakefile
57
57
  - bin/ignoramos
58
58
  - ignoramos.gemspec
59
+ - lib/commands/base_tweet_command.rb
59
60
  - lib/commands/build_command.rb
61
+ - lib/commands/import_tweet_command.rb
60
62
  - lib/commands/new_command.rb
61
63
  - lib/commands/tweet_command.rb
64
+ - lib/file_helper.rb
62
65
  - lib/ignoramos.rb
63
66
  - lib/models/app_config.rb
64
67
  - lib/models/page.rb
65
68
  - lib/models/post.rb
66
69
  - rebuild_gem
67
70
  - spec/commands/build_command_spec.rb
71
+ - spec/commands/import_tweet_command_spec.rb
68
72
  - spec/commands/new_command_spec.rb
69
73
  - spec/commands/tweet_command_spec.rb
74
+ - spec/ignoramos_spec.rb
70
75
  - spec/models/app_config_spec.rb
71
76
  - spec/models/page_spec.rb
72
77
  - spec/models/post_spec.rb
78
+ - spec/shared_examples/tweet_command_examples.rb
73
79
  - spec/spec_helper.rb
74
- homepage: http://rubygems.org/gems/ignoramos
80
+ homepage: http://github.com/achan/ignoramos
75
81
  licenses:
76
82
  - MIT
77
83
  metadata: {}
@@ -97,9 +103,12 @@ specification_version: 4
97
103
  summary: A static site generator for blogs and microposts.
98
104
  test_files:
99
105
  - spec/commands/build_command_spec.rb
106
+ - spec/commands/import_tweet_command_spec.rb
100
107
  - spec/commands/new_command_spec.rb
101
108
  - spec/commands/tweet_command_spec.rb
109
+ - spec/ignoramos_spec.rb
102
110
  - spec/models/app_config_spec.rb
103
111
  - spec/models/page_spec.rb
104
112
  - spec/models/post_spec.rb
113
+ - spec/shared_examples/tweet_command_examples.rb
105
114
  - spec/spec_helper.rb