trellor 2.0.3 → 2.0.4

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
  SHA1:
3
- metadata.gz: 85d97d017e9e202db49b8a9a4ec8ff05472fc3e0
4
- data.tar.gz: 7de26825b22aa66f3086d983802cf4186301048d
3
+ metadata.gz: eb73b614f294042859a8e4e29f7cd048e51cde34
4
+ data.tar.gz: 09f5a4d543b4879a05c83b22f9ce080cce4b98b1
5
5
  SHA512:
6
- metadata.gz: 737f9fc421e8d2af416001014b368d2288a6583f644177c2fbf7e71fa5b4d2e3fb326f39e294f98e2fbf1a8e8c0765f511ccd3860c8da8f3daf7c9dfeb724330
7
- data.tar.gz: 1ffb79c6a4f311dd524ebb1b8b30842d67927eb7fe59be2be436762704a437073a30fe201039e03c19b9da97cd3e14d7edfa13ee4b1ed484fc940228dd8ca6d8
6
+ metadata.gz: 56b997c347869890817f41e4b6f692d17ca787c32cb410a84bd0c1524fbcdac5153323b34037af76cd1caacc11f334d6210234b98e5435d426b8f1a247c70bc7
7
+ data.tar.gz: 7d99b990aff8f0cecc011c728fb4f845211c1b4e21f0436b24cb0e708ccd139c4fce95dddfa3a39a32fc225094f574fcf6e4dd5d35ce2bd6be348bd99972b74c
data/README.md CHANGED
@@ -28,6 +28,7 @@ Three environment variables need to be set: TRELLOR_KEY, TRELLOR_TOKEN,
28
28
  $ trellor to # prints all list names inside the first board with name
29
29
  # beginning with 'to' (case insensitive)
30
30
  # for example, this matches 'ToDo'
31
+ $ trellor 'to.*o' # regular expression search, would also print todo board.
31
32
  $ trellor to in # prints all card names in the list named 'in*' in board
32
33
  # named 'to*', e.g., matches 'ToDo.Inbox'
33
34
  # create a card:
@@ -42,6 +43,9 @@ Starting with version 2, a webapp is run in the background. Making the connectio
42
43
  Trello resulted in over half the time to run a command. The local webapp pays
43
44
  this cost only once.
44
45
 
46
+ Version 3 will be faster by using Trello's recently released webhooks. Plans
47
+ also include allowing offline usage.
48
+
45
49
 
46
50
  ## Development
47
51
 
@@ -49,9 +53,17 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
49
53
 
50
54
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
51
55
 
56
+ ## Design
57
+
58
+ ### Class Diagram
59
+ ![Alt text](/docs/trellor.png?raw=true "Class Diagram")
60
+
61
+ ### Sequence Diagram
62
+ ![Alt text](/docs/trellor_seq_diag.png?raw=true "Sequence Diagram")
63
+
52
64
  ## Contributing
53
65
 
54
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/trellor.
66
+ Bug reports and pull requests are welcome on GitHub at https://github.com/brianmd/trellor.
55
67
 
56
68
 
57
69
  ## License
data/docs/trellor.png ADDED
Binary file
data/docs/trellor.txt ADDED
@@ -0,0 +1,92 @@
1
+ @startuml
2
+
3
+ class Cli {
4
+ archive
5
+ verbose?
6
+ cache
7
+ webapi
8
+ slowtrellor
9
+ ==
10
+ parse()
11
+ -- queries --
12
+ query_trellor()
13
+ -- private --
14
+ save_all()
15
+ get_all()
16
+ home()
17
+ filepath()
18
+ verbose_log()
19
+ }
20
+
21
+ class TrellorInterface {
22
+ verbose_log(*args)
23
+ -- queries --
24
+ board_names()
25
+ list_names(board_regex)
26
+ cart_names(board_regex,list_regex)
27
+ create_card(board,list,card,descript)
28
+ archive_card(board,list,card)
29
+ }
30
+
31
+ Cli *- TrellorInterface : trellor >
32
+
33
+ class Trellor {
34
+ self.singleton()
35
+ -- queries --
36
+ board_names()
37
+ list_names(board_regex)
38
+ cart_names(board_regex,list_regex)
39
+ create_card(board,list,card,descript)
40
+ archive_card(board,list,card)
41
+ -- private queries --
42
+ boards()
43
+ boards=(boards)
44
+ find_board(board_regex)
45
+ find_list(board_regex,list_regex)
46
+ cards(board_regex,list_regex)
47
+ find_card(board,list,card)
48
+ -- connecting --
49
+ client()
50
+ connect()
51
+ user()
52
+ }
53
+
54
+ class WebTrellor {
55
+ ensure_webapp_is_running()
56
+ run_webapp()
57
+ -- queries --
58
+ board_names()
59
+ list_names(board_regex)
60
+ cart_names(board_regex,list_regex)
61
+ create_card(board,list,card,descript)
62
+ archive_card(board,list,card)
63
+ -- private --
64
+ get_http(url,data,timeout,show_error?)
65
+ post_http(url,data,timeout,show_error?)
66
+ default_open_timeout()
67
+ default_read_timeout()
68
+ site()
69
+ port()
70
+ }
71
+
72
+ TrellorInterface <|-- Trellor
73
+ TrellorInterface <|-- WebTrellor
74
+
75
+
76
+ class Sinatra::Base
77
+
78
+ class TrellorWebapi {
79
+ -- GETs --
80
+ /version
81
+ /boards
82
+ -- POSTs --
83
+ /boards
84
+ -- error handling --
85
+ not_found()
86
+ error()
87
+ }
88
+
89
+ Sinatra::Base <|-- TrellorWebapi
90
+
91
+ @enduml
92
+
Binary file
@@ -0,0 +1,20 @@
1
+ @startuml
2
+
3
+ actor User
4
+
5
+ User -> Cli : board_regex
6
+ Cli -> WebTrellor : board_names\n (board_regex)
7
+ WebTrellor -> TrellorWebapi : get_http(/boards)\n {board_name:\n board_regex}
8
+ |||
9
+ TrellorWebapi -> Trellor : board_names\n (board_regex)
10
+ |||
11
+
12
+ == OR, with -s(low) flag, goes directly to trellor class ==
13
+
14
+ User -> Cli : board_regex
15
+ Cli -> Trellor : board_names\n (board_regex)
16
+ |||
17
+ note over TrellorWebapi: Runs sinatra \non localhost
18
+
19
+ @enduml
20
+
data/lib/cli.rb CHANGED
@@ -14,11 +14,13 @@ module Trellor
14
14
  opt :slowtrellor, 'Make own connection rather than using webapi', short: '-s'
15
15
  end
16
16
 
17
+ logger # sets the logger's progname
18
+
17
19
  if webapi?
18
20
  require_relative 'web_trellor'
19
21
  web = WebTrellor.new
20
- web.be_verbose = true if @opts[:verbose]
21
- web.ensure_webapp_is_running
22
+ # web.be_verbose = true if verbose?
23
+ web.ensure_webapp_is_running(false)
22
24
  exit 0
23
25
  end
24
26
 
@@ -27,7 +29,7 @@ module Trellor
27
29
  p hash
28
30
  end
29
31
 
30
- process(*ARGV)
32
+ query_trellor(*ARGV)
31
33
  end
32
34
 
33
35
  private
@@ -42,14 +44,18 @@ module Trellor
42
44
  verbose_log('using webapi')
43
45
  require_relative 'web_trellor'
44
46
  web = WebTrellor.new
45
- web.be_verbose = true if @opts[:verbose]
47
+ web.be_verbose = true if verbose?
46
48
  web.ensure_webapp_is_running
47
49
  web
48
50
  end
49
- @trellor.be_verbose = true if @opts[:verbose]
51
+ @trellor.be_verbose = true if verbose?
50
52
  end
51
53
  @trellor
52
54
  end
55
+
56
+ def self.verbose?
57
+ @opts[:verbose]
58
+ end
53
59
 
54
60
  def self.homepath
55
61
  Pathname.new(ENV['HOME'])
@@ -84,7 +90,7 @@ module Trellor
84
90
  hash
85
91
  end
86
92
 
87
- def self.process(board_name=nil, list_name=nil, card_name=nil, descript=nil)
93
+ def self.query_trellor(board_name=nil, list_name=nil, card_name=nil, descript=nil)
88
94
  verbose_log "board_name", board_name
89
95
  verbose_log "list_name", list_name
90
96
  verbose_log "card_name", card_name
@@ -107,7 +113,20 @@ module Trellor
107
113
  end
108
114
 
109
115
  def self.verbose_log(*args)
110
- $stderr.puts(" ****** #{args.inspect}") if @opts[:verbose]
116
+ logger.debug(" ****** #{args.inspect}")
117
+ end
118
+
119
+ def self.logger
120
+ unless @logger
121
+ @logger = Trellor.logger
122
+ @logger.progname = '[cli]'
123
+ if verbose?
124
+ @logger.level = Logger::DEBUG
125
+ else
126
+ @logger.level = Logger::WARN
127
+ end
128
+ end
129
+ @logger
111
130
  end
112
131
 
113
132
  def self.webapi?
data/lib/models.rb ADDED
@@ -0,0 +1,25 @@
1
+ require 'virtus'
2
+
3
+ module Trellor
4
+
5
+ class Base
6
+ include Virtus.model
7
+
8
+ attribute :id, String
9
+ attribute :name, String
10
+ # children is an ordered colleciton
11
+ attribute :children, Array[Base]
12
+ end
13
+
14
+ class Board < Base
15
+ end
16
+
17
+ class List < Base
18
+ end
19
+
20
+ class Card < Base
21
+ attribute :description, String
22
+ end
23
+
24
+ end
25
+
data/lib/trellor.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # TODO: show card descriptions
2
2
 
3
+ require 'logger'
4
+
3
5
  require_relative "trellor/version"
4
6
  require 'trello'
5
7
 
@@ -15,40 +17,44 @@ module Trellor
15
17
  @singleton
16
18
  end
17
19
 
18
- def client(key=ENV['TRELLOR_KEY'], token=ENV['TRELLOR_TOKEN'])
19
- @client ||= connect(key, token)
20
+ def self.logger
21
+ unless @logger
22
+ file = File.new(logger_filename.to_s, 'a')
23
+ # webapi wasn't logging to the file until it was killed.
24
+ # this causes the logger to flush immediately
25
+ file.sync = true
26
+ @logger = Logger.new file
27
+ end
28
+ @logger
20
29
  end
21
30
 
22
- def connect(key=ENV['TRELLOR_KEY'], token=ENV['TRELLOR_TOKEN'])
23
- verbose_log("connecting with", key, token)
24
- Trello::Client.new(
25
- :developer_public_key => key,
26
- :member_token => token
27
- )
31
+ def self.logger_filename
32
+ dirpath = Pathname.new(ENV['HOME']) + '.config/trellor'
33
+ dirpath.mkdir unless dirpath.directory?
34
+ filename = 'log'
35
+ dirpath + filename
28
36
  end
29
37
 
30
- def verbose_log(*args)
31
- $stderr.puts(" ****** #{args.inspect}") if be_verbose
38
+ def logger
39
+ self.class.logger
32
40
  end
33
41
 
34
- def user()
35
- verbose_log('username', ENV['TRELLOR_USERNAME'])
36
- @user ||= client.find(:members, ENV['TRELLOR_USERNAME'])
37
- end
42
+
43
+ ############## trellor interface queries ###############
38
44
 
39
45
  def board_names
40
46
  boards.collect{ |board| board.name }.sort_by{|name| name.downcase}
41
47
  end
42
48
  def list_names(board_name)
43
- board(board_name).lists.collect{ |list| list.name }.sort_by{|name| name.downcase}
49
+ find_board(board_name).lists.collect{ |list| list.name }.sort_by{|name| name.downcase}
44
50
  end
45
51
  def card_names(board_name, list_name)
46
- list(board_name, list_name).cards.collect{ |card| card.name }
52
+ find_list(board_name, list_name).cards.collect{ |card| card.name }
47
53
  end
48
54
  def create_card(board_name, list_name, name, descript=nil)
49
55
  card = Trello::Card.new
50
56
  card.client = client
51
- card.list_id = list(board_name, list_name).id
57
+ card.list_id = find_list(board_name, list_name).id
52
58
  card.name = name
53
59
  card.desc = descript if descript
54
60
  card.save
@@ -59,8 +65,7 @@ module Trellor
59
65
  end
60
66
 
61
67
 
62
-
63
-
68
+ ################ private queries #################
64
69
 
65
70
  def boards
66
71
  verbose_log('getting boards') unless @boards
@@ -70,31 +75,59 @@ module Trellor
70
75
  @boards = boards
71
76
  end
72
77
 
73
- def board(name)
78
+ def find_board(name)
74
79
  boards # to get verbose log ordering correct
75
80
  verbose_log('getting board', name)
76
81
  name = Regexp.new(name, Regexp::IGNORECASE)
77
- boards.detect{ |board| name.match(board.name) }
82
+ boards.find{ |board| name.match(board.name) }
78
83
  end
79
84
 
80
- def list(board_name, list_name)
81
- this_board = board(board_name)
85
+ def find_list(board_name, list_name)
86
+ this_board = find_board(board_name)
82
87
  verbose_log(' getting list', board_name, list_name)
83
88
  name = Regexp.new(list_name, Regexp::IGNORECASE)
84
- this_board.lists.detect{ |list| name.match(list.name) }
89
+ this_board.lists.find{ |list| name.match(list.name) }
85
90
  end
86
91
 
87
92
  def cards(board_name, list_name)
88
93
  verbose_log(' getting cards for', board_name, list_name)
89
- list(board_name, list_name).cards
94
+ find_list(board_name, list_name).cards
90
95
  end
91
96
 
92
97
  def find_card(board_name, list_name, card_name)
93
- card_name = card_name.downcase
94
- list(board_name, list_name).cards.detect do |card|
95
- card.name.downcase.start_with?(card_name)
96
- end
98
+ this_list = find_list(board_name, list_name)
99
+ verbose_log(' getting card', board_name, list_name, card_name)
100
+ name = Regexp.new(card_name, Regexp::IGNORECASE)
101
+ this_list.cards.find{ |card| name.match(card.name) }
102
+ end
103
+
104
+ private
105
+
106
+
107
+ ############ connecting ###############
108
+
109
+ def client(key=ENV['TRELLOR_KEY'], token=ENV['TRELLOR_TOKEN'])
110
+ @client ||= connect(key, token)
111
+ end
112
+
113
+ def connect(key=ENV['TRELLOR_KEY'], token=ENV['TRELLOR_TOKEN'])
114
+ verbose_log("connecting with", key, token)
115
+ Trello::Client.new(
116
+ :developer_public_key => key,
117
+ :member_token => token
118
+ )
119
+ end
120
+
121
+ def verbose_log(*args)
122
+ logger.error(" ****** #{args.inspect}") if be_verbose
97
123
  end
124
+
125
+ def user()
126
+ verbose_log('username', ENV['TRELLOR_USERNAME'])
127
+ @user ||= client.find(:members, ENV['TRELLOR_USERNAME'])
128
+ end
129
+
130
+
98
131
  end
99
132
  end
100
133
 
@@ -1,3 +1,3 @@
1
1
  module Trellor
2
- VERSION = "2.0.3"
2
+ VERSION = "2.0.4"
3
3
  end
data/lib/web_trellor.rb CHANGED
@@ -6,24 +6,31 @@ require 'pathname'
6
6
  require 'addressable/uri'
7
7
  require_relative "trellor/version"
8
8
 
9
+ # this is loaded just for logger.
10
+ # TODO: move logger to separate file.
11
+ require_relative 'trellor'
12
+
9
13
  module Trellor
10
14
  class WebTrellor
11
- attr_accessor :be_verbose
12
-
13
- def ensure_webapp_is_running
15
+ def ensure_webapp_is_running(fork=true)
14
16
  v = get_version
15
- $stderr.puts "Warning: this version is #{VERSION} but the webapp version is #{v}. You may want to kill the older webapp." unless VERSION == v
17
+ $stderr.puts "Warning: this version is #{VERSION} but the webapp version is #{v}. You may want to kill the older webapp." unless (!v or (v==VERSION))
16
18
  fail unless v
17
19
  rescue
18
20
  puts "The background webapp wasn't running. Will run it now."
19
21
  verbose_log "The background webapp wasn't running. Will run it now."
20
- run_webapp
22
+ run_webapp(fork)
21
23
  end
22
24
 
23
- def run_webapp
25
+ def run_webapp(fork)
24
26
  path = Pathname.new(__FILE__).parent.parent
25
27
  cmd = "cd '#{path}' && ruby lib/webapi.rb &> /dev/null"
26
28
  verbose_log cmd
29
+ unless fork
30
+ $stderr.puts 'running ...'
31
+ exec cmd
32
+ exit 0
33
+ end
27
34
  job = fork do
28
35
  exec cmd
29
36
  end
@@ -44,8 +51,41 @@ module Trellor
44
51
  nil
45
52
  end
46
53
 
54
+
55
+ ############## trellor interface queries ###############
56
+
57
+ def board_names
58
+ verbose_log('getting boards') unless @boards
59
+ @boards = JSON.parse(get_http('/boards').body)
60
+ end
61
+
62
+ def list_names(board_name)
63
+ JSON.parse(get_http("/boards", {board_name: board_name}).body)
64
+ end
65
+
66
+ def card_names(board_name, list_name)
67
+ body = get_http("/boards", {board_name: board_name, list_name: list_name}).body
68
+ JSON.parse(body)
69
+ end
70
+
71
+ def create_card(board_name, list_name, name, descript=nil)
72
+ data = {board_name: board_name, list_name: list_name, card_name: name, descript: descript}
73
+ JSON.parse(post_http('/boards', data).body)
74
+ end
75
+
76
+ def archive_card(board_name, list_name, name)
77
+ data = {archive: true, board_name: board_name, list_name: list_name, card_name: name}
78
+ JSON.parse(post_http('/boards', data).body)
79
+ end
80
+
81
+ private
82
+
83
+
84
+ ################# private ################
85
+
47
86
  def get_http(url, data=nil, timeout=nil, show_error=true)
48
87
  uri = Addressable::URI.parse("#{site}#{url}")
88
+ verbose_log('get_http', uri, data)
49
89
  http = Net::HTTP.new uri.host, uri.port
50
90
  http.open_timeout = default_open_timeout
51
91
  http.read_timeout = timeout || default_read_timeout
@@ -60,12 +100,9 @@ module Trellor
60
100
  raise e
61
101
  end
62
102
 
63
- def default_open_timeout
64
- 60
65
- end
66
-
67
- def post_http(url, data, timeout=nil)
103
+ def post_http(url, data, timeout=nil, show_error=true)
68
104
  uri = URI("#{site}#{url}")
105
+ verbose_log('post_http', uri, data)
69
106
  http = Net::HTTP.new uri.host, uri.port
70
107
  http.open_timeout = default_open_timeout
71
108
  http.read_timeout = timeout || default_read_timeout
@@ -77,7 +114,7 @@ module Trellor
77
114
  verbose_log response.code, response.body
78
115
  response
79
116
  rescue Exception => e
80
- $stderr.puts "ERROR in post_http(#{url})"
117
+ $stderr.puts "ERROR in post_http(#{url})" if show_error
81
118
  raise e
82
119
  end
83
120
 
@@ -97,64 +134,7 @@ module Trellor
97
134
  end
98
135
 
99
136
  def verbose_log(*args)
100
- $stderr.puts(" ****** #{args.inspect}") if be_verbose
101
- end
102
-
103
- def user()
104
- verbose_log('username', ENV['TRELLOR_USERNAME'])
105
- @user ||= client.find(:members, ENV['TRELLOR_USERNAME'])
106
- end
107
-
108
- def board_names
109
- verbose_log('getting boards') unless @boards
110
- @boards = JSON.parse(get_http('/boards').body)
111
- #@boards ||= user.boards.select{ |b| !b.closed? }
112
- end
113
-
114
- def list_names(board_name)
115
- JSON.parse(get_http("/boards", {board_name: board_name}).body)
116
- end
117
-
118
- def card_names(board_name, list_name)
119
- JSON.parse(get_http("/boards", {board_name: board_name, list_name: list_name}).body)
120
- end
121
-
122
- def create_card(board_name, list_name, name, descript=nil)
123
- JSON.parse(post_http("/boards/#{board_name}/lists/#{list_name}/cards", {card_name: name, descript: descript}).body)
124
- end
125
-
126
- def archive_card(board_name, list_name, name)
127
- JSON.parse(post_http("/boards/#{board_name}/lists/#{list_name}/cards", {card_name: name, archive: true}).body)
128
- end
129
-
130
-
131
-
132
-
133
- def board(name)
134
- boards # to get verbose log ordering correct
135
- verbose_log('getting board', name)
136
- name = name.downcase
137
- boards.detect{ |board| board.name.downcase.start_with?(name) }
138
- end
139
-
140
- def list(board_name, list_name)
141
- this_board = board(board_name)
142
- verbose_log(' getting list', board_name, list_name)
143
- list_name = list_name.downcase
144
- this_board.lists.detect do |list|
145
- list.name.downcase.start_with?(list_name)
146
- end
147
- end
148
-
149
- def cards(board_name, list_name)
150
- verbose_log(' getting cards for', board_name, list_name)
151
- list(board_name, list_name).cards
152
- end
153
-
154
- def card(board_name, list_name, card_name)
155
- list(board_name, list_name).cards.detect do |card|
156
- card.name==card_name
157
- end
137
+ Trellor.logger.debug(" ****** #{args.inspect}")
158
138
  end
159
139
  end
160
140
  end
data/lib/webapi.rb CHANGED
@@ -1,9 +1,8 @@
1
1
  require 'sinatra'
2
- require 'json'
2
+ require 'yajl/json_gem'
3
3
  require_relative 'trellor/version'
4
4
  require_relative 'trellor'
5
5
 
6
-
7
6
  module Trellor
8
7
  class TrellorWebapi < Sinatra::Base
9
8
  # enable error handler even in development mode
@@ -28,9 +27,22 @@ not_found do
28
27
  end
29
28
 
30
29
  error do
31
- 'had an error'
30
+ # log = Logger.new(File.new('log','a'))
31
+ msg = 'Sorry there was a error: ' + env['sinatra.error'].message
32
+ logger.error msg
33
+ env['sinatra.error'].backtrace.each{|l| logger.error l}
34
+ msg
32
35
  end
33
36
 
37
+ helpers do
38
+ def logger
39
+ unless @logger
40
+ @logger = Trellor::Trellor.logger
41
+ @logger.progname = '[webapi]'
42
+ end
43
+ @logger
44
+ end
45
+ end
34
46
 
35
47
  def trellor
36
48
  Trellor::Trellor.singleton
@@ -42,7 +54,9 @@ end
42
54
 
43
55
  get '/boards' do
44
56
  if params[:list_name]
45
- cards = trellor.list(params[:board_name],params[:list_name]).cards.collect{ |card| card.name }
57
+ logger.info params.inspect
58
+ # cards = trellor.list_names(params[:board_name],params[:list_name]).cards.collect{ |card| card.name }
59
+ cards = trellor.card_names(params[:board_name],params[:list_name])
46
60
  cards.to_json
47
61
  elsif params[:board_name]
48
62
  lists = trellor.list_names(params[:board_name])
@@ -53,15 +67,29 @@ get '/boards' do
53
67
  end
54
68
  end
55
69
 
56
- post '/boards/:board_name/lists/:list_name/cards' do |board_name, list_name|
70
+ post '/boards' do
71
+ board_name = params['board_name']
72
+ list_name = params['list_name']
57
73
  if params['archive']
58
74
  trellor.archive_card(board_name, list_name, params['card_name'])
59
75
  else
60
76
  trellor.create_card(board_name, list_name, params['card_name'], params['descript'])
61
77
  end
62
78
 
63
- cards = trellor.list(board_name,list_name).cards.collect{ |c| c.name }
79
+ cards = trellor.card_names(board_name,list_name)
64
80
  cards.to_json
65
81
  params.to_json
66
82
  end
67
83
 
84
+ # post '/boards/:board_name/lists/:list_name/cards' do |board_name, list_name|
85
+ # if params['archive']
86
+ # trellor.archive_card(board_name, list_name, params['card_name'])
87
+ # else
88
+ # trellor.create_card(board_name, list_name, params['card_name'], params['descript'])
89
+ # end
90
+
91
+ # cards = trellor.list(board_name,list_name).cards.collect{ |c| c.name }
92
+ # cards.to_json
93
+ # params.to_json
94
+ # end
95
+
data/trellor.gemspec CHANGED
@@ -24,8 +24,14 @@ Gem::Specification.new do |spec|
24
24
  # for webapi.rb only. Wonder if there is a way to make it a dependency only
25
25
  # when it is used?
26
26
  spec.add_dependency 'sinatra'
27
+ spec.add_dependency 'virtus'
28
+ # spec.add_dependency 'yajl-ruby', require: 'yajl'
29
+ spec.add_dependency 'yajl-ruby'
27
30
 
28
31
  spec.add_development_dependency "bundler", "~> 1.10"
29
32
  spec.add_development_dependency "rake", "~> 10.0"
30
33
  spec.add_development_dependency "rspec"
34
+ spec.add_development_dependency "pry"
35
+ spec.add_development_dependency "pry-remote"
36
+ spec.add_development_dependency "pry-nav"
31
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trellor
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Murphy-Dye
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-10 00:00:00.000000000 Z
11
+ date: 2015-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-trello
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: virtus
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: yajl-ruby
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: bundler
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +122,48 @@ dependencies:
94
122
  - - ">="
95
123
  - !ruby/object:Gem::Version
96
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: pry-remote
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry-nav
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
97
167
  description: ''
98
168
  email:
99
169
  - brian@murphydye.com
@@ -111,7 +181,12 @@ files:
111
181
  - bin/console
112
182
  - bin/setup
113
183
  - bin/trellor
184
+ - docs/trellor.png
185
+ - docs/trellor.txt
186
+ - docs/trellor_seq_diag.png
187
+ - docs/trellor_seq_diag.txt
114
188
  - lib/cli.rb
189
+ - lib/models.rb
115
190
  - lib/trellor.rb
116
191
  - lib/trellor/version.rb
117
192
  - lib/web_trellor.rb