Class: Hoboken::AddOns::Sequel

Inherits:
Group
  • Object
show all
Defined in:
lib/hoboken/add_ons/sequel.rb

Overview

Database access via Sequel gem.

Instance Method Summary collapse

Methods inherited from Group

#classic?, #modular?, #rspec?, #rubocop?, #sequel?, source_root

Methods included from Hoboken::Actions

#gem, #indent

Instance Method Details

#add_database_spec_helperObject

rubocop:enable Metrics/MethodLength



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/hoboken/add_ons/sequel.rb', line 67

def add_database_spec_helper
  return unless rspec?

  insert_into_file('spec/spec_helper.rb', before: /ENV\['RACK_ENV'\] = 'test'/) do
    "ENV['DATABASE_URL'] = 'sqlite://db/test.db'\n"
  end

  snippet = <<~CODE
    config.around do |example|
      DB.transaction(rollback: :always) { example.run }
    end
  CODE

  location = /RSpec\.configure do \|config\|\n/
  insert_into_file('spec/spec_helper.rb', after: location) do
    "#{indent(snippet, 2)}\n"
  end
end

#add_database_test_helper_classObject

rubocop:disable Metrics/MethodLength



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/hoboken/add_ons/sequel.rb', line 42

def add_database_test_helper_class
  return if rspec?

  insert_into_file('test/test_helper.rb', before: /ENV\['RACK_ENV'\] = 'test'/) do
    "ENV['DATABASE_URL'] = 'sqlite://db/test.db'\n"
  end

  insert_into_file('test/test_helper.rb', after: %r{require 'test/unit'}) do
    "\nrequire 'sequel'"
  end

  snippet = <<~CODE
    def run(*args, &block)
      result = nil
      DB.transaction(rollback: :always) { result = super }
      result
    end
  CODE

  insert_into_file('test/test_helper.rb', after: /include RackHelpers\n/) do
    "\n#{indent(snippet, 6)}"
  end
end

#add_gemsObject



8
9
10
11
12
# File 'lib/hoboken/add_ons/sequel.rb', line 8

def add_gems
  gem 'sequel', version: '5.43'
  gem 'sqlite3', version: '1.4', group: %i[development test]
  gem 'rubocop-sequel', version: '0.2', group: %i[development test] if rubocop?
end

#copy_rake_taskObject



20
21
22
# File 'lib/hoboken/add_ons/sequel.rb', line 20

def copy_rake_task
  copy_file('hoboken/templates/sequel.rake', 'tasks/sequel.rake')
end

#remindersObject

rubocop:enable Metrics/MethodLength



124
125
126
127
128
129
130
131
132
# File 'lib/hoboken/add_ons/sequel.rb', line 124

def reminders
  say "\nGemfile updated... don't forget to 'bundle install'"
  say <<~TEXT

    Notes:
      * The sqlite3 gem has been installed for dev and test environments only. You will need to specify a gem to use for production.
      * You will need to specify an environment variable 'DATABASE_URL' (either add it to .env or export it)
  TEXT
end

#require_db_configObject



28
29
30
31
32
33
# File 'lib/hoboken/add_ons/sequel.rb', line 28

def require_db_config
  location = %r{require_relative '\.\./app'}
  insert_into_file('config/environment.rb', before: location) do
    "require_relative 'db'\n\n"
  end
end

#setup_db_configObject



24
25
26
# File 'lib/hoboken/add_ons/sequel.rb', line 24

def setup_db_config
  template('hoboken/templates/db.rb.tt', 'config/db.rb')
end

#setup_directoriesObject



14
15
16
17
18
# File 'lib/hoboken/add_ons/sequel.rb', line 14

def setup_directories
  empty_directory('db/migrate')
  empty_directory('tasks')
  empty_directory('tmp')
end

#setup_puma_configObject



35
36
37
38
39
# File 'lib/hoboken/add_ons/sequel.rb', line 35

def setup_puma_config
  insert_into_file('config/puma.rb', after: 'before_fork do') do
    "\n    DB.disconnect if defined?(DB)"
  end
end

#update_readmeObject

rubocop:disable Metrics/MethodLength



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/hoboken/add_ons/sequel.rb', line 95

def update_readme
  snippet = <<~CODE
    <tr>
        <td>DATABASE_URL</td>
        <td>Yes</td>
        <td>
          `sqlite://db/test.db` (for the test environment <em>only</em>)
        </td>
        <td>
          Connection URL to the database. The format varies according
          database adapter. Refer to the
          <a href="https://sequel.jeremyevans.net/rdoc/files/doc/opening_databases_rdoc.html">
          Sequel gem documentation</a> for more information. Some examples:
          <dl>
            <dt>Sqlite3</dt>
            <dd>`sqlite://db/development.db`</dd>
            <dt>PostgreSQL</dt>
            <dd>`postgresql://localhost/myapp_development?pool=5`</dd>
          </dl>
        </td>
    </tr>
  CODE

  insert_into_file('README.md', after: /<tbody>\n/) do
    indent(snippet, 8)
  end
end

#update_rubocop_configObject



86
87
88
89
90
91
92
# File 'lib/hoboken/add_ons/sequel.rb', line 86

def update_rubocop_config
  return unless rubocop?

  insert_into_file('.rubocop.yml', after: /require:\n/) do
    "    - rubocop-sequel\n"
  end
end